chiark / gitweb /
ddd532110ab37a75a3bac7d39b10c69728601e08
[topgit.git] / tg-import.sh
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
6
7
8 tg_get_commit_msg()
9 {
10         commit="$1"
11         git log -1 --pretty=format:"From: %an <%ae>%n%n%s%n%n%b" "$commit"
12 }
13
14 tg_get_branch_name()
15 {
16         # nice sed script from git-format-patch.sh
17         commit="$1"
18         titleScript='
19         s/[^-a-z.A-Z_0-9]/-/g
20         s/\.\.\.*/\./g
21         s/\.*$//
22         s/--*/-/g
23         s/^-//
24         s/-$//
25         q
26 '
27         git log -1 --pretty=format:"%s" "$commit" | sed -e "$titleScript"
28 }
29
30 tg_process_commit()
31 {
32         commit="$1"
33         branch_name=$(tg_get_branch_name "$commit")
34         echo "Importing $commit to $branch_name"
35         tg create tp/"$branch_name"
36         git read-tree "$commit"
37         tg_get_commit_msg "$commit" > .topmsg
38         git add -f .topmsg .topdeps
39         git commit -C "$commit"
40 }
41
42 # nice arg verification stolen from git-format-patch.sh
43 for revpair
44 do
45         case "$revpair" in
46         ?*..?*)
47                 rev1=`expr "z$revpair" : 'z\(.*\)\.\.'`
48                 rev2=`expr "z$revpair" : 'z.*\.\.\(.*\)'`
49                 ;;
50         *)
51                 die "Unknow range spec $revpair"
52                 ;;
53         esac
54         git rev-parse --verify "$rev1^0" >/dev/null 2>&1 ||
55                 die "Not a valid rev $rev1 ($revpair)"
56         git rev-parse --verify "$rev2^0" >/dev/null 2>&1 ||
57                 die "Not a valid rev $rev2 ($revpair)"
58         git cherry -v "$rev1" "$rev2" |
59         while read sign rev comment
60         do
61                 case "$sign" in
62                 '-')
63                         info "Merged already: $comment"
64                         ;;
65                 *)
66                         tg_process_commit "$rev"
67                         ;;
68                 esac
69         done
70 done