From: Dominique Quatravaux <domq@google.com>
To: git@vger.kernel.org, Thomas Rast <trast@inf.ethz.ch>,
Johannes Sixt <j.sixt@viscovery.net>
Cc: Dominique Quatravaux <domq@google.com>
Subject: [PATCHv2 2/2] rebase -i: new option --name-rev
Date: Thu, 8 Mar 2012 14:52:57 +0100 [thread overview]
Message-ID: <1331214777-9455-2-git-send-email-domq@google.com> (raw)
In-Reply-To: <1331214777-9455-1-git-send-email-domq@google.com>
If set, the second column of the rebase todo contains named revisions (obtained
with git name-rev) instead of short SHA1s.
---
Documentation/git-rebase.txt | 7 +++++++
git-rebase--interactive.sh | 10 ++++++++--
git-rebase.sh | 10 ++++++++++
t/t3404-rebase-interactive.sh | 10 ++++++++++
t/t3415-rebase-autosquash.sh | 24 ++++++++++++++++++++++++
5 files changed, 59 insertions(+), 2 deletions(-)
diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt
index 504945c..da2aca7 100644
--- a/Documentation/git-rebase.txt
+++ b/Documentation/git-rebase.txt
@@ -365,6 +365,13 @@ If the '--autosquash' option is enabled by default using the
configuration variable `rebase.autosquash`, this option can be
used to override and disable this setting.
+--name-rev::
+ Instead of showing short SHA1 hashes in the todo list, show
+ human-readable revisions obtained with linkgit:git-name-rev[1].
++
+This option is only valid when the '--interactive' option is used. It can also
+be set through the `rebase.interactiveNameRev` configuration variable.
+
--no-ff::
With --interactive, cherry-pick all rebased commits instead of
fast-forwarding over the unchanged ones. This ensures that the
diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index e408e94..c597b6b 100644
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -780,9 +780,15 @@ git rev-list $merges_option --format="%m%H %h %s" --abbrev-commit \
sed -n "s/^>//p" |
while read -r sha1 shortsha1 rest
do
+ if test t = "$name_rev"
+ then
+ rev="$(git name-rev $sha1 | cut -d\ -f2)"
+ else
+ rev="$shortsha1"
+ fi
if test t != "$preserve_merges"
then
- printf '%s\n' "pick $shortsha1 $rest" >> "$todo"
+ printf '%s\n' "pick $rev $rest" >> "$todo"
else
if test -z "$rebase_root"
then
@@ -800,7 +806,7 @@ do
if test f = "$preserve"
then
touch "$rewritten"/$sha1
- printf '%s\n' "pick $shortsha1 $rest" >> "$todo"
+ printf '%s\n' "pick $rev $rest" >> "$todo"
fi
fi
done
diff --git a/git-rebase.sh b/git-rebase.sh
index 69c1374..9330be3 100755
--- a/git-rebase.sh
+++ b/git-rebase.sh
@@ -43,6 +43,8 @@ s,strategy=! use the given merge strategy
no-ff! cherry-pick all commits, even if unchanged
m,merge! use merging strategies to rebase
i,interactive! let the user edit the list of commits to rebase
+name-rev show revisions by name in the list of commits
+no-name-rev show revisions by short SHA1 in the list (default)
f,force-rebase! force rebase even if branch is up to date
X,strategy-option=! pass the argument through to the merge strategy
stat! display a diffstat of what changed upstream
@@ -98,6 +100,8 @@ action=
preserve_merges=
autosquash=
test "$(git config --bool rebase.autosquash)" = "true" && autosquash=t
+name_rev=
+test "$(git config --bool rebase.interactivenamerev)" = "true" && name_rev=t
read_basic_state () {
head_name=$(cat "$state_dir"/head-name) &&
@@ -287,6 +291,12 @@ do
-f|--no-ff)
force_rebase=t
;;
+ --name-rev)
+ name_rev=t
+ ;;
+ --no-name-rev)
+ name_rev=
+ ;;
--rerere-autoupdate|--no-rerere-autoupdate)
allow_rerere_autoupdate="$1"
;;
diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh
index b981572..f3b4214 100755
--- a/t/t3404-rebase-interactive.sh
+++ b/t/t3404-rebase-interactive.sh
@@ -163,6 +163,16 @@ test_expect_success 'exchange two commits' '
test G = $(git cat-file commit HEAD | sed -ne \$p)
'
+cat > expect-rebase-todo <<EOF
+pick branch1~1 H
+pick branch1 G
+EOF
+
+test_expect_success 'Symbolic revisions in --name-rev' '
+ FAKE_LINES="exec_cp_.git/rebase-merge/git-rebase-todo_rebase-todo 1 2" git rebase -i --name-rev HEAD~2 &&
+ test_cmp expect-rebase-todo rebase-todo
+'
+
cat > expect << EOF
diff --git a/file1 b/file1
index f70f10e..fd79235 100644
diff --git a/t/t3415-rebase-autosquash.sh b/t/t3415-rebase-autosquash.sh
index b38be8e..3062e24 100755
--- a/t/t3415-rebase-autosquash.sh
+++ b/t/t3415-rebase-autosquash.sh
@@ -169,6 +169,30 @@ test_expect_success 'auto squash that matches longer sha1' '
test 1 = $(git cat-file commit HEAD^ | grep squash | wc -l)
'
+test_expect_success 'auto fixup with --name-rev' '
+ git reset --hard base &&
+ echo 2 >file1 &&
+ git add -u &&
+ test_tick &&
+ git commit -m "changing file1" &&
+ echo 4 >file2 &&
+ git add -u &&
+ test_tick &&
+ git commit -m "changing file2" &&
+ echo 1 >file1 &&
+ git add -u &&
+ test_tick &&
+ git commit -m "fixup! changing file1" &&
+ git tag final-fixup-name-rev &&
+ test_tick &&
+ git rebase -i --autosquash --name-rev HEAD^^^ &&
+ git log --oneline base..HEAD >actual &&
+ test 2 = $(wc -l <actual) &&
+ git diff --exit-code final-fixup-name-rev &&
+ test 2 = "$(git cat-file blob HEAD^:file2)" &&
+ test 1 = $(git cat-file commit HEAD^ | grep changing | wc -l)
+'
+
test_auto_commit_flags () {
git reset --hard base &&
echo 1 >file1 &&
--
1.7.7.3
next prev parent reply other threads:[~2012-03-08 14:01 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-08 13:52 [PATCHv2 1/2] rebase -i: optimize the creation of the todo file Dominique Quatravaux
2012-03-08 13:52 ` Dominique Quatravaux [this message]
2012-03-09 5:00 ` David Barr
2012-03-09 9:18 ` Dominique Quatravaux
2012-03-09 9:21 ` Dominique Quatravaux
2012-03-09 9:47 ` Junio C Hamano
2012-03-09 9:52 ` Dominique Quatravaux
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
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1331214777-9455-2-git-send-email-domq@google.com \
--to=domq@google.com \
--cc=git@vger.kernel.org \
--cc=j.sixt@viscovery.net \
--cc=trast@inf.ethz.ch \
/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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
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 read-only IMAP folder(s) and NNTP newsgroup(s).