All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] commit-graph: when incompatible with graphs, indicate why
@ 2021-02-11 15:39 Johannes Schindelin via GitGitGadget
  2021-02-11 16:17 ` Derrick Stolee
  2021-02-25 14:07 ` noisy "warning: repository contains (deprecated) grafts; skipping commit-graph" warnings Ævar Arnfjörð Bjarmason
  0 siblings, 2 replies; 4+ messages in thread
From: Johannes Schindelin via GitGitGadget @ 2021-02-11 15:39 UTC (permalink / raw)
  To: git; +Cc: Derrick Stolee, Johannes Schindelin, Johannes Schindelin

From: Johannes Schindelin <johannes.schindelin@gmx.de>

When `gc.writeCommitGraph = true`, it is possible that the commit-graph
is _still_ not written: replace objects, grafts and shallow repositories
are incompatible with the commit-graph feature.

Under such circumstances, we need to indicate to the user why the
commit-graph was not written instead of staying silent about it.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
    Be clear why commit-graph was skipped
    
    After repairing my local checkout
    [https://github.com/gitgitgadget/git/pull/873], I was puzzled that the
    commit-graph file was not written. Turns out that I still had almost a
    dozen replace objects. But I only found out that they were blocking the
    commit-graph when I stepped through git gc in a debugger. This is my
    attempt to make it more straight-forward to recover from similar
    situations in the future.

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-875%2Fdscho%2Fwarn-if-commit-graph-is-skipped-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-875/dscho/warn-if-commit-graph-is-skipped-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/875

 commit-graph.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/commit-graph.c b/commit-graph.c
index 65410602714e..9ad176fa7c8e 100644
--- a/commit-graph.c
+++ b/commit-graph.c
@@ -205,16 +205,24 @@ static int commit_graph_compatible(struct repository *r)
 
 	if (read_replace_refs) {
 		prepare_replace_object(r);
-		if (hashmap_get_size(&r->objects->replace_map->map))
+		if (hashmap_get_size(&r->objects->replace_map->map)) {
+			warning(_("repository contains replace objects; "
+			       "skipping commit-graph"));
 			return 0;
+		}
 	}
 
 	prepare_commit_graft(r);
 	if (r->parsed_objects &&
-	    (r->parsed_objects->grafts_nr || r->parsed_objects->substituted_parent))
+	    (r->parsed_objects->grafts_nr || r->parsed_objects->substituted_parent)) {
+		warning(_("repository contains (deprecated) grafts; "
+		       "skipping commit-graph"));
 		return 0;
-	if (is_repository_shallow(r))
+	}
+	if (is_repository_shallow(r)) {
+		warning(_("repository is shallow; skipping commit-graph"));
 		return 0;
+	}
 
 	return 1;
 }

base-commit: f9f2520108bab26a750bcbb00518dc27672cf0a2
-- 
gitgitgadget

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

* Re: [PATCH] commit-graph: when incompatible with graphs, indicate why
  2021-02-11 15:39 [PATCH] commit-graph: when incompatible with graphs, indicate why Johannes Schindelin via GitGitGadget
@ 2021-02-11 16:17 ` Derrick Stolee
  2021-02-11 17:32   ` Junio C Hamano
  2021-02-25 14:07 ` noisy "warning: repository contains (deprecated) grafts; skipping commit-graph" warnings Ævar Arnfjörð Bjarmason
  1 sibling, 1 reply; 4+ messages in thread
From: Derrick Stolee @ 2021-02-11 16:17 UTC (permalink / raw)
  To: Johannes Schindelin via GitGitGadget, git
  Cc: Derrick Stolee, Johannes Schindelin

On 2/11/21 10:39 AM, Johannes Schindelin via GitGitGadget wrote:
> From: Johannes Schindelin <johannes.schindelin@gmx.de>
> 
> When `gc.writeCommitGraph = true`, it is possible that the commit-graph
> is _still_ not written: replace objects, grafts and shallow repositories
> are incompatible with the commit-graph feature.
> 
> Under such circumstances, we need to indicate to the user why the
> commit-graph was not written instead of staying silent about it.

This feedback is valuable for these corner cases, especially now
that the commit-graph is getting less and less "optional" as time
goes on.

> +		if (hashmap_get_size(&r->objects->replace_map->map)) {
> +			warning(_("repository contains replace objects; "
> +			       "skipping commit-graph"));
...
> +		warning(_("repository is shallow; skipping commit-graph"));

These warnings make sense to me.

Thanks,
-Stolee

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

* Re: [PATCH] commit-graph: when incompatible with graphs, indicate why
  2021-02-11 16:17 ` Derrick Stolee
@ 2021-02-11 17:32   ` Junio C Hamano
  0 siblings, 0 replies; 4+ messages in thread
From: Junio C Hamano @ 2021-02-11 17:32 UTC (permalink / raw)
  To: Derrick Stolee
  Cc: Johannes Schindelin via GitGitGadget, git, Derrick Stolee,
	Johannes Schindelin

Derrick Stolee <stolee@gmail.com> writes:

> On 2/11/21 10:39 AM, Johannes Schindelin via GitGitGadget wrote:
>> From: Johannes Schindelin <johannes.schindelin@gmx.de>
>> 
>> When `gc.writeCommitGraph = true`, it is possible that the commit-graph
>> is _still_ not written: replace objects, grafts and shallow repositories
>> are incompatible with the commit-graph feature.
>> 
>> Under such circumstances, we need to indicate to the user why the
>> commit-graph was not written instead of staying silent about it.
>
> This feedback is valuable for these corner cases, especially now
> that the commit-graph is getting less and less "optional" as time
> goes on.
>
>> +		if (hashmap_get_size(&r->objects->replace_map->map)) {
>> +			warning(_("repository contains replace objects; "
>> +			       "skipping commit-graph"));
> ...
>> +		warning(_("repository is shallow; skipping commit-graph"));
>
> These warnings make sense to me.

I take that as your Acked-by.

Thanks, both.

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

* noisy "warning: repository contains (deprecated) grafts; skipping commit-graph" warnings
  2021-02-11 15:39 [PATCH] commit-graph: when incompatible with graphs, indicate why Johannes Schindelin via GitGitGadget
  2021-02-11 16:17 ` Derrick Stolee
@ 2021-02-25 14:07 ` Ævar Arnfjörð Bjarmason
  1 sibling, 0 replies; 4+ messages in thread
From: Ævar Arnfjörð Bjarmason @ 2021-02-25 14:07 UTC (permalink / raw)
  To: Johannes Schindelin via GitGitGadget
  Cc: git, Derrick Stolee, Johannes Schindelin, Jonathan Tan


On Thu, Feb 11 2021, Johannes Schindelin via GitGitGadget wrote:

> From: Johannes Schindelin <johannes.schindelin@gmx.de>
>
> When `gc.writeCommitGraph = true`, it is possible that the commit-graph
> is _still_ not written: replace objects, grafts and shallow repositories
> are incompatible with the commit-graph feature.
>
> Under such circumstances, we need to indicate to the user why the
> commit-graph was not written instead of staying silent about it.

This change really needs to be changed in some way or other, but
unfortunately the commit message has little/no information about when
these warnings are expected, and no tests.

I'm assuming you were targeting the write_commit_graph() caller of
commit_graph_compatible(). In that case this somewhat makes sense I
guess.

But we also call this at a distance when simply checking if we can
lookup things in the commit-graph, observe this on the current git
master:

    $ git clone --depth 1 --no-tags --single-branch --branch master https://github.com/git/git.git /tmp/git.git
    [...]
    warning: repository contains (deprecated) grafts; skipping commit-graph
    warning: repository contains (deprecated) grafts; skipping commit-graph

In that case we reach this via "parse_object()" in the "clone" process,
and print it twice because our rev-list child also spews the warning at
us.

Perhaps a better approach here is to pass down some flag and e.g. write
it only from "git gc" and friends?

> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> ---
>     Be clear why commit-graph was skipped
>     
>     After repairing my local checkout
>     [https://github.com/gitgitgadget/git/pull/873], I was puzzled that the
>     commit-graph file was not written. Turns out that I still had almost a
>     dozen replace objects. But I only found out that they were blocking the
>     commit-graph when I stepped through git gc in a debugger. This is my
>     attempt to make it more straight-forward to recover from similar
>     situations in the future.
>
> Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-875%2Fdscho%2Fwarn-if-commit-graph-is-skipped-v1
> Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-875/dscho/warn-if-commit-graph-is-skipped-v1
> Pull-Request: https://github.com/gitgitgadget/git/pull/875
>
>  commit-graph.c | 14 +++++++++++---
>  1 file changed, 11 insertions(+), 3 deletions(-)
>
> diff --git a/commit-graph.c b/commit-graph.c
> index 65410602714e..9ad176fa7c8e 100644
> --- a/commit-graph.c
> +++ b/commit-graph.c
> @@ -205,16 +205,24 @@ static int commit_graph_compatible(struct repository *r)
>  
>  	if (read_replace_refs) {
>  		prepare_replace_object(r);
> -		if (hashmap_get_size(&r->objects->replace_map->map))
> +		if (hashmap_get_size(&r->objects->replace_map->map)) {
> +			warning(_("repository contains replace objects; "
> +			       "skipping commit-graph"));
>  			return 0;
> +		}
>  	}
>  
>  	prepare_commit_graft(r);
>  	if (r->parsed_objects &&
> -	    (r->parsed_objects->grafts_nr || r->parsed_objects->substituted_parent))
> +	    (r->parsed_objects->grafts_nr || r->parsed_objects->substituted_parent)) {
> +		warning(_("repository contains (deprecated) grafts; "
> +		       "skipping commit-graph"));
>  		return 0;
> -	if (is_repository_shallow(r))
> +	}
> +	if (is_repository_shallow(r)) {
> +		warning(_("repository is shallow; skipping commit-graph"));
>  		return 0;
> +	}
>  
>  	return 1;
>  }
>
> base-commit: f9f2520108bab26a750bcbb00518dc27672cf0a2


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

end of thread, other threads:[~2021-02-25 14:08 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-02-11 15:39 [PATCH] commit-graph: when incompatible with graphs, indicate why Johannes Schindelin via GitGitGadget
2021-02-11 16:17 ` Derrick Stolee
2021-02-11 17:32   ` Junio C Hamano
2021-02-25 14:07 ` noisy "warning: repository contains (deprecated) grafts; skipping commit-graph" warnings Ævar Arnfjörð Bjarmason

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.