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

[PATCH v2 0/7] quote_path() clean-ups

From
Junio C Hamano <gitster@pobox.com>
Date
Sep 10, 2020, 17:01 UTC
Message-ID
<20200910170159.1278781-1-gitster@pobox.com>
In-Reply-To
<20200908205224.4126551-1-gitster@pobox.com>
Here is an update, after seeing Peff's review.
The overall structure of the series stays the same.
 * The second patch lost an incorrect use of 'flags' parameter down
   to quote_c_style_counted() from quote_path().  In the function
   declaration of quote_path(), the flags parameter is now named.
 * The third patch that moves the "optionally quote path with SP in
   it" logic to quote_path() is essentialy unchanged.
 * But the fourth patch rewrites the implementation to avoid
   shifting the output bytes with insertstr().
 * The fifth patch (formerly the fourth) that teachs "status --short"
   to consistently quote hasn't changed, except that we test also
   for the ignored paths.
 * The last two patches are unchanged.  They are optional clean-ups
   that are not required.
We might want to add a bit more tests for:
 - how conflicted "funny" paths are shown.
 - how doubly funny paths (those that quote_c_style_counted() needs
   to use backslash quoting *and* that contain SP) are shown.

but I'd say that is outside the scope of this round. Seeing what is done in t3300, the latter test cannot be written portably as far as I can tell.

Junio C Hamano (7):
  quote_path: rename quote_path_relative() to quote_path()
  quote_path: give flags parameter to quote_path()
  quote_path: optionally allow quoting a path with SP in it
  quote_path: code clarification
  wt-status: consistently quote paths in "status --short" output
  quote: rename misnamed sq_lookup[] to cq_lookup[]
  quote: turn 'nodq' parameter into a set of flags
 builtin/clean.c   | 22 +++++++++++-----------
 builtin/grep.c    |  2 +-
 diff.c            |  8 ++++----
 quote.c           | 47 +++++++++++++++++++++++++++++++----------------
 quote.h           | 11 +++++++----
 t/t7508-status.sh | 27 +++++++++++++++++++++++++++
 wt-status.c       | 37 +++++++++++++------------------------
 7 files changed, 94 insertions(+), 60 deletions(-)
Range-diff against v1:
1:  a9306429f4 = 1:  a9306429f4 quote_path: rename quote_path_relative() to quote_path()
2:  c2784628a4 ! 2:  179d12d16f quote_path: give flags parameter to quote_path()
    @@ quote.c: void write_name_quoted_relative(const char *name, const char *prefix,
      {
      	struct strbuf sb = STRBUF_INIT;
      	const char *rel = relative_path(in, prefix, &sb);
    - 	strbuf_reset(out);
    --	quote_c_style_counted(rel, strlen(rel), out, NULL, 0);
    -+	quote_c_style_counted(rel, strlen(rel), out, NULL, flags);
    - 	strbuf_release(&sb);
    - 
    - 	return out->buf;
     
      ## quote.h ##
     @@ quote.h: void write_name_quoted_relative(const char *name, const char *prefix,
    @@ quote.h: void write_name_quoted_relative(const char *name, const char *prefix,
      
      /* quote path as relative to the given prefix */
     -char *quote_path(const char *in, const char *prefix, struct strbuf *out);
    -+char *quote_path(const char *in, const char *prefix, struct strbuf *out, unsigned);
    ++char *quote_path(const char *in, const char *prefix, struct strbuf *out, unsigned flags);
      
      /* quoting as a string literal for other languages */
      void perl_quote_buf(struct strbuf *sb, const char *src);
3:  640673148e ! 3:  d566c38d2f quote_path: optionally allow quoting a path with SP in it
    @@ Commit message
     
      ## quote.c ##
     @@ quote.c: char *quote_path(const char *in, const char *prefix, struct strbuf *out, unsigne
    - 	struct strbuf sb = STRBUF_INIT;
    - 	const char *rel = relative_path(in, prefix, &sb);
    - 	strbuf_reset(out);
    --	quote_c_style_counted(rel, strlen(rel), out, NULL, flags);
    -+	quote_c_style_counted(rel, strlen(rel), out, NULL, 0);
    + 	quote_c_style_counted(rel, strlen(rel), out, NULL, 0);
      	strbuf_release(&sb);
      
     +	if ((flags & QUOTE_PATH_QUOTE_SP) &&
    @@ quote.h
     @@ quote.h: void write_name_quoted_relative(const char *name, const char *prefix,
      
      /* quote path as relative to the given prefix */
    - char *quote_path(const char *in, const char *prefix, struct strbuf *out, unsigned);
    + char *quote_path(const char *in, const char *prefix, struct strbuf *out, unsigned flags);
     +#define QUOTE_PATH_QUOTE_SP 01
      
      /* quoting as a string literal for other languages */
-:  ---------- > 4:  f3769b7cf4 quote_path: code clarification
4:  ac9a0c4a33 ! 5:  498bed71e4 wt-status: consistently quote paths in "status --short" output
    @@ Commit message
         output, but untracked, ignored, and unmerged paths weren't.
     
         The test was stolen from a patch to fix output for the 'untracked'
    -    paths by brian m. carlson.
    +    paths by brian m. carlson, with similar tests added for 'ignored'
    +    ones.
     
         Signed-off-by: Junio C Hamano <gitster@pobox.com>
     
    @@ t/t7508-status.sh: test_expect_success 'status -s without relative paths' '
     +	test_when_finished "git rm --cached \"file with spaces\"; rm -f file*" &&
     +	>"file with spaces" &&
     +	>"file with spaces 2" &&
    ++	>"expect with spaces" &&
     +	git add "file with spaces" &&
    ++
     +	git status -s >output &&
    -+	test_cmp expect output
    ++	test_cmp expect output &&
     +
    ++	git status -s --ignored >output &&
    ++	grep "^!! \"expect with spaces\"$" output &&
    ++	grep -v "^!! " output >output-wo-ignored &&
    ++	test_cmp expect output-wo-ignored
     +'
     +
      test_expect_success 'dry-run of partial commit excluding new file in index' '
5:  57c6294695 = 6:  e74186bbd7 quote: rename misnamed sq_lookup[] to cq_lookup[]
6:  480152cfe4 ! 7:  d87d7dd561 quote: turn 'nodq' parameter into a set of flags
    @@ quote.c: static size_t quote_c_style_counted(const char *name, ssize_t maxlen,
      		if (!nodq)
      			strbuf_addch(sb, '"');
      	} else {
    +@@ quote.c: char *quote_path(const char *in, const char *prefix, struct strbuf *out, unsigne
    + 	 */
    + 	if (force_dq)
    + 		strbuf_addch(out, '"');
    +-	quote_c_style_counted(rel, strlen(rel), out, NULL, !!force_dq);
    ++	quote_c_style_counted(rel, strlen(rel), out, NULL,
    ++			      force_dq ? CQUOTE_NODQ : 0);
    + 	if (force_dq)
    + 		strbuf_addch(out, '"');
    + 	strbuf_release(&sb);
     
      ## quote.h ##
     @@ quote.h: struct strvec;
-- 
2.28.0-603-ga98dad7d4d
Previous: Jeff KingNext: Junio C Hamano
Message 28 of 41 in “[Bug report] git status doesn't escape paths of untracked files”
  1. Patrick FongSep 8, 2020
  2. Junio C HamanoSep 8, 2020
  3. brian m. carlsonSep 8, 2020
  4. Junio C HamanoSep 8, 2020
  5. Junio C HamanoSep 8, 2020
  6. Junio C HamanoSep 8, 2020
  7. Martin ÅgrenSep 8, 2020
  8. René ScharfeSep 8, 2020
  9. Junio C HamanoSep 9, 2020
  10. René ScharfeSep 10, 2020
  11. Junio C HamanoSep 10, 2020
  12. wt-status: quote paths identically whether tracked or untrackedbrian m. carlson, Sep 8, 2020
  13. 0/6 quote_path() clean-upsJunio C Hamano, Sep 8, 2020
  14. 2/6 quote_path: give flags parameter to quote_path()Junio C Hamano, Sep 8, 2020
  15. Jeff KingSep 10, 2020
  16. Junio C HamanoSep 10, 2020
  17. Junio C HamanoSep 10, 2020
  18. Jeff KingSep 10, 2020
  19. 3/6 quote_path: optionally allow quoting a path with SP in itJunio C Hamano, Sep 8, 2020
  20. Jeff KingSep 10, 2020
  21. 4/6 wt-status: consistently quote paths in "status --short" outputJunio C Hamano, Sep 8, 2020
  22. 1/6 quote_path: rename quote_path_relative() to quote_path()Junio C Hamano, Sep 8, 2020
  23. 6/6 quote: turn 'nodq' parameter into a set of flagsJunio C Hamano, Sep 8, 2020
  24. Jeff KingSep 10, 2020
  25. 5/6 quote: rename misnamed sq_lookup[] to cq_lookup[]Junio C Hamano, Sep 8, 2020
  26. Chris TorekSep 8, 2020
  27. Jeff KingSep 10, 2020
  28. 0/7 quote_path() clean-upsJunio C Hamano, Sep 10, 2020
  29. 1/7 quote_path: rename quote_path_relative() to quote_path()Junio C Hamano, Sep 10, 2020
  30. 4/7 quote_path: code clarificationJunio C Hamano, Sep 10, 2020
  31. Jeff KingSep 10, 2020
  32. Junio C HamanoSep 10, 2020
  33. Jeff KingSep 10, 2020
  34. 7/7 quote: turn 'nodq' parameter into a set of flagsJunio C Hamano, Sep 10, 2020
  35. 5/7 wt-status: consistently quote paths in "status --short" outputJunio C Hamano, Sep 10, 2020
  36. Jeff KingSep 10, 2020
  37. Junio C HamanoSep 10, 2020
  38. 2/7 quote_path: give flags parameter to quote_path()Junio C Hamano, Sep 10, 2020
  39. 3/7 quote_path: optionally allow quoting a path with SP in itJunio C Hamano, Sep 10, 2020
  40. 6/7 quote: rename misnamed sq_lookup[] to cq_lookup[]Junio C Hamano, Sep 10, 2020
  41. brian m. carlsonSep 10, 2020

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.