Retire Meta/TO

Meta/git-topic.perl is better these days.

Junio C Hamano committed Jul 7, 2007 at 00:30 UTC 962753f75390f5c5ea23a2d1e6996f6027003478
1 file changed -181
TO deleted
-181
@@ -1,181 +0,0 @@
1 -#!/bin/sh
2 -
3 -clean= next=next
4 -branch=`git symbolic-ref HEAD`
5 -while case $# in 0) break ;; esac
6 -do
7 - case "$1" in
8 - --clean)
9 - test refs/heads/master = "$branch" || {
10 - echo >&2 Not on master
11 - exit 1
12 - }
13 - clean=t
14 - ;;
15 - --next)
16 - test 2 -le $# || {
17 - echo >&2 "Need argument"
18 - exit 1
19 - }
20 - next="$2"
21 - git rev-parse --verify "$next" >/dev/null || exit
22 - shift
23 - ;;
24 - *)
25 - echo >&2 "$0 [--clean | --next test-next ]"
26 - exit 1
27 - ;;
28 - esac
29 - shift
30 -done
31 -
32 -master_sha1=`git rev-parse --verify refs/heads/master`
33 -LF='
34 -'
35 -(cd .git/refs/heads && find -type f) |
36 -sed -n \
37 - -e 's/^\.\///' \
38 - -e '/^[^\/][^\/]\//p' |
39 -sort |
40 -while read topic
41 -do
42 - rebase= done= not_done= trouble= date=
43 - topic_sha1=`git rev-parse --verify "refs/heads/$topic"`
44 - is_current=
45 - if test "refs/heads/$topic" = "$branch"
46 - then
47 - is_current=" *"
48 - fi
49 -
50 - date=`
51 - git-rev-list -1 --pretty "$topic" |
52 - sed -ne 's/^Date: *\(.*\)/ (\1)/p'
53 - `
54 - # (1)
55 - only_next_1=`git-rev-list ^master "^$topic" ${next} | sort`
56 - only_next_2=`git-rev-list ^master ${next} | sort`
57 - if test "$only_next_1" = "$only_next_2"
58 - then
59 - not_in_topic=`git-rev-list "^$topic" master`
60 - if test -z "$not_in_topic"
61 - then
62 - rebase=" (vanilla)"
63 - else
64 - rebase=" (can be rebased)"
65 - fi
66 - fi
67 -
68 - # (2)
69 - not_in_master=`
70 - git-rev-list ^master "$topic"
71 - `
72 - test -z "$not_in_master" &&
73 - done="${LF}Fully merged -- delete."
74 -
75 - # (3)
76 - not_in_next=`
77 - git-rev-list --pretty=oneline ^${next} "$topic" |
78 - sed -e 's/^[0-9a-f]* / - /'
79 - `
80 - if test -n "$not_in_next"
81 - then
82 - if test -n "$done"
83 - then
84 - # If $topic and master are the same,
85 - # it is fine.
86 - test "$master_sha1" = "$topic_sha1" ||
87 - trouble="${LF}### MODIFIED AFTER COOKED ###"
88 - fi
89 - not_done="${LF}Still not merged in ${next}$rebase.$LF$not_in_next"
90 - elif test -n "$done"
91 - then
92 - not_done=
93 - else
94 - not_done="${LF}Up to date."
95 - fi
96 -
97 - echo "*** $topic ***$date$is_current$trouble$done$not_done"
98 -
99 - if test -z "$trouble$not_done" &&
100 - test -n "$done" &&
101 - test t = "$clean"
102 - then
103 - git branch -d "$topic"
104 - fi
105 -done
106 -
107 -exit
108 -
109 -################################################################
110 -Using Topic Branches
111 -
112 -Some important disciplines first.
113 -
114 - * Once a topic branch forks from "master", avoid merging "master"
115 - updates into the topic branch unless necessary to resolve conflicts
116 - early.
117 -
118 - * Once a topic branch is fully cooked and merged into "master",
119 - delete it. If you need to build on top of it to correct
120 - earlier mistakes, create a new topic branch by forking at the
121 - tip of the "master". This is not strictly necessary, but it
122 - makes it easier to keep your history simple.
123 -
124 - * Whenever you need to test or publish your changes to topic
125 - branches, merge them into "next" branch.
126 -
127 -So, you would want to know:
128 -
129 -(1) ... if a topic branch has ever been merged to "next". Young
130 - topic branches can have stupid mistakes you would rather
131 - clean up, and things that have not been merged into other
132 - branches can be easily rebased without affecting others.
133 -
134 -(2) ... if a topic branch has been fully merged to "master".
135 - Then you can delete it. More importantly, you can tell you
136 - should not build on top of it.
137 -
138 -(3) ... if a topic branch has commits unmerged to "next". You
139 - need to merge them to test and/or publish.
140 -
141 -Let's look at this example:
142 -
143 - o---o---o---o---o---o---o---o---o---o "next"
144 - / / / /
145 - / a---a---b A / /
146 - / / / /
147 - / / c---c---c---c B /
148 - / / / \ /
149 - / / / b---b C \ /
150 - / / / / \ /
151 - ---o---o---o---o---o---o---o---o---o---o---o "master"
152 -
153 -
154 -A, B and C are topic branches.
155 -
156 - * A has one fix since it was merged up to "next".
157 -
158 - * B has finished. It has been fully merged up to "master" and "next",
159 - and is ready to be deleted.
160 -
161 - * C has not merged to "next" at all.
162 -
163 -To compute (1):
164 -
165 - git-rev-list ^master ^topic next
166 - git-rev-list ^master next
167 -
168 - if these match, topic has not merged in next at all.
169 -
170 -To compute (2):
171 -
172 - git-rev-list master..topic
173 -
174 - if this is empty, it is fully merged to "master".
175 -
176 -To compute (3):
177 -
178 - git-rev-list next..topic
179 -
180 - if this is empty, there is nothing to merge to "next".
181 -