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

Re: [RFC PATCH 4/6] ls-tree: improving cohension in the print code

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Nov 17, 2022, 13:53 UTC
Message-ID
<221117.86fsehisrw.gmgdl@evledraar.gmail.com>
In-Reply-To
<20221117113023.65865-5-tenglong.tl@alibaba-inc.com>
On Thu, Nov 17 2022, Teng Long wrote:
Show 72 quoted lines
> From: Teng Long <dyroneteng@gmail.com>
>
> We use 'show_tree_long()' and 'show_tree_default()' to print entries
> when we want the output in 'default' or 'default long' formats.
>
> Function 'show_tree_common_default_long()' prints the "path" field as
> the last part of output, the previous part which separately implements
> in 'show_tree_long()' and 'show_tree_default()'.
>
> We can package the separate implementation together by the extension of
> "size_text" in struct "show_tree_data". By improving the cohesion in
> these two locations, some benefits such as uniform processing of the
> output can be achieved in future.
>
> Signed-off-by: Teng Long <dyroneteng@gmail.com>
> ---
>  builtin/ls-tree.c | 14 ++++++++++----
>  1 file changed, 10 insertions(+), 4 deletions(-)
>
> diff --git a/builtin/ls-tree.c b/builtin/ls-tree.c
> index afb65af4280..7661170f7ca 100644
> --- a/builtin/ls-tree.c
> +++ b/builtin/ls-tree.c
> @@ -30,6 +30,7 @@ struct show_tree_data {
>  	const struct object_id *oid;
>  	const char *pathname;
>  	struct strbuf *base;
> +	char *size_text;
>  };
>  
>  static const char * const ls_tree_usage[] = {
> @@ -186,6 +187,7 @@ static int show_tree_common(struct show_tree_data *data, int *recurse,
>  	data->oid = oid;
>  	data->pathname = pathname;
>  	data->base = base;
> +	data->size_text = NULL;
>  
>  	if (type == OBJ_BLOB) {
>  		if (ls_options & LS_TREE_ONLY)
> @@ -204,6 +206,13 @@ static void show_tree_common_default_long(struct show_tree_data *data)
>  {
>  	int base_len = data->base->len;
>  
> +	if (data->size_text)
> +		printf("%06o %s %s %7s\t", data->mode, type_name(data->type),
> +		       find_unique_abbrev(data->oid, abbrev), data->size_text);
> +	else
> +		printf("%06o %s %s\t", data->mode, type_name(data->type),
> +		       find_unique_abbrev(data->oid, abbrev));
> +
>  	strbuf_addstr(data->base, data->pathname);
>  	write_name_quoted_relative(data->base->buf,
>  				   chomp_prefix ? ls_tree_prefix : NULL, stdout,
> @@ -223,8 +232,6 @@ static int show_tree_default(const struct object_id *oid, struct strbuf *base,
>  	if (early >= 0)
>  		return early;
>  
> -	printf("%06o %s %s\t", data.mode, type_name(data.type),
> -	       find_unique_abbrev(data.oid, abbrev));
>  	show_tree_common_default_long(&data);
>  	return recurse;
>  }
> @@ -253,8 +260,7 @@ static int show_tree_long(const struct object_id *oid, struct strbuf *base,
>  		xsnprintf(size_text, sizeof(size_text), "-");
>  	}
>  
> -	printf("%06o %s %s %7s\t", data.mode, type_name(data.type),
> -	       find_unique_abbrev(data.oid, abbrev), size_text);
> +	data.size_text = size_text;
>  	show_tree_common_default_long(&data);
>  	return recurse;
>  }
I think this is a good example of how not to split up commits.

So, in this case the reader is left wondering what the point is, how does having two callers, and introducing an exra parameter to flip between what one or the other wants make sense for a "common" function?

It doesn't, that code should just belong in those callers, so this is just making things more indirect.

We find out later in the series that the real reason is that this eventually becomes an append to a "struct strbuf".

At that point we need to re-write these lines again, so in terms of reviewers having to look at it they'd wonder here, and then look a that code again...

This is better just either squashed into a 6/6, or in an explicit "here's some refactoring to make a subsequent change smaller", which e.g. could move to using the strbuf already, which we'd later make "real" use of.

Previous: Teng LongNext: Teng Long
Message 6 of 34 in “ls-tree: introduce '--pattern' option”
  1. 0/6 ls-tree: introduce '--pattern' optionTeng Long, Nov 17, 2022
  2. 1/6 ls-tree: cleanup the redundant SPACETeng Long, Nov 17, 2022
  3. 2/6 t3104: remove shift code in 'test_ls_tree_format'Teng Long, Nov 17, 2022
  4. 3/6 ls-tree: optimize params of 'show_tree_common_default_long()'Teng Long, Nov 17, 2022
  5. 4/6 ls-tree: improving cohension in the print codeTeng Long, Nov 17, 2022
  6. Ævar Arnfjörð BjarmasonNov 17, 2022
  7. 5/6 ls-tree: introduce 'match_pattern()' functionTeng Long, Nov 17, 2022
  8. Ævar Arnfjörð BjarmasonNov 17, 2022
  9. Ævar Arnfjörð BjarmasonNov 30, 2022
  10. 6/6 ls-tree: introduce '--pattern' optionTeng Long, Nov 17, 2022
  11. Ævar Arnfjörð BjarmasonNov 17, 2022
  12. Johannes SchindelinDec 12, 2022
  13. Junio C HamanoDec 12, 2022
  14. Junio C HamanoDec 14, 2022
  15. Ævar Arnfjörð BjarmasonDec 14, 2022
  16. Junio C HamanoDec 14, 2022
  17. win-test: unknown terminal "xterm-256color", was Re: [RFC PATCH 6/6] ls-tree: introduce '--pattern' optionJohannes Schindelin, Mar 27, 2023
  18. Junio C HamanoMar 27, 2023
  19. Jeff KingMar 28, 2023
  20. Junio C HamanoMar 28, 2023
  21. Jeff KingMar 28, 2023
  22. Jeff KingMar 28, 2023
  23. Junio C HamanoMar 28, 2023
  24. Ævar Arnfjörð BjarmasonNov 17, 2022
  25. Taylor BlauNov 17, 2022
  26. Teng LongNov 21, 2022
  27. Ævar Arnfjörð BjarmasonNov 21, 2022
  28. 0/4 ls-tree: pass state in struct, not globalsÆvar Arnfjörð Bjarmason, Nov 17, 2022
  29. 1/4 ls-tree: don't use "show_tree_data" for "fast" callbacksÆvar Arnfjörð Bjarmason, Nov 17, 2022
  30. 1/4 ls-tree: don't use "show_tree_data" for "fast" callbacksTeng Long, Dec 21, 2022
  31. 3/4 ls-tree: fold "show_tree_data" into "cb" structÆvar Arnfjörð Bjarmason, Nov 17, 2022
  32. 2/4 ls-tree: use a "struct options"Ævar Arnfjörð Bjarmason, Nov 17, 2022
  33. 4/4 ls-tree: make "line_termination" less genericÆvar Arnfjörð Bjarmason, Nov 17, 2022
  34. 0/4 ls-tree: pass state in struct, not globalsTeng Long, Nov 21, 2022

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.