git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* merge ignores --no-commit in fast-forward case
@ 2009-09-13  6:40 Tomas Carnecky
  2009-09-13  7:30 ` Junio C Hamano
  0 siblings, 1 reply; 6+ messages in thread
From: Tomas Carnecky @ 2009-09-13  6:40 UTC (permalink / raw)
  To: git mailing list

Bug or feature?

Three possible solutions that I see:

  2) Refuse to do anything if user gives --no-commit and merge is fast- 
forward
  3) Document this behavior in the manpage
  4) Quietly set deny_non_fast_forward when --no-commit was given

A fourth solution would be to not change anything, but users usually  
have a reason for using --no-commit, and if git commits behind their  
backs anyway that's just not nice.

tom

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

* Re: merge ignores --no-commit in fast-forward case
  2009-09-13  6:40 merge ignores --no-commit in fast-forward case Tomas Carnecky
@ 2009-09-13  7:30 ` Junio C Hamano
  2009-09-18 19:47   ` Greg Price
  2009-09-19  8:09   ` Björn Steinbrink
  0 siblings, 2 replies; 6+ messages in thread
From: Junio C Hamano @ 2009-09-13  7:30 UTC (permalink / raw)
  To: Tomas Carnecky; +Cc: git mailing list

Tomas Carnecky <tom@dbservice.com> writes:

> Bug or feature?

Feature, perhaps a misleading one.  As a fast-forward merge does not _create_
a commit, and --no-commit is about not creating a commit, it is logically
consistent.  But it is not useful nor intuitive to be logically consistent
in this case.

> Three possible solutions that I see:
>
>  2) Refuse to do anything if user gives --no-commit and merge is fast- 
> forward
>  3) Document this behavior in the manpage
>  4) Quietly set deny_non_fast_forward when --no-commit was given

Heh, this is new.  People laugh at me when I number my bullets starting
from zero, like all good computer scientists do ;-)

Seriously, we should at least do #3, and as a backward incompatible change
at least _consider_ doing #2 (I think #4 is merely an implementation detail
of #2), and if list reaches concensus in favor of such a change, come up
with a transition plan and do so in the 1.7.0 release.

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

* Re: merge ignores --no-commit in fast-forward case
  2009-09-13  7:30 ` Junio C Hamano
@ 2009-09-18 19:47   ` Greg Price
  2009-09-18 23:05     ` Junio C Hamano
  2009-09-19  8:09   ` Björn Steinbrink
  1 sibling, 1 reply; 6+ messages in thread
From: Greg Price @ 2009-09-18 19:47 UTC (permalink / raw)
  Cc: git

I've hit this issue in scripts where someone has written

  if ! git merge some-branch --no-commit; then
    # deal or have the user deal
  fi

  git commit -m '...'

intending that if the merge succeeds it has left the changes from
some-branch uncommitted.  And the script works, until for some reason
some-branch is on top of HEAD.  So Tomas is not the only person who
was surprised or confused by the present behavior. =)

In this case the workaround is to add --no-ff to the command, which is
effectively what the proposed change would do automatically.

Suppose we were to make such a change in 1.7.0 or a later version.
What would the transition plan need to accomplish?  For instance,
we could print a warning every time 'merge --no-commit' does a
fast-forward, and make the change in a later version -- might that suffice?

Cheers,
Greg


PS - Here's one version of a documentation patch for #3.

>From 83282bbbd0c918016e71e4ff6fd8a823315fed0e Mon Sep 17 00:00:00 2001
From: Greg Price <price@ksplice.com>
Date: Fri, 18 Sep 2009 15:34:19 -0400
Subject: [PATCH] Document behavior of --no-commit on fast forward.

This behavior can be surprising, so document it.

Signed-off-by: Greg Price <price@ksplice.com>
---
 Documentation/merge-options.txt |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/Documentation/merge-options.txt
b/Documentation/merge-options.txt
index adadf8e..6015e5d 100644
--- a/Documentation/merge-options.txt
+++ b/Documentation/merge-options.txt
@@ -31,7 +31,10 @@
 --no-commit::
        Perform the merge but pretend the merge failed and do
        not autocommit, to give the user a chance to inspect and
-       further tweak the merge result before committing.
+       further tweak the merge result before committing.  If the
+       merge resolved as a fast-forward, the branch pointer will
+       be updated as usual; --no-ff can be combined with this
+       option to always preserve the branch pointer.
 
 --commit::
        Perform the merge and commit the result. This option can
-- 
1.6.3.1.499.ge7b8da

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

* Re: merge ignores --no-commit in fast-forward case
  2009-09-18 19:47   ` Greg Price
@ 2009-09-18 23:05     ` Junio C Hamano
  2009-09-20 14:04       ` Paolo Bonzini
  0 siblings, 1 reply; 6+ messages in thread
From: Junio C Hamano @ 2009-09-18 23:05 UTC (permalink / raw)
  To: Greg Price; +Cc: git

Greg Price <price@ksplice.com> writes:

> Suppose we were to make such a change in 1.7.0 or a later version.
> What would the transition plan need to accomplish?  For instance,
> we could print a warning every time 'merge --no-commit' does a
> fast-forward, and make the change in a later version -- might that
> suffice?

I guess so, but right now I don't want to (nor have bandwidth to) think
about things beyond the release we are currently in pre-release freeze
for.  Helps from other people's braincells are very welcome.

> From: Greg Price <price@ksplice.com>
> Date: Fri, 18 Sep 2009 15:34:19 -0400
> Subject: [PATCH] Document behavior of --no-commit on fast forward.
>
> This behavior can be surprising, so document it.

If "surprising" is the problem (and it certainly is), perhaps it would be
better to rewrite it not to be so surprising, like:

        --no-commit::
                Do not create a new commit.  If your current branch
                fast-forwards to the branch you are merging, this option
                has no effect (use --no-ff for that).  Otherwise, a merge
                is done and the index and the work tree files are updated,
                but the command stops before creating a new commit that
                records the result, in order to give the user a chance to
                inspect and tweak the merge result before committing.

I dunno.

> Signed-off-by: Greg Price <price@ksplice.com>
> ---
>  Documentation/merge-options.txt |    5 ++++-
>  1 files changed, 4 insertions(+), 1 deletions(-)
>
> diff --git a/Documentation/merge-options.txt
> b/Documentation/merge-options.txt
> index adadf8e..6015e5d 100644
> --- a/Documentation/merge-options.txt
> +++ b/Documentation/merge-options.txt
> @@ -31,7 +31,10 @@
>  --no-commit::
>         Perform the merge but pretend the merge failed and do
>         not autocommit, to give the user a chance to inspect and
> -       further tweak the merge result before committing.
> +       further tweak the merge result before committing.  If the
> +       merge resolved as a fast-forward, the branch pointer will
> +       be updated as usual; --no-ff can be combined with this
> +       option to always preserve the branch pointer.

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

* Re: merge ignores --no-commit in fast-forward case
  2009-09-13  7:30 ` Junio C Hamano
  2009-09-18 19:47   ` Greg Price
@ 2009-09-19  8:09   ` Björn Steinbrink
  1 sibling, 0 replies; 6+ messages in thread
From: Björn Steinbrink @ 2009-09-19  8:09 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Tomas Carnecky, git mailing list

On 2009.09.13 00:30:49 -0700, Junio C Hamano wrote:
> Tomas Carnecky <tom@dbservice.com> writes:
> > Three possible solutions that I see:
> >
> >  2) Refuse to do anything if user gives --no-commit and merge is fast- 
> > forward
> >  3) Document this behavior in the manpage
> >  4) Quietly set deny_non_fast_forward when --no-commit was given
> 
> Heh, this is new.  People laugh at me when I number my bullets starting
> from zero, like all good computer scientists do ;-)
> 
> Seriously, we should at least do #3, and as a backward incompatible change
> at least _consider_ doing #2 (I think #4 is merely an implementation detail
> of #2), and if list reaches concensus in favor of such a change, come up
> with a transition plan and do so in the 1.7.0 release.

Hm, I always treated --no-commit as a way of saying: I think this merge
might cause semantic problems, please let me fix those directly, instead
of having to deal with 'commit --amend' and 'diff HEAD^ HEAD'.

Obviously, in case of a fast-forward such semantic problems aren't to be
expected, and I've just been wrong in my expectations. And then I'm
happy with the fast-forward. I'd _not_ be happy if a merge commit would
be forced (that's what #4 was about, right? deny_non_fast_forward only
appears in builtin-receive-pack.c, so I guess allow_fast_forward=0
was meant...).

#2 would be ok with me, I guess. I expected the wrong thing from the
merge, so git may complain, though it means more typing ;-)

Björn

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

* Re: merge ignores --no-commit in fast-forward case
  2009-09-18 23:05     ` Junio C Hamano
@ 2009-09-20 14:04       ` Paolo Bonzini
  0 siblings, 0 replies; 6+ messages in thread
From: Paolo Bonzini @ 2009-09-20 14:04 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Greg Price, git

On 09/19/2009 01:05 AM, Junio C Hamano wrote:
> If "surprising" is the problem (and it certainly is), perhaps it would be
> better to rewrite it not to be so surprising, like:
>
>          --no-commit::
>                  Do not create a new commit.

Do not create a new _merge_ commit, and it's perfect.

Paolo

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

end of thread, other threads:[~2009-09-20 14:04 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-09-13  6:40 merge ignores --no-commit in fast-forward case Tomas Carnecky
2009-09-13  7:30 ` Junio C Hamano
2009-09-18 19:47   ` Greg Price
2009-09-18 23:05     ` Junio C Hamano
2009-09-20 14:04       ` Paolo Bonzini
2009-09-19  8:09   ` Björn Steinbrink

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).