Git development
 help / color / mirror / Atom feed
* [PATCH v1 0/1] rev-list: add --missing=print-only mode
@ 2026-04-19  8:48 Siddharth Asthana
  2026-04-19  8:48 ` [PATCH v1 1/1] " Siddharth Asthana
  0 siblings, 1 reply; 11+ messages in thread
From: Siddharth Asthana @ 2026-04-19  8:48 UTC (permalink / raw)
  To: git; +Cc: chriscool, toon, ps, karthik.188, justin, Siddharth Asthana

Hi,

At GitLab, Gitaly uses `rev-list --missing=print` to find missing
objects in partial clones. The current output mixes present and missing
objects together, with missing ones prefixed by '?', so Gitaly has to
post-process the output to extract just the missing OIDs. Having a
dedicated mode that outputs only the missing OIDs directly would
simplify this.

This patch adds --missing=print-only which suppresses all regular
object output and prints only the missing OIDs, one per line, without
the '?' prefix. A `missing_action_prints()` helper consolidates the
repeated three-way checks for MA_PRINT/MA_PRINT_INFO/MA_PRINT_ONLY.

The series is based on top of 9f223ef1c0 (Git 2.54-rc2).

CI: https://gitlab.com/gitlab-org/git/-/pipelines/2463294546

Siddharth Asthana (1):
  rev-list: add --missing=print-only mode

 Documentation/rev-list-options.adoc |  5 +++
 builtin/rev-list.c                  | 49 ++++++++++++++++++++++-------
 t/t6022-rev-list-missing.sh         | 26 +++++++++++++++
 3 files changed, 68 insertions(+), 12 deletions(-)


base-commit: 9f223ef1c026d91c7ac68cc0211bde255dda6199

Thanks
- Siddharth


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH v1 1/1] rev-list: add --missing=print-only mode
  2026-04-19  8:48 [PATCH v1 0/1] rev-list: add --missing=print-only mode Siddharth Asthana
@ 2026-04-19  8:48 ` Siddharth Asthana
  2026-04-19 22:36   ` Derrick Stolee
  2026-04-20  7:43   ` Patrick Steinhardt
  0 siblings, 2 replies; 11+ messages in thread
From: Siddharth Asthana @ 2026-04-19  8:48 UTC (permalink / raw)
  To: git; +Cc: chriscool, toon, ps, karthik.188, justin, Siddharth Asthana

When working with partial clones, it's common to want just the list of
missing objects. The current --missing=print mode does this but mixes
present and missing objects together, with missing ones prefixed by '?'.
Getting only the missing OIDs requires an extra pipe:

  git rev-list --objects --all --missing=print | perl -ne 'print if s/^[?]//'

Add --missing=print-only which outputs only the missing object OIDs, one
per line, without any prefix. This makes the above one-liner unnecessary
and the output directly usable by downstream tools.

Signed-off-by: Siddharth Asthana <siddharthasthana31@gmail.com>
---
 Documentation/rev-list-options.adoc |  5 +++
 builtin/rev-list.c                  | 49 ++++++++++++++++++++++-------
 t/t6022-rev-list-missing.sh         | 26 +++++++++++++++
 3 files changed, 68 insertions(+), 12 deletions(-)

diff --git a/Documentation/rev-list-options.adoc b/Documentation/rev-list-options.adoc
index 2d195a1474..5438be5975 100644
--- a/Documentation/rev-list-options.adoc
+++ b/Documentation/rev-list-options.adoc
@@ -1056,6 +1056,11 @@ Unexpected missing objects will raise an error.
 The form `--missing=print` is like `allow-any`, but will also print a
 list of the missing objects.  Object IDs are prefixed with a ``?'' character.
 +
+The form `--missing=print-only` is like `print`, but will print ONLY the
+missing objects (not the present ones), and without the ``?'' prefix.  This
+is useful for scripting, as a simpler alternative to
+`--missing=print | sed -n 's/^?//p'`.
++
 The form `--missing=print-info` is like `print`, but will also print additional
 information about the missing object inferred from its containing object. The
 information is all printed on the same line with the missing object ID in the
diff --git a/builtin/rev-list.c b/builtin/rev-list.c
index 8f63003709..ba7e3e3919 100644
--- a/builtin/rev-list.c
+++ b/builtin/rev-list.c
@@ -104,14 +104,22 @@ static void missing_objects_map_entry_free(void *e)
 
 static struct oidmap missing_objects;
 enum missing_action {
-	MA_ERROR = 0,    /* fail if any missing objects are encountered */
-	MA_ALLOW_ANY,    /* silently allow ALL missing objects */
-	MA_PRINT,        /* print ALL missing objects in special section */
-	MA_PRINT_INFO,   /* same as MA_PRINT but also prints missing object info */
+	MA_ERROR = 0, /* fail if any missing objects are encountered */
+	MA_ALLOW_ANY, /* silently allow ALL missing objects */
+	MA_PRINT, /* print ALL missing objects in special section */
+	MA_PRINT_INFO, /* same as MA_PRINT but also prints missing object info */
+	MA_PRINT_ONLY, /* print ONLY missing objects, without the "?" prefix */
 	MA_ALLOW_PROMISOR, /* silently allow all missing PROMISOR objects */
 };
 static enum missing_action arg_missing_action;
 
+static inline int missing_action_prints(void)
+{
+	return arg_missing_action == MA_PRINT ||
+	       arg_missing_action == MA_PRINT_INFO ||
+	       arg_missing_action == MA_PRINT_ONLY;
+}
+
 /* display only the oid of each object encountered */
 static int arg_show_object_names = 1;
 
@@ -156,11 +164,16 @@ static void print_missing_object(struct missing_objects_map_entry *entry,
 {
 	struct strbuf sb = STRBUF_INIT;
 
-	if (line_term)
+	if (arg_missing_action == MA_PRINT_ONLY) {
+		printf("%s", oid_to_hex(&entry->entry.oid));
+		putchar(line_term);
+		return;
+	} else if (line_term) {
 		printf("?%s", oid_to_hex(&entry->entry.oid));
-	else
+	} else {
 		printf("%s%cmissing=yes", oid_to_hex(&entry->entry.oid),
 		       info_term);
+	}
 
 	if (!print_missing_info) {
 		putchar(line_term);
@@ -209,6 +222,7 @@ static inline void finish_object__ma(struct object *obj, const char *name)
 
 	case MA_PRINT:
 	case MA_PRINT_INFO:
+	case MA_PRINT_ONLY:
 		add_missing_object_entry(&obj->oid, name, obj->type);
 		return;
 
@@ -246,6 +260,11 @@ static void show_commit(struct commit *commit, void *data)
 		return;
 	}
 
+	if (arg_missing_action == MA_PRINT_ONLY) {
+		finish_commit(commit);
+		return;
+	}
+
 	if (show_disk_usage)
 		total_disk_usage += get_object_disk_usage(&commit->object);
 
@@ -384,6 +403,8 @@ static void show_object(struct object *obj, const char *name, void *cb_data)
 	if (finish_object(obj, name, cb_data))
 		return;
 	display_progress(progress, ++progress_counter);
+	if (arg_missing_action == MA_PRINT_ONLY)
+		return;
 	if (show_disk_usage)
 		total_disk_usage += get_object_disk_usage(obj);
 	if (info->flags & REV_LIST_QUIET)
@@ -525,6 +546,12 @@ static inline int parse_missing_action_value(const char *value)
 		return 1;
 	}
 
+	if (!strcmp(value, "print-only")) {
+		arg_missing_action = MA_PRINT_ONLY;
+		fetch_if_missing = 0;
+		return 1;
+	}
+
 	if (!strcmp(value, "allow-promisor")) {
 		arg_missing_action = MA_ALLOW_PROMISOR;
 		fetch_if_missing = 0;
@@ -967,8 +994,7 @@ int cmd_rev_list(int argc,
 
 	if (arg_print_omitted)
 		oidset_init(&omitted_objects, DEFAULT_OIDSET_SIZE);
-	if (arg_missing_action == MA_PRINT ||
-	    arg_missing_action == MA_PRINT_INFO) {
+	if (missing_action_prints()) {
 		struct oidset_iter iter;
 		struct object_id *oid;
 
@@ -994,8 +1020,7 @@ int cmd_rev_list(int argc,
 			printf("~%s\n", oid_to_hex(oid));
 		oidset_clear(&omitted_objects);
 	}
-	if (arg_missing_action == MA_PRINT ||
-	    arg_missing_action == MA_PRINT_INFO) {
+	if (missing_action_prints()) {
 		struct missing_objects_map_entry *entry;
 		struct oidmap_iter iter;
 
@@ -1011,7 +1036,7 @@ int cmd_rev_list(int argc,
 
 	stop_progress(&progress);
 
-	if (revs.count) {
+	if (revs.count && arg_missing_action != MA_PRINT_ONLY) {
 		if (revs.left_right && revs.cherry_mark)
 			printf("%d\t%d\t%d\n", revs.count_left, revs.count_right, revs.count_same);
 		else if (revs.left_right)
@@ -1022,7 +1047,7 @@ int cmd_rev_list(int argc,
 			printf("%d\n", revs.count_left + revs.count_right);
 	}
 
-	if (show_disk_usage)
+	if (show_disk_usage && arg_missing_action != MA_PRINT_ONLY)
 		print_disk_usage(total_disk_usage);
 
 cleanup:
diff --git a/t/t6022-rev-list-missing.sh b/t/t6022-rev-list-missing.sh
index 08e92dd002..105560ad21 100755
--- a/t/t6022-rev-list-missing.sh
+++ b/t/t6022-rev-list-missing.sh
@@ -198,6 +198,32 @@ do
 	'
 done
 
+for obj in "HEAD~1" "HEAD~1^{tree}" "HEAD:1.t"
+do
+	test_expect_success "rev-list --missing=print-only with missing $obj" '
+		oid="$(git rev-parse $obj)" &&
+		path=".git/objects/$(test_oid_to_path $oid)" &&
+
+		# Capture present OIDs before hiding anything.
+		git rev-list --objects --no-object-names HEAD ^$obj >present.raw &&
+
+		mv "$path" "$path.hidden" &&
+		test_when_finished "mv $path.hidden $path" &&
+
+		git rev-list --missing=print-only --objects --no-object-names \
+			HEAD >actual &&
+
+		# Only the missing OID should appear, without the "?" prefix.
+		grep "^$oid$" actual &&
+
+		# Present objects must NOT appear in the output.
+		while read present_oid
+		do
+			! grep "^$present_oid$" actual || return 1
+		done <present.raw
+	'
+done
+
 test_expect_success "-z nul-delimited --missing" '
 	test_when_finished rm -rf repo &&
 
-- 
2.53.0


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH v1 1/1] rev-list: add --missing=print-only mode
  2026-04-19  8:48 ` [PATCH v1 1/1] " Siddharth Asthana
@ 2026-04-19 22:36   ` Derrick Stolee
  2026-04-20 10:24     ` Siddharth Asthana
  2026-04-20  7:43   ` Patrick Steinhardt
  1 sibling, 1 reply; 11+ messages in thread
From: Derrick Stolee @ 2026-04-19 22:36 UTC (permalink / raw)
  To: Siddharth Asthana, git; +Cc: chriscool, toon, ps, karthik.188, justin

On 4/19/26 4:48 AM, Siddharth Asthana wrote:
> When working with partial clones, it's common to want just the list of
> missing objects. The current --missing=print mode does this but mixes
> present and missing objects together, with missing ones prefixed by '?'.
> Getting only the missing OIDs requires an extra pipe:
> 
>    git rev-list --objects --all --missing=print | perl -ne 'print if s/^[?]//'
> 
> Add --missing=print-only which outputs only the missing object OIDs, one
> per line, without any prefix. This makes the above one-liner unnecessary
> and the output directly usable by downstream tools.

I'm a fan of this mode. It saves time dealing with the I/O.

>   static struct oidmap missing_objects;
>   enum missing_action {
> -	MA_ERROR = 0,    /* fail if any missing objects are encountered */
> -	MA_ALLOW_ANY,    /* silently allow ALL missing objects */
> -	MA_PRINT,        /* print ALL missing objects in special section */
> -	MA_PRINT_INFO,   /* same as MA_PRINT but also prints missing object info */
> +	MA_ERROR = 0, /* fail if any missing objects are encountered */
> +	MA_ALLOW_ANY, /* silently allow ALL missing objects */
> +	MA_PRINT, /* print ALL missing objects in special section */
> +	MA_PRINT_INFO, /* same as MA_PRINT but also prints missing object info */
> +	MA_PRINT_ONLY, /* print ONLY missing objects, without the "?" prefix */
>   	MA_ALLOW_PROMISOR, /* silently allow all missing PROMISOR objects */

I'm not a fan of this adjustment of spacing on the comments,
though I do see that MA_ALLOW_PROMISOR had already broken the
pattern. MA_PRINT_ONLY would still work with the earlier
comment alignment, though.

> -	if (line_term)
> +	if (arg_missing_action == MA_PRINT_ONLY) {
> +		printf("%s", oid_to_hex(&entry->entry.oid));
> +		putchar(line_term);

Is there a reason you didn't use a printf("%s%c") here to
put the oid and line_term together?

> +		return;
> +	} else if (line_term) {
>   		printf("?%s", oid_to_hex(&entry->entry.oid));
> -	else
> +	} else {
>   		printf("%s%cmissing=yes", oid_to_hex(&entry->entry.oid),
>   		       info_term);
> +	}



>   	if (!print_missing_info) {
>   		putchar(line_term);
> @@ -209,6 +222,7 @@ static inline void finish_object__ma(struct object *obj, const char *name)
>   
>   	case MA_PRINT:
>   	case MA_PRINT_INFO:
> +	case MA_PRINT_ONLY:
>   		add_missing_object_entry(&obj->oid, name, obj->type);
>   		return;
>   
> @@ -246,6 +260,11 @@ static void show_commit(struct commit *commit, void *data)
>   		return;
>   	}
>   
> +	if (arg_missing_action == MA_PRINT_ONLY) {
> +		finish_commit(commit);
> +		return;
> +	}
> +
>   	if (show_disk_usage)
>   		total_disk_usage += get_object_disk_usage(&commit->object);
>   
> @@ -384,6 +403,8 @@ static void show_object(struct object *obj, const char *name, void *cb_data)
>   	if (finish_object(obj, name, cb_data))
>   		return;
>   	display_progress(progress, ++progress_counter);
> +	if (arg_missing_action == MA_PRINT_ONLY)
> +		return;
>   	if (show_disk_usage)
>   		total_disk_usage += get_object_disk_usage(obj);
>   	if (info->flags & REV_LIST_QUIET)
> @@ -525,6 +546,12 @@ static inline int parse_missing_action_value(const char *value)
>   		return 1;
>   	}
>   
> +	if (!strcmp(value, "print-only")) {
> +		arg_missing_action = MA_PRINT_ONLY;
> +		fetch_if_missing = 0;
> +		return 1;
> +	}
> +
>   	if (!strcmp(value, "allow-promisor")) {
>   		arg_missing_action = MA_ALLOW_PROMISOR;
>   		fetch_if_missing = 0;
> @@ -967,8 +994,7 @@ int cmd_rev_list(int argc,
>   
>   	if (arg_print_omitted)
>   		oidset_init(&omitted_objects, DEFAULT_OIDSET_SIZE);
> -	if (arg_missing_action == MA_PRINT ||
> -	    arg_missing_action == MA_PRINT_INFO) {
> +	if (missing_action_prints()) {
>   		struct oidset_iter iter;
>   		struct object_id *oid;
>   
> @@ -994,8 +1020,7 @@ int cmd_rev_list(int argc,
>   			printf("~%s\n", oid_to_hex(oid));
>   		oidset_clear(&omitted_objects);
>   	}
> -	if (arg_missing_action == MA_PRINT ||
> -	    arg_missing_action == MA_PRINT_INFO) {
> +	if (missing_action_prints()) {
>   		struct missing_objects_map_entry *entry;
>   		struct oidmap_iter iter;
>   
> @@ -1011,7 +1036,7 @@ int cmd_rev_list(int argc,
>   
>   	stop_progress(&progress);
>   
> -	if (revs.count) {
> +	if (revs.count && arg_missing_action != MA_PRINT_ONLY) {
>   		if (revs.left_right && revs.cherry_mark)
>   			printf("%d\t%d\t%d\n", revs.count_left, revs.count_right, revs.count_same);
>   		else if (revs.left_right)
> @@ -1022,7 +1047,7 @@ int cmd_rev_list(int argc,
>   			printf("%d\n", revs.count_left + revs.count_right);
>   	}
>   
> -	if (show_disk_usage)
> +	if (show_disk_usage && arg_missing_action != MA_PRINT_ONLY)
>   		print_disk_usage(total_disk_usage);

I'm a little worried about all of these checks that need
special-casing. These seem like options that are enabled
by other options and could easily be grouped with the
print-only setting.

If there is something wrong here where these need to be
disabled, then we should update the documentation to say
how this interacts with those options. And perhaps some
warnings to say "these options are not compatible".

On that note: this patch is missing a document update.

Thanks,
-Stolee



^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v1 1/1] rev-list: add --missing=print-only mode
  2026-04-19  8:48 ` [PATCH v1 1/1] " Siddharth Asthana
  2026-04-19 22:36   ` Derrick Stolee
@ 2026-04-20  7:43   ` Patrick Steinhardt
  2026-04-20  8:57     ` Phillip Wood
  2026-04-20 10:33     ` Siddharth Asthana
  1 sibling, 2 replies; 11+ messages in thread
From: Patrick Steinhardt @ 2026-04-20  7:43 UTC (permalink / raw)
  To: Siddharth Asthana; +Cc: git, chriscool, toon, karthik.188, justin

On Sun, Apr 19, 2026 at 02:18:40PM +0530, Siddharth Asthana wrote:
> When working with partial clones, it's common to want just the list of
> missing objects. The current --missing=print mode does this but mixes
> present and missing objects together, with missing ones prefixed by '?'.
> Getting only the missing OIDs requires an extra pipe:
> 
>   git rev-list --objects --all --missing=print | perl -ne 'print if s/^[?]//'
> 
> Add --missing=print-only which outputs only the missing object OIDs, one
> per line, without any prefix. This makes the above one-liner unnecessary
> and the output directly usable by downstream tools.

Naming is a bit tough, as "print-only" sounds as if we're only printing
them without doing anything else, but it doesn't quite convey the
relation to non-missing objects. I don't really have a better suggestion
though -- "print-exclusively" may convey the meaning a tiny bit better,
but still suffers kind of the same issue.

> diff --git a/builtin/rev-list.c b/builtin/rev-list.c
> index 8f63003709..ba7e3e3919 100644
> --- a/builtin/rev-list.c
> +++ b/builtin/rev-list.c
> @@ -104,14 +104,22 @@ static void missing_objects_map_entry_free(void *e)
>  
>  static struct oidmap missing_objects;
>  enum missing_action {
> -	MA_ERROR = 0,    /* fail if any missing objects are encountered */
> -	MA_ALLOW_ANY,    /* silently allow ALL missing objects */
> -	MA_PRINT,        /* print ALL missing objects in special section */
> -	MA_PRINT_INFO,   /* same as MA_PRINT but also prints missing object info */
> +	MA_ERROR = 0, /* fail if any missing objects are encountered */
> +	MA_ALLOW_ANY, /* silently allow ALL missing objects */
> +	MA_PRINT, /* print ALL missing objects in special section */
> +	MA_PRINT_INFO, /* same as MA_PRINT but also prints missing object info */
> +	MA_PRINT_ONLY, /* print ONLY missing objects, without the "?" prefix */

Makes me wonder whether we'll eventually also want to have
`MA_PRINT_INFO_ONLY`.

>  	MA_ALLOW_PROMISOR, /* silently allow all missing PROMISOR objects */
>  };
>  static enum missing_action arg_missing_action;
>  
> +static inline int missing_action_prints(void)

How about naming this `should_print_missing_object()` instead? That
gives the reader a bit more context.

> @@ -1011,7 +1036,7 @@ int cmd_rev_list(int argc,
>  
>  	stop_progress(&progress);
>  
> -	if (revs.count) {
> +	if (revs.count && arg_missing_action != MA_PRINT_ONLY) {
>  		if (revs.left_right && revs.cherry_mark)
>  			printf("%d\t%d\t%d\n", revs.count_left, revs.count_right, revs.count_same);
>  		else if (revs.left_right)

Not a fault of your patch, but I really feel like git-rev-list(1) is
becoming more and more tangled. The fact that we have to add this check
to so many different sites doesn't inspire confidence that we have
indeed catched all of them that need this check.

It would be great if this was reworked a bit to become more obvious, but
that's probably outside the scope of this patch series.

> diff --git a/t/t6022-rev-list-missing.sh b/t/t6022-rev-list-missing.sh
> index 08e92dd002..105560ad21 100755
> --- a/t/t6022-rev-list-missing.sh
> +++ b/t/t6022-rev-list-missing.sh
> @@ -198,6 +198,32 @@ do
>  	'
>  done
>  
> +for obj in "HEAD~1" "HEAD~1^{tree}" "HEAD:1.t"
> +do
> +	test_expect_success "rev-list --missing=print-only with missing $obj" '
> +		oid="$(git rev-parse $obj)" &&
> +		path=".git/objects/$(test_oid_to_path $oid)" &&
> +
> +		# Capture present OIDs before hiding anything.
> +		git rev-list --objects --no-object-names HEAD ^$obj >present.raw &&
> +
> +		mv "$path" "$path.hidden" &&
> +		test_when_finished "mv $path.hidden $path" &&
> +
> +		git rev-list --missing=print-only --objects --no-object-names \
> +			HEAD >actual &&
> +
> +		# Only the missing OID should appear, without the "?" prefix.
> +		grep "^$oid$" actual &&
> +
> +		# Present objects must NOT appear in the output.
> +		while read present_oid
> +		do
> +			! grep "^$present_oid$" actual || return 1
> +		done <present.raw

How many present object IDs do we have? I'm a bit worried that we now
execute grep(1) hundreds of times. Can we maybe do some tricks with
comm(1) instead?

Thanks!

Patrick

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v1 1/1] rev-list: add --missing=print-only mode
  2026-04-20  7:43   ` Patrick Steinhardt
@ 2026-04-20  8:57     ` Phillip Wood
  2026-04-20  9:55       ` Patrick Steinhardt
                         ` (2 more replies)
  2026-04-20 10:33     ` Siddharth Asthana
  1 sibling, 3 replies; 11+ messages in thread
From: Phillip Wood @ 2026-04-20  8:57 UTC (permalink / raw)
  To: Patrick Steinhardt, Siddharth Asthana
  Cc: git, chriscool, toon, karthik.188, justin

On 20/04/2026 08:43, Patrick Steinhardt wrote:
> On Sun, Apr 19, 2026 at 02:18:40PM +0530, Siddharth Asthana wrote:
> 
>>   static struct oidmap missing_objects;
>>   enum missing_action {
>> -	MA_ERROR = 0,    /* fail if any missing objects are encountered */
>> -	MA_ALLOW_ANY,    /* silently allow ALL missing objects */
>> -	MA_PRINT,        /* print ALL missing objects in special section */
>> -	MA_PRINT_INFO,   /* same as MA_PRINT but also prints missing object info */
>> +	MA_ERROR = 0, /* fail if any missing objects are encountered */
>> +	MA_ALLOW_ANY, /* silently allow ALL missing objects */
>> +	MA_PRINT, /* print ALL missing objects in special section */
>> +	MA_PRINT_INFO, /* same as MA_PRINT but also prints missing object info */
>> +	MA_PRINT_ONLY, /* print ONLY missing objects, without the "?" prefix */
> 
> Makes me wonder whether we'll eventually also want to have
> `MA_PRINT_INFO_ONLY`.

Perhaps we'd be better to add a "--missing-only" option that limits the 
output to missing objects? That would avoid the problem of 
"--missing=print-only" not really explaining what it does as well.

>> +for obj in "HEAD~1" "HEAD~1^{tree}" "HEAD:1.t"
>> +do
>> +	test_expect_success "rev-list --missing=print-only with missing $obj" '
>> +		oid="$(git rev-parse $obj)" &&
>> +		path=".git/objects/$(test_oid_to_path $oid)" &&
>> +
>> +		# Capture present OIDs before hiding anything.
>> +		git rev-list --objects --no-object-names HEAD ^$obj >present.raw &&
>> +
>> +		mv "$path" "$path.hidden" &&
>> +		test_when_finished "mv $path.hidden $path" &&
>> +
>> +		git rev-list --missing=print-only --objects --no-object-names \
>> +			HEAD >actual &&
>> +
>> +		# Only the missing OID should appear, without the "?" prefix.
>> +		grep "^$oid$" actual &&
>> +
>> +		# Present objects must NOT appear in the output.
>> +		while read present_oid
>> +		do
>> +			! grep "^$present_oid$" actual || return 1
>> +		done <present.raw
> 
> How many present object IDs do we have? I'm a bit worried that we now
> execute grep(1) hundreds of times. Can we maybe do some tricks with
> comm(1) instead?

If we want to verify that it only prints a single oid then

	echo $oid >expect &&
	test_cmp expect actual

would be much simpler more helpful if the test fails

Thanks

Phil

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v1 1/1] rev-list: add --missing=print-only mode
  2026-04-20  8:57     ` Phillip Wood
@ 2026-04-20  9:55       ` Patrick Steinhardt
  2026-04-20 10:37       ` Siddharth Asthana
  2026-04-20 11:00       ` Kristoffer Haugsbakk
  2 siblings, 0 replies; 11+ messages in thread
From: Patrick Steinhardt @ 2026-04-20  9:55 UTC (permalink / raw)
  To: phillip.wood; +Cc: Siddharth Asthana, git, chriscool, toon, karthik.188, justin

On Mon, Apr 20, 2026 at 09:57:02AM +0100, Phillip Wood wrote:
> On 20/04/2026 08:43, Patrick Steinhardt wrote:
> > On Sun, Apr 19, 2026 at 02:18:40PM +0530, Siddharth Asthana wrote:
> > 
> > >   static struct oidmap missing_objects;
> > >   enum missing_action {
> > > -	MA_ERROR = 0,    /* fail if any missing objects are encountered */
> > > -	MA_ALLOW_ANY,    /* silently allow ALL missing objects */
> > > -	MA_PRINT,        /* print ALL missing objects in special section */
> > > -	MA_PRINT_INFO,   /* same as MA_PRINT but also prints missing object info */
> > > +	MA_ERROR = 0, /* fail if any missing objects are encountered */
> > > +	MA_ALLOW_ANY, /* silently allow ALL missing objects */
> > > +	MA_PRINT, /* print ALL missing objects in special section */
> > > +	MA_PRINT_INFO, /* same as MA_PRINT but also prints missing object info */
> > > +	MA_PRINT_ONLY, /* print ONLY missing objects, without the "?" prefix */
> > 
> > Makes me wonder whether we'll eventually also want to have
> > `MA_PRINT_INFO_ONLY`.
> 
> Perhaps we'd be better to add a "--missing-only" option that limits the
> output to missing objects? That would avoid the problem of
> "--missing=print-only" not really explaining what it does as well.

Yes, I had the same thought.

Patrick

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v1 1/1] rev-list: add --missing=print-only mode
  2026-04-19 22:36   ` Derrick Stolee
@ 2026-04-20 10:24     ` Siddharth Asthana
  2026-04-20 11:44       ` Derrick Stolee
  0 siblings, 1 reply; 11+ messages in thread
From: Siddharth Asthana @ 2026-04-20 10:24 UTC (permalink / raw)
  To: Derrick Stolee, git; +Cc: chriscool, toon, ps, karthik.188, justin



On 20/04/26 04:06, Derrick Stolee wrote:
> On 4/19/26 4:48 AM, Siddharth Asthana wrote:
>> When working with partial clones, it's common to want just the list of
>> missing objects. The current --missing=print mode does this but mixes
>> present and missing objects together, with missing ones prefixed by '?'.
>> Getting only the missing OIDs requires an extra pipe:
>>
>>    git rev-list --objects --all --missing=print | perl -ne 'print if 
>> s/^[?]//'
>>
>> Add --missing=print-only which outputs only the missing object OIDs, one
>> per line, without any prefix. This makes the above one-liner unnecessary
>> and the output directly usable by downstream tools.
> 
> I'm a fan of this mode. It saves time dealing with the I/O.


Thanks!


> 
>>   static struct oidmap missing_objects;
>>   enum missing_action {
>> -    MA_ERROR = 0,    /* fail if any missing objects are encountered */
>> -    MA_ALLOW_ANY,    /* silently allow ALL missing objects */
>> -    MA_PRINT,        /* print ALL missing objects in special section */
>> -    MA_PRINT_INFO,   /* same as MA_PRINT but also prints missing 
>> object info */
>> +    MA_ERROR = 0, /* fail if any missing objects are encountered */
>> +    MA_ALLOW_ANY, /* silently allow ALL missing objects */
>> +    MA_PRINT, /* print ALL missing objects in special section */
>> +    MA_PRINT_INFO, /* same as MA_PRINT but also prints missing object 
>> info */
>> +    MA_PRINT_ONLY, /* print ONLY missing objects, without the "?" 
>> prefix */
>>       MA_ALLOW_PROMISOR, /* silently allow all missing PROMISOR 
>> objects */
> 
> I'm not a fan of this adjustment of spacing on the comments,


You are right, unnecessary churn - will restore!


> though I do see that MA_ALLOW_PROMISOR had already broken the
> pattern. MA_PRINT_ONLY would still work with the earlier
> comment alignment, though.
> 
>> -    if (line_term)
>> +    if (arg_missing_action == MA_PRINT_ONLY) {
>> +        printf("%s", oid_to_hex(&entry->entry.oid));
>> +        putchar(line_term);
> 
> Is there a reason you didn't use a printf("%s%c") here to
> put the oid and line_term together?


I just followed the existing pattern in the same function where every 
other path uses a separate putchar(line_term). Happy to combine if you 
prefer.


> 
>> +        return;
>> +    } else if (line_term) {
>>           printf("?%s", oid_to_hex(&entry->entry.oid));
>> -    else
>> +    } else {
>>           printf("%s%cmissing=yes", oid_to_hex(&entry->entry.oid),
>>                  info_term);
>> +    }
> 
> 
> 
>>       if (!print_missing_info) {
>>           putchar(line_term);
>> @@ -209,6 +222,7 @@ static inline void finish_object__ma(struct object 
>> *obj, const char *name)
>>       case MA_PRINT:
>>       case MA_PRINT_INFO:
>> +    case MA_PRINT_ONLY:
>>           add_missing_object_entry(&obj->oid, name, obj->type);
>>           return;
>> @@ -246,6 +260,11 @@ static void show_commit(struct commit *commit, 
>> void *data)
>>           return;
>>       }
>> +    if (arg_missing_action == MA_PRINT_ONLY) {
>> +        finish_commit(commit);
>> +        return;
>> +    }
>> +
>>       if (show_disk_usage)
>>           total_disk_usage += get_object_disk_usage(&commit->object);
>> @@ -384,6 +403,8 @@ static void show_object(struct object *obj, const 
>> char *name, void *cb_data)
>>       if (finish_object(obj, name, cb_data))
>>           return;
>>       display_progress(progress, ++progress_counter);
>> +    if (arg_missing_action == MA_PRINT_ONLY)
>> +        return;
>>       if (show_disk_usage)
>>           total_disk_usage += get_object_disk_usage(obj);
>>       if (info->flags & REV_LIST_QUIET)
>> @@ -525,6 +546,12 @@ static inline int 
>> parse_missing_action_value(const char *value)
>>           return 1;
>>       }
>> +    if (!strcmp(value, "print-only")) {
>> +        arg_missing_action = MA_PRINT_ONLY;
>> +        fetch_if_missing = 0;
>> +        return 1;
>> +    }
>> +
>>       if (!strcmp(value, "allow-promisor")) {
>>           arg_missing_action = MA_ALLOW_PROMISOR;
>>           fetch_if_missing = 0;
>> @@ -967,8 +994,7 @@ int cmd_rev_list(int argc,
>>       if (arg_print_omitted)
>>           oidset_init(&omitted_objects, DEFAULT_OIDSET_SIZE);
>> -    if (arg_missing_action == MA_PRINT ||
>> -        arg_missing_action == MA_PRINT_INFO) {
>> +    if (missing_action_prints()) {
>>           struct oidset_iter iter;
>>           struct object_id *oid;
>> @@ -994,8 +1020,7 @@ int cmd_rev_list(int argc,
>>               printf("~%s\n", oid_to_hex(oid));
>>           oidset_clear(&omitted_objects);
>>       }
>> -    if (arg_missing_action == MA_PRINT ||
>> -        arg_missing_action == MA_PRINT_INFO) {
>> +    if (missing_action_prints()) {
>>           struct missing_objects_map_entry *entry;
>>           struct oidmap_iter iter;
>> @@ -1011,7 +1036,7 @@ int cmd_rev_list(int argc,
>>       stop_progress(&progress);
>> -    if (revs.count) {
>> +    if (revs.count && arg_missing_action != MA_PRINT_ONLY) {
>>           if (revs.left_right && revs.cherry_mark)
>>               printf("%d\t%d\t%d\n", revs.count_left, 
>> revs.count_right, revs.count_same);
>>           else if (revs.left_right)
>> @@ -1022,7 +1047,7 @@ int cmd_rev_list(int argc,
>>               printf("%d\n", revs.count_left + revs.count_right);
>>       }
>> -    if (show_disk_usage)
>> +    if (show_disk_usage && arg_missing_action != MA_PRINT_ONLY)
>>           print_disk_usage(total_disk_usage);
> 
> I'm a little worried about all of these checks that need
> special-casing. These seem like options that are enabled


Phillip suggested making this a separate --missing-only flag that 
composes with existing --missing= modes - I think that's a better 
design. will work v2 around it.


> by other options and could easily be grouped with the
> print-only setting.
> 
> If there is something wrong here where these need to be
> disabled, then we should update the documentation to say


Agreed - I will make --count and --disk-usage incompatible with 
--missing-only and die() with a clear message instead of silently 
suppressing them.



> how this interacts with those options. And perhaps some
> warnings to say "these options are not compatible".
> 
> On that note: this patch is missing a document update.


There is a doc update in rev-list-options.doc, but it doesn't  cover 
interactions with --count/--disk-usage. Will fix in v2.


> 
> Thanks,
> -Stolee
> 
> 




Thanks,
Asthana

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v1 1/1] rev-list: add --missing=print-only mode
  2026-04-20  7:43   ` Patrick Steinhardt
  2026-04-20  8:57     ` Phillip Wood
@ 2026-04-20 10:33     ` Siddharth Asthana
  1 sibling, 0 replies; 11+ messages in thread
From: Siddharth Asthana @ 2026-04-20 10:33 UTC (permalink / raw)
  To: Patrick Steinhardt; +Cc: git, chriscool, toon, karthik.188, justin



On 20/04/26 13:13, Patrick Steinhardt wrote:
> On Sun, Apr 19, 2026 at 02:18:40PM +0530, Siddharth Asthana wrote:
>> When working with partial clones, it's common to want just the list of
>> missing objects. The current --missing=print mode does this but mixes
>> present and missing objects together, with missing ones prefixed by '?'.
>> Getting only the missing OIDs requires an extra pipe:
>>
>>    git rev-list --objects --all --missing=print | perl -ne 'print if s/^[?]//'
>>
>> Add --missing=print-only which outputs only the missing object OIDs, one
>> per line, without any prefix. This makes the above one-liner unnecessary
>> and the output directly usable by downstream tools.
> 
> Naming is a bit tough, as "print-only" sounds as if we're only printing
> them without doing anything else, but it doesn't quite convey the


The name came from Christian's original suggesttion in the issue [1], 
but agreed it's ambiguous. Phillip's --missing-only approach solve this.

[1] https://gitlab.com/gitlab-org/git/-/work_items/80#note_464005298


> relation to non-missing objects. I don't really have a better suggestion
> though -- "print-exclusively" may convey the meaning a tiny bit better,
> but still suffers kind of the same issue.
> 
>> diff --git a/builtin/rev-list.c b/builtin/rev-list.c
>> index 8f63003709..ba7e3e3919 100644
>> --- a/builtin/rev-list.c
>> +++ b/builtin/rev-list.c
>> @@ -104,14 +104,22 @@ static void missing_objects_map_entry_free(void *e)
>>   
>>   static struct oidmap missing_objects;
>>   enum missing_action {
>> -	MA_ERROR = 0,    /* fail if any missing objects are encountered */
>> -	MA_ALLOW_ANY,    /* silently allow ALL missing objects */
>> -	MA_PRINT,        /* print ALL missing objects in special section */
>> -	MA_PRINT_INFO,   /* same as MA_PRINT but also prints missing object info */
>> +	MA_ERROR = 0, /* fail if any missing objects are encountered */
>> +	MA_ALLOW_ANY, /* silently allow ALL missing objects */
>> +	MA_PRINT, /* print ALL missing objects in special section */
>> +	MA_PRINT_INFO, /* same as MA_PRINT but also prints missing object info */
>> +	MA_PRINT_ONLY, /* print ONLY missing objects, without the "?" prefix */
> 
> Makes me wonder whether we'll eventually also want to have
> `MA_PRINT_INFO_ONLY`.



Right - that's the strongest argument for --missing-only as a separate 
flag. Gets us that for free.


> 
>>   	MA_ALLOW_PROMISOR, /* silently allow all missing PROMISOR objects */
>>   };
>>   static enum missing_action arg_missing_action;
>>   
>> +static inline int missing_action_prints(void)
> 
> How about naming this `should_print_missing_object()` instead? That
> gives the reader a bit more context.


The function is a predicate on the mode, not on a specific object, so 
that name would be slightly misleading. But with --missing-only this 
helper might change shape anyway. WDYT?



> 
>> @@ -1011,7 +1036,7 @@ int cmd_rev_list(int argc,
>>   
>>   	stop_progress(&progress);
>>   
>> -	if (revs.count) {
>> +	if (revs.count && arg_missing_action != MA_PRINT_ONLY) {
>>   		if (revs.left_right && revs.cherry_mark)
>>   			printf("%d\t%d\t%d\n", revs.count_left, revs.count_right, revs.count_same);
>>   		else if (revs.left_right)
> 
> Not a fault of your patch, but I really feel like git-rev-list(1) is
> becoming more and more tangled. The fact that we have to add this check
> to so many different sites doesn't inspire confidence that we have
> indeed catched all of them that need this check.
> 
> It would be great if this was reworked a bit to become more obvious, but
> that's probably outside the scope of this patch series.
> 
>> diff --git a/t/t6022-rev-list-missing.sh b/t/t6022-rev-list-missing.sh
>> index 08e92dd002..105560ad21 100755
>> --- a/t/t6022-rev-list-missing.sh
>> +++ b/t/t6022-rev-list-missing.sh
>> @@ -198,6 +198,32 @@ do
>>   	'
>>   done
>>   
>> +for obj in "HEAD~1" "HEAD~1^{tree}" "HEAD:1.t"
>> +do
>> +	test_expect_success "rev-list --missing=print-only with missing $obj" '
>> +		oid="$(git rev-parse $obj)" &&
>> +		path=".git/objects/$(test_oid_to_path $oid)" &&
>> +
>> +		# Capture present OIDs before hiding anything.
>> +		git rev-list --objects --no-object-names HEAD ^$obj >present.raw &&
>> +
>> +		mv "$path" "$path.hidden" &&
>> +		test_when_finished "mv $path.hidden $path" &&
>> +
>> +		git rev-list --missing=print-only --objects --no-object-names \
>> +			HEAD >actual &&
>> +
>> +		# Only the missing OID should appear, without the "?" prefix.
>> +		grep "^$oid$" actual &&
>> +
>> +		# Present objects must NOT appear in the output.
>> +		while read present_oid
>> +		do
>> +			! grep "^$present_oid$" actual || return 1
>> +		done <present.raw
> 
> How many present object IDs do we have? I'm a bit worried that we now
> execute grep(1) hundreds of times. Can we maybe do some tricks with
> comm(1) instead?


Phillip's test_cmp approach is simpler, since we hide one object, the 
output should be exactly that OID. Will use that.


Thanks,
Asthana


> 
> Thanks!
> 
> Patrick


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v1 1/1] rev-list: add --missing=print-only mode
  2026-04-20  8:57     ` Phillip Wood
  2026-04-20  9:55       ` Patrick Steinhardt
@ 2026-04-20 10:37       ` Siddharth Asthana
  2026-04-20 11:00       ` Kristoffer Haugsbakk
  2 siblings, 0 replies; 11+ messages in thread
From: Siddharth Asthana @ 2026-04-20 10:37 UTC (permalink / raw)
  To: phillip.wood, Patrick Steinhardt
  Cc: git, chriscool, toon, karthik.188, justin



On 20/04/26 14:27, Phillip Wood wrote:
> On 20/04/2026 08:43, Patrick Steinhardt wrote:
>> On Sun, Apr 19, 2026 at 02:18:40PM +0530, Siddharth Asthana wrote:
>>
>>>   static struct oidmap missing_objects;
>>>   enum missing_action {
>>> -    MA_ERROR = 0,    /* fail if any missing objects are encountered */
>>> -    MA_ALLOW_ANY,    /* silently allow ALL missing objects */
>>> -    MA_PRINT,        /* print ALL missing objects in special section */
>>> -    MA_PRINT_INFO,   /* same as MA_PRINT but also prints missing 
>>> object info */
>>> +    MA_ERROR = 0, /* fail if any missing objects are encountered */
>>> +    MA_ALLOW_ANY, /* silently allow ALL missing objects */
>>> +    MA_PRINT, /* print ALL missing objects in special section */
>>> +    MA_PRINT_INFO, /* same as MA_PRINT but also prints missing 
>>> object info */
>>> +    MA_PRINT_ONLY, /* print ONLY missing objects, without the "?" 
>>> prefix */
>>
>> Makes me wonder whether we'll eventually also want to have
>> `MA_PRINT_INFO_ONLY`.
> 
> Perhaps we'd be better to add a "--missing-only" option that limits the 
> output to missing objects? That would avoid the problem of "-- 


Make sense, its orthogonal to --missing= and handles print-info-only for 
free.

Question though: should --missing-only without --missing=print (or 
print-info) be an errro? I am leaning towards requiring it explicitly so 
the behavior is always obvious.

Will rework v2 around this.


> missing=print-only" not really explaining what it does as well.
> 
>>> +for obj in "HEAD~1" "HEAD~1^{tree}" "HEAD:1.t"
>>> +do
>>> +    test_expect_success "rev-list --missing=print-only with missing 
>>> $obj" '
>>> +        oid="$(git rev-parse $obj)" &&
>>> +        path=".git/objects/$(test_oid_to_path $oid)" &&
>>> +
>>> +        # Capture present OIDs before hiding anything.
>>> +        git rev-list --objects --no-object-names HEAD ^$obj 
>>> >present.raw &&
>>> +
>>> +        mv "$path" "$path.hidden" &&
>>> +        test_when_finished "mv $path.hidden $path" &&
>>> +
>>> +        git rev-list --missing=print-only --objects --no-object-names \
>>> +            HEAD >actual &&
>>> +
>>> +        # Only the missing OID should appear, without the "?" prefix.
>>> +        grep "^$oid$" actual &&
>>> +
>>> +        # Present objects must NOT appear in the output.
>>> +        while read present_oid
>>> +        do
>>> +            ! grep "^$present_oid$" actual || return 1
>>> +        done <present.raw
>>
>> How many present object IDs do we have? I'm a bit worried that we now
>> execute grep(1) hundreds of times. Can we maybe do some tricks with
>> comm(1) instead?
> 
> If we want to verify that it only prints a single oid then
> 
>      echo $oid >expect &&
>      test_cmp expect actual
> 
> would be much simpler more helpful if the test fails


yeah much cleaner, will use it. Thanks



> 
> Thanks
> 
> Phil


Thanks,
Asthana

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v1 1/1] rev-list: add --missing=print-only mode
  2026-04-20  8:57     ` Phillip Wood
  2026-04-20  9:55       ` Patrick Steinhardt
  2026-04-20 10:37       ` Siddharth Asthana
@ 2026-04-20 11:00       ` Kristoffer Haugsbakk
  2 siblings, 0 replies; 11+ messages in thread
From: Kristoffer Haugsbakk @ 2026-04-20 11:00 UTC (permalink / raw)
  To: Phillip Wood, Patrick Steinhardt, Siddharth Asthana
  Cc: git, Christian Couder, Toon Claes, Karthik Nayak, justin

On Mon, Apr 20, 2026, at 10:57, Phillip Wood wrote:
> On 20/04/2026 08:43, Patrick Steinhardt wrote:
>> On Sun, Apr 19, 2026 at 02:18:40PM +0530, Siddharth Asthana wrote:
>>
>>>   static struct oidmap missing_objects;
>>>   enum missing_action {
>>> -	MA_ERROR = 0,    /* fail if any missing objects are encountered */
>>> -	MA_ALLOW_ANY,    /* silently allow ALL missing objects */
>>> -	MA_PRINT,        /* print ALL missing objects in special section */
>>> -	MA_PRINT_INFO,   /* same as MA_PRINT but also prints missing object info */
>>> +	MA_ERROR = 0, /* fail if any missing objects are encountered */
>>> +	MA_ALLOW_ANY, /* silently allow ALL missing objects */
>>> +	MA_PRINT, /* print ALL missing objects in special section */
>>> +	MA_PRINT_INFO, /* same as MA_PRINT but also prints missing object info */
>>> +	MA_PRINT_ONLY, /* print ONLY missing objects, without the "?" prefix */
>>
>> Makes me wonder whether we'll eventually also want to have
>> `MA_PRINT_INFO_ONLY`.
>
> Perhaps we'd be better to add a "--missing-only" option that limits the
> output to missing objects? That would avoid the problem of
> "--missing=print-only" not really explaining what it does as well.

The original `--missing` says what to do about missing objects. I find
`--missing=print-only` to be surprising:

• Do print missing
• But also do not print present objects

Why would a `--missing` option dictate what to do about objects that are
present (hide them)? That looks tacked-on.

`--missing-only` is better but has the same problem, IMO, of dictating
how present objects should be treated.

From the cover letter:

CV> At GitLab, Gitaly uses `rev-list --missing=print` to find missing
CV> objects in partial clones. The current output mixes present and missing
CV> objects together, with missing ones prefixed by '?', so Gitaly has to
CV> post-process the output to extract just the missing OIDs. Having a
CV> dedicated mode that outputs only the missing OIDs directly would
CV> simplify this.

This makes me think that I want:

1. I do want missing objects
2. I do not want present objects

Which makes me think that something like `--present=no-print` makes
more sense.

Just speaking as a user and not looking at the code.

>[snip]

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v1 1/1] rev-list: add --missing=print-only mode
  2026-04-20 10:24     ` Siddharth Asthana
@ 2026-04-20 11:44       ` Derrick Stolee
  0 siblings, 0 replies; 11+ messages in thread
From: Derrick Stolee @ 2026-04-20 11:44 UTC (permalink / raw)
  To: Siddharth Asthana, git; +Cc: chriscool, toon, ps, karthik.188, justin

On 4/20/2026 6:24 AM, Siddharth Asthana wrote:
> On 20/04/26 04:06, Derrick Stolee wrote:
>> On 4/19/26 4:48 AM, Siddharth Asthana wrote:

>>> -    if (line_term)
>>> +    if (arg_missing_action == MA_PRINT_ONLY) {
>>> +        printf("%s", oid_to_hex(&entry->entry.oid));
>>> +        putchar(line_term);
>>
>> Is there a reason you didn't use a printf("%s%c") here to
>> put the oid and line_term together?
> 
> 
> I just followed the existing pattern in the same function where every other path uses a separate putchar(line_term). Happy to combine if you prefer.

>>> +    } else {
>>>           printf("%s%cmissing=yes", oid_to_hex(&entry->entry.oid),
>>>                  info_term);

I was just looking at this line in the patch context as
comparison, but if there are other patterns that prefer
"printf(); putc();" then that's enough for me.

>>> -    if (show_disk_usage)
>>> +    if (show_disk_usage && arg_missing_action != MA_PRINT_ONLY)
>>>           print_disk_usage(total_disk_usage);
>>
>> I'm a little worried about all of these checks that need
>> special-casing. These seem like options that are enabled
> 
> Phillip suggested making this a separate --missing-only flag that composes with existing --missing= modes - I think that's a better design. will work v2 around it.

That's a good idea. '--missing=' formats the output while
your mode _filters_ the output. They are different things
and worth different options.

>> how this interacts with those options. And perhaps some
>> warnings to say "these options are not compatible".
>>
>> On that note: this patch is missing a document update.
> 
> 
> There is a doc update in rev-list-options.doc, but it doesn't  cover interactions with --count/--disk-usage. Will fix in v2.

You're right. I thought I had looked for it in the patch
but missed it somehow.

Thanks,
-Stolee


^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2026-04-20 11:44 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-19  8:48 [PATCH v1 0/1] rev-list: add --missing=print-only mode Siddharth Asthana
2026-04-19  8:48 ` [PATCH v1 1/1] " Siddharth Asthana
2026-04-19 22:36   ` Derrick Stolee
2026-04-20 10:24     ` Siddharth Asthana
2026-04-20 11:44       ` Derrick Stolee
2026-04-20  7:43   ` Patrick Steinhardt
2026-04-20  8:57     ` Phillip Wood
2026-04-20  9:55       ` Patrick Steinhardt
2026-04-20 10:37       ` Siddharth Asthana
2026-04-20 11:00       ` Kristoffer Haugsbakk
2026-04-20 10:33     ` Siddharth Asthana

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox