Mercurial > public > mercurial-scm > hg
comparison mercurial/commands.py @ 10350:fd511e9eeea6
commands: do all branch heads by default, demote topological to -t/--topo
author | Dirkjan Ochtman <dirkjan@ochtman.nl> |
---|---|
date | Sat, 06 Feb 2010 19:38:39 +0100 |
parents | 20356e69710c |
children | a5576908b589 |
comparison
equal
deleted
inserted
replaced
10349:20356e69710c | 10350:fd511e9eeea6 |
---|---|
1386 del revfiles[rev] | 1386 del revfiles[rev] |
1387 | 1387 |
1388 def heads(ui, repo, *branchrevs, **opts): | 1388 def heads(ui, repo, *branchrevs, **opts): |
1389 """show current repository heads or show branch heads | 1389 """show current repository heads or show branch heads |
1390 | 1390 |
1391 With no arguments, show all repository head changesets. | 1391 With no arguments, show all repository branch heads. |
1392 | 1392 |
1393 Repository "heads" are changesets with no child changesets. They are | 1393 Repository "heads" are changesets with no child changesets. They are |
1394 where development generally takes place and are the usual targets | 1394 where development generally takes place and are the usual targets |
1395 for update and merge operations. | 1395 for update and merge operations. Branch heads are changesets that have |
1396 | 1396 no child changeset on the same branch. |
1397 If one or more REV is given, the "branch heads" will be shown for | 1397 |
1398 the named branch associated with the specified changeset(s). | 1398 If one or more REVs are given, only branch heads on the branches |
1399 | 1399 associated with the specified changesets are shown. |
1400 Branch heads are changesets on a named branch with no descendants on | |
1401 the same branch. A branch head could be a "true" (repository) head, | |
1402 or it could be the last changeset on that branch before it was | |
1403 merged into another branch, or it could be the last changeset on the | |
1404 branch before a new branch was created. If none of the branch heads | |
1405 are true heads, the branch is considered inactive. | |
1406 | 1400 |
1407 If -c/--closed is specified, also show branch heads marked closed | 1401 If -c/--closed is specified, also show branch heads marked closed |
1408 (see hg commit --close-branch). | 1402 (see hg commit --close-branch). |
1409 | 1403 |
1410 If STARTREV is specified, only those heads that are descendants of | 1404 If STARTREV is specified, only those heads that are descendants of |
1411 STARTREV will be displayed. | 1405 STARTREV will be displayed. |
1406 | |
1407 If -t/--topo is specified, named branch mechanics will be ignored and only | |
1408 changesets without children will be shown. | |
1412 """ | 1409 """ |
1413 | 1410 |
1414 if opts.get('rev'): | 1411 if opts.get('rev'): |
1415 start = repo.lookup(opts['rev']) | 1412 start = repo.lookup(opts['rev']) |
1416 else: | 1413 else: |
1417 start = None | 1414 start = None |
1418 | 1415 |
1419 closed = opts.get('closed') | 1416 if opts.get('topo'): |
1420 if not branchrevs: | 1417 heads = [repo[h] for h in repo.heads(start)] |
1421 heads = repo.heads(start) | |
1422 | |
1423 else: | 1418 else: |
1424 | |
1425 decode, encode = encoding.fromlocal, encoding.tolocal | |
1426 heads = [] | 1419 heads = [] |
1427 branches = set(repo[decode(br)].branch() for br in branchrevs) | |
1428 for b, ls in repo.branchmap().iteritems(): | 1420 for b, ls in repo.branchmap().iteritems(): |
1429 if b not in branches: | |
1430 continue | |
1431 if start is None: | 1421 if start is None: |
1432 heads += ls | 1422 heads += [repo[h] for h in ls] |
1433 continue | 1423 continue |
1434 startrev = repo.changelog.rev(start) | 1424 startrev = repo.changelog.rev(start) |
1435 descendants = set(repo.changelog.descendants(startrev)) | 1425 descendants = set(repo.changelog.descendants(startrev)) |
1436 descendants.add(startrev) | 1426 descendants.add(startrev) |
1437 heads += [h for h in ls if repo.changelog.rev(h) in descendants] | 1427 rev = repo.changelog.rev |
1428 heads += [repo[h] for h in ls if rev(h) in descendants] | |
1429 | |
1430 if branchrevs: | |
1431 decode, encode = encoding.fromlocal, encoding.tolocal | |
1432 branches = set(repo[decode(br)].branch() for br in branchrevs) | |
1433 heads = [h for h in heads if h.branch() in branches] | |
1438 | 1434 |
1439 if not opts.get('closed'): | 1435 if not opts.get('closed'): |
1440 heads = [h for h in heads if not repo[h].extra().get('close')] | 1436 heads = [h for h in heads if not h.extra().get('close')] |
1441 | 1437 |
1442 if opts.get('active') and branchrevs: | 1438 if opts.get('active') and branchrevs: |
1443 dagheads = repo.heads(start) | 1439 dagheads = repo.heads(start) |
1444 heads = [h for h in heads if h in dagheads] | 1440 heads = [h for h in heads if h.node() in dagheads] |
1445 | 1441 |
1446 if branchrevs: | 1442 if branchrevs: |
1447 haveheads = set(repo[h].branch() for h in heads) | 1443 haveheads = set(h.branch() for h in heads) |
1448 if branches - haveheads: | 1444 if branches - haveheads: |
1449 headless = ', '.join(encode(b) for b in branches - haveheads) | 1445 headless = ', '.join(encode(b) for b in branches - haveheads) |
1450 msg = _('no open branch heads found on branches %s') | 1446 msg = _('no open branch heads found on branches %s') |
1451 if opts.get('rev'): | 1447 if opts.get('rev'): |
1452 msg += _(' (started at %s)' % opts['rev']) | 1448 msg += _(' (started at %s)' % opts['rev']) |
1453 ui.warn((msg + '\n') % headless) | 1449 ui.warn((msg + '\n') % headless) |
1454 | 1450 |
1455 if not heads: | 1451 if not heads: |
1456 return 1 | 1452 return 1 |
1457 | 1453 |
1458 heads = sorted((repo[h] for h in heads), key=lambda x: -x.rev()) | 1454 heads = sorted(heads, key=lambda x: -x.rev()) |
1459 displayer = cmdutil.show_changeset(ui, repo, opts) | 1455 displayer = cmdutil.show_changeset(ui, repo, opts) |
1460 for ctx in heads: | 1456 for ctx in heads: |
1461 displayer.show(ctx) | 1457 displayer.show(ctx) |
1462 displayer.close() | 1458 displayer.close() |
1463 | 1459 |
3497 ] + walkopts, | 3493 ] + walkopts, |
3498 _('[OPTION]... PATTERN [FILE]...')), | 3494 _('[OPTION]... PATTERN [FILE]...')), |
3499 "heads": | 3495 "heads": |
3500 (heads, | 3496 (heads, |
3501 [('r', 'rev', '', _('show only heads which are descendants of REV')), | 3497 [('r', 'rev', '', _('show only heads which are descendants of REV')), |
3498 ('t', 'topo', False, _('show topological heads only')), | |
3502 ('a', 'active', False, | 3499 ('a', 'active', False, |
3503 _('show active branchheads only [DEPRECATED]')), | 3500 _('show active branchheads only [DEPRECATED]')), |
3504 ('c', 'closed', False, | 3501 ('c', 'closed', False, |
3505 _('show normal and closed branch heads')), | 3502 _('show normal and closed branch heads')), |
3506 ] + templateopts, | 3503 ] + templateopts, |