From 9a8821ff33d5abc9d2603dd91c04872016d40982 Mon Sep 17 00:00:00 2001 From: Avery Pennarun Date: Fri, 24 Apr 2009 22:57:14 -0400 Subject: [PATCH] Pass the path using the --prefix option instead of on the command line. I like this better. It's more like git-read-tree and some other commands. --- git-subtree.sh | 28 ++++++++++++++++------------ test.sh | 6 +++--- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/git-subtree.sh b/git-subtree.sh index d42cc1a16..0c7b755cf 100755 --- a/git-subtree.sh +++ b/git-subtree.sh @@ -8,14 +8,12 @@ if [ $# -eq 0 ]; then set -- -h fi OPTS_SPEC="\ -git subtree split [options...] -- +git subtree split [options...] <--prefix=prefix> -- git subtree merge - -git subtree does foo and bar! -- h,help show the help q quiet -v verbose +prefix= the name of the subdir to split out onto= try connecting new tree to an existing one rejoin merge the new branch back into HEAD ignore-joins ignore prior --rejoin commits @@ -54,6 +52,8 @@ while [ $# -gt 0 ]; do shift case "$opt" in -q) quiet=1 ;; + --prefix) prefix="$1"; shift ;; + --no-prefix) prefix= ;; --onto) onto="$1"; shift ;; --no-onto) onto= ;; --rejoin) rejoin=1 ;; @@ -72,14 +72,16 @@ case "$command" in esac revs=$(git rev-parse --default HEAD --revs-only "$@") || exit $? -dirs="$(git rev-parse --sq --no-revs --no-flags "$@")" || exit $? -#echo "dirs is {$dirs}" -eval $(echo set -- $dirs) -if [ "$#" -ne 1 ]; then - die "Must provide exactly one subtree dir (got $#)" +if [ -z "$prefix" ]; then + die "You must provide the --prefix option." +fi +dir="$prefix" + +dirs="$(git rev-parse --no-revs --no-flags "$@")" || exit $? +if [ -n "$dirs" ]; then + die "Error: Use --prefix instead of bare filenames." fi -dir="$1" debug "command: {$command}" debug "quiet: {$quiet}" @@ -261,8 +263,10 @@ cmd_split() unrevs="$(find_existing_splits "$dir" "$revs")" fi - debug "git rev-list --reverse $revs $unrevs" - git rev-list --reverse --parents $revs $unrevsx | + # We can't restrict rev-list to only "$dir" here, because that leaves out + # critical information about commit parents. + debug "git rev-list --reverse --parents $revs $unrevs" + git rev-list --reverse --parents $revs $unrevs | while read rev parents; do debug debug "Processing commit: $rev" diff --git a/test.sh b/test.sh index 39c4382f0..dac9b3559 100755 --- a/test.sh +++ b/test.sh @@ -59,7 +59,7 @@ git branch sub2 FETCH_HEAD git merge -s subtree FETCH_HEAD git branch pre-split -split1=$(git subtree split --onto FETCH_HEAD subdir --rejoin) +split1=$(git subtree split --prefix subdir --onto FETCH_HEAD --rejoin) echo "split1={$split1}" git branch split1 "$split1" @@ -77,14 +77,14 @@ git add sub6 git commit -m 'sub6' cd ../mainline -split2=$(git subtree split subdir --rejoin) +split2=$(git subtree split --prefix 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) +split3=$(git subtree split --prefix subdir --rejoin) git branch split3 "$split3" cd ../subproj -- 2.30.2