1060 |
1060 |
1061 _chunksize = 4 << 10 |
1061 _chunksize = 4 << 10 |
1062 |
1062 |
1063 |
1063 |
1064 @command( |
1064 @command( |
1065 b'debugdownload', [(b'o', b'output', b'', _(b'path')),], optionalrepo=True |
1065 b'debugdownload', |
|
1066 [ |
|
1067 (b'o', b'output', b'', _(b'path')), |
|
1068 ], |
|
1069 optionalrepo=True, |
1066 ) |
1070 ) |
1067 def debugdownload(ui, repo, url, output=None, **opts): |
1071 def debugdownload(ui, repo, url, output=None, **opts): |
1068 """download a resource using Mercurial logic and config |
1072 """download a resource using Mercurial logic and config""" |
1069 """ |
|
1070 fh = urlmod.open(ui, url, output) |
1073 fh = urlmod.open(ui, url, output) |
1071 |
1074 |
1072 dest = ui |
1075 dest = ui |
1073 if output: |
1076 if output: |
1074 dest = open(output, b"wb", _chunksize) |
1077 dest = open(output, b"wb", _chunksize) |
1508 ui.write(b'%s: %d\n' % (k, v)) |
1511 ui.write(b'%s: %d\n' % (k, v)) |
1509 |
1512 |
1510 |
1513 |
1511 @command(b'debuginstall', [] + cmdutil.formatteropts, b'', norepo=True) |
1514 @command(b'debuginstall', [] + cmdutil.formatteropts, b'', norepo=True) |
1512 def debuginstall(ui, **opts): |
1515 def debuginstall(ui, **opts): |
1513 '''test Mercurial installation |
1516 """test Mercurial installation |
1514 |
1517 |
1515 Returns 0 on success. |
1518 Returns 0 on success. |
1516 ''' |
1519 """ |
1517 opts = pycompat.byteskwargs(opts) |
1520 opts = pycompat.byteskwargs(opts) |
1518 |
1521 |
1519 problems = 0 |
1522 problems = 0 |
1520 |
1523 |
1521 fm = ui.formatter(b'debuginstall', opts) |
1524 fm = ui.formatter(b'debuginstall', opts) |
2171 _(b'display the on disk meta data for the nodemap'), |
2174 _(b'display the on disk meta data for the nodemap'), |
2172 ), |
2175 ), |
2173 ], |
2176 ], |
2174 ) |
2177 ) |
2175 def debugnodemap(ui, repo, **opts): |
2178 def debugnodemap(ui, repo, **opts): |
2176 """write and inspect on disk nodemap |
2179 """write and inspect on disk nodemap""" |
2177 """ |
|
2178 if opts['dump_new']: |
2180 if opts['dump_new']: |
2179 unfi = repo.unfiltered() |
2181 unfi = repo.unfiltered() |
2180 cl = unfi.changelog |
2182 cl = unfi.changelog |
2181 if util.safehasattr(cl.index, "nodemap_data_all"): |
2183 if util.safehasattr(cl.index, "nodemap_data_all"): |
2182 data = cl.index.nodemap_data_all() |
2184 data = cl.index.nodemap_data_all() |
2400 (b'r', b'removed', None, _(b'show only removed files')), |
2402 (b'r', b'removed', None, _(b'show only removed files')), |
2401 ], |
2403 ], |
2402 _(b'FILESPEC...'), |
2404 _(b'FILESPEC...'), |
2403 ) |
2405 ) |
2404 def debugpathcomplete(ui, repo, *specs, **opts): |
2406 def debugpathcomplete(ui, repo, *specs, **opts): |
2405 '''complete part or all of a tracked path |
2407 """complete part or all of a tracked path |
2406 |
2408 |
2407 This command supports shells that offer path name completion. It |
2409 This command supports shells that offer path name completion. It |
2408 currently completes only files already known to the dirstate. |
2410 currently completes only files already known to the dirstate. |
2409 |
2411 |
2410 Completion extends only to the next path segment unless |
2412 Completion extends only to the next path segment unless |
2411 --full is specified, in which case entire paths are used.''' |
2413 --full is specified, in which case entire paths are used.""" |
2412 |
2414 |
2413 def complete(path, acceptable): |
2415 def complete(path, acceptable): |
2414 dirstate = repo.dirstate |
2416 dirstate = repo.dirstate |
2415 spec = os.path.normpath(os.path.join(encoding.getcwd(), path)) |
2417 spec = os.path.normpath(os.path.join(encoding.getcwd(), path)) |
2416 rootdir = repo.root + pycompat.ossep |
2418 rootdir = repo.root + pycompat.ossep |
2585 ui.write(b'%s = %s\n' % (path, tool)) |
2587 ui.write(b'%s = %s\n' % (path, tool)) |
2586 |
2588 |
2587 |
2589 |
2588 @command(b'debugpushkey', [], _(b'REPO NAMESPACE [KEY OLD NEW]'), norepo=True) |
2590 @command(b'debugpushkey', [], _(b'REPO NAMESPACE [KEY OLD NEW]'), norepo=True) |
2589 def debugpushkey(ui, repopath, namespace, *keyinfo, **opts): |
2591 def debugpushkey(ui, repopath, namespace, *keyinfo, **opts): |
2590 '''access the pushkey key/value protocol |
2592 """access the pushkey key/value protocol |
2591 |
2593 |
2592 With two args, list the keys in the given namespace. |
2594 With two args, list the keys in the given namespace. |
2593 |
2595 |
2594 With five args, set a key to new if it currently is set to old. |
2596 With five args, set a key to new if it currently is set to old. |
2595 Reports success or failure. |
2597 Reports success or failure. |
2596 ''' |
2598 """ |
2597 |
2599 |
2598 target = hg.peer(ui, {}, repopath) |
2600 target = hg.peer(ui, {}, repopath) |
2599 if keyinfo: |
2601 if keyinfo: |
2600 key, old, new = keyinfo |
2602 key, old, new = keyinfo |
2601 with target.commandexecutor() as e: |
2603 with target.commandexecutor() as e: |
3430 ui.writenoi18n(b' %s\n' % stringutil.pprint(value)) |
3432 ui.writenoi18n(b' %s\n' % stringutil.pprint(value)) |
3431 |
3433 |
3432 |
3434 |
3433 @command(b'debugssl', [], b'[SOURCE]', optionalrepo=True) |
3435 @command(b'debugssl', [], b'[SOURCE]', optionalrepo=True) |
3434 def debugssl(ui, repo, source=None, **opts): |
3436 def debugssl(ui, repo, source=None, **opts): |
3435 '''test a secure connection to a server |
3437 """test a secure connection to a server |
3436 |
3438 |
3437 This builds the certificate chain for the server on Windows, installing the |
3439 This builds the certificate chain for the server on Windows, installing the |
3438 missing intermediates and trusted root via Windows Update if necessary. It |
3440 missing intermediates and trusted root via Windows Update if necessary. It |
3439 does nothing on other platforms. |
3441 does nothing on other platforms. |
3440 |
3442 |
3441 If SOURCE is omitted, the 'default' path will be used. If a URL is given, |
3443 If SOURCE is omitted, the 'default' path will be used. If a URL is given, |
3442 that server is used. See :hg:`help urls` for more information. |
3444 that server is used. See :hg:`help urls` for more information. |
3443 |
3445 |
3444 If the update succeeds, retry the original operation. Otherwise, the cause |
3446 If the update succeeds, retry the original operation. Otherwise, the cause |
3445 of the SSL error is likely another issue. |
3447 of the SSL error is likely another issue. |
3446 ''' |
3448 """ |
3447 if not pycompat.iswindows: |
3449 if not pycompat.iswindows: |
3448 raise error.Abort( |
3450 raise error.Abort( |
3449 _(b'certificate chain building is only possible on Windows') |
3451 _(b'certificate chain building is only possible on Windows') |
3450 ) |
3452 ) |
3451 |
3453 |
3783 displayer.close() |
3785 displayer.close() |
3784 |
3786 |
3785 |
3787 |
3786 @command( |
3788 @command( |
3787 b'debuguigetpass', |
3789 b'debuguigetpass', |
3788 [(b'p', b'prompt', b'', _(b'prompt text'), _(b'TEXT')),], |
3790 [ |
|
3791 (b'p', b'prompt', b'', _(b'prompt text'), _(b'TEXT')), |
|
3792 ], |
3789 _(b'[-p TEXT]'), |
3793 _(b'[-p TEXT]'), |
3790 norepo=True, |
3794 norepo=True, |
3791 ) |
3795 ) |
3792 def debuguigetpass(ui, prompt=b''): |
3796 def debuguigetpass(ui, prompt=b''): |
3793 """show prompt to type password""" |
3797 """show prompt to type password""" |
3799 ui.writenoi18n(b'response: %s\n' % r) |
3803 ui.writenoi18n(b'response: %s\n' % r) |
3800 |
3804 |
3801 |
3805 |
3802 @command( |
3806 @command( |
3803 b'debuguiprompt', |
3807 b'debuguiprompt', |
3804 [(b'p', b'prompt', b'', _(b'prompt text'), _(b'TEXT')),], |
3808 [ |
|
3809 (b'p', b'prompt', b'', _(b'prompt text'), _(b'TEXT')), |
|
3810 ], |
3805 _(b'[-p TEXT]'), |
3811 _(b'[-p TEXT]'), |
3806 norepo=True, |
3812 norepo=True, |
3807 ) |
3813 ) |
3808 def debuguiprompt(ui, prompt=b''): |
3814 def debuguiprompt(ui, prompt=b''): |
3809 """show plain prompt""" |
3815 """show plain prompt""" |