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

[PATCH 01/15] for-each-ref, quote: convert *_quote_print -> *_quote_buf

From
Ramkumar Ramachandra <artagnon@gmail.com>
Date
Jun 4, 2013, 12:35 UTC
Message-ID
<1370349337-20938-2-git-send-email-artagnon@gmail.com>
In-Reply-To
<1370349337-20938-1-git-send-email-artagnon@gmail.com>
From: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>

for-each-ref.c:print_value() currently prints values to stdout immediately using {sq|perl|python|tcl}_quote_print, giving us no opportunity to do any further processing. In preparation for getting print_value() to accept an additional strbuf argument to write to, convert the *_quote_print functions and callers to *_quote_buf.

[rr: commit message, minor modifications]
Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
---
 builtin/for-each-ref.c | 13 +++++++++----
 quote.c                | 44 ++++++++++++++++++++++----------------------
 quote.h                |  6 +++---
 3 files changed, 34 insertions(+), 29 deletions(-)
diff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c
index 7f059c3..1d4083c 100644
--- a/builtin/for-each-ref.c
+++ b/builtin/for-each-ref.c
@@ -867,24 +867,29 @@ static void sort_refs(struct ref_sort *sort, struct refinfo **refs, int num_refs
 static void print_value(struct refinfo *ref, int atom, int quote_style)
 {
 	struct atom_value *v;
+	struct strbuf sb = STRBUF_INIT;
 	get_value(ref, atom, &v);
 	switch (quote_style) {
 	case QUOTE_NONE:
 		fputs(v->s, stdout);
 		break;
 	case QUOTE_SHELL:
-		sq_quote_print(stdout, v->s);
+		sq_quote_buf(&sb, v->s);
 		break;
 	case QUOTE_PERL:
-		perl_quote_print(stdout, v->s);
+		perl_quote_buf(&sb, v->s);
 		break;
 	case QUOTE_PYTHON:
-		python_quote_print(stdout, v->s);
+		python_quote_buf(&sb, v->s);
 		break;
 	case QUOTE_TCL:
-		tcl_quote_print(stdout, v->s);
+		tcl_quote_buf(&sb, v->s);
 		break;
 	}
+	if (quote_style != QUOTE_NONE) {
+		fputs(sb.buf, stdout);
+		strbuf_release(&sb);
+	}
 }
 
 static int hex1(char ch)
diff --git a/quote.c b/quote.c
index 911229f..8c294df 100644
--- a/quote.c
+++ b/quote.c
@@ -463,72 +463,72 @@ int unquote_c_style(struct strbuf *sb, const char *quoted, const char **endp)
 
 /* quoting as a string literal for other languages */
 
-void perl_quote_print(FILE *stream, const char *src)
+void perl_quote_buf(struct strbuf *sb, const char *src)
 {
 	const char sq = '\'';
 	const char bq = '\\';
 	char c;
 
-	fputc(sq, stream);
+	strbuf_addch(sb, sq);
 	while ((c = *src++)) {
 		if (c == sq || c == bq)
-			fputc(bq, stream);
-		fputc(c, stream);
+			strbuf_addch(sb, bq);
+		strbuf_addch(sb, c);
 	}
-	fputc(sq, stream);
+	strbuf_addch(sb, sq);
 }
 
-void python_quote_print(FILE *stream, const char *src)
+void python_quote_buf(struct strbuf *sb, const char *src)
 {
 	const char sq = '\'';
 	const char bq = '\\';
 	const char nl = '\n';
 	char c;
 
-	fputc(sq, stream);
+	strbuf_addch(sb, sq);
 	while ((c = *src++)) {
 		if (c == nl) {
-			fputc(bq, stream);
-			fputc('n', stream);
+			strbuf_addch(sb, bq);
+			strbuf_addch(sb, 'n');
 			continue;
 		}
 		if (c == sq || c == bq)
-			fputc(bq, stream);
-		fputc(c, stream);
+			strbuf_addch(sb, bq);
+		strbuf_addch(sb, c);
 	}
-	fputc(sq, stream);
+	strbuf_addch(sb, sq);
 }
 
-void tcl_quote_print(FILE *stream, const char *src)
+void tcl_quote_buf(struct strbuf *sb, const char *src)
 {
 	char c;
 
-	fputc('"', stream);
+	strbuf_addch(sb, '"');
 	while ((c = *src++)) {
 		switch (c) {
 		case '[': case ']':
 		case '{': case '}':
 		case '$': case '\\': case '"':
-			fputc('\\', stream);
+			strbuf_addch(sb, '\\');
 		default:
-			fputc(c, stream);
+			strbuf_addch(sb, c);
 			break;
 		case '\f':
-			fputs("\\f", stream);
+			strbuf_addstr(sb, "\\f");
 			break;
 		case '\r':
-			fputs("\\r", stream);
+			strbuf_addstr(sb, "\\r");
 			break;
 		case '\n':
-			fputs("\\n", stream);
+			strbuf_addstr(sb, "\\n");
 			break;
 		case '\t':
-			fputs("\\t", stream);
+			strbuf_addstr(sb, "\\t");
 			break;
 		case '\v':
-			fputs("\\v", stream);
+			strbuf_addstr(sb, "\\v");
 			break;
 		}
 	}
-	fputc('"', stream);
+	strbuf_addch(sb, '"');
 }
diff --git a/quote.h b/quote.h
index 133155a..ed06df5 100644
--- a/quote.h
+++ b/quote.h
@@ -69,8 +69,8 @@ extern char *quote_path_relative(const char *in, int len,
 			  struct strbuf *out, const char *prefix);
 
 /* quoting as a string literal for other languages */
-extern void perl_quote_print(FILE *stream, const char *src);
-extern void python_quote_print(FILE *stream, const char *src);
-extern void tcl_quote_print(FILE *stream, const char *src);
+extern void perl_quote_buf(struct strbuf *sb, const char *src);
+extern void python_quote_buf(struct strbuf *sb, const char *src);
+extern void tcl_quote_buf(struct strbuf *sb, const char *src);
 
 #endif
-- 
1.8.3.GIT
Previous: Ramkumar RamachandraNext: Ramkumar Ramachandra
Message 2 of 30 in “Towards a more awesome git-branch”
  1. 00/15 Towards a more awesome git-branchRamkumar Ramachandra, Jun 4, 2013
  2. 01/15 for-each-ref, quote: convert *_quote_print -> *_quote_bufRamkumar Ramachandra, Jun 4, 2013
  3. 02/15 for-each-ref: don't print out elements directlyRamkumar Ramachandra, Jun 4, 2013
  4. Junio C HamanoJun 4, 2013
  5. Duy NguyenJun 4, 2013
  6. 03/15 tar-tree: remove dependency on sq_quote_print()Ramkumar Ramachandra, Jun 4, 2013
  7. 04/15 quote: remove sq_quote_print()Ramkumar Ramachandra, Jun 4, 2013
  8. 05/15 pretty: extend pretty_print_context with callbackRamkumar Ramachandra, Jun 4, 2013
  9. 06/15 pretty: limit recursion in format_commit_one()Ramkumar Ramachandra, Jun 4, 2013
  10. 07/15 pretty: allow passing NULL commit to format_commit_message()Ramkumar Ramachandra, Jun 4, 2013
  11. 08/15 for-each-ref: get --pretty using format_commit_messageRamkumar Ramachandra, Jun 4, 2013
  12. Eric SunshineJun 4, 2013
  13. Duy NguyenJun 5, 2013
  14. Junio C HamanoJun 5, 2013
  15. Duy NguyenJun 6, 2013
  16. 09/15 for-each-ref: teach verify_format() about pretty's syntaxRamkumar Ramachandra, Jun 4, 2013
  17. 10/15 for-each-ref: introduce format specifier %>(*) and %<(*)Ramkumar Ramachandra, Jun 4, 2013
  18. Duy NguyenJun 4, 2013
  19. Ramkumar RamachandraJun 5, 2013
  20. Duy NguyenJun 5, 2013
  21. 11/15 for-each-ref: introduce %(HEAD) markerRamkumar Ramachandra, Jun 4, 2013
  22. 12/15 for-each-ref: introduce %(upstream:track[short])Ramkumar Ramachandra, Jun 4, 2013
  23. Eric SunshineJun 4, 2013
  24. 13/15 for-each-ref: improve responsiveness of %(upstream:track)Ramkumar Ramachandra, Jun 4, 2013
  25. 14/15 pretty: introduce get_pretty_userformatRamkumar Ramachandra, Jun 4, 2013
  26. 15/15 for-each-ref: use get_pretty_userformat in --prettyRamkumar Ramachandra, Jun 4, 2013
  27. Duy NguyenJun 4, 2013
  28. Eric SunshineJun 4, 2013
  29. Duy NguyenJun 4, 2013
  30. Ramkumar RamachandraJun 5, 2013

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.