tg import -p PREFIX: Custom prefix instead of t/
[topgit/lukasnellen.git] / tg-import.sh
blobcbab7387620863e3f7ab81ff6e3fb770da003435
1 #!/bin/sh
2 # TopGit - A different patch queue manager
3 # (c) Petr Baudis <pasky@suse.cz> 2008
4 # (c) Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> 2008
5 # GPLv2
7 branch_prefix=t/
8 ranges=
11 ## Parse options
13 while [ -n "$1" ]; do
14 arg="$1"; shift
15 case "$arg" in
16 -p)
17 branch_prefix="$1"; shift;;
18 -*)
19 echo "Usage: tg [...] import [-p PREFIX] RANGE..." >&2
20 exit 1;;
22 ranges="$ranges $arg";;
23 esac
24 done
27 get_commit_msg()
29 commit="$1"
30 git log -1 --pretty=format:"From: %an <%ae>%n%n%s%n%n%b" "$commit"
33 get_branch_name()
35 # nice sed script from git-format-patch.sh
36 commit="$1"
37 titleScript='
38 s/[^-a-z.A-Z_0-9]/-/g
39 s/\.\.\.*/\./g
40 s/\.*$//
41 s/--*/-/g
42 s/^-//
43 s/-$//
46 git log -1 --pretty=format:"%s" "$commit" | sed -e "$titleScript"
49 process_commit()
51 commit="$1"
52 branch_name=$(get_branch_name "$commit")
53 echo "Importing $commit to $branch_name"
54 tg create "$branch_prefix""$branch_name"
55 git read-tree "$commit"
56 get_commit_msg "$commit" > .topmsg
57 git add -f .topmsg .topdeps
58 git commit -C "$commit"
61 # nice arg verification stolen from git-format-patch.sh
62 for revpair in $ranges
64 case "$revpair" in
65 ?*..?*)
66 rev1=`expr "z$revpair" : 'z\(.*\)\.\.'`
67 rev2=`expr "z$revpair" : 'z.*\.\.\(.*\)'`
70 die "Unknow range spec $revpair"
72 esac
73 git rev-parse --verify "$rev1^0" >/dev/null 2>&1 ||
74 die "Not a valid rev $rev1 ($revpair)"
75 git rev-parse --verify "$rev2^0" >/dev/null 2>&1 ||
76 die "Not a valid rev $rev2 ($revpair)"
77 git cherry -v "$rev1" "$rev2" |
78 while read sign rev comment
80 case "$sign" in
81 '-')
82 info "Merged already: $comment"
85 process_commit "$rev"
87 esac
88 done
89 done