From: Thomas Rast <trast@student.ethz.ch>
To: Jon Seymour <jon.seymour@gmail.com>
Cc: Git Mailing List <git@vger.kernel.org>
Subject: Re: working out where git-rebase is up to?
Date: Mon, 22 Feb 2010 11:49:32 +0100 [thread overview]
Message-ID: <201002221149.32504.trast@student.ethz.ch> (raw)
In-Reply-To: <201002221126.47372.trast@student.ethz.ch>
On Monday 22 February 2010 11:26:47 Thomas Rast wrote:
> On Monday 22 February 2010 11:09:18 Jon Seymour wrote:
> > For my funky "compensating rebases" I need to know where an automated
> > rebase has stopped. In particular, I need to know the sha1 of the
> > commit that caused the rebase to stop.
> >
> > No doubt rebase is tracking this info, but is there a supported way to
> > discover it?
>
> It's in .git/rebase-merge/done (and .git/rebase-merge/git-rebase-todo
> for the remaining TODO file). Maybe we should add a 'git rebase
> --whydiditstop' command ;-)
Here's a lightly tested draft patch. I should stop stealing work time
for this, but you're welcome to fill in docs and tests and submit it.
diff --git i/git-rebase--interactive.sh w/git-rebase--interactive.sh
index 415ae72..d34c057 100755
--- i/git-rebase--interactive.sh
+++ w/git-rebase--interactive.sh
@@ -13,7 +13,7 @@
OPTIONS_KEEPDASHDASH=
OPTIONS_SPEC="\
git-rebase [-i] [options] [--] <upstream> [<branch>]
-git-rebase [-i] (--continue | --abort | --skip)
+git-rebase [-i] (--continue | --abort | --skip | --status)
--
Available options are
v,verbose display a diffstat of what changed upstream
@@ -26,6 +26,7 @@ i,interactive always used (no-op)
continue continue rebasing process
abort abort rebasing process and restore original branch
skip skip current patch and continue rebasing process
+status show where the rebasing process stopped
no-verify override pre-rebase hook from stopping the operation
root rebase all reachable commmits up to the root(s)
autosquash move commits that begin with squash!/fixup! under -i
@@ -103,6 +104,10 @@ AMEND="$DOTEST"/amend
REWRITTEN_LIST="$DOTEST"/rewritten-list
REWRITTEN_PENDING="$DOTEST"/rewritten-pending
+# This file holds the status message that we showed to the user when
+# stopping, so that it can be retrieved by 'git rebase --status'.
+STATUS="$DOTEST"/status
+
PRESERVE_MERGES=
STRATEGY=
ONTO=
@@ -204,11 +209,16 @@ make_patch () {
get_author_ident_from_commit "$1" > "$AUTHOR_SCRIPT"
}
+status_message () {
+ cat >> "$STATUS"
+ "$1" "$(cat "$STATUS")"
+}
+
die_with_patch () {
echo "$1" > "$DOTEST"/stopped-sha
make_patch "$1"
git rerere
- die "$2"
+ status_message die "$2"
}
die_abort () {
@@ -429,8 +439,10 @@ die_failed_squash() {
mv "$SQUASH_MSG" "$MSG" || exit
rm -f "$FIXUP_MSG"
cp "$MSG" "$GIT_DIR"/MERGE_MSG || exit
- warn
- warn "Could not apply $1... $2"
+ status_message warn <<EOF
+
+Could not apply $1... $2
+EOF
die_with_patch $1 ""
}
@@ -455,7 +467,7 @@ record_in_rewritten() {
}
do_next () {
- rm -f "$MSG" "$AUTHOR_SCRIPT" "$AMEND" || exit
+ rm -f "$MSG" "$AUTHOR_SCRIPT" "$AMEND" "$STATUS" || exit
read command sha1 rest < "$TODO"
case "$command" in
'#'*|''|noop)
@@ -487,15 +499,17 @@ do_next () {
echo "$1" > "$DOTEST"/stopped-sha
make_patch $sha1
git rev-parse --verify HEAD > "$AMEND"
- warn "Stopped at $sha1... $rest"
- warn "You can amend the commit now, with"
- warn
- warn " git commit --amend"
- warn
- warn "Once you are satisfied with your changes, run"
- warn
- warn " git rebase --continue"
- warn
+ status_message warn <<EOF
+Stopped at $sha1... $rest
+You can amend the commit now, with
+
+ git commit --amend
+
+Once you are satisfied with your changes, run
+
+ git rebase --continue
+
+EOF
exit 0
;;
squash|s|fixup|f)
@@ -767,6 +781,24 @@ first and then run 'git rebase --continue' again."
output git reset --hard && do_rest
;;
+ --status)
+ is_standalone "$@" || usage
+ warn "Your rebase stopped at the following action:"
+ warn
+ warn " $(tail -1 "$DOTEST"/done)"
+ warn
+ next="$(sed -n -e "/^#/d" -e '/^$/d' -e "/ /p" -e "q" < "$TODO")"
+ if test -n "$next"; then
+ warn "The next action will be:"
+ warn
+ warn " $next"
+ else
+ warn "There are no more actions left after this one."
+ fi
+ warn
+ cat "$STATUS" >&2
+ exit
+ ;;
-s)
case "$#,$1" in
*,*=*)
--
Thomas Rast
trast@{inf,student}.ethz.ch
next prev parent reply other threads:[~2010-02-22 10:49 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-02-22 10:09 working out where git-rebase is up to? Jon Seymour
2010-02-22 10:19 ` Marc Weber
2010-02-22 10:26 ` Thomas Rast
2010-02-22 10:47 ` Jon Seymour
2010-02-22 10:49 ` Thomas Rast [this message]
2010-02-22 10:51 ` Jon Seymour
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=201002221149.32504.trast@student.ethz.ch \
--to=trast@student.ethz.ch \
--cc=git@vger.kernel.org \
--cc=jon.seymour@gmail.com \
/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 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.