builtin/cat-file: introduce function to report object status
We have multiple callsites that report the status of an object, for example when the objec tis missing or its name is ambiguous. We're about to add a couple more such callsites to report on "excluded" objects. Prepare for this by introducing a new function `report_object_status()` that encapsulates the functionality. Note that this function also flushes stdout, which is a requirement so that request-response style batched modes can learn about the status before proceeding to the next object. We already flush correctly at all existing callsites, even though the flush in `batch_one_object()` only comes after the switch statement. That flush is now redundant, and we could in theory deduplicate it by moving it into all branches that don't use `report_object_status()`. But that doesn't quite feel sensible: - The duplicate flush should ultimately just be a no-op for us and thus shouldn't impact performance significantly. - By keeping the flush in `report_object_status()` we ensure that all future callers get semantics correct. So let's just be pragmatic and live with the duplicated flush. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
84a1d0039a
commit
1914ae0d70
|
@ -455,6 +455,16 @@ static void print_default_format(struct strbuf *scratch, struct expand_data *dat
|
||||||
(uintmax_t)data->size, opt->output_delim);
|
(uintmax_t)data->size, opt->output_delim);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void report_object_status(struct batch_options *opt,
|
||||||
|
const char *obj_name,
|
||||||
|
const struct object_id *oid,
|
||||||
|
const char *status)
|
||||||
|
{
|
||||||
|
printf("%s %s%c", obj_name ? obj_name : oid_to_hex(oid),
|
||||||
|
status, opt->output_delim);
|
||||||
|
fflush(stdout);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If "pack" is non-NULL, then "offset" is the byte offset within the pack from
|
* If "pack" is non-NULL, then "offset" is the byte offset within the pack from
|
||||||
* which the object may be accessed (though note that we may also rely on
|
* which the object may be accessed (though note that we may also rely on
|
||||||
|
@ -481,9 +491,7 @@ static void batch_object_write(const char *obj_name,
|
||||||
&data->oid, &data->info,
|
&data->oid, &data->info,
|
||||||
OBJECT_INFO_LOOKUP_REPLACE);
|
OBJECT_INFO_LOOKUP_REPLACE);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
printf("%s missing%c",
|
report_object_status(opt, obj_name, &data->oid, "missing");
|
||||||
obj_name ? obj_name : oid_to_hex(&data->oid), opt->output_delim);
|
|
||||||
fflush(stdout);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -535,10 +543,10 @@ static void batch_one_object(const char *obj_name,
|
||||||
if (result != FOUND) {
|
if (result != FOUND) {
|
||||||
switch (result) {
|
switch (result) {
|
||||||
case MISSING_OBJECT:
|
case MISSING_OBJECT:
|
||||||
printf("%s missing%c", obj_name, opt->output_delim);
|
report_object_status(opt, obj_name, &data->oid, "missing");
|
||||||
break;
|
break;
|
||||||
case SHORT_NAME_AMBIGUOUS:
|
case SHORT_NAME_AMBIGUOUS:
|
||||||
printf("%s ambiguous%c", obj_name, opt->output_delim);
|
report_object_status(opt, obj_name, &data->oid, "ambiguous");
|
||||||
break;
|
break;
|
||||||
case DANGLING_SYMLINK:
|
case DANGLING_SYMLINK:
|
||||||
printf("dangling %"PRIuMAX"%c%s%c",
|
printf("dangling %"PRIuMAX"%c%s%c",
|
||||||
|
|
Loading…
Reference in New Issue