Teach "git diff" to handle filenames startign with '-'
- From
Linus Torvalds <torvalds@osdl.org>
- Date
- Oct 18, 2005, 05:49 UTC
- Message-ID
- <Pine.LNX.4.64.0510172243560.3369@g5.osdl.org>
- In-Reply-To
- <Pine.LNX.4.64.0510171933200.3369@g5.osdl.org>
It adds "--" to the git-diff.sh scripts, to keep any filenames that start with a "-" from being confused with an option.
But in order to do that, it needs to teach git-diff-files to honor "--".
Signed-off-by: Linus Torvalds <torvalds@osdl.org> ---
On Mon, 17 Oct 2005, Linus Torvalds wrote:
> > Yes, I know it's ambigious at times, but it really is very convenient. > Usually we allow a "--" to say where a filename starts when it _is_ > ambiguous.
This is on top of the rev-parse.c diff (it's strictly independent, but it needs the rev-parse.c one to make any sense, since without the rev-parse.c fix for -- handling, "git diff" won't work regardless).
diff --git a/diff-files.c b/diff-files.c index 8a8f9b6..1789939 100644 --- a/diff-files.c +++ b/diff-files.c @@ -41,6 +41,11 @@ int main(int argc, const char **argv) git_config(git_default_config); diff_setup(&diff_options); while (1 < argc && argv[1][0] == '-') { + if (!strcmp(argv[1], "--")) { + argv++; + argc--; + break; + } if (!strcmp(argv[1], "-q")) silent = 1; else if (!strcmp(argv[1], "-r")) diff --git a/git-diff.sh b/git-diff.sh index 84a152a..b3ec84b 100755 --- a/git-diff.sh +++ b/git-diff.sh @@ -28,16 +28,16 @@ case "$rev" in ?*' '^?*) begin=$(expr "$rev" : '.*^.\([0-9a-f]*\).*') && end=$(expr "$rev" : '.\([0-9a-f]*\). .*') || exit - cmd="git-diff-tree $flags $begin $end $files" + cmd="git-diff-tree $flags $begin $end -- $files" ;; ?*' '?*) - cmd="git-diff-tree $flags $rev $files" + cmd="git-diff-tree $flags $rev -- $files" ;; ?*' ') - cmd="git-diff-index $flags $rev $files" + cmd="git-diff-index $flags $rev -- $files" ;; '') - cmd="git-diff-files $flags $files" + cmd="git-diff-files $flags -- $files" ;; *) die "I don't understand $*"