git-add: introduce --edit (to edit the diff vs. the index)
With "git add -e [<files>]", Git will fire up an editor with the current diff relative to the index (i.e. what you would get with "git diff [<files>]"). Now you can edit the patch as much as you like, including adding/removing lines, editing the text, whatever. Make sure, though, that the first character of the hunk lines is still a space, a plus or a minus. After you closed the editor, Git will adjust the line counts of the hunks if necessary, thanks to the --recount option of apply, and commit the patch. Except if you deleted everything, in which case nothing happens (for obvious reasons). Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
ee7ec2f9de
commit
c59cb03a8b
109
t/t3702-add-edit.sh
Executable file
109
t/t3702-add-edit.sh
Executable file
@ -0,0 +1,109 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2007 Johannes E. Schindelin
|
||||
#
|
||||
|
||||
test_description='add -e basic tests'
|
||||
. ./test-lib.sh
|
||||
|
||||
|
||||
cat > file << EOF
|
||||
LO, praise of the prowess of people-kings
|
||||
of spear-armed Danes, in days long sped,
|
||||
we have heard, and what honor the athelings won!
|
||||
Oft Scyld the Scefing from squadroned foes,
|
||||
from many a tribe, the mead-bench tore,
|
||||
awing the earls. Since erst he lay
|
||||
friendless, a foundling, fate repaid him:
|
||||
for he waxed under welkin, in wealth he throve,
|
||||
till before him the folk, both far and near,
|
||||
who house by the whale-path, heard his mandate,
|
||||
gave him gifts: a good king he!
|
||||
EOF
|
||||
|
||||
test_expect_success 'setup' '
|
||||
|
||||
git add file &&
|
||||
test_tick &&
|
||||
git commit -m initial file
|
||||
|
||||
'
|
||||
|
||||
cat > expected-patch << EOF
|
||||
diff --git a/file b/file
|
||||
index b9834b5..0b8f197 100644
|
||||
--- a/file
|
||||
+++ b/file
|
||||
@@ -1,11 +1,3 @@
|
||||
-LO, praise of the prowess of people-kings
|
||||
-of spear-armed Danes, in days long sped,
|
||||
-we have heard, and what honor the athelings won!
|
||||
-Oft Scyld the Scefing from squadroned foes,
|
||||
-from many a tribe, the mead-bench tore,
|
||||
-awing the earls. Since erst he lay
|
||||
-friendless, a foundling, fate repaid him:
|
||||
-for he waxed under welkin, in wealth he throve,
|
||||
-till before him the folk, both far and near,
|
||||
-who house by the whale-path, heard his mandate,
|
||||
-gave him gifts: a good king he!
|
||||
+#!$SHELL_PATH
|
||||
+mv -f "\$1" orig-patch &&
|
||||
+mv -f patch "\$1"
|
||||
EOF
|
||||
|
||||
cat > patch << EOF
|
||||
diff --git a/file b/file
|
||||
index b9834b5..ef6e94c 100644
|
||||
--- a/file
|
||||
+++ b/file
|
||||
@@ -3,1 +3,333 @@ of spear-armed Danes, in days long sped,
|
||||
we have heard, and what honor the athelings won!
|
||||
+
|
||||
Oft Scyld the Scefing from squadroned foes,
|
||||
@@ -2,7 +1,5 @@ awing the earls. Since erst he lay
|
||||
friendless, a foundling, fate repaid him:
|
||||
+
|
||||
for he waxed under welkin, in wealth he throve,
|
||||
EOF
|
||||
|
||||
cat > expected << EOF
|
||||
diff --git a/file b/file
|
||||
index b9834b5..ef6e94c 100644
|
||||
--- a/file
|
||||
+++ b/file
|
||||
@@ -1,10 +1,12 @@
|
||||
LO, praise of the prowess of people-kings
|
||||
of spear-armed Danes, in days long sped,
|
||||
we have heard, and what honor the athelings won!
|
||||
+
|
||||
Oft Scyld the Scefing from squadroned foes,
|
||||
from many a tribe, the mead-bench tore,
|
||||
awing the earls. Since erst he lay
|
||||
friendless, a foundling, fate repaid him:
|
||||
+
|
||||
for he waxed under welkin, in wealth he throve,
|
||||
till before him the folk, both far and near,
|
||||
who house by the whale-path, heard his mandate,
|
||||
EOF
|
||||
|
||||
echo "#!$SHELL_PATH" >fake-editor.sh
|
||||
cat >> fake-editor.sh <<\EOF
|
||||
mv -f "$1" orig-patch &&
|
||||
mv -f patch "$1"
|
||||
EOF
|
||||
|
||||
test_set_editor "$(pwd)/fake-editor.sh"
|
||||
chmod a+x fake-editor.sh
|
||||
|
||||
test_expect_success 'add -e' '
|
||||
|
||||
cp fake-editor.sh file &&
|
||||
git add -e &&
|
||||
test_cmp fake-editor.sh file &&
|
||||
test_cmp orig-patch expected-patch &&
|
||||
git diff --cached > out &&
|
||||
test_cmp out expected
|
||||
|
||||
'
|
||||
|
||||
test_done
|
Reference in New Issue
Block a user