mercurial/debugcommands.py
changeset 45957 89a2afe31e82
parent 45944 87e7dd8e7734
child 46012 7c539f0febbe
equal deleted inserted replaced
45956:346af7687c6f 45957:89a2afe31e82
  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"""
  4312         if ui.verbose:
  4318         if ui.verbose:
  4313             openerargs.update(
  4319             openerargs.update(
  4314                 {
  4320                 {
  4315                     'loggingfh': ui,
  4321                     'loggingfh': ui,
  4316                     'loggingname': b's',
  4322                     'loggingname': b's',
  4317                     'loggingopts': {'logdata': True, 'logdataapis': False,},
  4323                     'loggingopts': {
       
  4324                         'logdata': True,
       
  4325                         'logdataapis': False,
       
  4326                     },
  4318                 }
  4327                 }
  4319             )
  4328             )
  4320 
  4329 
  4321         if ui.debugflag:
  4330         if ui.debugflag:
  4322             openerargs['loggingopts']['logdataapis'] = True
  4331             openerargs['loggingopts']['logdataapis'] = True