From: Thomas Rast <trast@student.ethz.ch>
To: git@vger.kernel.org
Cc: Junio C Hamano <junio@pobox.com>, bss@iguanasuicide.net
Subject: [INTERDIFF v3 3/4] rebase -i: learn to rebase root commit
Date: Fri, 2 Jan 2009 23:41:39 +0100 [thread overview]
Message-ID: <200901022341.40667.trast@student.ethz.ch> (raw)
In-Reply-To: <43e09eaf2b9a9a3805b9262957ece32190ae4c32.1230935095.git.trast@student.ethz.ch>
This is the interdiff to v2. Some of the changes are noise from 1/4.
diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index d6f54eb..14d3e38 100755
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -238,7 +238,9 @@ pick_one_preserving_merges () {
if test -f "$DROPPED"/$p
then
fast_forward=f
- pend=" $(cat "$DROPPED"/$p)$pend"
+ replacement="$(cat "$DROPPED"/$p)"
+ test -z "$replacement" && replacement=root
+ pend=" $replacement$pend"
else
new_parents="$new_parents $p"
fi
@@ -569,7 +571,6 @@ first and then run 'git rebase --continue' again."
;;
--)
shift
- run_pre_rebase_hook ${1+"$@"}
test ! -z "$REBASE_ROOT" -o $# -eq 1 -o $# -eq 2 || usage
test -d "$DOTEST" &&
die "Interactive rebase already started"
@@ -577,19 +578,22 @@ first and then run 'git rebase --continue' again."
git var GIT_COMMITTER_IDENT >/dev/null ||
die "You need to set your committer info first"
- comment_for_reflog start
-
- require_clean_work_tree
-
if test -z "$REBASE_ROOT"
then
+ UPSTREAM_ARG="$1"
UPSTREAM=$(git rev-parse --verify "$1") || die "Invalid base"
test -z "$ONTO" && ONTO=$UPSTREAM
shift
else
+ UPSTREAM_ARG=--root
test -z "$ONTO" &&
die "You must specify --onto when using --root"
fi
+ run_pre_rebase_hook "$UPSTREAM_ARG" "$@"
+
+ comment_for_reflog start
+
+ require_clean_work_tree
if test ! -z "$1"
then
@@ -651,7 +655,7 @@ first and then run 'git rebase --continue' again."
REVISIONS=$UPSTREAM...$HEAD
SHORTREVISIONS=$SHORTUPSTREAM..$SHORTHEAD
else
- REVISIONS=$HEAD
+ REVISIONS=$ONTO...$HEAD
SHORTREVISIONS=$SHORTHEAD
fi
git rev-list $MERGES_OPTION --pretty=oneline --abbrev-commit \
@@ -710,6 +714,7 @@ first and then run 'git rebase --continue' again."
fi
done
fi
+
test -s "$TODO" || echo noop >> "$TODO"
cat >> "$TODO" << EOF
diff --git a/t/t3412-rebase-root.sh b/t/t3412-rebase-root.sh
index c845dfc..cbf3414 100755
--- a/t/t3412-rebase-root.sh
+++ b/t/t3412-rebase-root.sh
@@ -15,7 +15,9 @@ test_expect_success 'prepare repository' '
git commit -m 2 &&
git symbolic-ref HEAD refs/heads/other &&
rm .git/index &&
- rm A &&
+ echo 1 > A &&
+ git add A &&
+ git commit -m 1b &&
echo 3 > B &&
git add B &&
git commit -m 3 &&
@@ -28,6 +30,14 @@ test_expect_success 'rebase --root expects --onto' '
test_must_fail git rebase --root
'
+test_expect_success 'setup pre-rebase hook' '
+ mkdir -p .git/hooks &&
+ cat >.git/hooks/pre-rebase <<EOF &&
+#!$SHELL_PATH
+echo "\$1,\$2" >.git/PRE-REBASE-INPUT
+EOF
+ chmod +x .git/hooks/pre-rebase
+'
cat > expect <<EOF
4
3
@@ -42,6 +52,10 @@ test_expect_success 'rebase --root --onto <newbase>' '
test_cmp expect rebased
'
+test_expect_success 'pre-rebase got correct input (1)' '
+ test "z$(cat .git/PRE-REBASE-INPUT)" = z--root,
+'
+
test_expect_success 'rebase --root --onto <newbase> <branch>' '
git branch work2 other &&
git rebase --root --onto master work2 &&
@@ -49,6 +63,10 @@ test_expect_success 'rebase --root --onto <newbase> <branch>' '
test_cmp expect rebased2
'
+test_expect_success 'pre-rebase got correct input (2)' '
+ test "z$(cat .git/PRE-REBASE-INPUT)" = z--root,work2
+'
+
test_expect_success 'rebase -i --root --onto <newbase>' '
git checkout -b work3 other &&
GIT_EDITOR=: git rebase -i --root --onto master &&
@@ -56,6 +74,10 @@ test_expect_success 'rebase -i --root --onto <newbase>' '
test_cmp expect rebased3
'
+test_expect_success 'pre-rebase got correct input (3)' '
+ test "z$(cat .git/PRE-REBASE-INPUT)" = z--root,
+'
+
test_expect_success 'rebase -i --root --onto <newbase> <branch>' '
git branch work4 other &&
GIT_EDITOR=: git rebase -i --root --onto master work4 &&
@@ -63,6 +85,10 @@ test_expect_success 'rebase -i --root --onto <newbase> <branch>' '
test_cmp expect rebased4
'
+test_expect_success 'pre-rebase got correct input (4)' '
+ test "z$(cat .git/PRE-REBASE-INPUT)" = z--root,work4
+'
+
test_expect_success 'rebase -i -p with linear history' '
git checkout -b work5 other &&
GIT_EDITOR=: git rebase -i -p --root --onto master &&
@@ -70,6 +96,10 @@ test_expect_success 'rebase -i -p with linear history' '
test_cmp expect rebased5
'
+test_expect_success 'pre-rebase got correct input (5)' '
+ test "z$(cat .git/PRE-REBASE-INPUT)" = z--root,
+'
+
test_expect_success 'set up merge history' '
git checkout other^ &&
git checkout -b side &&
@@ -131,4 +161,27 @@ test_expect_success 'rebase -i -p with two roots' '
test_cmp expect-third rebased7
'
+test_expect_success 'setup pre-rebase hook that fails' '
+ mkdir -p .git/hooks &&
+ cat >.git/hooks/pre-rebase <<EOF &&
+#!$SHELL_PATH
+false
+EOF
+ chmod +x .git/hooks/pre-rebase
+'
+
+test_expect_success 'pre-rebase hook stops rebase' '
+ git checkout -b stops1 other &&
+ GIT_EDITOR=: test_must_fail git rebase --root --onto master &&
+ test "z$(git symbolic-ref HEAD)" = zrefs/heads/stops1
+ test 0 = $(git rev-list other...stops1 | wc -l)
+'
+
+test_expect_success 'pre-rebase hook stops rebase -i' '
+ git checkout -b stops2 other &&
+ GIT_EDITOR=: test_must_fail git rebase --root --onto master &&
+ test "z$(git symbolic-ref HEAD)" = zrefs/heads/stops2
+ test 0 = $(git rev-list other...stops2 | wc -l)
+'
+
test_done
--
Thomas Rast
trast@{inf,student}.ethz.ch
next prev parent reply other threads:[~2009-01-02 22:42 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-12-29 16:45 [PATCH 0/3] rebase --root Thomas Rast
[not found] ` <cover.1230569041.git.trast@student.ethz.ch>
2008-12-29 16:45 ` rebase: learn to rebase root commit Thomas Rast
2008-12-29 16:45 ` rebase -i: " Thomas Rast
2008-12-29 21:49 ` Thomas Rast
2008-12-29 22:21 ` Boyd Stephen Smith Jr.
2008-12-30 12:23 ` Thomas Rast
2008-12-30 12:29 ` [PATCH v2 1/3] rebase: " Thomas Rast
2008-12-30 12:29 ` [PATCH v2 2/3] rebase -i: " Thomas Rast
2008-12-30 12:29 ` [PATCH v2 3/3] rebase: update documentation for --root Thomas Rast
2009-01-01 21:00 ` [PATCH v2 1/3] rebase: learn to rebase root commit Junio C Hamano
2009-01-02 18:58 ` Johannes Schindelin
2009-01-02 22:20 ` Thomas Rast
2009-01-02 22:28 ` [PATCH v3 1/4] rebase -i: execute hook only after argument checking Thomas Rast
2009-01-02 22:28 ` [PATCH v3 2/4] rebase: learn to rebase root commit Thomas Rast
2009-01-02 22:41 ` [INTERDIFF " Thomas Rast
2009-01-02 23:06 ` [PATCH " Junio C Hamano
2009-01-02 23:45 ` [PATCH v3.1] " Thomas Rast
2009-01-05 17:35 ` [PATCH v3.2] " Thomas Rast
2009-01-06 8:19 ` Junio C Hamano
2009-01-02 22:28 ` [PATCH v3 3/4] rebase -i: " Thomas Rast
2009-01-02 22:41 ` Thomas Rast [this message]
2009-01-02 22:28 ` [PATCH v3 4/4] rebase: update documentation for --root Thomas Rast
2009-01-02 22:49 ` [PATCH v2 1/3] rebase: learn to rebase root commit Junio C Hamano
2009-01-02 22:54 ` Thomas Rast
2009-01-02 23:07 ` Junio C Hamano
2008-12-30 8:22 ` rebase -i: " Junio C Hamano
2008-12-29 16:45 ` rebase: update documentation for --root Thomas Rast
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=200901022341.40667.trast@student.ethz.ch \
--to=trast@student.ethz.ch \
--cc=bss@iguanasuicide.net \
--cc=git@vger.kernel.org \
--cc=junio@pobox.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.