comparison mercurial/commands.py @ 8796:2bcef677a6c3

localrepo: remove 'closed' argument to heads(...) function - repository heads are not associated with the closed attribute, so remove it making the code in line with the concept. - Fix functions that were calling heads with the parameter. - Adjust webcommands.branches to include the concept of inactive as well as open and closed branches - Fix code and docstrings in commands to make the correct use of closed branches & branch heads clearer - Improve grammar of 'hg heads' help text (2nd submission) this does not alter the cli for hg branches, that work is still to be done
author John Mulligan <phlogistonjohn@asynchrono.us>
date Wed, 10 Jun 2009 19:11:49 -0400
parents 708938509732
children 14a0bdd59848
comparison
equal deleted inserted replaced
8795:51c29aec0b75 8796:2bcef677a6c3
444 444
445 Use the command 'hg update' to switch to an existing branch. 445 Use the command 'hg update' to switch to an existing branch.
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(closed=False)] 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
454 for isactive, node, tag in branches: 458 for isactive, node, tag in branches:
455 if (not active) or isactive: 459 if (not active) or isactive:
1300 def heads(ui, repo, *branchrevs, **opts): 1304 def heads(ui, repo, *branchrevs, **opts):
1301 """show current repository heads or show branch heads 1305 """show current repository heads or show branch heads
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'])
1319 else: 1328 else:
1320 start = None 1329 start = None
1321 closed = opts.get('closed') 1330 closed = opts.get('closed')
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, closed=closed) 1334 heads = repo.heads(start)
1326 else: 1335 else:
1327 if hideinactive: 1336 if hideinactive:
1328 _heads = repo.heads(start, closed=closed) 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:
1332 branch = repo[branchrev].branch() 1341 branch = repo[branchrev].branch()
1333 if branch in visitedset: 1342 if branch in visitedset:
1334 continue 1343 continue
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 branch != branchrev: 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')))
1342 else: 1353 else:
1343 ui.warn(_("no changes on branch %s are reachable from %s\n") 1354 ui.warn(_("no changes on branch %s are reachable from %s\n")
3249 ('a', 'active', False, 3260 ('a', 'active', False,
3250 _('show only the active heads from open branches')), 3261 _('show only the active heads from open branches')),
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,
3258 [('r', 'rev', '', _('identify the specified revision')), 3269 [('r', 'rev', '', _('identify the specified revision')),
3259 ('n', 'num', None, _('show local revision number')), 3270 ('n', 'num', None, _('show local revision number')),