Re: [PATCH 1/2] rebase -i: support --root without --onto

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Chris Webb <chris@xxxxxxxxxxxx> writes:

> +do_pick () {
> +	if test "$(git rev-parse HEAD)" = "$squash_onto"

The idea to create a sentinel root upfront and special case it here
is a good one.

> +	then

I am not quite sure what is going on in this "then" clause.

> +		git commit --allow-empty --allow-empty-message --amend \
> +			   --no-post-rewrite -n -q -C $1 &&

At this point, nobody touched the empty sentinel root yet; you
rewrite its log message and authorship using the picked commit.

> +			pick_one -n $1 &&

And then you create a new commit that records the update "$1" does
relative to its parent (this hopefully only contains additions -- is
it sensible to die-with-patch if it doesn't?), making sure that it
does not fast-forward.  Does this always make the result a root commit?
If "$1" has parents, wouldn't it become a child of the commits its
parents were rewritten to (if any) in pick_one_preserving_merges()
that is called from pick_one?

> +			git commit --allow-empty --allow-empty-message \
> +				   --amend --no-post-rewrite -n -q -C $1 ||

And then you rewrite the log and authorship of that one.

In short, my questions are:

 (1) what is the purpose of the first "commit --amend" to update the
     sentinel root commit?

 (2) Is the purpose of "pick_one -n" done here to create a root
     commit?  Does it always do so correctly?

> diff --git a/git-rebase.sh b/git-rebase.sh
> index e616737..bde2be8 100755
> --- a/git-rebase.sh
> +++ b/git-rebase.sh
> @@ -31,7 +31,7 @@ SUBDIRECTORY_OK=Yes
>  OPTIONS_KEEPDASHDASH=
>  OPTIONS_SPEC="\
>  git rebase [-i] [options] [--onto <newbase>] [<upstream>] [<branch>]
> -git rebase [-i] [options] --onto <newbase> --root [<branch>]
> +git rebase [-i] [options] [--onto <newbase>] --root [<branch>]
>  git-rebase [-i] --continue | --abort | --skip
>  --
>   Available options are
> @@ -364,6 +364,11 @@ and run me again.  I am stopping in case you still have something
>  valuable there.'
>  fi
>  
> +if test -n "$rebase_root" && test -z "$onto"
> +then
> +	test -z "$interactive_rebase" && interactive_rebase=implied
> +fi
> +

This makes "git rebase --root" without $onto imply "-i", which makes
sense, but it was a bit unexpected (it wasn't in the proposed log
message).
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]