Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/commands.py @ 14302:b0f97b2589cc
order commands alphabetically
author | Sune Foldager <cryo@cyanite.org> |
---|---|
date | Thu, 12 May 2011 16:21:01 +0200 |
parents | 2daa5179e73f |
children | 64c22db0bc38 |
comparison
equal
deleted
inserted
replaced
14301:f94993769c87 | 14302:b0f97b2589cc |
---|---|
1328 tr.release() | 1328 tr.release() |
1329 | 1329 |
1330 if tags: | 1330 if tags: |
1331 repo.opener.write("localtags", "".join(tags)) | 1331 repo.opener.write("localtags", "".join(tags)) |
1332 | 1332 |
1333 @command('debugcommands', [], _('[COMMAND]')) | 1333 @command('debugbundle', [('a', 'all', None, _('show all details'))], _('FILE')) |
1334 def debugcommands(ui, cmd='', *args): | 1334 def debugbundle(ui, bundlepath, all=None, **opts): |
1335 """list all available commands and options""" | 1335 """lists the contents of a bundle""" |
1336 for cmd, vals in sorted(table.iteritems()): | 1336 f = url.open(ui, bundlepath) |
1337 cmd = cmd.split('|')[0].strip('^') | |
1338 opts = ', '.join([i[1] for i in vals[1]]) | |
1339 ui.write('%s: %s\n' % (cmd, opts)) | |
1340 | |
1341 @command('debugcomplete', | |
1342 [('o', 'options', None, _('show the command options'))], | |
1343 _('[-o] CMD')) | |
1344 def debugcomplete(ui, cmd='', **opts): | |
1345 """returns the completion list associated with the given command""" | |
1346 | |
1347 if opts.get('options'): | |
1348 options = [] | |
1349 otables = [globalopts] | |
1350 if cmd: | |
1351 aliases, entry = cmdutil.findcmd(cmd, table, False) | |
1352 otables.append(entry[1]) | |
1353 for t in otables: | |
1354 for o in t: | |
1355 if "(DEPRECATED)" in o[3]: | |
1356 continue | |
1357 if o[0]: | |
1358 options.append('-%s' % o[0]) | |
1359 options.append('--%s' % o[1]) | |
1360 ui.write("%s\n" % "\n".join(options)) | |
1361 return | |
1362 | |
1363 cmdlist = cmdutil.findpossible(cmd, table) | |
1364 if ui.verbose: | |
1365 cmdlist = [' '.join(c[0]) for c in cmdlist.values()] | |
1366 ui.write("%s\n" % "\n".join(sorted(cmdlist))) | |
1367 | |
1368 @command('debugfsinfo', [], _('[PATH]')) | |
1369 def debugfsinfo(ui, path = "."): | |
1370 """show information detected about current filesystem""" | |
1371 util.writefile('.debugfsinfo', '') | |
1372 ui.write('exec: %s\n' % (util.checkexec(path) and 'yes' or 'no')) | |
1373 ui.write('symlink: %s\n' % (util.checklink(path) and 'yes' or 'no')) | |
1374 ui.write('case-sensitive: %s\n' % (util.checkcase('.debugfsinfo') | |
1375 and 'yes' or 'no')) | |
1376 os.unlink('.debugfsinfo') | |
1377 | |
1378 @command('debugrebuildstate', | |
1379 [('r', 'rev', '', _('revision to rebuild to'), _('REV'))], | |
1380 _('[-r REV] [REV]')) | |
1381 def debugrebuildstate(ui, repo, rev="tip"): | |
1382 """rebuild the dirstate as it would look like for the given revision""" | |
1383 ctx = cmdutil.revsingle(repo, rev) | |
1384 wlock = repo.wlock() | |
1385 try: | 1337 try: |
1386 repo.dirstate.rebuild(ctx.node(), ctx.manifest()) | 1338 gen = changegroup.readbundle(f, bundlepath) |
1339 if all: | |
1340 ui.write("format: id, p1, p2, cset, delta base, len(delta)\n") | |
1341 | |
1342 def showchunks(named): | |
1343 ui.write("\n%s\n" % named) | |
1344 chain = None | |
1345 while 1: | |
1346 chunkdata = gen.deltachunk(chain) | |
1347 if not chunkdata: | |
1348 break | |
1349 node = chunkdata['node'] | |
1350 p1 = chunkdata['p1'] | |
1351 p2 = chunkdata['p2'] | |
1352 cs = chunkdata['cs'] | |
1353 deltabase = chunkdata['deltabase'] | |
1354 delta = chunkdata['delta'] | |
1355 ui.write("%s %s %s %s %s %s\n" % | |
1356 (hex(node), hex(p1), hex(p2), | |
1357 hex(cs), hex(deltabase), len(delta))) | |
1358 chain = node | |
1359 | |
1360 chunkdata = gen.changelogheader() | |
1361 showchunks("changelog") | |
1362 chunkdata = gen.manifestheader() | |
1363 showchunks("manifest") | |
1364 while 1: | |
1365 chunkdata = gen.filelogheader() | |
1366 if not chunkdata: | |
1367 break | |
1368 fname = chunkdata['filename'] | |
1369 showchunks(fname) | |
1370 else: | |
1371 chunkdata = gen.changelogheader() | |
1372 chain = None | |
1373 while 1: | |
1374 chunkdata = gen.deltachunk(chain) | |
1375 if not chunkdata: | |
1376 break | |
1377 node = chunkdata['node'] | |
1378 ui.write("%s\n" % hex(node)) | |
1379 chain = node | |
1387 finally: | 1380 finally: |
1388 wlock.release() | 1381 f.close() |
1389 | 1382 |
1390 @command('debugcheckstate', [], '') | 1383 @command('debugcheckstate', [], '') |
1391 def debugcheckstate(ui, repo): | 1384 def debugcheckstate(ui, repo): |
1392 """validate the correctness of the current dirstate""" | 1385 """validate the correctness of the current dirstate""" |
1393 parent1, parent2 = repo.dirstate.parents() | 1386 parent1, parent2 = repo.dirstate.parents() |
1413 errors += 1 | 1406 errors += 1 |
1414 if errors: | 1407 if errors: |
1415 error = _(".hg/dirstate inconsistent with current parent's manifest") | 1408 error = _(".hg/dirstate inconsistent with current parent's manifest") |
1416 raise util.Abort(error) | 1409 raise util.Abort(error) |
1417 | 1410 |
1418 @command('showconfig|debugconfig', | 1411 @command('debugcommands', [], _('[COMMAND]')) |
1419 [('u', 'untrusted', None, _('show untrusted configuration options'))], | 1412 def debugcommands(ui, cmd='', *args): |
1420 _('[-u] [NAME]...')) | 1413 """list all available commands and options""" |
1421 def showconfig(ui, repo, *values, **opts): | 1414 for cmd, vals in sorted(table.iteritems()): |
1422 """show combined config settings from all hgrc files | 1415 cmd = cmd.split('|')[0].strip('^') |
1423 | 1416 opts = ', '.join([i[1] for i in vals[1]]) |
1424 With no arguments, print names and values of all config items. | 1417 ui.write('%s: %s\n' % (cmd, opts)) |
1425 | 1418 |
1426 With one argument of the form section.name, print just the value | 1419 @command('debugcomplete', |
1427 of that config item. | 1420 [('o', 'options', None, _('show the command options'))], |
1428 | 1421 _('[-o] CMD')) |
1429 With multiple arguments, print names and values of all config | 1422 def debugcomplete(ui, cmd='', **opts): |
1430 items with matching section names. | 1423 """returns the completion list associated with the given command""" |
1431 | 1424 |
1432 With --debug, the source (filename and line number) is printed | 1425 if opts.get('options'): |
1433 for each config item. | 1426 options = [] |
1434 | 1427 otables = [globalopts] |
1435 Returns 0 on success. | 1428 if cmd: |
1436 """ | 1429 aliases, entry = cmdutil.findcmd(cmd, table, False) |
1437 | 1430 otables.append(entry[1]) |
1438 for f in scmutil.rcpath(): | 1431 for t in otables: |
1439 ui.debug(_('read config from: %s\n') % f) | 1432 for o in t: |
1440 untrusted = bool(opts.get('untrusted')) | 1433 if "(DEPRECATED)" in o[3]: |
1441 if values: | 1434 continue |
1442 sections = [v for v in values if '.' not in v] | 1435 if o[0]: |
1443 items = [v for v in values if '.' in v] | 1436 options.append('-%s' % o[0]) |
1444 if len(items) > 1 or items and sections: | 1437 options.append('--%s' % o[1]) |
1445 raise util.Abort(_('only one config item permitted')) | 1438 ui.write("%s\n" % "\n".join(options)) |
1446 for section, name, value in ui.walkconfig(untrusted=untrusted): | 1439 return |
1447 value = str(value).replace('\n', '\\n') | 1440 |
1448 sectname = section + '.' + name | 1441 cmdlist = cmdutil.findpossible(cmd, table) |
1449 if values: | |
1450 for v in values: | |
1451 if v == section: | |
1452 ui.debug('%s: ' % | |
1453 ui.configsource(section, name, untrusted)) | |
1454 ui.write('%s=%s\n' % (sectname, value)) | |
1455 elif v == sectname: | |
1456 ui.debug('%s: ' % | |
1457 ui.configsource(section, name, untrusted)) | |
1458 ui.write(value, '\n') | |
1459 else: | |
1460 ui.debug('%s: ' % | |
1461 ui.configsource(section, name, untrusted)) | |
1462 ui.write('%s=%s\n' % (sectname, value)) | |
1463 | |
1464 @command('debugknown', [], _('REPO ID...')) | |
1465 def debugknown(ui, repopath, *ids, **opts): | |
1466 """test whether node ids are known to a repo | |
1467 | |
1468 Every ID must be a full-length hex node id string. Returns a list of 0s and 1s | |
1469 indicating unknown/known. | |
1470 """ | |
1471 repo = hg.repository(ui, repopath) | |
1472 if not repo.capable('known'): | |
1473 raise util.Abort("known() not supported by target repository") | |
1474 flags = repo.known([bin(s) for s in ids]) | |
1475 ui.write("%s\n" % ("".join([f and "1" or "0" for f in flags]))) | |
1476 | |
1477 @command('debugbundle', [('a', 'all', None, _('show all details'))], _('FILE')) | |
1478 def debugbundle(ui, bundlepath, all=None, **opts): | |
1479 """lists the contents of a bundle""" | |
1480 f = url.open(ui, bundlepath) | |
1481 try: | |
1482 gen = changegroup.readbundle(f, bundlepath) | |
1483 if all: | |
1484 ui.write("format: id, p1, p2, cset, delta base, len(delta)\n") | |
1485 | |
1486 def showchunks(named): | |
1487 ui.write("\n%s\n" % named) | |
1488 chain = None | |
1489 while 1: | |
1490 chunkdata = gen.deltachunk(chain) | |
1491 if not chunkdata: | |
1492 break | |
1493 node = chunkdata['node'] | |
1494 p1 = chunkdata['p1'] | |
1495 p2 = chunkdata['p2'] | |
1496 cs = chunkdata['cs'] | |
1497 deltabase = chunkdata['deltabase'] | |
1498 delta = chunkdata['delta'] | |
1499 ui.write("%s %s %s %s %s %s\n" % | |
1500 (hex(node), hex(p1), hex(p2), | |
1501 hex(cs), hex(deltabase), len(delta))) | |
1502 chain = node | |
1503 | |
1504 chunkdata = gen.changelogheader() | |
1505 showchunks("changelog") | |
1506 chunkdata = gen.manifestheader() | |
1507 showchunks("manifest") | |
1508 while 1: | |
1509 chunkdata = gen.filelogheader() | |
1510 if not chunkdata: | |
1511 break | |
1512 fname = chunkdata['filename'] | |
1513 showchunks(fname) | |
1514 else: | |
1515 chunkdata = gen.changelogheader() | |
1516 chain = None | |
1517 while 1: | |
1518 chunkdata = gen.deltachunk(chain) | |
1519 if not chunkdata: | |
1520 break | |
1521 node = chunkdata['node'] | |
1522 ui.write("%s\n" % hex(node)) | |
1523 chain = node | |
1524 finally: | |
1525 f.close() | |
1526 | |
1527 @command('debuggetbundle', | |
1528 [('H', 'head', [], _('id of head node'), _('ID')), | |
1529 ('C', 'common', [], _('id of common node'), _('ID')), | |
1530 ('t', 'type', 'bzip2', _('bundle compression type to use'), _('TYPE'))], | |
1531 _('REPO FILE [-H|-C ID]...')) | |
1532 def debuggetbundle(ui, repopath, bundlepath, head=None, common=None, **opts): | |
1533 """retrieves a bundle from a repo | |
1534 | |
1535 Every ID must be a full-length hex node id string. Saves the bundle to the | |
1536 given file. | |
1537 """ | |
1538 repo = hg.repository(ui, repopath) | |
1539 if not repo.capable('getbundle'): | |
1540 raise util.Abort("getbundle() not supported by target repository") | |
1541 args = {} | |
1542 if common: | |
1543 args['common'] = [bin(s) for s in common] | |
1544 if head: | |
1545 args['heads'] = [bin(s) for s in head] | |
1546 bundle = repo.getbundle('debug', **args) | |
1547 | |
1548 bundletype = opts.get('type', 'bzip2').lower() | |
1549 btypes = {'none': 'HG10UN', 'bzip2': 'HG10BZ', 'gzip': 'HG10GZ'} | |
1550 bundletype = btypes.get(bundletype) | |
1551 if bundletype not in changegroup.bundletypes: | |
1552 raise util.Abort(_('unknown bundle type specified with --type')) | |
1553 changegroup.writebundle(bundle, bundlepath, bundletype) | |
1554 | |
1555 @command('debugpushkey', [], _('REPO NAMESPACE [KEY OLD NEW]')) | |
1556 def debugpushkey(ui, repopath, namespace, *keyinfo): | |
1557 '''access the pushkey key/value protocol | |
1558 | |
1559 With two args, list the keys in the given namespace. | |
1560 | |
1561 With five args, set a key to new if it currently is set to old. | |
1562 Reports success or failure. | |
1563 ''' | |
1564 | |
1565 target = hg.repository(ui, repopath) | |
1566 if keyinfo: | |
1567 key, old, new = keyinfo | |
1568 r = target.pushkey(namespace, key, old, new) | |
1569 ui.status(str(r) + '\n') | |
1570 return not r | |
1571 else: | |
1572 for k, v in target.listkeys(namespace).iteritems(): | |
1573 ui.write("%s\t%s\n" % (k.encode('string-escape'), | |
1574 v.encode('string-escape'))) | |
1575 | |
1576 @command('debugrevspec', [], ('REVSPEC')) | |
1577 def debugrevspec(ui, repo, expr): | |
1578 '''parse and apply a revision specification''' | |
1579 if ui.verbose: | 1442 if ui.verbose: |
1580 tree = revset.parse(expr)[0] | 1443 cmdlist = [' '.join(c[0]) for c in cmdlist.values()] |
1581 ui.note(tree, "\n") | 1444 ui.write("%s\n" % "\n".join(sorted(cmdlist))) |
1582 newtree = revset.findaliases(ui, tree) | |
1583 if newtree != tree: | |
1584 ui.note(newtree, "\n") | |
1585 func = revset.match(ui, expr) | |
1586 for c in func(repo, range(len(repo))): | |
1587 ui.write("%s\n" % c) | |
1588 | |
1589 @command('debugsetparents', [], _('REV1 [REV2]')) | |
1590 def debugsetparents(ui, repo, rev1, rev2=None): | |
1591 """manually set the parents of the current working directory | |
1592 | |
1593 This is useful for writing repository conversion tools, but should | |
1594 be used with care. | |
1595 | |
1596 Returns 0 on success. | |
1597 """ | |
1598 | |
1599 r1 = cmdutil.revsingle(repo, rev1).node() | |
1600 r2 = cmdutil.revsingle(repo, rev2, 'null').node() | |
1601 | |
1602 wlock = repo.wlock() | |
1603 try: | |
1604 repo.dirstate.setparents(r1, r2) | |
1605 finally: | |
1606 wlock.release() | |
1607 | |
1608 @command('debugstate', | |
1609 [('', 'nodates', None, _('do not display the saved mtime')), | |
1610 ('', 'datesort', None, _('sort by saved mtime'))], | |
1611 _('[OPTION]...')) | |
1612 def debugstate(ui, repo, nodates=None, datesort=None): | |
1613 """show the contents of the current dirstate""" | |
1614 timestr = "" | |
1615 showdate = not nodates | |
1616 if datesort: | |
1617 keyfunc = lambda x: (x[1][3], x[0]) # sort by mtime, then by filename | |
1618 else: | |
1619 keyfunc = None # sort by filename | |
1620 for file_, ent in sorted(repo.dirstate._map.iteritems(), key=keyfunc): | |
1621 if showdate: | |
1622 if ent[3] == -1: | |
1623 # Pad or slice to locale representation | |
1624 locale_len = len(time.strftime("%Y-%m-%d %H:%M:%S ", | |
1625 time.localtime(0))) | |
1626 timestr = 'unset' | |
1627 timestr = (timestr[:locale_len] + | |
1628 ' ' * (locale_len - len(timestr))) | |
1629 else: | |
1630 timestr = time.strftime("%Y-%m-%d %H:%M:%S ", | |
1631 time.localtime(ent[3])) | |
1632 if ent[1] & 020000: | |
1633 mode = 'lnk' | |
1634 else: | |
1635 mode = '%3o' % (ent[1] & 0777) | |
1636 ui.write("%c %s %10d %s%s\n" % (ent[0], mode, ent[2], timestr, file_)) | |
1637 for f in repo.dirstate.copies(): | |
1638 ui.write(_("copy: %s -> %s\n") % (repo.dirstate.copied(f), f)) | |
1639 | |
1640 @command('debugsub', | |
1641 [('r', 'rev', '', | |
1642 _('revision to check'), _('REV'))], | |
1643 _('[-r REV] [REV]')) | |
1644 def debugsub(ui, repo, rev=None): | |
1645 ctx = cmdutil.revsingle(repo, rev, None) | |
1646 for k, v in sorted(ctx.substate.items()): | |
1647 ui.write('path %s\n' % k) | |
1648 ui.write(' source %s\n' % v[0]) | |
1649 ui.write(' revision %s\n' % v[1]) | |
1650 | 1445 |
1651 @command('debugdag', | 1446 @command('debugdag', |
1652 [('t', 'tags', None, _('use tags as labels')), | 1447 [('t', 'tags', None, _('use tags as labels')), |
1653 ('b', 'branches', None, _('annotate with branch names')), | 1448 ('b', 'branches', None, _('annotate with branch names')), |
1654 ('', 'dots', None, _('use dots for runs')), | 1449 ('', 'dots', None, _('use dots for runs')), |
1736 ui.write("standard: %s\n" % util.datestr(d)) | 1531 ui.write("standard: %s\n" % util.datestr(d)) |
1737 if range: | 1532 if range: |
1738 m = util.matchdate(range) | 1533 m = util.matchdate(range) |
1739 ui.write("match: %s\n" % m(d[0])) | 1534 ui.write("match: %s\n" % m(d[0])) |
1740 | 1535 |
1741 @command('debugignore', [], '') | |
1742 def debugignore(ui, repo, *values, **opts): | |
1743 """display the combined ignore pattern""" | |
1744 ignore = repo.dirstate._ignore | |
1745 if hasattr(ignore, 'includepat'): | |
1746 ui.write("%s\n" % ignore.includepat) | |
1747 else: | |
1748 raise util.Abort(_("no ignore patterns found")) | |
1749 | |
1750 @command('debugdiscovery', | 1536 @command('debugdiscovery', |
1751 [('', 'old', None, _('use old-style discovery')), | 1537 [('', 'old', None, _('use old-style discovery')), |
1752 ('', 'nonheads', None, | 1538 ('', 'nonheads', None, |
1753 _('use old-style discovery with non-heads included')), | 1539 _('use old-style discovery with non-heads included')), |
1754 ] + remoteopts, | 1540 ] + remoteopts, |
1809 remoterevs, _checkout = hg.addbranchrevs(repo, remote, branches, | 1595 remoterevs, _checkout = hg.addbranchrevs(repo, remote, branches, |
1810 opts.get('remote_head')) | 1596 opts.get('remote_head')) |
1811 localrevs = opts.get('local_head') | 1597 localrevs = opts.get('local_head') |
1812 doit(localrevs, remoterevs) | 1598 doit(localrevs, remoterevs) |
1813 | 1599 |
1600 @command('debugfsinfo', [], _('[PATH]')) | |
1601 def debugfsinfo(ui, path = "."): | |
1602 """show information detected about current filesystem""" | |
1603 util.writefile('.debugfsinfo', '') | |
1604 ui.write('exec: %s\n' % (util.checkexec(path) and 'yes' or 'no')) | |
1605 ui.write('symlink: %s\n' % (util.checklink(path) and 'yes' or 'no')) | |
1606 ui.write('case-sensitive: %s\n' % (util.checkcase('.debugfsinfo') | |
1607 and 'yes' or 'no')) | |
1608 os.unlink('.debugfsinfo') | |
1609 | |
1610 @command('debuggetbundle', | |
1611 [('H', 'head', [], _('id of head node'), _('ID')), | |
1612 ('C', 'common', [], _('id of common node'), _('ID')), | |
1613 ('t', 'type', 'bzip2', _('bundle compression type to use'), _('TYPE'))], | |
1614 _('REPO FILE [-H|-C ID]...')) | |
1615 def debuggetbundle(ui, repopath, bundlepath, head=None, common=None, **opts): | |
1616 """retrieves a bundle from a repo | |
1617 | |
1618 Every ID must be a full-length hex node id string. Saves the bundle to the | |
1619 given file. | |
1620 """ | |
1621 repo = hg.repository(ui, repopath) | |
1622 if not repo.capable('getbundle'): | |
1623 raise util.Abort("getbundle() not supported by target repository") | |
1624 args = {} | |
1625 if common: | |
1626 args['common'] = [bin(s) for s in common] | |
1627 if head: | |
1628 args['heads'] = [bin(s) for s in head] | |
1629 bundle = repo.getbundle('debug', **args) | |
1630 | |
1631 bundletype = opts.get('type', 'bzip2').lower() | |
1632 btypes = {'none': 'HG10UN', 'bzip2': 'HG10BZ', 'gzip': 'HG10GZ'} | |
1633 bundletype = btypes.get(bundletype) | |
1634 if bundletype not in changegroup.bundletypes: | |
1635 raise util.Abort(_('unknown bundle type specified with --type')) | |
1636 changegroup.writebundle(bundle, bundlepath, bundletype) | |
1637 | |
1638 @command('debugignore', [], '') | |
1639 def debugignore(ui, repo, *values, **opts): | |
1640 """display the combined ignore pattern""" | |
1641 ignore = repo.dirstate._ignore | |
1642 if hasattr(ignore, 'includepat'): | |
1643 ui.write("%s\n" % ignore.includepat) | |
1644 else: | |
1645 raise util.Abort(_("no ignore patterns found")) | |
1646 | |
1814 @command('debugindex', | 1647 @command('debugindex', |
1815 [('f', 'format', 0, _('revlog format'), _('FORMAT'))], | 1648 [('f', 'format', 0, _('revlog format'), _('FORMAT'))], |
1816 _('FILE')) | 1649 _('FILE')) |
1817 def debugindex(ui, repo, file_, **opts): | 1650 def debugindex(ui, repo, file_, **opts): |
1818 """dump the contents of an index file""" | 1651 """dump the contents of an index file""" |
1957 ui.write(_("%s problems detected," | 1790 ui.write(_("%s problems detected," |
1958 " please check your install!\n") % problems) | 1791 " please check your install!\n") % problems) |
1959 | 1792 |
1960 return problems | 1793 return problems |
1961 | 1794 |
1795 @command('debugknown', [], _('REPO ID...')) | |
1796 def debugknown(ui, repopath, *ids, **opts): | |
1797 """test whether node ids are known to a repo | |
1798 | |
1799 Every ID must be a full-length hex node id string. Returns a list of 0s and 1s | |
1800 indicating unknown/known. | |
1801 """ | |
1802 repo = hg.repository(ui, repopath) | |
1803 if not repo.capable('known'): | |
1804 raise util.Abort("known() not supported by target repository") | |
1805 flags = repo.known([bin(s) for s in ids]) | |
1806 ui.write("%s\n" % ("".join([f and "1" or "0" for f in flags]))) | |
1807 | |
1808 @command('debugpushkey', [], _('REPO NAMESPACE [KEY OLD NEW]')) | |
1809 def debugpushkey(ui, repopath, namespace, *keyinfo): | |
1810 '''access the pushkey key/value protocol | |
1811 | |
1812 With two args, list the keys in the given namespace. | |
1813 | |
1814 With five args, set a key to new if it currently is set to old. | |
1815 Reports success or failure. | |
1816 ''' | |
1817 | |
1818 target = hg.repository(ui, repopath) | |
1819 if keyinfo: | |
1820 key, old, new = keyinfo | |
1821 r = target.pushkey(namespace, key, old, new) | |
1822 ui.status(str(r) + '\n') | |
1823 return not r | |
1824 else: | |
1825 for k, v in target.listkeys(namespace).iteritems(): | |
1826 ui.write("%s\t%s\n" % (k.encode('string-escape'), | |
1827 v.encode('string-escape'))) | |
1828 | |
1829 @command('debugrebuildstate', | |
1830 [('r', 'rev', '', _('revision to rebuild to'), _('REV'))], | |
1831 _('[-r REV] [REV]')) | |
1832 def debugrebuildstate(ui, repo, rev="tip"): | |
1833 """rebuild the dirstate as it would look like for the given revision""" | |
1834 ctx = cmdutil.revsingle(repo, rev) | |
1835 wlock = repo.wlock() | |
1836 try: | |
1837 repo.dirstate.rebuild(ctx.node(), ctx.manifest()) | |
1838 finally: | |
1839 wlock.release() | |
1840 | |
1962 @command('debugrename', | 1841 @command('debugrename', |
1963 [('r', 'rev', '', _('revision to debug'), _('REV'))], | 1842 [('r', 'rev', '', _('revision to debug'), _('REV'))], |
1964 _('[-r REV] FILE')) | 1843 _('[-r REV] FILE')) |
1965 def debugrename(ui, repo, file1, *pats, **opts): | 1844 def debugrename(ui, repo, file1, *pats, **opts): |
1966 """dump rename information""" | 1845 """dump rename information""" |
1973 rel = m.rel(abs) | 1852 rel = m.rel(abs) |
1974 if o: | 1853 if o: |
1975 ui.write(_("%s renamed from %s:%s\n") % (rel, o[0], hex(o[1]))) | 1854 ui.write(_("%s renamed from %s:%s\n") % (rel, o[0], hex(o[1]))) |
1976 else: | 1855 else: |
1977 ui.write(_("%s not renamed\n") % rel) | 1856 ui.write(_("%s not renamed\n") % rel) |
1857 | |
1858 @command('debugrevspec', [], ('REVSPEC')) | |
1859 def debugrevspec(ui, repo, expr): | |
1860 '''parse and apply a revision specification''' | |
1861 if ui.verbose: | |
1862 tree = revset.parse(expr)[0] | |
1863 ui.note(tree, "\n") | |
1864 newtree = revset.findaliases(ui, tree) | |
1865 if newtree != tree: | |
1866 ui.note(newtree, "\n") | |
1867 func = revset.match(ui, expr) | |
1868 for c in func(repo, range(len(repo))): | |
1869 ui.write("%s\n" % c) | |
1870 | |
1871 @command('debugsetparents', [], _('REV1 [REV2]')) | |
1872 def debugsetparents(ui, repo, rev1, rev2=None): | |
1873 """manually set the parents of the current working directory | |
1874 | |
1875 This is useful for writing repository conversion tools, but should | |
1876 be used with care. | |
1877 | |
1878 Returns 0 on success. | |
1879 """ | |
1880 | |
1881 r1 = cmdutil.revsingle(repo, rev1).node() | |
1882 r2 = cmdutil.revsingle(repo, rev2, 'null').node() | |
1883 | |
1884 wlock = repo.wlock() | |
1885 try: | |
1886 repo.dirstate.setparents(r1, r2) | |
1887 finally: | |
1888 wlock.release() | |
1889 | |
1890 @command('debugstate', | |
1891 [('', 'nodates', None, _('do not display the saved mtime')), | |
1892 ('', 'datesort', None, _('sort by saved mtime'))], | |
1893 _('[OPTION]...')) | |
1894 def debugstate(ui, repo, nodates=None, datesort=None): | |
1895 """show the contents of the current dirstate""" | |
1896 timestr = "" | |
1897 showdate = not nodates | |
1898 if datesort: | |
1899 keyfunc = lambda x: (x[1][3], x[0]) # sort by mtime, then by filename | |
1900 else: | |
1901 keyfunc = None # sort by filename | |
1902 for file_, ent in sorted(repo.dirstate._map.iteritems(), key=keyfunc): | |
1903 if showdate: | |
1904 if ent[3] == -1: | |
1905 # Pad or slice to locale representation | |
1906 locale_len = len(time.strftime("%Y-%m-%d %H:%M:%S ", | |
1907 time.localtime(0))) | |
1908 timestr = 'unset' | |
1909 timestr = (timestr[:locale_len] + | |
1910 ' ' * (locale_len - len(timestr))) | |
1911 else: | |
1912 timestr = time.strftime("%Y-%m-%d %H:%M:%S ", | |
1913 time.localtime(ent[3])) | |
1914 if ent[1] & 020000: | |
1915 mode = 'lnk' | |
1916 else: | |
1917 mode = '%3o' % (ent[1] & 0777) | |
1918 ui.write("%c %s %10d %s%s\n" % (ent[0], mode, ent[2], timestr, file_)) | |
1919 for f in repo.dirstate.copies(): | |
1920 ui.write(_("copy: %s -> %s\n") % (repo.dirstate.copied(f), f)) | |
1921 | |
1922 @command('debugsub', | |
1923 [('r', 'rev', '', | |
1924 _('revision to check'), _('REV'))], | |
1925 _('[-r REV] [REV]')) | |
1926 def debugsub(ui, repo, rev=None): | |
1927 ctx = cmdutil.revsingle(repo, rev, None) | |
1928 for k, v in sorted(ctx.substate.items()): | |
1929 ui.write('path %s\n' % k) | |
1930 ui.write(' source %s\n' % v[0]) | |
1931 ui.write(' revision %s\n' % v[1]) | |
1978 | 1932 |
1979 @command('debugwalk', walkopts, _('[OPTION]... [FILE]...')) | 1933 @command('debugwalk', walkopts, _('[OPTION]... [FILE]...')) |
1980 def debugwalk(ui, repo, *pats, **opts): | 1934 def debugwalk(ui, repo, *pats, **opts): |
1981 """show how files match on given patterns""" | 1935 """show how files match on given patterns""" |
1982 m = cmdutil.match(repo, pats, opts) | 1936 m = cmdutil.match(repo, pats, opts) |
4319 | 4273 |
4320 service = service() | 4274 service = service() |
4321 | 4275 |
4322 cmdutil.service(opts, initfn=service.init, runfn=service.run) | 4276 cmdutil.service(opts, initfn=service.init, runfn=service.run) |
4323 | 4277 |
4278 @command('showconfig|debugconfig', | |
4279 [('u', 'untrusted', None, _('show untrusted configuration options'))], | |
4280 _('[-u] [NAME]...')) | |
4281 def showconfig(ui, repo, *values, **opts): | |
4282 """show combined config settings from all hgrc files | |
4283 | |
4284 With no arguments, print names and values of all config items. | |
4285 | |
4286 With one argument of the form section.name, print just the value | |
4287 of that config item. | |
4288 | |
4289 With multiple arguments, print names and values of all config | |
4290 items with matching section names. | |
4291 | |
4292 With --debug, the source (filename and line number) is printed | |
4293 for each config item. | |
4294 | |
4295 Returns 0 on success. | |
4296 """ | |
4297 | |
4298 for f in scmutil.rcpath(): | |
4299 ui.debug(_('read config from: %s\n') % f) | |
4300 untrusted = bool(opts.get('untrusted')) | |
4301 if values: | |
4302 sections = [v for v in values if '.' not in v] | |
4303 items = [v for v in values if '.' in v] | |
4304 if len(items) > 1 or items and sections: | |
4305 raise util.Abort(_('only one config item permitted')) | |
4306 for section, name, value in ui.walkconfig(untrusted=untrusted): | |
4307 value = str(value).replace('\n', '\\n') | |
4308 sectname = section + '.' + name | |
4309 if values: | |
4310 for v in values: | |
4311 if v == section: | |
4312 ui.debug('%s: ' % | |
4313 ui.configsource(section, name, untrusted)) | |
4314 ui.write('%s=%s\n' % (sectname, value)) | |
4315 elif v == sectname: | |
4316 ui.debug('%s: ' % | |
4317 ui.configsource(section, name, untrusted)) | |
4318 ui.write(value, '\n') | |
4319 else: | |
4320 ui.debug('%s: ' % | |
4321 ui.configsource(section, name, untrusted)) | |
4322 ui.write('%s=%s\n' % (sectname, value)) | |
4323 | |
4324 @command('^status|st', | 4324 @command('^status|st', |
4325 [('A', 'all', None, _('show status of all files')), | 4325 [('A', 'all', None, _('show status of all files')), |
4326 ('m', 'modified', None, _('show only modified files')), | 4326 ('m', 'modified', None, _('show only modified files')), |
4327 ('a', 'added', None, _('show only added files')), | 4327 ('a', 'added', None, _('show only added files')), |
4328 ('r', 'removed', None, _('show only removed files')), | 4328 ('r', 'removed', None, _('show only removed files')), |