hgext/largefiles/uisetup.py
branchstable
changeset 41290 593718ff5844
parent 41146 fbd168455b26
parent 41289 593f6359681d
child 41291 9c290711e175
equal deleted inserted replaced
41146:fbd168455b26 41290:593718ff5844
     1 # Copyright 2009-2010 Gregory P. Ward
       
     2 # Copyright 2009-2010 Intelerad Medical Systems Incorporated
       
     3 # Copyright 2010-2011 Fog Creek Software
       
     4 # Copyright 2010-2011 Unity Technologies
       
     5 #
       
     6 # This software may be used and distributed according to the terms of the
       
     7 # GNU General Public License version 2 or any later version.
       
     8 
       
     9 '''setup for largefiles extension: uisetup'''
       
    10 from __future__ import absolute_import
       
    11 
       
    12 from mercurial.i18n import _
       
    13 
       
    14 from mercurial.hgweb import (
       
    15     webcommands,
       
    16 )
       
    17 
       
    18 from mercurial import (
       
    19     archival,
       
    20     cmdutil,
       
    21     commands,
       
    22     copies,
       
    23     exchange,
       
    24     extensions,
       
    25     filemerge,
       
    26     hg,
       
    27     httppeer,
       
    28     merge,
       
    29     scmutil,
       
    30     sshpeer,
       
    31     subrepo,
       
    32     upgrade,
       
    33     url,
       
    34     wireprotov1server,
       
    35 )
       
    36 
       
    37 from . import (
       
    38     overrides,
       
    39     proto,
       
    40 )
       
    41 
       
    42 def uisetup(ui):
       
    43     # Disable auto-status for some commands which assume that all
       
    44     # files in the result are under Mercurial's control
       
    45 
       
    46     entry = extensions.wrapcommand(commands.table, 'add',
       
    47                                    overrides.overrideadd)
       
    48     addopt = [('', 'large', None, _('add as largefile')),
       
    49               ('', 'normal', None, _('add as normal file')),
       
    50               ('', 'lfsize', '', _('add all files above this size '
       
    51                                    '(in megabytes) as largefiles '
       
    52                                    '(default: 10)'))]
       
    53     entry[1].extend(addopt)
       
    54 
       
    55     # The scmutil function is called both by the (trivial) addremove command,
       
    56     # and in the process of handling commit -A (issue3542)
       
    57     extensions.wrapfunction(scmutil, 'addremove', overrides.scmutiladdremove)
       
    58     extensions.wrapfunction(cmdutil, 'add', overrides.cmdutiladd)
       
    59     extensions.wrapfunction(cmdutil, 'remove', overrides.cmdutilremove)
       
    60     extensions.wrapfunction(cmdutil, 'forget', overrides.cmdutilforget)
       
    61 
       
    62     extensions.wrapfunction(copies, 'pathcopies', overrides.copiespathcopies)
       
    63 
       
    64     extensions.wrapfunction(upgrade, 'preservedrequirements',
       
    65                             overrides.upgraderequirements)
       
    66 
       
    67     extensions.wrapfunction(upgrade, 'supporteddestrequirements',
       
    68                             overrides.upgraderequirements)
       
    69 
       
    70     # Subrepos call status function
       
    71     entry = extensions.wrapcommand(commands.table, 'status',
       
    72                                    overrides.overridestatus)
       
    73     extensions.wrapfunction(subrepo.hgsubrepo, 'status',
       
    74                             overrides.overridestatusfn)
       
    75 
       
    76     entry = extensions.wrapcommand(commands.table, 'log',
       
    77                                    overrides.overridelog)
       
    78     entry = extensions.wrapcommand(commands.table, 'rollback',
       
    79                                    overrides.overriderollback)
       
    80     entry = extensions.wrapcommand(commands.table, 'verify',
       
    81                                    overrides.overrideverify)
       
    82 
       
    83     verifyopt = [('', 'large', None,
       
    84                   _('verify that all largefiles in current revision exists')),
       
    85                  ('', 'lfa', None,
       
    86                   _('verify largefiles in all revisions, not just current')),
       
    87                  ('', 'lfc', None,
       
    88                   _('verify local largefile contents, not just existence'))]
       
    89     entry[1].extend(verifyopt)
       
    90 
       
    91     entry = extensions.wrapcommand(commands.table, 'debugstate',
       
    92                                    overrides.overridedebugstate)
       
    93     debugstateopt = [('', 'large', None, _('display largefiles dirstate'))]
       
    94     entry[1].extend(debugstateopt)
       
    95 
       
    96     outgoing = lambda orgfunc, *arg, **kwargs: orgfunc(*arg, **kwargs)
       
    97     entry = extensions.wrapcommand(commands.table, 'outgoing', outgoing)
       
    98     outgoingopt = [('', 'large', None, _('display outgoing largefiles'))]
       
    99     entry[1].extend(outgoingopt)
       
   100     cmdutil.outgoinghooks.add('largefiles', overrides.outgoinghook)
       
   101     entry = extensions.wrapcommand(commands.table, 'summary',
       
   102                                    overrides.overridesummary)
       
   103     summaryopt = [('', 'large', None, _('display outgoing largefiles'))]
       
   104     entry[1].extend(summaryopt)
       
   105     cmdutil.summaryremotehooks.add('largefiles', overrides.summaryremotehook)
       
   106 
       
   107     entry = extensions.wrapcommand(commands.table, 'pull',
       
   108                                    overrides.overridepull)
       
   109     pullopt = [('', 'all-largefiles', None,
       
   110                  _('download all pulled versions of largefiles (DEPRECATED)')),
       
   111                ('', 'lfrev', [],
       
   112                 _('download largefiles for these revisions'), _('REV'))]
       
   113     entry[1].extend(pullopt)
       
   114 
       
   115     entry = extensions.wrapcommand(commands.table, 'push',
       
   116                                    overrides.overridepush)
       
   117     pushopt = [('', 'lfrev', [],
       
   118                 _('upload largefiles for these revisions'), _('REV'))]
       
   119     entry[1].extend(pushopt)
       
   120     extensions.wrapfunction(exchange, 'pushoperation',
       
   121                             overrides.exchangepushoperation)
       
   122 
       
   123     entry = extensions.wrapcommand(commands.table, 'clone',
       
   124                                    overrides.overrideclone)
       
   125     cloneopt = [('', 'all-largefiles', None,
       
   126                  _('download all versions of all largefiles'))]
       
   127     entry[1].extend(cloneopt)
       
   128     extensions.wrapfunction(hg, 'clone', overrides.hgclone)
       
   129 
       
   130     entry = extensions.wrapcommand(commands.table, 'cat',
       
   131                                    overrides.overridecat)
       
   132     extensions.wrapfunction(merge, '_checkunknownfile',
       
   133                             overrides.overridecheckunknownfile)
       
   134     extensions.wrapfunction(merge, 'calculateupdates',
       
   135                             overrides.overridecalculateupdates)
       
   136     extensions.wrapfunction(merge, 'recordupdates',
       
   137                             overrides.mergerecordupdates)
       
   138     extensions.wrapfunction(merge, 'update', overrides.mergeupdate)
       
   139     extensions.wrapfunction(filemerge, '_filemerge',
       
   140                             overrides.overridefilemerge)
       
   141     extensions.wrapfunction(cmdutil, 'copy', overrides.overridecopy)
       
   142 
       
   143     # Summary calls dirty on the subrepos
       
   144     extensions.wrapfunction(subrepo.hgsubrepo, 'dirty', overrides.overridedirty)
       
   145 
       
   146     extensions.wrapfunction(cmdutil, 'revert', overrides.overriderevert)
       
   147 
       
   148     extensions.wrapcommand(commands.table, 'archive',
       
   149                            overrides.overridearchivecmd)
       
   150     extensions.wrapfunction(archival, 'archive', overrides.overridearchive)
       
   151     extensions.wrapfunction(subrepo.hgsubrepo, 'archive',
       
   152                             overrides.hgsubrepoarchive)
       
   153     extensions.wrapfunction(webcommands, 'archive', overrides.hgwebarchive)
       
   154     extensions.wrapfunction(cmdutil, 'bailifchanged',
       
   155                             overrides.overridebailifchanged)
       
   156 
       
   157     extensions.wrapfunction(cmdutil, 'postcommitstatus',
       
   158                             overrides.postcommitstatus)
       
   159     extensions.wrapfunction(scmutil, 'marktouched',
       
   160                             overrides.scmutilmarktouched)
       
   161 
       
   162     extensions.wrapfunction(url, 'open',
       
   163                             overrides.openlargefile)
       
   164 
       
   165     # create the new wireproto commands ...
       
   166     wireprotov1server.wireprotocommand('putlfile', 'sha', permission='push')(
       
   167         proto.putlfile)
       
   168     wireprotov1server.wireprotocommand('getlfile', 'sha', permission='pull')(
       
   169         proto.getlfile)
       
   170     wireprotov1server.wireprotocommand('statlfile', 'sha', permission='pull')(
       
   171         proto.statlfile)
       
   172     wireprotov1server.wireprotocommand('lheads', '', permission='pull')(
       
   173         wireprotov1server.heads)
       
   174 
       
   175     # ... and wrap some existing ones
       
   176     extensions.wrapfunction(wireprotov1server.commands['heads'], 'func',
       
   177                             proto.heads)
       
   178     # TODO also wrap wireproto.commandsv2 once heads is implemented there.
       
   179 
       
   180     extensions.wrapfunction(webcommands, 'decodepath', overrides.decodepath)
       
   181 
       
   182     extensions.wrapfunction(wireprotov1server, '_capabilities',
       
   183                             proto._capabilities)
       
   184 
       
   185     # can't do this in reposetup because it needs to have happened before
       
   186     # wirerepo.__init__ is called
       
   187     proto.ssholdcallstream = sshpeer.sshv1peer._callstream
       
   188     proto.httpoldcallstream = httppeer.httppeer._callstream
       
   189     sshpeer.sshv1peer._callstream = proto.sshrepocallstream
       
   190     httppeer.httppeer._callstream = proto.httprepocallstream
       
   191 
       
   192     # override some extensions' stuff as well
       
   193     for name, module in extensions.extensions():
       
   194         if name == 'purge':
       
   195             extensions.wrapcommand(getattr(module, 'cmdtable'), 'purge',
       
   196                 overrides.overridepurge)
       
   197         if name == 'rebase':
       
   198             extensions.wrapcommand(getattr(module, 'cmdtable'), 'rebase',
       
   199                 overrides.overriderebase)
       
   200             extensions.wrapfunction(module, 'rebase',
       
   201                                     overrides.overriderebase)
       
   202         if name == 'transplant':
       
   203             extensions.wrapcommand(getattr(module, 'cmdtable'), 'transplant',
       
   204                 overrides.overridetransplant)