diff options
author | Fredrik Kuivinen <freku045@student.liu.se> | 2005-10-02 19:33:38 +0400 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2005-10-02 21:31:18 +0400 |
commit | 500b97e4bb184c954a52550843e6314ecf97a208 (patch) | |
tree | 5fbfe0441a8cea62a04ceee4f28cd517c62f386a | |
parent | af215114f52af0f308ef19f67e544df8ea5e4ac2 (diff) |
[PATCH] Teach git-ls-files about '--' to denote end of options.
Useful if you have a file whose name starts with a dash.
Signed-off-by: Fredrik Kuivinen <freku045@student.liu.se>
Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r-- | Documentation/git-ls-files.txt | 9 | ||||
-rw-r--r-- | ls-files.c | 6 | ||||
-rwxr-xr-x | t/t3002-ls-files-dashpath.sh | 69 |
3 files changed, 82 insertions, 2 deletions
diff --git a/Documentation/git-ls-files.txt b/Documentation/git-ls-files.txt index 591f4ed462..87cc362ad8 100644 --- a/Documentation/git-ls-files.txt +++ b/Documentation/git-ls-files.txt @@ -13,7 +13,7 @@ SYNOPSIS (-[c|d|o|i|s|u|k|m])\* [-x <pattern>|--exclude=<pattern>] [-X <file>|--exclude-from=<file>] - [--exclude-per-directory=<file>] + [--exclude-per-directory=<file>] [--] [<file>]\* DESCRIPTION ----------- @@ -77,6 +77,13 @@ OPTIONS K to be killed ? other +--:: + Do not interpret any more arguments as options. + +<file>:: + Files to show. If no files are given all files which match the other + specified criteria are shown. + Output ------ show files just outputs the filename unless '--stage' is specified in diff --git a/ls-files.c b/ls-files.c index 956be09350..f47114a168 100644 --- a/ls-files.c +++ b/ls-files.c @@ -530,7 +530,7 @@ static void verify_pathspec(void) static const char ls_files_usage[] = "git-ls-files [-z] [-t] (--[cached|deleted|others|stage|unmerged|killed|modified])* " "[ --ignored ] [--exclude=<pattern>] [--exclude-from=<file>] " - "[ --exclude-per-directory=<filename> ]"; + "[ --exclude-per-directory=<filename> ] [--] [<file>]*"; int main(int argc, const char **argv) { @@ -544,6 +544,10 @@ int main(int argc, const char **argv) for (i = 1; i < argc; i++) { const char *arg = argv[i]; + if (!strcmp(arg, "--")) { + i++; + break; + } if (!strcmp(arg, "-z")) { line_terminator = 0; continue; diff --git a/t/t3002-ls-files-dashpath.sh b/t/t3002-ls-files-dashpath.sh new file mode 100755 index 0000000000..b42f1382bc --- /dev/null +++ b/t/t3002-ls-files-dashpath.sh @@ -0,0 +1,69 @@ +#!/bin/sh +# +# Copyright (c) 2005 Junio C Hamano +# + +test_description='git-ls-files test (-- to terminate the path list). + +This test runs git-ls-files --others with the following on the +filesystem. + + path0 - a file + -foo - a file with a funny name. + -- - another file with a funny name. +' +. ./test-lib.sh + +test_expect_success \ + setup \ + 'echo frotz >path0 && + echo frotz >./-foo && + echo frotz >./--' + +test_expect_success \ + 'git-ls-files without path restriction.' \ + 'git-ls-files --others >output && + diff -u output - <<EOF +-- +-foo +output +path0 +EOF +' + +test_expect_success \ + 'git-ls-files with path restriction.' \ + 'git-ls-files --others path0 >output && + diff -u output - <<EOF +path0 +EOF +' + +test_expect_success \ + 'git-ls-files with path restriction with --.' \ + 'git-ls-files --others -- path0 >output && + diff -u output - <<EOF +path0 +EOF +' + +test_expect_success \ + 'git-ls-files with path restriction with -- --.' \ + 'git-ls-files --others -- -- >output && + diff -u output - <<EOF +-- +EOF +' + +test_expect_success \ + 'git-ls-files with no path restriction.' \ + 'git-ls-files --others -- >output && + diff -u output - <<EOF +-- +-foo +output +path0 +EOF +' + +test_done |