diff: fix "diff dir1 dir2/". Closes bug 2203
authorMatheus Izvekov <mizvekov@gmail.com>
Fri, 9 Jul 2010 17:40:00 +0000 (19:40 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Fri, 9 Jul 2010 17:40:00 +0000 (19:40 +0200)
Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
editors/diff.c
testsuite/diff.tests

index 07594e8d8f8ecfde0c2efd8d5b6486357d41dd54..8d91b83bfc8a448779008c5d88125852ab3f465d 100644 (file)
@@ -760,9 +760,11 @@ static int FAST_FUNC add_to_dirlist(const char *filename,
                void *userdata, int depth UNUSED_PARAM)
 {
        struct dlist *const l = userdata;
+       const char *file = filename + l->len;
        l->dl = xrealloc_vector(l->dl, 6, l->e);
-       /* + 1 skips "/" after dirname */
-       l->dl[l->e] = xstrdup(filename + l->len + 1);
+       while(*file == '/')
+               file++;
+       l->dl[l->e] = xstrdup(file);
        l->e++;
        return TRUE;
 }
index 06d5a4fd7923eaf70b4a775aa5750fcbcaa430dd..27a4b33a774bbc194461d8caf1af3caf018f3358 100755 (executable)
@@ -4,7 +4,7 @@
 
 . ./testing.sh
 
-# testing "test name" "options" "expected result" "file input" "stdin"
+# testing "test name" "commands" "expected result" "file input" "stdin"
 
 # diff outputs date/time in the header, which should not be analysed
 # NB: sed has tab character in s command!
@@ -100,9 +100,11 @@ testing "diff always takes context from old file" \
        "abc\na  c\ndef\n" \
        "a c\n"
 
-# testing "test name" "options" "expected result" "file input" "stdin"
+# testing "test name" "commands" "expected result" "file input" "stdin"
 
+# clean up
 rm -rf diff1 diff2
+
 mkdir diff1 diff2 diff2/subdir
 echo qwe >diff1/-
 echo asd >diff2/subdir/-
@@ -187,4 +189,29 @@ SKIP=
 # clean up
 rm -rf diff1 diff2
 
+# NOT using directory structure from prev test...
+mkdir diff1 diff2
+echo qwe >diff1/-
+echo rty >diff2/-
+optional FEATURE_DIFF_DIR
+testing "diff diff1 diff2/" \
+       "diff -ur diff1 diff2/ | $TRIM_TAB; diff -ur .///diff1 diff2//// | $TRIM_TAB" \
+"\
+--- diff1/-
++++ diff2/-
+@@ -1 +1 @@
+-qwe
++rty
+--- .///diff1/-
++++ diff2////-
+@@ -1 +1 @@
+-qwe
++rty
+" \
+       "" ""
+SKIP=
+
+# clean up
+rm -rf diff1 diff2
+
 exit $FAILCOUNT