tg import -d: Explicitly specify base dependency of the created branches
[topgit/lukasnellen.git] / tg-import.sh
blob9f03c3f6a5f46d0605ce3a5e40c3bbd4155fc1f9
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 single=
9 ranges=
10 basedep=
13 ## Parse options
15 while [ -n "$1" ]; do
16 arg="$1"; shift
17 case "$arg" in
18 -d)
19 basedep="$1"; shift;;
20 -p)
21 branch_prefix="$1"; shift;;
22 -s)
23 single="$1"; shift;;
24 -*)
25 echo "Usage: tg [...] import [-d BASE_BRANCH] {[-p PREFIX] RANGE...|-s NAME COMMIT}" >&2
26 exit 1;;
28 ranges="$ranges $arg";;
29 esac
30 done
33 ## Make sure our tree is clean
35 git update-index --ignore-submodules --refresh || exit
36 [ -z "$(git diff-index --cached --name-status -r --ignore-submodules HEAD --)" ] ||
37 die "the index is not clean"
40 ## Perform import
42 get_commit_msg()
44 commit="$1"
45 git log -1 --pretty=format:"From: %an <%ae>%n%n%s%n%n%b" "$commit"
48 get_branch_name()
50 # nice sed script from git-format-patch.sh
51 commit="$1"
52 titleScript='
53 s/[^-a-z.A-Z_0-9]/-/g
54 s/\.\.\.*/\./g
55 s/\.*$//
56 s/--*/-/g
57 s/^-//
58 s/-$//
61 git log -1 --pretty=format:"%s" "$commit" | sed -e "$titleScript"
64 process_commit()
66 commit="$1"
67 branch_name="$2"
68 info "---- Importing $commit to $branch_name"
69 tg create "$branch_name" $basedep
70 basedep=
71 git cherry-pick --no-commit "$commit"
72 get_commit_msg "$commit" > .topmsg
73 git add -f .topmsg .topdeps
74 git commit -C "$commit"
75 info "++++ Importing $commit finished"
78 if [ -n "$single" ]; then
79 process_commit "$ranges" "$single"
80 exit
83 # nice arg verification stolen from git-format-patch.sh
84 for revpair in $ranges
86 case "$revpair" in
87 ?*..?*)
88 rev1=`expr "z$revpair" : 'z\(.*\)\.\.'`
89 rev2=`expr "z$revpair" : 'z.*\.\.\(.*\)'`
92 die "Unknow range spec $revpair"
94 esac
95 git rev-parse --verify "$rev1^0" >/dev/null 2>&1 ||
96 die "Not a valid rev $rev1 ($revpair)"
97 git rev-parse --verify "$rev2^0" >/dev/null 2>&1 ||
98 die "Not a valid rev $rev2 ($revpair)"
99 git cherry -v "$rev1" "$rev2" |
100 while read sign rev comment
102 case "$sign" in
103 '-')
104 info "Merged already: $comment"
107 process_commit "$rev" "$branch_prefix$(get_branch_name "$rev")"
109 esac
110 done
111 done