X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=tg-import.sh;h=9f03c3f6a5f46d0605ce3a5e40c3bbd4155fc1f9;hb=3051faceb5eb73f328a76d790a23fa7a9c71b427;hp=6a4f79ea27e0116814c271b03046a3f2eb874da4;hpb=3bc86894072f6a63820161e2f8a6ea19215a942c;p=topgit.git diff --git a/tg-import.sh b/tg-import.sh index 6a4f79e..9f03c3f 100644 --- a/tg-import.sh +++ b/tg-import.sh @@ -5,7 +5,9 @@ # GPLv2 branch_prefix=t/ +single= ranges= +basedep= ## Parse options @@ -13,10 +15,14 @@ ranges= while [ -n "$1" ]; do arg="$1"; shift case "$arg" in + -d) + basedep="$1"; shift;; -p) branch_prefix="$1"; shift;; + -s) + single="$1"; shift;; -*) - echo "Usage: tg [...] import [-p PREFIX] RANGE..." >&2 + echo "Usage: tg [...] import [-d BASE_BRANCH] {[-p PREFIX] RANGE...|-s NAME COMMIT}" >&2 exit 1;; *) ranges="$ranges $arg";; @@ -24,6 +30,15 @@ while [ -n "$1" ]; do done +## Make sure our tree is clean + +git update-index --ignore-submodules --refresh || exit +[ -z "$(git diff-index --cached --name-status -r --ignore-submodules HEAD --)" ] || + die "the index is not clean" + + +## Perform import + get_commit_msg() { commit="$1" @@ -49,16 +64,22 @@ get_branch_name() process_commit() { commit="$1" - branch_name=$(get_branch_name "$commit") - info "---- Importing $commit to $branch_prefix$branch_name" - tg create "$branch_prefix""$branch_name" - git read-tree "$commit" + branch_name="$2" + info "---- Importing $commit to $branch_name" + tg create "$branch_name" $basedep + basedep= + git cherry-pick --no-commit "$commit" get_commit_msg "$commit" > .topmsg git add -f .topmsg .topdeps git commit -C "$commit" info "++++ Importing $commit finished" } +if [ -n "$single" ]; then + process_commit "$ranges" "$single" + exit +fi + # nice arg verification stolen from git-format-patch.sh for revpair in $ranges do @@ -83,7 +104,7 @@ do info "Merged already: $comment" ;; *) - process_commit "$rev" + process_commit "$rev" "$branch_prefix$(get_branch_name "$rev")" ;; esac done