On July 30, 2019 1:32 PM, Junio C Hamano wrote:
"Randall S. Becker" [off-list ref] writes:
quoted
t0066: dir-iterator
Subtest 4 depends on a non-portable error code. ENOENT is not
guaranteed ...
quoted
Subtest 5 also depends on a non-portable error code. ENOTDIR is not
gua...
Yikes, and sorry. I've become somewhat complacent after relying on how
good our other reviewers are, pretty much ignored the new code in fringes
like t/helper/, and failed catch an obvious amateurish mistake like this
one.
I do not think of a portable way to map an int ENOENT to a string
"ENOENT",
but there are only only two errors test-dir-iterator test code cares
about, so
perhaps a patch like the following may be sufficient.
I wonder if a tool like sparse can help us catch a pattern that feeds
errno to
quoted hunk ↗ jump to hunk
"%d" format.
t/helper/test-dir-iterator.c | 11 ++++++++++-
t/t0066-dir-iterator.sh | 4 ++--
2 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/t/helper/test-dir-iterator.c b/t/helper/test-dir-iterator.c
index
quoted hunk ↗ jump to hunk
a5b96cb0dc..c7c30664da 100644
--- a/t/helper/test-dir-iterator.c
+++ b/t/helper/test-dir-iterator.c
@@ -4,6 +4,15 @@
#include "iterator.h"
#include "dir-iterator.h"
+static const char *error_name(int error_number) {
+ switch (error_number) {
+ case ENOENT: return "ENOENT";
+ case ENOTDIR: return "ENOTDIR";
+ default: return "ESOMETHINGELSE";
+ }
+}
+
/*
* usage:
* tool-test dir-iterator [--follow-symlinks] [--pedantic] directory_path
31,7 +40,7 @@ int cmd__dir_iterator(int argc, const char **argv)
diter = dir_iterator_begin(path.buf, flags);
if (!diter) {
- printf("dir_iterator_begin failure: %d\n", errno);
+ printf("dir_iterator_begin failure: %s\n",
error_name(errno));
quoted hunk ↗ jump to hunk
exit(EXIT_FAILURE);
}
diff --git a/t/t0066-dir-iterator.sh b/t/t0066-dir-iterator.sh index
9354d3f1ed..92910e4e6c 100755
--- a/t/t0066-dir-iterator.sh
+++ b/t/t0066-dir-iterator.sh
@@ -55,13 +55,13 @@ test_expect_success 'dir-iterator should list files in
the correct order' '
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 &&
+ echo "dir_iterator_begin failure: ENOENT"
+>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 &&
+ echo "dir_iterator_begin failure: ENOTDIR" >expected-non-dir-
output &&
test_cmp expected-non-dir-output actual-non-dir-output '
Seems reasonable. Better than trying to use strerror(), which previously
(I'm not sure whether it was this project or another) had a similar mapping
issue because the error text does not match either.