ls-tree: don't use "show_tree_data" for "fast" callbacks

As noted in [1] the code that made it in as part of 9c4d58ff2c3 (ls-tree: split up "fast path" callbacks, 2022-03-23) was a "maybe a good idea, maybe not" RFC-quality patch. I hadn't looked very carefully at the resulting patterns. The implementation shared the "struct show_tree_data data", which was introduced in e81517155e0 (ls-tree: introduce struct "show_tree_data", 2022-03-23) both for use in 455923e0a15 (ls-tree: introduce "--format" option, 2022-03-23), and because the "fat" callback hadn't been split up as 9c4d58ff2c3 did. Now that that's been done we can see that most of what show_tree_common() was doing could be done lazily by the callbacks themselves, who in the pre-image were often using an odd mis-match of their own arguments and those same arguments stuck into the "data" structure. Let's also have the callers initialize the "type", rather than grabbing it from the "data" structure afterwards. 1. https://lore.kernel.org/git/cover-0.7-00000000000-20220310T134811Z-avarab@gmail.com/ Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Teng Long <dyronteng@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Ævar Arnfjörð Bjarmason committed Jan 12, 2023 at 17:11 UTC 7677417b5762df860ca454e83dc41dd9df5a9d1c
1 file changed +18 -26
builtin/ls-tree.c
+18 -26
@@ -173,19 +173,11 @@ static int show_tree_fmt(const struct object_id *oid, struct strbuf *base,
173 return recurse;
174 }
175
176 -static int show_tree_common(struct show_tree_data *data, int *recurse,
177 - const struct object_id *oid, struct strbuf *base,
178 - const char *pathname, unsigned mode)
176 +static int show_tree_common(int *recurse, struct strbuf *base,
177 + const char *pathname, enum object_type type)
178 {
180 - enum object_type type = object_type(mode);
179 int ret = -1;
182 -
180 *recurse = 0;
184 - data->mode = mode;
185 - data->type = type;
186 - data->oid = oid;
187 - data->pathname = pathname;
188 - data->base = base;
181
182 if (type == OBJ_BLOB) {
183 if (ls_options & LS_TREE_ONLY)
@@ -217,15 +209,15 @@ static int show_tree_default(const struct object_id *oid, struct strbuf *base,
209 {
210 int early;
211 int recurse;
220 - struct show_tree_data data = { 0 };
212 + enum object_type type = object_type(mode);
213
222 - early = show_tree_common(&data, &recurse, oid, base, pathname, mode);
214 + early = show_tree_common(&recurse, base, pathname, type);
215 if (early >= 0)
216 return early;
217
226 - printf("%06o %s %s\t", data.mode, type_name(data.type),
227 - find_unique_abbrev(data.oid, abbrev));
228 - show_tree_common_default_long(base, pathname, data.base->len);
218 + printf("%06o %s %s\t", mode, type_name(object_type(mode)),
219 + find_unique_abbrev(oid, abbrev));
220 + show_tree_common_default_long(base, pathname, base->len);
221 return recurse;
222 }
223
@@ -235,16 +227,16 @@ static int show_tree_long(const struct object_id *oid, struct strbuf *base,
227 {
228 int early;
229 int recurse;
238 - struct show_tree_data data = { 0 };
230 char size_text[24];
231 + enum object_type type = object_type(mode);
232
241 - early = show_tree_common(&data, &recurse, oid, base, pathname, mode);
233 + early = show_tree_common(&recurse, base, pathname, type);
234 if (early >= 0)
235 return early;
236
245 - if (data.type == OBJ_BLOB) {
237 + if (type == OBJ_BLOB) {
238 unsigned long size;
247 - if (oid_object_info(the_repository, data.oid, &size) == OBJ_BAD)
239 + if (oid_object_info(the_repository, oid, &size) == OBJ_BAD)
240 xsnprintf(size_text, sizeof(size_text), "BAD");
241 else
242 xsnprintf(size_text, sizeof(size_text),
@@ -253,9 +245,9 @@ static int show_tree_long(const struct object_id *oid, struct strbuf *base,
245 xsnprintf(size_text, sizeof(size_text), "-");
246 }
247
256 - printf("%06o %s %s %7s\t", data.mode, type_name(data.type),
257 - find_unique_abbrev(data.oid, abbrev), size_text);
258 - show_tree_common_default_long(base, pathname, data.base->len);
248 + printf("%06o %s %s %7s\t", mode, type_name(type),
249 + find_unique_abbrev(oid, abbrev), size_text);
250 + show_tree_common_default_long(base, pathname, base->len);
251 return recurse;
252 }
253
@@ -266,9 +258,9 @@ static int show_tree_name_only(const struct object_id *oid, struct strbuf *base,
258 int early;
259 int recurse;
260 const size_t baselen = base->len;
269 - struct show_tree_data data = { 0 };
261 + enum object_type type = object_type(mode);
262
271 - early = show_tree_common(&data, &recurse, oid, base, pathname, mode);
263 + early = show_tree_common(&recurse, base, pathname, type);
264 if (early >= 0)
265 return early;
266
@@ -286,9 +278,9 @@ static int show_tree_object(const struct object_id *oid, struct strbuf *base,
278 {
279 int early;
280 int recurse;
289 - struct show_tree_data data = { 0 };
281 + enum object_type type = object_type(mode);
282
291 - early = show_tree_common(&data, &recurse, oid, base, pathname, mode);
283 + early = show_tree_common(&recurse, base, pathname, type);
284 if (early >= 0)
285 return early;
286