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

[PATCH/RFC] config: Add --null/-z option for null-delimted output

From
Frank Lichtenheld <frank@lichtenheld.de>
Date
Jun 17, 2007, 23:25 UTC
Message-ID
<11821227322913-git-send-email-frank@lichtenheld.de>
In-Reply-To
<f2t6na$5bi$1@sea.gmane.org>

Use \n as delimiter between key and value and \0 as delimiter after each key/value pair. This should be easily parsable output.

Signed-off-by: Frank Lichtenheld <frank@lichtenheld.de>
---
 builtin-config.c |   15 +++++++++++----
 1 files changed, 11 insertions(+), 4 deletions(-)
 Note the FIXME. Does anyone remember the reason why --get-regexp
 and --list use different output format?
 On Tue, May 22, 2007 at 12:37:57AM +0200, Jakub Narebski wrote:
 > Frank Lichtenheld wrote:
 > > On Mon, May 21, 2007 at 09:54:23PM +0200, Jan Hudec wrote:
 > >>     KEY <TAB> VALUE <NUL>
 > > Both subsection names and values can contain <TAB> characters, so the
 > > latter isn't possible.
 > But neither subsection names (even [section "subsection"] style) not key
 > names cannot contain newline <LF>. I.e.
 >         KEY <LF> VALUE <NUL>
diff --git a/builtin-config.c b/builtin-config.c
index b2515f7..bed2722 100644
--- a/builtin-config.c
+++ b/builtin-config.c
@@ -2,7 +2,7 @@
 #include "cache.h"
 
 static const char git_config_set_usage[] =
-"git-config [ --global | --system ] [ --bool | --int ] [--get | --get-all | --get-regexp | --replace-all | --add | --unset | --unset-all] name [value [value_regex]] | --rename-section old_name new_name | --remove-section name | --list";
+"git-config [ --global | --system ] [ --bool | --int ] [ -z | --null ] [--get | --get-all | --get-regexp | --replace-all | --add | --unset | --unset-all] name [value [value_regex]] | --rename-section old_name new_name | --remove-section name | --list";
 
 static char *key;
 static regex_t *key_regexp;
@@ -12,14 +12,16 @@ static int use_key_regexp;
 static int do_all;
 static int do_not_match;
 static int seen;
+static char delim = '=';
+static char term = '\n';
 static enum { T_RAW, T_INT, T_BOOL } type = T_RAW;
 
 static int show_all_config(const char *key_, const char *value_)
 {
 	if (value_)
-		printf("%s=%s\n", key_, value_);
+		printf("%s%c%s%c", key_, delim, value_, term);
 	else
-		printf("%s\n", key_);
+		printf("%s%c", key_, term);
 	return 0;
 }
 
@@ -39,6 +41,7 @@ static int show_config(const char* key_, const char* value_)
 		return 0;
 
 	if (show_keys)
+		/* FIXME: not useful with --null */
 		printf("%s ", key_);
 	if (seen && !do_all)
 		dup_error = 1;
@@ -54,7 +57,7 @@ static int show_config(const char* key_, const char* value_)
 				key_, vptr);
 	}
 	else
-		printf("%s\n", vptr);
+		printf("%s%c", vptr, term);
 
 	return 0;
 }
@@ -155,6 +158,10 @@ int cmd_config(int argc, const char **argv, const char *prefix)
 		}
 		else if (!strcmp(argv[1], "--system"))
 			setenv("GIT_CONFIG", ETC_GITCONFIG, 1);
+		else if (!strcmp(argv[1], "--null") || !strcmp(argv[1], "-z")) {
+			term = '\0';
+			delim = '\n';
+		}
 		else if (!strcmp(argv[1], "--rename-section")) {
 			int ret;
 			if (argc != 4)
-- 
1.5.2.1
Previous: Jakub NarebskiNext: Johannes Schindelin
Message 11 of 34 in “[RFC] Implementing git config handling in Git.pm”
  1. Frank LichtenheldMay 20, 2007
  2. Petr BaudisMay 20, 2007
  3. config: Add --quoted option to produce machine-parsable outputFrank Lichtenheld, May 21, 2007
  4. Junio C HamanoMay 21, 2007
  5. Johannes SchindelinMay 21, 2007
  6. Junio C HamanoMay 21, 2007
  7. Johannes SchindelinMay 21, 2007
  8. Jan HudecMay 21, 2007
  9. Frank LichtenheldMay 21, 2007
  10. Jakub NarebskiMay 21, 2007
  11. config: Add --null/-z option for null-delimted outputFrank Lichtenheld, Jun 17, 2007
  12. Johannes SchindelinJun 19, 2007
  13. Jakub NarebskiJun 19, 2007
  14. Frank LichtenheldJun 19, 2007
  15. Johannes SchindelinJun 19, 2007
  16. Junio C HamanoJun 19, 2007
  17. Frank LichtenheldJun 19, 2007
  18. Johannes SchindelinJun 19, 2007
  19. David KastrupJun 19, 2007
  20. Jakub NarebskiJun 19, 2007
  21. Frank LichtenheldJun 19, 2007
  22. Johannes SchindelinJun 19, 2007
  23. Frank LichtenheldJun 19, 2007
  24. Johannes SchindelinJun 20, 2007
  25. Jakub NarebskiJun 20, 2007
  26. Jakub NarebskiJun 21, 2007
  27. Frank LichtenheldJun 22, 2007
  28. 1/3 config: Complete documentation of --get-regexpFrank Lichtenheld, Jun 25, 2007
  29. 2/3 config: Change output of --get-regexp for valueless keysFrank Lichtenheld, Jun 25, 2007
  30. Junio C HamanoJun 27, 2007
  31. 3/3 config: Add --null/-z option for null-delimted outputFrank Lichtenheld, Jun 25, 2007
  32. Jakub NarebskiJun 25, 2007
  33. Frank LichtenheldJun 26, 2007
  34. Junio C HamanoJun 27, 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.