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

Re: [PATCH v2 3/3] fetch: reduce duplicate in ref update status lines

From
Junio C Hamano <gitster@pobox.com>
Date
Jun 4, 2016, 16:30 UTC
Message-ID
<xmqqeg8czzl4.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<20160604003126.GA10430@ash>
Duy Nguyen <pclouds@gmail.com> writes:
Show 8 quoted lines
>> Peff suggested that a two-pass approach might not be too bad, but had 
>> problems when he tried it with extra-long refs.  Maybe those problems 
>> could be dealt with, and we could get a simple, aligned output?
>
> The good thing about 2/3 is we can customize the output easily and
> even switch format with config variables. But let's play without
> config vars for now. A 3/3 replacement that adds another pass to
> calculate column width is at the end.

Yes, I agree with you that 2/3 lays a very good groundwork, regardless of the final output format.

> The patch does not do fancy stuff like this yet, but it can because
> lines exceeding terminal width is already excluded from column width
> calculation. So far the output looks good on my terminal (192 chars,
> can't overflow or refnames are insanely long)
Sounds like a sensible approach....
Show 39 quoted lines
> -- 8< --
> diff --git a/builtin/fetch.c b/builtin/fetch.c
> index a7f152a..5e1e5c9 100644
> --- a/builtin/fetch.c
> +++ b/builtin/fetch.c
> @@ -15,6 +15,7 @@
>  #include "submodule.h"
>  #include "connected.h"
>  #include "argv-array.h"
> +#include "utf8.h"
>  
>  static const char * const builtin_fetch_usage[] = {
>  	N_("git fetch [<options>] [<repository> [<refspec>...]]"),
> @@ -449,14 +450,26 @@ fail:
>  			   : STORE_REF_ERROR_OTHER;
>  }
>  
> -#define REFCOL_WIDTH  10
> +static int refcol_width = 10;
> +
> +static void adjust_refcol_width(const char *remote, const char *local)
> +{
> +	int max = term_columns();
> +	int rlen = utf8_strwidth(remote);
> +	int llen = utf8_strwidth(local);
> +
> +	if (21 /* flag summary */ + rlen + 4 /* => */ + llen >= max)
> +		return;
> +	if (refcol_width < rlen)
> +		refcol_width = rlen;
> +}
>  
>  static void format_display(struct strbuf *display, char code,
>  			   const char *summary, const char *error,
>  			   const char *remote, const char *local)
>  {
>  	strbuf_addf(display, "%c %-*s ", code, TRANSPORT_SUMMARY(summary));
> -	strbuf_addf(display, "%-*s -> %s", REFCOL_WIDTH, remote, local);
> +	strbuf_addf(display, "%-*s -> %s", refcol_width, remote, local);

... and if I understand correctly, this is the only place where you need to decide if you need to switch to two lines, right? You would measure width of the remote and compare it with refcol_width or something like that.

Show 25 quoted lines
>  	if (error)
>  		strbuf_addf(display, "  (%s)", error);
>  }
> @@ -618,6 +631,20 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
>  		goto abort;
>  	}
>  
> +	/*
> +	 * go through all refs to determine column size for
> +	 * "remote -> local" output
> +	 */
> +	for (rm = ref_map; rm; rm = rm->next) {
> +		if (rm->status == REF_STATUS_REJECT_SHALLOW ||
> +		    !rm->peer_ref ||
> +		    !strcmp(rm->name, "HEAD"))
> +			continue;
> +
> +		adjust_refcol_width(prettify_refname(rm->name),
> +				    prettify_refname(rm->peer_ref->name));
> +	}
> +
>  	/*
>  	 * We do a pass for each fetch_head_status type in their enum order, so
>  	 * merged entries are written before not-for-merge. That lets readers
> -- 8< --
Previous: Duy NguyenNext: Duy Nguyen
Message 28 of 71 in “Better ref summary alignment in "git fetch"”
  1. 0/2 Better ref summary alignment in "git fetch"Nguyễn Thái Ngọc Duy, May 22, 2016
  2. 1/2 fetch: better alignment in ref summaryNguyễn Thái Ngọc Duy, May 22, 2016
  3. Junio C HamanoMay 23, 2016
  4. Duy NguyenMay 23, 2016
  5. Marc BranchaudMay 26, 2016
  6. Jeff KingMay 26, 2016
  7. Junio C HamanoMay 26, 2016
  8. Marc BranchaudMay 26, 2016
  9. Junio C HamanoMay 26, 2016
  10. Marc BranchaudMay 26, 2016
  11. Jeff KingMay 26, 2016
  12. Duy NguyenJun 2, 2016
  13. Junio C HamanoJun 2, 2016
  14. 2/2 fetch: reduce ref column size when there are enough short ref namesNguyễn Thái Ngọc Duy, May 22, 2016
  15. 0/3 Better ref summary alignment in "git fetch"Nguyễn Thái Ngọc Duy, Jun 3, 2016
  16. 1/3 git-fetch.txt: document fetch outputNguyễn Thái Ngọc Duy, Jun 3, 2016
  17. Marc BranchaudJun 3, 2016
  18. Jeff KingJun 3, 2016
  19. 2/3 fetch: refactor ref update status formatting codeNguyễn Thái Ngọc Duy, Jun 3, 2016
  20. Junio C HamanoJun 3, 2016
  21. 3/3 fetch: reduce duplicate in ref update status linesNguyễn Thái Ngọc Duy, Jun 3, 2016
  22. Marc BranchaudJun 3, 2016
  23. Junio C HamanoJun 3, 2016
  24. Marc BranchaudJun 3, 2016
  25. Junio C HamanoJun 3, 2016
  26. Duy NguyenJun 4, 2016
  27. Duy NguyenJun 4, 2016
  28. Junio C HamanoJun 4, 2016
  29. Duy NguyenJun 5, 2016
  30. Junio C HamanoJun 3, 2016
  31. Duy NguyenJun 3, 2016
  32. Jeff KingJun 3, 2016
  33. Duy NguyenJun 3, 2016
  34. Junio C HamanoJun 4, 2016
  35. Jeff KingJun 3, 2016
  36. Junio C HamanoJun 3, 2016
  37. 0/6 Better ref summary alignment in "git fetch"Nguyễn Thái Ngọc Duy, Jun 5, 2016
  38. 1/6 git-fetch.txt: document fetch outputNguyễn Thái Ngọc Duy, Jun 5, 2016
  39. Marc BranchaudJun 6, 2016
  40. 2/6 fetch: refactor ref update status formatting codeNguyễn Thái Ngọc Duy, Jun 5, 2016
  41. 3/6 fetch: change flag code for displaying tag update and deleted refNguyễn Thái Ngọc Duy, Jun 5, 2016
  42. 4/6 fetch: align all "remote -> local" outputNguyễn Thái Ngọc Duy, Jun 5, 2016
  43. 5/6 fetch: reduce duplicate in ref update status lines with { -> }Nguyễn Thái Ngọc Duy, Jun 5, 2016
  44. 6/6 fetch: reduce duplicate in ref update status lines with placeholderNguyễn Thái Ngọc Duy, Jun 5, 2016
  45. 0/5 Better ref summary alignment in "git fetch"Nguyễn Thái Ngọc Duy, Jun 26, 2016
  46. 1/5 git-fetch.txt: document fetch outputNguyễn Thái Ngọc Duy, Jun 26, 2016
  47. Jakub NarębskiJul 4, 2016
  48. Duy NguyenJul 4, 2016
  49. Jakub NarębskiJul 4, 2016
  50. Duy NguyenJul 4, 2016
  51. 2/5 fetch: refactor ref update status formatting codeNguyễn Thái Ngọc Duy, Jun 26, 2016
  52. 3/5 fetch: change flag code for displaying tag update and deleted refNguyễn Thái Ngọc Duy, Jun 26, 2016
  53. 4/5 fetch: align all "remote -> local" outputNguyễn Thái Ngọc Duy, Jun 26, 2016
  54. 5/5 fetch: reduce duplicate in ref update status lines with placeholderNguyễn Thái Ngọc Duy, Jun 26, 2016
  55. Eric SunshineJun 27, 2016
  56. Duy NguyenJun 27, 2016
  57. Junio C HamanoJun 27, 2016
  58. Jeff KingJun 27, 2016
  59. Duy NguyenJun 27, 2016
  60. Duy NguyenJun 30, 2016
  61. Jeff KingJul 1, 2016
  62. 0/5 Better ref summary alignment in "git fetch"Nguyễn Thái Ngọc Duy, Jul 1, 2016
  63. 1/5 git-fetch.txt: document fetch outputNguyễn Thái Ngọc Duy, Jul 1, 2016
  64. 2/5 fetch: refactor ref update status formatting codeNguyễn Thái Ngọc Duy, Jul 1, 2016
  65. 5/5 fetch: reduce duplicate in ref update status lines with placeholderNguyễn Thái Ngọc Duy, Jul 1, 2016
  66. 3/5 fetch: change flag code for displaying tag update and deleted refNguyễn Thái Ngọc Duy, Jul 1, 2016
  67. 4/5 fetch: align all "remote -> local" outputNguyễn Thái Ngọc Duy, Jul 1, 2016
  68. Junio C HamanoJul 1, 2016
  69. Duy NguyenJul 2, 2016
  70. Marc BranchaudJul 4, 2016
  71. Duy NguyenJul 4, 2016

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.