Show More
@@ -446,8 +446,12 b' def branches(ui, repo, active=False):' | |||||
446 | """ |
|
446 | """ | |
447 | hexfunc = ui.debugflag and hex or short |
|
447 | hexfunc = ui.debugflag and hex or short | |
448 | activebranches = [encoding.tolocal(repo[n].branch()) |
|
448 | activebranches = [encoding.tolocal(repo[n].branch()) | |
449 |
for n in repo.heads( |
|
449 | for n in repo.heads()] | |
450 | branches = sorted([(tag in activebranches, repo.changelog.rev(node), tag) |
|
450 | def testactive(tag, node): | |
|
451 | realhead = tag in activebranches | |||
|
452 | open = node in repo.branchheads(tag, closed=False) | |||
|
453 | return realhead and open | |||
|
454 | branches = sorted([(testactive(tag, node), repo.changelog.rev(node), tag) | |||
451 | for tag, node in repo.branchtags().items()], |
|
455 | for tag, node in repo.branchtags().items()], | |
452 | reverse=True) |
|
456 | reverse=True) | |
453 |
|
457 | |||
@@ -1302,17 +1306,22 b' def heads(ui, repo, *branchrevs, **opts)' | |||||
1302 |
|
1306 | |||
1303 | With no arguments, show all repository head changesets. |
|
1307 | With no arguments, show all repository head changesets. | |
1304 |
|
1308 | |||
1305 | If branch names or revisions are given this will show the heads of |
|
|||
1306 | the specified branches or the branches those revisions are tagged |
|
|||
1307 | with. |
|
|||
1308 |
|
||||
1309 | Repository "heads" are changesets that don't have child |
|
1309 | Repository "heads" are changesets that don't have child | |
1310 | changesets. They are where development generally takes place and |
|
1310 | changesets. They are where development generally takes place and | |
1311 | are the usual targets for update and merge operations. |
|
1311 | are the usual targets for update and merge operations. | |
1312 |
|
1312 | |||
1313 | Branch heads are changesets that have a given branch tag, but have |
|
1313 | If one or more REV is given, the "branch heads" will be shown for | |
1314 | no child changesets with that tag. They are usually where |
|
1314 | the named branch associated with that revision. The name of the | |
1315 | development on a given branch takes place. |
|
1315 | branch is called the revision's branch tag. | |
|
1316 | ||||
|
1317 | Branch heads are revisions on a given named branch that do not have | |||
|
1318 | any children on the same branch. A branch head could be a true head | |||
|
1319 | or it could be the last changeset on a branch before a new branch | |||
|
1320 | was created. If none of the branch heads are true heads, the branch | |||
|
1321 | is considered inactive. | |||
|
1322 | ||||
|
1323 | If STARTREV is specified only those heads (or branch heads) that | |||
|
1324 | are descendants of STARTREV will be displayed. | |||
1316 | """ |
|
1325 | """ | |
1317 | if opts.get('rev'): |
|
1326 | if opts.get('rev'): | |
1318 | start = repo.lookup(opts['rev']) |
|
1327 | start = repo.lookup(opts['rev']) | |
@@ -1322,10 +1331,10 b' def heads(ui, repo, *branchrevs, **opts)' | |||||
1322 | hideinactive, _heads = opts.get('active'), None |
|
1331 | hideinactive, _heads = opts.get('active'), None | |
1323 | if not branchrevs: |
|
1332 | if not branchrevs: | |
1324 | # Assume we're looking repo-wide heads if no revs were specified. |
|
1333 | # Assume we're looking repo-wide heads if no revs were specified. | |
1325 |
heads = repo.heads(start |
|
1334 | heads = repo.heads(start) | |
1326 | else: |
|
1335 | else: | |
1327 | if hideinactive: |
|
1336 | if hideinactive: | |
1328 |
_heads = repo.heads(start |
|
1337 | _heads = repo.heads(start) | |
1329 | heads = [] |
|
1338 | heads = [] | |
1330 | visitedset = set() |
|
1339 | visitedset = set() | |
1331 | for branchrev in branchrevs: |
|
1340 | for branchrev in branchrevs: | |
@@ -1335,7 +1344,9 b' def heads(ui, repo, *branchrevs, **opts)' | |||||
1335 | visitedset.add(branch) |
|
1344 | visitedset.add(branch) | |
1336 | bheads = repo.branchheads(branch, start, closed=closed) |
|
1345 | bheads = repo.branchheads(branch, start, closed=closed) | |
1337 | if not bheads: |
|
1346 | if not bheads: | |
1338 |
if |
|
1347 | if not opts.get('rev'): | |
|
1348 | ui.warn(_("no open branch heads on branch %s\n") % branch) | |||
|
1349 | elif branch != branchrev: | |||
1339 | ui.warn(_("no changes on branch %s containing %s are " |
|
1350 | ui.warn(_("no changes on branch %s containing %s are " | |
1340 | "reachable from %s\n") |
|
1351 | "reachable from %s\n") | |
1341 | % (branch, branchrev, opts.get('rev'))) |
|
1352 | % (branch, branchrev, opts.get('rev'))) | |
@@ -3251,7 +3262,7 b' table = {' | |||||
3251 | ('c', 'closed', False, |
|
3262 | ('c', 'closed', False, | |
3252 | _('show normal and closed heads')), |
|
3263 | _('show normal and closed heads')), | |
3253 | ] + templateopts, |
|
3264 | ] + templateopts, | |
3254 | _('[-r REV] [REV]...')), |
|
3265 | _('[-r STARTREV] [REV]...')), | |
3255 | "help": (help_, [], _('[TOPIC]')), |
|
3266 | "help": (help_, [], _('[TOPIC]')), | |
3256 | "identify|id": |
|
3267 | "identify|id": | |
3257 | (identify, |
|
3268 | (identify, |
@@ -361,7 +361,7 b' def tags(web, req, tmpl):' | |||||
361 | def branches(web, req, tmpl): |
|
361 | def branches(web, req, tmpl): | |
362 | b = web.repo.branchtags() |
|
362 | b = web.repo.branchtags() | |
363 | tips = (web.repo[n] for t, n in web.repo.branchtags().iteritems()) |
|
363 | tips = (web.repo[n] for t, n in web.repo.branchtags().iteritems()) | |
364 | open = set(web.repo[n].branch() for n in web.repo.heads(closed=False)) |
|
364 | heads = web.repo.heads() | |
365 | parity = paritygen(web.stripecount) |
|
365 | parity = paritygen(web.stripecount) | |
366 | sortkey = lambda ctx: ('close' not in ctx.extra(), ctx.rev()) |
|
366 | sortkey = lambda ctx: ('close' not in ctx.extra(), ctx.rev()) | |
367 |
|
367 | |||
@@ -371,7 +371,12 b' def branches(web, req, tmpl):' | |||||
371 | if limit > 0 and count >= limit: |
|
371 | if limit > 0 and count >= limit: | |
372 | return |
|
372 | return | |
373 | count += 1 |
|
373 | count += 1 | |
374 | status = ctx.branch() in open and 'open' or 'closed' |
|
374 | if ctx.node() not in heads: | |
|
375 | status = 'inactive' | |||
|
376 | elif not web.repo.branchheads(ctx.branch()): | |||
|
377 | status = 'closed' | |||
|
378 | else: | |||
|
379 | status = 'open' | |||
375 | yield {'parity': parity.next(), |
|
380 | yield {'parity': parity.next(), | |
376 | 'branch': ctx.branch(), |
|
381 | 'branch': ctx.branch(), | |
377 | 'status': status, |
|
382 | 'status': status, |
@@ -1134,15 +1134,10 b' class localrepository(repo.repository):' | |||||
1134 | finally: |
|
1134 | finally: | |
1135 | wlock.release() |
|
1135 | wlock.release() | |
1136 |
|
1136 | |||
1137 |
def heads(self, start=None |
|
1137 | def heads(self, start=None): | |
1138 | heads = self.changelog.heads(start) |
|
1138 | heads = self.changelog.heads(start) | |
1139 | def display(head): |
|
|||
1140 | if closed: |
|
|||
1141 | return True |
|
|||
1142 | extras = self.changelog.read(head)[5] |
|
|||
1143 | return ('close' not in extras) |
|
|||
1144 | # sort the output in rev descending order |
|
1139 | # sort the output in rev descending order | |
1145 |
heads = [(-self.changelog.rev(h), h) for h in heads |
|
1140 | heads = [(-self.changelog.rev(h), h) for h in heads] | |
1146 | return [n for (r, n) in sorted(heads)] |
|
1141 | return [n for (r, n) in sorted(heads)] | |
1147 |
|
1142 | |||
1148 | def branchheads(self, branch=None, start=None, closed=False): |
|
1143 | def branchheads(self, branch=None, start=None, closed=False): |
@@ -71,9 +71,19 b" hg commit -d '9 0' --close-branch -m 'cl" | |||||
71 | echo '--- b branch should be inactive' |
|
71 | echo '--- b branch should be inactive' | |
72 | hg branches |
|
72 | hg branches | |
73 | hg branches -a |
|
73 | hg branches -a | |
|
74 | hg heads b | |||
|
75 | hg heads --closed b | |||
74 | echo 'xxx4' >> b |
|
76 | echo 'xxx4' >> b | |
75 | hg commit -d '9 0' -m 'reopen branch with a change' |
|
77 | hg commit -d '9 0' -m 'reopen branch with a change' | |
76 | echo '--- branch b is back in action' |
|
78 | echo '--- branch b is back in action' | |
77 | hg branches -a |
|
79 | hg branches -a | |
78 | hg heads -c |
|
80 | echo '---- test heads listings' | |
79 | hg heads |
|
81 | hg heads | |
|
82 | echo '% branch default' | |||
|
83 | hg heads default | |||
|
84 | echo '% branch a' | |||
|
85 | hg heads a | |||
|
86 | hg heads --active a | |||
|
87 | echo '% branch b' | |||
|
88 | hg heads b | |||
|
89 | hg heads --closed b |
@@ -113,9 +113,25 b' c 6:589736a' | |||||
113 | a 5:d8cbc61dbaa6 (inactive) |
|
113 | a 5:d8cbc61dbaa6 (inactive) | |
114 | default 0:19709c5a4e75 (inactive) |
|
114 | default 0:19709c5a4e75 (inactive) | |
115 | a branch name much longer than the default justification used by branches 7:10ff5895aa57 |
|
115 | a branch name much longer than the default justification used by branches 7:10ff5895aa57 | |
|
116 | no open branch heads on branch b | |||
|
117 | changeset: 12:2da6583810df | |||
|
118 | branch: b | |||
|
119 | tag: tip | |||
|
120 | parent: 8:eebb944467c9 | |||
|
121 | user: test | |||
|
122 | date: Thu Jan 01 00:00:09 1970 +0000 | |||
|
123 | summary: close this part branch too | |||
|
124 | ||||
|
125 | changeset: 11:c84627f3c15d | |||
|
126 | branch: b | |||
|
127 | user: test | |||
|
128 | date: Thu Jan 01 00:00:09 1970 +0000 | |||
|
129 | summary: prune bad branch | |||
|
130 | ||||
116 | --- branch b is back in action |
|
131 | --- branch b is back in action | |
117 | b 13:6ac12926b8c3 |
|
132 | b 13:6ac12926b8c3 | |
118 | a branch name much longer than the default justification used by branches 7:10ff5895aa57 |
|
133 | a branch name much longer than the default justification used by branches 7:10ff5895aa57 | |
|
134 | ---- test heads listings | |||
119 | changeset: 13:6ac12926b8c3 |
|
135 | changeset: 13:6ac12926b8c3 | |
120 | branch: b |
|
136 | branch: b | |
121 | tag: tip |
|
137 | tag: tip | |
@@ -135,6 +151,21 b' user: test' | |||||
135 | date: Thu Jan 01 00:00:06 1970 +0000 |
|
151 | date: Thu Jan 01 00:00:06 1970 +0000 | |
136 | summary: Adding d branch |
|
152 | summary: Adding d branch | |
137 |
|
153 | |||
|
154 | % branch default | |||
|
155 | changeset: 0:19709c5a4e75 | |||
|
156 | user: test | |||
|
157 | date: Thu Jan 01 00:00:00 1970 +0000 | |||
|
158 | summary: Adding root node | |||
|
159 | ||||
|
160 | % branch a | |||
|
161 | changeset: 5:d8cbc61dbaa6 | |||
|
162 | branch: a | |||
|
163 | parent: 2:881fe2b92ad0 | |||
|
164 | user: test | |||
|
165 | date: Thu Jan 01 00:00:04 1970 +0000 | |||
|
166 | summary: Adding b branch head 2 | |||
|
167 | ||||
|
168 | % branch b | |||
138 | changeset: 13:6ac12926b8c3 |
|
169 | changeset: 13:6ac12926b8c3 | |
139 | branch: b |
|
170 | branch: b | |
140 | tag: tip |
|
171 | tag: tip | |
@@ -142,9 +173,16 b' user: test' | |||||
142 | date: Thu Jan 01 00:00:09 1970 +0000 |
|
173 | date: Thu Jan 01 00:00:09 1970 +0000 | |
143 | summary: reopen branch with a change |
|
174 | summary: reopen branch with a change | |
144 |
|
175 | |||
145 | changeset: 7:10ff5895aa57 |
|
176 | changeset: 13:6ac12926b8c3 | |
146 | branch: a branch name much longer than the default justification used by branches |
|
177 | branch: b | |
|
178 | tag: tip | |||
147 | user: test |
|
179 | user: test | |
148 |
date: Thu Jan 01 00:00:0 |
|
180 | date: Thu Jan 01 00:00:09 1970 +0000 | |
149 |
summary: |
|
181 | summary: reopen branch with a change | |
150 |
|
182 | |||
|
183 | changeset: 11:c84627f3c15d | |||
|
184 | branch: b | |||
|
185 | user: test | |||
|
186 | date: Thu Jan 01 00:00:09 1970 +0000 | |||
|
187 | summary: prune bad branch | |||
|
188 |
@@ -532,7 +532,7 b' branches |' | |||||
532 | <tr class="parity1"> |
|
532 | <tr class="parity1"> | |
533 | <td class="age"><i>many years ago</i></td> |
|
533 | <td class="age"><i>many years ago</i></td> | |
534 | <td><a class="list" href="/shortlog/a4f92ed23982?style=gitweb"><b>a4f92ed23982</b></a></td> |
|
534 | <td><a class="list" href="/shortlog/a4f92ed23982?style=gitweb"><b>a4f92ed23982</b></a></td> | |
535 |
<td class=" |
|
535 | <td class="inactive">default</td> | |
536 | <td class="link"> |
|
536 | <td class="link"> | |
537 | <a href="/changeset/a4f92ed23982?style=gitweb">changeset</a> | |
|
537 | <a href="/changeset/a4f92ed23982?style=gitweb">changeset</a> | | |
538 | <a href="/log/a4f92ed23982?style=gitweb">changelog</a> | |
|
538 | <a href="/log/a4f92ed23982?style=gitweb">changelog</a> | |
General Comments 0
You need to be logged in to leave comments.
Login now