topgit: Implement tg-import
[topgit/kirr.git] / tg-import.sh
blob6c991c5e8840b160d457168bf393cea7d5a9cac8
1 #!/bin/sh
2 # TopGit - A different patch queue manager
3 # GPLv2
6 tg_get_commit_msg()
8 commit="$1"
9 git log -1 --pretty=format:"From: %an <%ae>%n%n%s%n%n%b" "$commit"
12 tg_get_branch_name()
14 # nice sed script from git-format-patch.sh
15 commit="$1"
16 titleScript='
17 s/[^-a-z.A-Z_0-9]/-/g
18 s/\.\.\.*/\./g
19 s/\.*$//
20 s/--*/-/g
21 s/^-//
22 s/-$//
25 git log -1 --pretty=format:"%s" "$commit" | sed -e "$titleScript"
28 tg_process_commit()
30 commit="$1"
31 branch_name=$(tg_get_branch_name "$commit")
32 echo "Importing $commit to $branch_name"
33 tg create tp/"$branch_name"
34 git read-tree "$commit"
35 tg_get_commit_msg "$commit" > .topmsg
36 git add -f .topmsg .topdeps
37 git commit -C "$commit"
40 # nice arg verification stolen from git-format-patch.sh
41 for revpair
43 case "$revpair" in
44 ?*..?*)
45 rev1=`expr "z$revpair" : 'z\(.*\)\.\.'`
46 rev2=`expr "z$revpair" : 'z.*\.\.\(.*\)'`
49 die "Unknow range spec $revpair"
51 esac
52 git rev-parse --verify "$rev1^0" >/dev/null 2>&1 ||
53 die "Not a valid rev $rev1 ($revpair)"
54 git rev-parse --verify "$rev2^0" >/dev/null 2>&1 ||
55 die "Not a valid rev $rev2 ($revpair)"
56 git cherry -v "$rev1" "$rev2" |
57 while read sign rev comment
59 case "$sign" in
60 '-')
61 info "Merged already: $comment"
64 tg_process_commit "$rev"
66 esac
67 done
68 done