tg: do not drop missing_deps while running recurse_deps
[topgit/pro.git] / tg-import.sh
blobdac304157374fd799f7682f041ddcabb3aa6f328
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 ensure_clean_tree
35 ## Perform import
37 get_commit_msg()
39 commit="$1"
40 headers=""
41 ! header="$(git config topgit.to)" || headers="$headers%nTo: $header"
42 ! header="$(git config topgit.cc)" || headers="$headers%nCc: $header"
43 ! header="$(git config topgit.bcc)" || headers="$headers%nBcc: $header"
44 git log -1 --pretty=format:"From: %an <%ae>$headers%nSubject: %s%n%n%b" "$commit"
47 get_branch_name()
49 # nice sed script from git-format-patch.sh
50 commit="$1"
51 titleScript='
52 s/[^-a-z.A-Z_0-9]/-/g
53 s/\.\.\.*/\./g
54 s/\.*$//
55 s/--*/-/g
56 s/^-//
57 s/-$//
60 git log -1 --pretty=format:"%s" "$commit" | sed -e "$titleScript"
63 process_commit()
65 commit="$1"
66 branch_name="$2"
67 info "---- Importing $commit to $branch_name"
68 tg create "$branch_name" $basedep
69 basedep=
70 get_commit_msg "$commit" > .topmsg
71 git add -f .topmsg .topdeps
72 if ! git cherry-pick --no-commit "$commit"; then
73 info "The commit will also finish the import of this patch."
74 exit 2
76 git commit -C "$commit"
77 info "++++ Importing $commit finished"
80 if [ -n "$single" ]; then
81 process_commit $ranges "$single"
82 exit
85 # nice arg verification stolen from git-format-patch.sh
86 for revpair in $ranges
88 case "$revpair" in
89 ?*..?*)
90 rev1=`expr "z$revpair" : 'z\(.*\)\.\.'`
91 rev2=`expr "z$revpair" : 'z.*\.\.\(.*\)'`
94 die "Unknown range spec $revpair"
96 esac
97 git rev-parse --verify "$rev1^0" >/dev/null 2>&1 ||
98 die "Not a valid rev $rev1 ($revpair)"
99 git rev-parse --verify "$rev2^0" >/dev/null 2>&1 ||
100 die "Not a valid rev $rev2 ($revpair)"
101 git cherry -v "$rev1" "$rev2" |
102 while read sign rev comment
104 case "$sign" in
105 '-')
106 info "Merged already: $comment"
109 process_commit "$rev" "$branch_prefix$(get_branch_name "$rev")"
111 esac
112 done
113 done
115 # vim:noet