diff options
author | Matheus Tavares <matheus.bernardino@usp.br> | 2019-07-11 02:58:59 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2019-07-11 23:52:15 +0300 |
commit | 3012397e0327f5e4dfd1d1183a792268429744ae (patch) | |
tree | 79faf55ec5f3ce158864c809e309cc3fa5a0da17 /t/t0066-dir-iterator.sh | |
parent | c9bba372ed9ee0c5ea1a4037c3c723a6c31f5921 (diff) |
dir-iterator: refactor state machine model
dir_iterator_advance() is a large function with two nested loops. Let's
improve its readability factoring out three functions and simplifying
its mechanics. The refactored model will no longer depend on
level.initialized and level.dir_state to keep track of the iteration
state and will perform on a single loop.
Also, dir_iterator_begin() currently does not check if the given string
represents a valid directory path. Since the refactored model will have
to stat() the given path at initialization, let's also check for this
kind of error and make dir_iterator_begin() return NULL, on failures,
with errno appropriately set. And add tests for this new behavior.
Improve documentation at dir-iteration.h and code comments at
dir-iterator.c to reflect the changes and eliminate possible
ambiguities.
Finally, adjust refs/files-backend.c to check for now possible
dir_iterator_begin() failures.
Original-patch-by: Daniel Ferreira <bnmvco@gmail.com>
Signed-off-by: Matheus Tavares <matheus.bernardino@usp.br>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/t0066-dir-iterator.sh')
-rwxr-xr-x | t/t0066-dir-iterator.sh | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/t/t0066-dir-iterator.sh b/t/t0066-dir-iterator.sh index 59bce868f4..cc4b19c34c 100755 --- a/t/t0066-dir-iterator.sh +++ b/t/t0066-dir-iterator.sh @@ -52,4 +52,17 @@ test_expect_success 'dir-iterator should list files in the correct order' ' test_cmp expected-pre-order-output actual-pre-order-output ' +test_expect_success 'begin should fail upon inexistent paths' ' + test_must_fail test-tool dir-iterator ./inexistent-path \ + >actual-inexistent-path-output && + echo "dir_iterator_begin failure: 2" >expected-inexistent-path-output && + test_cmp expected-inexistent-path-output actual-inexistent-path-output +' + +test_expect_success 'begin should fail upon non directory paths' ' + test_must_fail test-tool dir-iterator ./dir/b >actual-non-dir-output && + echo "dir_iterator_begin failure: 20" >expected-non-dir-output && + test_cmp expected-non-dir-output actual-non-dir-output +' + test_done |