summaryrefslogtreecommitdiff
path: root/t/t6050-replace.sh
diff options
context:
space:
mode:
authorChristian Couder <chriscool@tuxfamily.org>2014-07-19 15:01:09 (GMT)
committerJunio C Hamano <gitster@pobox.com>2014-07-21 19:04:40 (GMT)
commitadf8e5423891fa9bd04fcb0489ffb5da7025ec07 (patch)
tree1a1575f033ca3ea24416d6f4a07364f25c29231c /t/t6050-replace.sh
parent4228e8bc989c6cac1c47faece720faa06531281f (diff)
downloadgit-adf8e5423891fa9bd04fcb0489ffb5da7025ec07.zip
git-adf8e5423891fa9bd04fcb0489ffb5da7025ec07.tar.gz
git-adf8e5423891fa9bd04fcb0489ffb5da7025ec07.tar.bz2
replace: add test for --graft
Signed-off-by: Christian Couder <chriscool@tuxfamily.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/t6050-replace.sh')
-rwxr-xr-xt/t6050-replace.sh45
1 files changed, 44 insertions, 1 deletions
diff --git a/t/t6050-replace.sh b/t/t6050-replace.sh
index fb07ad2..f854dae 100755
--- a/t/t6050-replace.sh
+++ b/t/t6050-replace.sh
@@ -8,7 +8,7 @@ exec </dev/null
. ./test-lib.sh
-add_and_commit_file()
+add_and_commit_file ()
{
_file="$1"
_msg="$2"
@@ -18,6 +18,38 @@ add_and_commit_file()
git commit --quiet -m "$_file: $_msg"
}
+commit_buffer_contains_parents ()
+{
+ git cat-file commit "$1" >payload &&
+ sed -n -e '/^$/q' -e '/^parent /p' <payload >actual &&
+ shift &&
+ for _parent
+ do
+ echo "parent $_parent"
+ done >expected &&
+ test_cmp expected actual
+}
+
+commit_peeling_shows_parents ()
+{
+ _parent_number=1
+ _commit="$1"
+ shift &&
+ for _parent
+ do
+ _found=$(git rev-parse --verify $_commit^$_parent_number) || return 1
+ test "$_found" = "$_parent" || return 1
+ _parent_number=$(( $_parent_number + 1 ))
+ done &&
+ test_must_fail git rev-parse --verify $_commit^$_parent_number
+}
+
+commit_has_parents ()
+{
+ commit_buffer_contains_parents "$@" &&
+ commit_peeling_shows_parents "$@"
+}
+
HASH1=
HASH2=
HASH3=
@@ -351,4 +383,15 @@ test_expect_success 'replace ref cleanup' '
test -z "$(git replace)"
'
+test_expect_success '--graft with and without already replaced object' '
+ test $(git log --oneline | wc -l) = 7 &&
+ git replace --graft $HASH5 &&
+ test $(git log --oneline | wc -l) = 3 &&
+ commit_has_parents $HASH5 &&
+ test_must_fail git replace --graft $HASH5 $HASH4 $HASH3 &&
+ git replace --force -g $HASH5 $HASH4 $HASH3 &&
+ commit_has_parents $HASH5 $HASH4 $HASH3 &&
+ git replace -d $HASH5
+'
+
test_done