From: Junio C Hamano <gitster@pobox.com>
To: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Cc: "Shawn O. Pearce" <spearce@spearce.org>,
Bernt Hansen <bernt@alumni.uwaterloo.ca>,
git@vger.kernel.org
Subject: Re: [PATCH] Reallow git-rebase --interactive --continue if commit is unnecessary
Date: Wed, 26 Dec 2007 15:48:56 -0800 [thread overview]
Message-ID: <7vr6h9m2zb.fsf@gitster.siamese.dyndns.org> (raw)
In-Reply-To: <7vy7bppv3s.fsf@gitster.siamese.dyndns.org> (Junio C. Hamano's message of "Thu, 20 Dec 2007 01:35:03 -0800")
Junio C Hamano <gitster@pobox.com> writes:
> Will do, but the code looks quite bad (not entirely your fault).
>
> Line by line comment to show my puzzlement.
>
> # commit if necessary
>
> Ok, the user has prepared the index for us, and we are going to do some
> tests and conditionally create commit.
>
> git rev-parse --verify HEAD > /dev/null &&
>
> Do we have HEAD commit? Why check this --- we do not want to rebase
> from the beginning of time? No, that's not it. If this fails, there is
> something seriously wrong. This is not about "will we make a commit?"
> check at all. This is a basic sanity check and if it fails we must
> abort, not just skip.
>
> git update-index --refresh &&
> git diff-files --quiet &&
>
> Is the work tree clean with respect to the index? Why check this --- we
> want to skip the commit if work tree is dirty? Or is this trying to
> enforce the invariant that during the rebase the work tree and index and
> HEAD should all match? If the latter, failure from this again is a
> reason to abort.
>
> ! git diff-index --cached --quiet HEAD -- &&
>
> Do we have something to commit? This needs to be checked so that we can
> skip a commit that results in emptyness, so using this as a check to see
> if we should commit makes sense.
>
> . "$DOTEST"/author-script && {
> test ! -f "$DOTEST"/amend || git reset --soft HEAD^
> } &&
>
> Find GIT_AUTHOR_* variables and if we are amending rewind the HEAD. The
> failure from this is a grave problem and reason to abort, isn't it?
>
> export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL GIT_AUTHOR_DATE &&
> git commit --no-verify -F "$DOTEST"/message -e
>
> Then we go on to create commit. As you said, failure from this is a
> grave error.
Any response to this or problems in the clean-up patch?
> ---
> git-rebase--interactive.sh | 29 +++++++++++++++++++----------
> 1 files changed, 19 insertions(+), 10 deletions(-)
>
> diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
> index 090c3e5..7aa4278 100755
> --- a/git-rebase--interactive.sh
> +++ b/git-rebase--interactive.sh
> @@ -363,17 +363,26 @@ do
>
> test -d "$DOTEST" || die "No interactive rebase running"
>
> - # commit if necessary
> - git rev-parse --verify HEAD > /dev/null &&
> - git update-index --refresh &&
> - git diff-files --quiet &&
> - ! git diff-index --cached --quiet HEAD -- &&
> - . "$DOTEST"/author-script && {
> - test ! -f "$DOTEST"/amend || git reset --soft HEAD^
> - } &&
> - export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL GIT_AUTHOR_DATE &&
> - if ! git commit --no-verify -F "$DOTEST"/message -e
> + # Sanity check
> + git rev-parse --verify HEAD >/dev/null ||
> + die "Cannot read HEAD"
> + git update-index --refresh && git diff-files --quiet ||
> + die "Working tree is dirty"
> +
> + # do we have anything to commit?
> + if git diff-index --cached --quiet HEAD --
> then
> + : Nothing to commit -- skip this
> + else
> + . "$DOTEST"/author-script ||
> + die "Cannot find the author identity"
> + if test -f "$DOTEST"/amend
> + then
> + git reset --soft HEAD^ ||
> + die "Cannot rewind the HEAD"
> + fi
> + export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL GIT_AUTHOR_DATE &&
> + git commit --no-verify -F "$DOTEST"/message -e ||
> die "Could not commit staged changes."
> fi
>
next prev parent reply other threads:[~2007-12-26 23:49 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-12-20 0:35 git rebase -i / git-gui bug Bernt Hansen
2007-12-20 4:47 ` Bernt Hansen
2007-12-20 7:12 ` [PATCH] Reallow git-rebase --interactive --continue if commit is unnecessary Shawn O. Pearce
2007-12-20 7:15 ` Junio C Hamano
2007-12-20 7:31 ` Shawn O. Pearce
2007-12-20 9:35 ` Junio C Hamano
2007-12-26 23:48 ` Junio C Hamano [this message]
2007-12-29 13:26 ` Johannes Schindelin
2007-12-20 7:52 ` Matthieu Moy
2007-12-24 14:31 ` [PATCH] Force new line at end of commit message Bernt Hansen
2007-12-24 17:38 ` Johannes Schindelin
2007-12-25 4:42 ` Shawn O. Pearce
2007-12-25 9:34 ` Junio C Hamano
2007-12-26 17:47 ` Bernt Hansen
2007-12-27 4:19 ` Shawn O. Pearce
2007-12-28 2:15 ` [PATCH] git-gui: Make commit log messages end with a newline Bernt Hansen
2007-12-26 19:36 ` [PATCH] Force new line at end of commit message Junio C Hamano
2007-12-29 13:31 ` Johannes Schindelin
2007-12-30 0:19 ` Junio C Hamano
2007-12-30 10:26 ` Johannes Schindelin
2007-12-30 10:51 ` Junio C Hamano
2007-12-30 11:03 ` Johannes Schindelin
2007-12-30 11:45 ` Junio C Hamano
2007-12-30 11:57 ` しらいしななこ
2007-12-30 12:21 ` Junio C Hamano
2007-12-30 12:05 ` Junio C Hamano
2007-12-30 15:50 ` Johannes Schindelin
2007-12-25 4:46 ` Shawn O. Pearce
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7vr6h9m2zb.fsf@gitster.siamese.dyndns.org \
--to=gitster@pobox.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=bernt@alumni.uwaterloo.ca \
--cc=git@vger.kernel.org \
--cc=spearce@spearce.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).