Browse Source

[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>
maint
Fredrik Kuivinen 20 years ago committed by Junio C Hamano
parent
commit
500b97e4bb
  1. 9
      Documentation/git-ls-files.txt
  2. 6
      ls-files.c
  3. 69
      t/t3002-ls-files-dashpath.sh

9
Documentation/git-ls-files.txt

@ -13,7 +13,7 @@ SYNOPSIS @@ -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 @@ -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

6
ls-files.c

@ -530,7 +530,7 @@ static void verify_pathspec(void) @@ -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) @@ -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;

69
t/t3002-ls-files-dashpath.sh

@ -0,0 +1,69 @@ @@ -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
Loading…
Cancel
Save