X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=topgit.git;a=blobdiff_plain;f=tg-import.sh;h=2a24fbb96dfc7e0600416e0eb51bae5bb63a95be;hp=ddd532110ab37a75a3bac7d39b10c69728601e08;hb=ce3d20e4c3c10553ac6e18c7a4ea05ffde2899bf;hpb=123b751dd8ef214efce19f0d453e608b74f873da diff --git a/tg-import.sh b/tg-import.sh index ddd5321..2a24fbb 100644 --- a/tg-import.sh +++ b/tg-import.sh @@ -4,14 +4,48 @@ # (c) Aneesh Kumar K.V 2008 # GPLv2 +branch_prefix=t/ +single= +ranges= +basedep= -tg_get_commit_msg() + +## Parse options + +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 [-d BASE_BRANCH] {[-p PREFIX] RANGE...|-s NAME COMMIT}" >&2 + exit 1;; + *) + ranges="$ranges $arg";; + esac +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" git log -1 --pretty=format:"From: %an <%ae>%n%n%s%n%n%b" "$commit" } -tg_get_branch_name() +get_branch_name() { # nice sed script from git-format-patch.sh commit="$1" @@ -27,20 +61,27 @@ tg_get_branch_name() git log -1 --pretty=format:"%s" "$commit" | sed -e "$titleScript" } -tg_process_commit() +process_commit() { commit="$1" - branch_name=$(tg_get_branch_name "$commit") - echo "Importing $commit to $branch_name" - tg create tp/"$branch_name" - git read-tree "$commit" - tg_get_commit_msg "$commit" > .topmsg + 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 +for revpair in $ranges do case "$revpair" in ?*..?*) @@ -63,7 +104,7 @@ do info "Merged already: $comment" ;; *) - tg_process_commit "$rev" + process_commit "$rev" "$branch_prefix$(get_branch_name "$rev")" ;; esac done