Browse Source

Add --annotate option, and create recognizable file content during tests.

maint
Avery Pennarun 16 years ago
parent
commit
d0eb1b1417
  1. 6
      git-subtree.sh
  2. 67
      test.sh

6
git-subtree.sh

@ -17,6 +17,7 @@ h,help show the help @@ -17,6 +17,7 @@ h,help show the help
q quiet
prefix= the name of the subdir to split out
options for 'split'
annotate= add a prefix to commit message of new commits
onto= try connecting new tree to an existing one
rejoin merge the new branch back into HEAD
ignore-joins ignore prior --rejoin commits
@ -30,6 +31,7 @@ command= @@ -30,6 +31,7 @@ command=
onto=
rejoin=
ignore_joins=
annotate=

debug()
{
@ -55,6 +57,8 @@ while [ $# -gt 0 ]; do @@ -55,6 +57,8 @@ while [ $# -gt 0 ]; do
shift
case "$opt" in
-q) quiet=1 ;;
--annotate) annotate="$1"; shift ;;
--no-annotate) annotate= ;;
--prefix) prefix="$1"; shift ;;
--no-prefix) prefix= ;;
--onto) onto="$1"; shift ;;
@ -178,7 +182,7 @@ copy_commit() @@ -178,7 +182,7 @@ copy_commit()
GIT_COMMITTER_NAME \
GIT_COMMITTER_EMAIL \
GIT_COMMITTER_DATE
(echo -n '*'; cat ) | # FIXME
(echo -n "$annotate"; cat ) |
git commit-tree "$2" $3 # reads the rest of stdin
) || die "Can't copy commit $1"
}

67
test.sh

@ -1,4 +1,11 @@ @@ -1,4 +1,11 @@
#!/bin/bash -x
create()
{
for d in 1 2 3 4 5 6 7 8 9 10; do
echo "$1"
done >"$1"
}

. shellopts.sh
set -e

@ -8,27 +15,27 @@ mkdir mainline subproj @@ -8,27 +15,27 @@ mkdir mainline subproj
cd subproj
git init

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

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

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

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

git fetch ../subproj sub1
@ -38,49 +45,49 @@ git subtree add --prefix=subdir FETCH_HEAD @@ -38,49 +45,49 @@ git subtree add --prefix=subdir FETCH_HEAD
# this shouldn't actually do anything, since FETCH_HEAD is already a parent
git merge -m 'merge -s -ours' -s ours FETCH_HEAD

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

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

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

git fetch ../subproj sub2
git branch sub2 FETCH_HEAD
git subtree merge --prefix=subdir FETCH_HEAD
git branch pre-split

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

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

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

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

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

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

split3=$(git subtree split --prefix subdir --rejoin)
split3=$(git subtree split --annotate='*' --prefix subdir --rejoin)
git branch split3 "$split3"

cd ../subproj

Loading…
Cancel
Save