Quick test script for generating reasonably complex merge scenarios.

maint
Avery Pennarun 2009-04-24 21:35:50 -04:00
parent 768d6d1005
commit 847e868167
2 changed files with 99 additions and 2 deletions

View File

@ -149,6 +149,7 @@ copy_commit()
GIT_COMMITTER_NAME \
GIT_COMMITTER_EMAIL \
GIT_COMMITTER_DATE
(echo -n '*'; cat ) | # FIXME
git commit-tree "$2" $3 # reads the rest of stdin
) || die "Can't copy commit $1"
}
@ -199,7 +200,7 @@ cmd_split()
cache_setup || exit $?
if [ -n "$onto" ]; then
echo "Reading history for --onto=$onto..."
debug "Reading history for --onto=$onto..."
git rev-list $onto |
while read rev; do
# the 'onto' history is already just the subdir, so
@ -254,7 +255,7 @@ cmd_split()
latest_old=$(cache_get latest_old)
git merge -s ours \
-m "$(merge_msg $dir $latest_old $latest_new)" \
$latest_new
$latest_new >&2
fi
echo $latest_new
exit 0

96
test.sh Executable file
View File

@ -0,0 +1,96 @@
#!/bin/bash -x
. shellopts.sh
set -e

rm -rf mainline subproj
mkdir mainline subproj

cd subproj
git init

touch sub1
git add sub1
git commit -m 'sub-1'
git branch sub1
git branch -m master subproj

touch sub2
git add sub2
git commit -m 'sub-2'
git branch sub2

touch sub3
git add sub3
git commit -m 'sub-3'
git branch sub3

cd ../mainline
git init
touch main1
git add main1
git commit -m 'main-1'
git branch -m master mainline

git fetch ../subproj sub1
git branch sub1 FETCH_HEAD
git read-tree --prefix=subdir FETCH_HEAD
git checkout subdir
git commit -m 'initial-subdir-merge'

git merge -m 'merge -s -ours' -s ours FETCH_HEAD

touch subdir/main-sub3
git add subdir/main-sub3
git commit -m 'main-sub3'

touch main-2
git add main-2
git commit -m 'main-2 boring'

touch subdir/main-sub4
git add subdir/main-sub4
git commit -m 'main-sub4'

git fetch ../subproj sub2
git branch sub2 FETCH_HEAD
git merge -s subtree FETCH_HEAD
git branch pre-split

split1=$(git subtree split --onto FETCH_HEAD subdir --rejoin)
echo "split1={$split1}"
git branch split1 "$split1"

touch subdir/main-sub5
git add subdir/main-sub5
git commit -m 'main-sub5'

cd ../subproj
git fetch ../mainline split1
git branch split1 FETCH_HEAD
git merge FETCH_HEAD

touch sub6
git add sub6
git commit -m 'sub6'

cd ../mainline
split2=$(git subtree split subdir --rejoin)
git branch split2 "$split2"

touch subdir/main-sub7
git add subdir/main-sub7
git commit -m 'main-sub7'

split3=$(git subtree split subdir --rejoin)
git branch split3 "$split3"

cd ../subproj
git fetch ../mainline split3
git branch split3 FETCH_HEAD
git merge FETCH_HEAD
git branch subproj-merge-split3

cd ../mainline
git fetch ../subproj subproj-merge-split3
git branch subproj-merge-split3 FETCH_HEAD
git merge subproj-merge-split3