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