threads / discuss / 42605

compactionHeuristic=true is not used by interactive staging

Subject: compactionHeuristic=true is not used by interactive staging

## tl;dr

7 messages between Jun 16, 2016 and Jun 16, 2016.

replies: 6people: 4as markdown or json

Alex Prengère· Jun 14, 2016, 14:22 UTC · lore

Hello, I just did a fresh clone of git from Github and installed the version 2.9.0 on Fedora 22.

I tried the new compactionHeuristic = true, which is awesome. The only thing that struck me was that this option was not used when doing an interactive staging, meaning `git diff` and `git add -p` will format patches differently. Perhaps this is intended and there is a way to force interactive staging to use specific diff options, but I did not find it in the doc.

Thanks, Alex

Jeff King· Jun 14, 2016, 21:42 UTC · re: Alex Prengère · lore

Re: compactionHeuristic=true is not used by interactive staging

On Tue, Jun 14, 2016 at 04:22:54PM +0200, Alex Prengère wrote:
Show 10 quoted lines
> Hello,
> I just did a fresh clone of git from Github and installed the version
> 2.9.0 on Fedora 22.
> 
> I tried the new compactionHeuristic = true, which is awesome.
> The only thing that struck me was that this option was not used when
> doing an interactive staging, meaning `git diff` and `git add -p` will
> format patches differently. Perhaps this is intended and there is a
> way to force interactive staging to use specific diff options, but I
> did not find it in the doc.

That's because it's handled in the "UI config", and plumbing commands are not affected (and "add -p" is built on plumbing commands). The same is true of diff.algorithm, for instance.

To make this work, add--interactive would have to manually enable particular options that it thinks it can handle (and in fact this is done with diff.algorithm already). So we'd need a patch similar to 2cc0f53 (add--interactive: respect diff.algorithm, 2013-06-12).

Nobody noticed so far because originally the compaction heuristic was on by default, and so just worked everywhere. But we backed off on that at the last minute after finding a few cases where the diff looks worse.

-Peff
Junio C Hamano· Jun 14, 2016, 21:45 UTC · re: Jeff King · lore

Re: compactionHeuristic=true is not used by interactive staging

Jeff King <peff@peff.net> writes:
> Nobody noticed so far because originally the compaction heuristic was on
> by default, and so just worked everywhere. But we backed off on that at
> the last minute after finding a few cases where the diff looks worse.

Yup, and that is why this is called "experimental" in the release notes ;-)

Alex Prengère· Jun 15, 2016, 06:24 UTC · re: Junio C Hamano · lore

Re: compactionHeuristic=true is not used by interactive staging

I see, it makes sense ;-) Indeed it would seem logical to have all commands showing diffs (diff, add -p, log -p, reset -p, etc..) respect the diff options.

Thanks for your quick answer!
2016-06-14 23:45 GMT+02:00 Junio C Hamano <gitster@pobox.com>:
Show 8 quoted lines
> Jeff King <peff@peff.net> writes:
>
>> Nobody noticed so far because originally the compaction heuristic was on
>> by default, and so just worked everywhere. But we backed off on that at
>> the last minute after finding a few cases where the diff looks worse.
>
> Yup, and that is why this is called "experimental" in the release
> notes ;-)
Jeff King· Jun 16, 2016, 12:27 UTC · re: Alex Prengère · lore

[PATCH] add--interactive: respect diff.compactionHeuristic

On Wed, Jun 15, 2016 at 08:24:47AM +0200, Alex Prengère wrote:
> I see, it makes sense ;-) Indeed it would seem logical to have all
> commands showing diffs (diff, add -p, log -p, reset -p, etc..) respect
> the diff options.
Here's a patch to do so, similar to what we do for diff.algorithm.
-- >8 --
Subject: add--interactive: respect diff.compactionHeuristic

We use plumbing to generate the diff, so it doesn't automatically pick up UI config like compactionHeuristic. Let's forward it on, since interactive adding is porcelain.

Note that we only need to handle the "true" case. There's no point in passing --no-compaction-heuristic when the variable is false, since nothing else could have turned it on.

Signed-off-by: Jeff King <peff@peff.net>
---
 git-add--interactive.perl | 4 ++++
 1 file changed, 4 insertions(+)
diff --git a/git-add--interactive.perl b/git-add--interactive.perl
index 822f857..642cce1 100755
--- a/git-add--interactive.perl
+++ b/git-add--interactive.perl
@@ -45,6 +45,7 @@ my ($diff_new_color) =
 my $normal_color = $repo->get_color("", "reset");
 
 my $diff_algorithm = $repo->config('diff.algorithm');
+my $diff_compaction_heuristic = $repo->config_bool('diff.compactionheuristic');
 my $diff_filter = $repo->config('interactive.difffilter');
 
 my $use_readkey = 0;
@@ -749,6 +750,9 @@ sub parse_diff {
 	if (defined $diff_algorithm) {
 		splice @diff_cmd, 1, 0, "--diff-algorithm=${diff_algorithm}";
 	}
+	if ($diff_compaction_heuristic) {
+		splice @diff_cmd, 1, 0, "--compaction-heuristic";
+	}
 	if (defined $patch_mode_revision) {
 		push @diff_cmd, get_diff_reference($patch_mode_revision);
 	}
-- 
2.9.0.160.g4984cba
Stefan Beller· Jun 16, 2016, 16:50 UTC · re: Jeff King · lore

Re: [PATCH] add--interactive: respect diff.compactionHeuristic

On Thu, Jun 16, 2016 at 5:27 AM, Jeff King <peff@peff.net> wrote:
Show 18 quoted lines
> On Wed, Jun 15, 2016 at 08:24:47AM +0200, Alex Prengère wrote:
>
>> I see, it makes sense ;-) Indeed it would seem logical to have all
>> commands showing diffs (diff, add -p, log -p, reset -p, etc..) respect
>> the diff options.
>
> Here's a patch to do so, similar to what we do for diff.algorithm.
>
> -- >8 --
> Subject: add--interactive: respect diff.compactionHeuristic
>
> We use plumbing to generate the diff, so it doesn't
> automatically pick up UI config like compactionHeuristic.
> Let's forward it on, since interactive adding is porcelain.
>
> Note that we only need to handle the "true" case. There's no
> point in passing --no-compaction-heuristic when the variable
> is false, since nothing else could have turned it on.

because we don't want to implement --[no-]compaction-heuristic as a command line switch to git-add? Fine with me.

Stepping back and looking how the compaction heuristic turned out, I think this is what we did not want to see, i.e. the need to bring it in every command, but rather enable and release it. But we backed off of the default-on, and now people may ask for the --no-compaction-heuristic in interactive add eventually, when they run into a corner case.

For now:
Reviewed-by: Stefan Beller <sbeller@google.com>

Thanks, Stefan

Show 35 quoted lines
>
> Signed-off-by: Jeff King <peff@peff.net>
> ---
>  git-add--interactive.perl | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/git-add--interactive.perl b/git-add--interactive.perl
> index 822f857..642cce1 100755
> --- a/git-add--interactive.perl
> +++ b/git-add--interactive.perl
> @@ -45,6 +45,7 @@ my ($diff_new_color) =
>  my $normal_color = $repo->get_color("", "reset");
>
>  my $diff_algorithm = $repo->config('diff.algorithm');
> +my $diff_compaction_heuristic = $repo->config_bool('diff.compactionheuristic');
>  my $diff_filter = $repo->config('interactive.difffilter');
>
>  my $use_readkey = 0;
> @@ -749,6 +750,9 @@ sub parse_diff {
>         if (defined $diff_algorithm) {
>                 splice @diff_cmd, 1, 0, "--diff-algorithm=${diff_algorithm}";
>         }
> +       if ($diff_compaction_heuristic) {
> +               splice @diff_cmd, 1, 0, "--compaction-heuristic";
> +       }
>         if (defined $patch_mode_revision) {
>                 push @diff_cmd, get_diff_reference($patch_mode_revision);
>         }
> --
> 2.9.0.160.g4984cba
>
> --
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jeff King· Jun 16, 2016, 23:40 UTC · re: Stefan Beller · lore

Re: [PATCH] add--interactive: respect diff.compactionHeuristic

On Thu, Jun 16, 2016 at 09:50:45AM -0700, Stefan Beller wrote:
Show 14 quoted lines
> > -- >8 --
> > Subject: add--interactive: respect diff.compactionHeuristic
> >
> > We use plumbing to generate the diff, so it doesn't
> > automatically pick up UI config like compactionHeuristic.
> > Let's forward it on, since interactive adding is porcelain.
> >
> > Note that we only need to handle the "true" case. There's no
> > point in passing --no-compaction-heuristic when the variable
> > is false, since nothing else could have turned it on.
> 
> because we don't want to implement --[no-]compaction-heuristic
> as a command line switch to git-add?
> Fine with me.

We could, but I don't think it is worth the effort (and anyway, it would override the config :) ).

Show 5 quoted lines
> Stepping back and looking how the compaction heuristic turned out,
> I think this is what we did not want to see, i.e. the need to bring it in
> every command, but rather enable and release it. But we backed off
> of the default-on, and now people may ask for the  --no-compaction-heuristic
> in interactive add eventually, when they run into a corner case.

Yeah, I'm not excited to be plumbing it through, especially if we just end up flipping it on by default. But perhaps people would still want to be able to do the opposite (turning it off for a specific case via the config). I dunno.

> For now:
> Reviewed-by: Stefan Beller <sbeller@google.com>
Thanks.
-Peff

← back to recent threads