Code

diff: strip extra "/" when stripping prefix
authorJakub Narebski <jnareb@gmail.com>
Mon, 9 Aug 2010 14:50:53 +0000 (10:50 -0400)
committerJunio C Hamano <gitster@pobox.com>
Wed, 11 Aug 2010 16:46:47 +0000 (09:46 -0700)
commitd8faea9d182bd0ca2624be74d9dc32b187618840
tree29feacb5326ac473a26068ca3b71e4a42382dce9
parent497d9c343902591e98a6612385d529816420ea94
diff: strip extra "/" when stripping prefix

There are two ways a user might want to use "diff --relative":

  1. For a file in a directory, like "subdir/file", the user
     can use "--relative=subdir/" to strip the directory.

  2. To strip part of a filename, like "foo-10", they can
     use "--relative=foo-".

We currently handle both of those situations. However, if the user passes
"--relative=subdir" (without the trailing slash), we produce inconsistent
results. For the unified diff format, we collapse the double-slash of
"a//file" correctly into "a/file". But for other formats (raw, stat,
name-status), we end up with "/file".

We can do what the user means here and strip the extra "/" (and only a
slash).  We are not hurting any existing users of (2) above with this
behavior change because the existing output for this case was nonsensical.

Patch by Jakub, tests and commit message by Jeff King.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
diff.c
t/t4045-diff-relative.sh [new file with mode: 0755]