[PATCH 1/7] Add -q/--quiet switch to git-ls-files

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



When using the --error-unmatch switch to git-ls-files you may only be
interested in the exit status rather than the actual listing that would
normally be printed to the stdout.

To make this kind of workflow easier, the -q/--quiet switch suppresses
all non-error output.

Signed-off-by: Wincent Colaiuta <win@xxxxxxxxxxx>
---
 Documentation/git-ls-files.txt    |    7 ++++++-
 builtin-ls-files.c                |   12 +++++++++++-
 t/t3020-ls-files-error-unmatch.sh |   12 ++++++++++++
 3 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/Documentation/git-ls-files.txt b/Documentation/git-ls-files.txt
index 2ec0c0d..33481b6 100644
--- a/Documentation/git-ls-files.txt
+++ b/Documentation/git-ls-files.txt
@@ -9,7 +9,7 @@ git-ls-files - Show information about files in the index and the working tree
 SYNOPSIS
 --------
 [verse]
-'git-ls-files' [-z] [-t] [-v]
+'git-ls-files' [-z] [-t] [-v] [-q]
 		(--[cached|deleted|others|ignored|stage|unmerged|killed|modified])\*
 		(-[c|d|o|i|s|u|k|m])\*
 		[-x <pattern>|--exclude=<pattern>]
@@ -107,6 +107,11 @@ OPTIONS
 	Similar to `-t`, but use lowercase letters for files
 	that are marked as 'always matching index'.
 
+-q|--quiet::
+	Suppress all non-error output. This may be useful in conjunction
+	with --error-unmatch when you are only interested in the exit
+	status.
+
 --full-name::
 	When run from a subdirectory, the command usually
 	outputs paths relative to the current directory.  This
diff --git a/builtin-ls-files.c b/builtin-ls-files.c
index 7f60709..6c710a8 100644
--- a/builtin-ls-files.c
+++ b/builtin-ls-files.c
@@ -20,6 +20,7 @@ static int show_unmerged;
 static int show_modified;
 static int show_killed;
 static int show_valid_bit;
+static int quiet;
 static int line_terminator = '\n';
 
 static int prefix_len;
@@ -83,6 +84,8 @@ static void show_dir_entry(const char *tag, struct dir_entry *ent)
 	if (pathspec && !match(pathspec, ps_matched, ent->name, len))
 		return;
 
+	if (quiet)
+		return;
 	fputs(tag, stdout);
 	write_name_quoted(ent->name + offset, stdout, line_terminator);
 }
@@ -205,6 +208,8 @@ static void show_ce_entry(const char *tag, struct cache_entry *ce)
 		tag = alttag;
 	}
 
+	if (quiet)
+		return;
 	if (!show_stage) {
 		fputs(tag, stdout);
 	} else {
@@ -385,7 +390,8 @@ static void overlay_tree(const char *tree_name, const char *prefix)
 }
 
 static const char ls_files_usage[] =
-	"git-ls-files [-z] [-t] [-v] (--[cached|deleted|others|stage|unmerged|killed|modified])* "
+	"git-ls-files [-z] [-t] [-v] [-q|--quiet] "
+	"(--[cached|deleted|others|stage|unmerged|killed|modified])* "
 	"[ --ignored ] [--exclude=<pattern>] [--exclude-from=<file>] "
 	"[ --exclude-per-directory=<filename> ] [--exclude-standard] "
 	"[--full-name] [--abbrev] [--] [<file>]*";
@@ -423,6 +429,10 @@ int cmd_ls_files(int argc, const char **argv, const char *prefix)
 				show_valid_bit = 1;
 			continue;
 		}
+		if (!strcmp(arg, "-q") || !strcmp(arg, "--quiet")) {
+			quiet = 1;
+			continue;
+		}
 		if (!strcmp(arg, "-c") || !strcmp(arg, "--cached")) {
 			show_cached = 1;
 			continue;
diff --git a/t/t3020-ls-files-error-unmatch.sh b/t/t3020-ls-files-error-unmatch.sh
index c83f820..5178322 100755
--- a/t/t3020-ls-files-error-unmatch.sh
+++ b/t/t3020-ls-files-error-unmatch.sh
@@ -23,5 +23,17 @@ test_expect_success \
     'git ls-files --error-unmatch should succeed eith matched paths.' \
     'git ls-files --error-unmatch foo bar'
 
+test_expect_success \
+    'git ls-files -q --error-unmatch should be quiet with unmatched path.' \
+    'git ls-files -q --error-unmatch foo bar-does-not-match 1> out 2> err ||
+     test $(cat out | wc -l) -eq 0 &&
+     test $(cat err | wc -l) -gt 0'
+
+test_expect_success \
+   'git ls-files -q --error-unmatch should be quiet with matched paths.' \
+   'git ls-files -q --error-unmatch foo bar 1> out 2> err ||
+    test $(cat out | wc -l) -eq 0 &&
+    test $(cat err | wc -l) -eq 0'
+
 test_done
 1
-- 
1.5.3.6.886.g3364

-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux