git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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

From
Wincent Colaiuta <win@wincent.com>
Date
Nov 23, 2007, 19:20 UTC
Message-ID
<1195845650-85962-2-git-send-email-win@wincent.com>
In-Reply-To
<1195845650-85962-1-git-send-email-win@wincent.com>

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@wincent.com>
---
 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
Previous: Wincent ColaiutaNext: Wincent Colaiuta
Message 2 of 18 in “git-add--interactive pathspec and patch additions”
  1. git-add--interactive pathspec and patch additionsWincent Colaiuta, Nov 23, 2007
  2. 1/7 Add -q/--quiet switch to git-ls-filesWincent Colaiuta, Nov 23, 2007
  3. 2/7 Rename patch_update_file function to patch_update_pathspecWincent Colaiuta, Nov 23, 2007
  4. 3/7 Add path-limiting to git-add--interactiveWincent Colaiuta, Nov 23, 2007
  5. 4/7 Bail if user supplies an invalid pathspecWincent Colaiuta, Nov 23, 2007
  6. 5/7 Teach builtin-add to pass path arguments to git-add--interactiveWincent Colaiuta, Nov 23, 2007
  7. 6/7 Add "--patch" option to git-add--interactiveWincent Colaiuta, Nov 23, 2007
  8. 7/7 Teach builtin-add to handle "--patch" optionWincent Colaiuta, Nov 23, 2007
  9. Wincent ColaiutaNov 23, 2007
  10. Junio C HamanoNov 23, 2007
  11. Wincent ColaiutaNov 23, 2007
  12. 0/3 Updates to git-add--interactiveWincent Colaiuta, Nov 24, 2007
  13. 1/3 Rename patch_update_file function to patch_update_pathspecWincent Colaiuta, Nov 24, 2007
  14. 2/3 Move pathspec validation into interactive_addWincent Colaiuta, Nov 24, 2007
  15. 3/3 Add "--patch" option to git-add--interactiveWincent Colaiuta, Nov 24, 2007
  16. Junio C HamanoNov 24, 2007
  17. Wincent ColaiutaNov 24, 2007
  18. Junio C HamanoNov 24, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.