# (c) Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> 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"
+ headers=""
+ ! header="$(git config topgit.to)" || headers="$headers%nTo: $header"
+ ! header="$(git config topgit.cc)" || headers="$headers%nCc: $header"
+ ! header="$(git config topgit.bcc)" || headers="$headers%nBcc: $header"
+ git log -1 --pretty=format:"From: %an <%ae>$headers%nSubject: %s%n%n%b" "$commit"
}
-tg_get_branch_name()
+get_branch_name()
{
# nice sed script from git-format-patch.sh
commit="$1"
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=
+ get_commit_msg "$commit" > .topmsg
git add -f .topmsg .topdeps
+ if ! git cherry-pick --no-commit "$commit"; then
+ info "The commit will also finish the import of this patch."
+ exit 2
+ fi
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
?*..?*)
info "Merged already: $comment"
;;
*)
- tg_process_commit "$rev"
+ process_commit "$rev" "$branch_prefix$(get_branch_name "$rev")"
;;
esac
done