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

[PATCH/WIP 0/9] for-each-ref format improvements

From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Date
May 19, 2013, 10:27 UTC
Message-ID
<1368959235-27777-1-git-send-email-pclouds@gmail.com>

The purpose of this series is to make "for-each-ref --format" powerful enough to display what "branch -v" and "branch -vv" do so that we could get rid of those display code and use for-each-ref code instead.

The benefits are clear: share more code, branch can also borrow --sort and --format from for-each-ref, which should satisty users who are not happy with what -v and -vv provides.

This version has not gotten there yet. I just want to post quick and dirty changes and try to address some design issues.

Originally I wanted to introduce --pretty with git-log's pretty syntax to for-each-ref, deprecating --format. But because --format has to be there forever, we cannot remove its code, and the code change to make pretty code ready for displaying refs may not be small. So I went with enhancing --format syntax instead.

This series introduces:
 - %(current), which either shows "*" if the ref is pointed by HEAD
   or a space. Junio called it %(headness). I don't like that.
   I don't like %(current) either but we have to start somewhere.
   Name suggestion? %(marker)??
 - %(tracking[:upstream]) gives us the exact output that branch -v[v]
   does. %(upstream) does not include []. We can't change its
   semantics.
 
 - %(color:...) is pretty much the same as %C family in pretty code.
   I haven't added code for %(color:foo) == %C(foo) yet. There's a
   potential ambiguity here: %C(red) == %Cred or %C(red)??
 - %(...:aligned) to do left aligning. I'm not entirely sure about
   this. We might be able to share code with %>, %< and %>< from
   pretty.c. But we need improvements there too because in
   for-each-ref case, we could calculate column width but %< would
   require the user to specify the width.
   Do people expect fancy layout with for-each-ref (and branch)? If so
   we might need to have %(align) or something instead of the simple
   left alignment case in %(...:aligned)
 
 - We may need an equivalent of the space following % in pretty
   format. If the specifier produces something, then prepend a space,
   otherwise produce nothing. Do it like %C( tracking) vs
   %C(tracking)??

You can try this after applying the series, which should give you the about close to 'branch -v'. %(tracking) coloring does not work though.

git for-each-ref --format='%(current) %(color:auto)%(refname:short:aligned)%(color:reset) %%(objectname:short) %(tracking) %(subject)' 'refs/heads/*'
Nguyễn Thái Ngọc Duy (9):
  quote.c: make sq_quote_print a slight wrapper of sq_quote_buf
  for-each-ref: convert to use *_quote_buf instead of _quote_print
  for-each-ref: avoid printing each element directly to stdout
  for-each-ref: add %(current) for current branch marker
  for-each-ref: add %(tracking[:upstream]) for tracking info
  for-each-ref: add %(color:...)
  for-each-ref: prepoplulate all atoms before show_ref()
  for-each-ref: merge show_ref into show_refs
  for-each-ref: support %(...:aligned) for left alignment
 branch.h               |  11 ++++
 builtin/branch.c       |  16 ++----
 builtin/for-each-ref.c | 146 ++++++++++++++++++++++++++++++++++++++++++-------
 quote.c                |  61 +++++++++------------
 quote.h                |   6 +-
 5 files changed, 170 insertions(+), 70 deletions(-)
-- 
1.8.2.83.gc99314b
Next: Nguyễn Thái Ngọc Duy
Message 1 of 31 in “for-each-ref format improvements”
  1. 0/9 for-each-ref format improvementsNguyễn Thái Ngọc Duy, May 19, 2013
  2. 1/9 quote.c: make sq_quote_print a slight wrapper of sq_quote_bufNguyễn Thái Ngọc Duy, May 19, 2013
  3. Felipe ContrerasMay 19, 2013
  4. 2/9 for-each-ref: convert to use *_quote_buf instead of _quote_printNguyễn Thái Ngọc Duy, May 19, 2013
  5. Felipe ContrerasMay 19, 2013
  6. 3/9 for-each-ref: avoid printing each element directly to stdoutNguyễn Thái Ngọc Duy, May 19, 2013
  7. Ramkumar RamachandraMay 19, 2013
  8. Duy NguyenMay 19, 2013
  9. 4/9 for-each-ref: add %(current) for current branch markerNguyễn Thái Ngọc Duy, May 19, 2013
  10. Ramkumar RamachandraMay 19, 2013
  11. 5/9 for-each-ref: add %(tracking[:upstream]) for tracking infoNguyễn Thái Ngọc Duy, May 19, 2013
  12. Ramkumar RamachandraMay 19, 2013
  13. Felipe ContrerasMay 19, 2013
  14. Duy NguyenMay 19, 2013
  15. Ramkumar RamachandraMay 19, 2013
  16. Felipe ContrerasMay 19, 2013
  17. 6/9 for-each-ref: add %(color:...)Nguyễn Thái Ngọc Duy, May 19, 2013
  18. Ramkumar RamachandraMay 19, 2013
  19. 7/9 for-each-ref: prepoplulate all atoms before show_ref()Nguyễn Thái Ngọc Duy, May 19, 2013
  20. 8/9 for-each-ref: merge show_ref into show_refsNguyễn Thái Ngọc Duy, May 19, 2013
  21. 9/9 for-each-ref: support %(...:aligned) for left alignmentNguyễn Thái Ngọc Duy, May 19, 2013
  22. Ramkumar RamachandraMay 19, 2013
  23. Duy NguyenMay 19, 2013
  24. Ramkumar RamachandraMay 19, 2013
  25. Felipe ContrerasMay 19, 2013
  26. Duy NguyenMay 19, 2013
  27. Ramkumar RamachandraMay 19, 2013
  28. Duy NguyenMay 19, 2013
  29. Ramkumar RamachandraMay 19, 2013
  30. Junio C HamanoMay 20, 2013
  31. Junio C HamanoMay 21, 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.