comparison hgext/largefiles/uisetup.py @ 15168:cfccd3bee7b3

hgext: add largefiles extension This code has a number of contributors and a complicated history prior to its introduction that can be seen by visiting: https://developers.kilnhg.com/Repo/Kiln/largefiles/largefiles http://hg.gerg.ca/hg-bfiles and looking at the included copyright notices and contributors list.
author various
date Sat, 24 Sep 2011 17:35:45 +0200
parents
children aa262fff87ac
comparison
equal deleted inserted replaced
15167:8df4166b6f63 15168:cfccd3bee7b3
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
11 from mercurial import archival, cmdutil, commands, extensions, filemerge, hg, \
12 httprepo, localrepo, sshrepo, sshserver, wireproto
13 from mercurial.i18n import _
14 from mercurial.hgweb import hgweb_mod, protocol
15
16 import overrides
17 import proto
18
19 def uisetup(ui):
20 # Disable auto-status for some commands which assume that all
21 # files in the result are under Mercurial's control
22
23 entry = extensions.wrapcommand(commands.table, 'add', overrides.override_add)
24 addopt = [('', 'large', None, _('add as largefile')),
25 ('', 'lfsize', '', _('add all files above this size (in megabytes)'
26 'as largefiles (default: 10)'))]
27 entry[1].extend(addopt)
28
29 entry = extensions.wrapcommand(commands.table, 'addremove',
30 overrides.override_addremove)
31 entry = extensions.wrapcommand(commands.table, 'remove', overrides.override_remove)
32 entry = extensions.wrapcommand(commands.table, 'forget', overrides.override_forget)
33 entry = extensions.wrapcommand(commands.table, 'status', overrides.override_status)
34 entry = extensions.wrapcommand(commands.table, 'log', overrides.override_log)
35 entry = extensions.wrapcommand(commands.table, 'rollback',
36 overrides.override_rollback)
37
38 entry = extensions.wrapcommand(commands.table, 'verify', overrides.override_verify)
39 verifyopt = [('', 'large', None, _('verify largefiles')),
40 ('', 'lfa', None,
41 _('verify all revisions of largefiles not just current')),
42 ('', 'lfc', None,
43 _('verify largefile contents not just existence'))]
44 entry[1].extend(verifyopt)
45
46 entry = extensions.wrapcommand(commands.table, 'outgoing',
47 overrides.override_outgoing)
48 outgoingopt = [('', 'large', None, _('display outgoing largefiles'))]
49 entry[1].extend(outgoingopt)
50 entry = extensions.wrapcommand(commands.table, 'summary', overrides.override_summary)
51 summaryopt = [('', 'large', None, _('display outgoing largefiles'))]
52 entry[1].extend(summaryopt)
53
54 entry = extensions.wrapcommand(commands.table, 'update', overrides.override_update)
55 entry = extensions.wrapcommand(commands.table, 'pull', overrides.override_pull)
56 entry = extensions.wrapfunction(filemerge, 'filemerge', overrides.override_filemerge)
57 entry = extensions.wrapfunction(cmdutil, 'copy', overrides.override_copy)
58
59 # Backout calls revert so we need to override both the command and the
60 # function
61 entry = extensions.wrapcommand(commands.table, 'revert', overrides.override_revert)
62 entry = extensions.wrapfunction(commands, 'revert', overrides.override_revert)
63
64 # clone uses hg._update instead of hg.update even though they are the
65 # same function... so wrap both of them)
66 extensions.wrapfunction(hg, 'update', overrides.hg_update)
67 extensions.wrapfunction(hg, '_update', overrides.hg_update)
68 extensions.wrapfunction(hg, 'clean', overrides.hg_clean)
69 extensions.wrapfunction(hg, 'merge', overrides.hg_merge)
70
71 extensions.wrapfunction(archival, 'archive', overrides.override_archive)
72 if hasattr(cmdutil, 'bailifchanged'):
73 extensions.wrapfunction(cmdutil, 'bailifchanged',
74 overrides.override_bailifchanged)
75 else:
76 extensions.wrapfunction(cmdutil, 'bail_if_changed',
77 overrides.override_bailifchanged)
78
79 # create the new wireproto commands ...
80 wireproto.commands['putlfile'] = (proto.putlfile, 'sha')
81 wireproto.commands['getlfile'] = (proto.getlfile, 'sha')
82 wireproto.commands['statlfile'] = (proto.statlfile, 'sha')
83
84 # ... and wrap some existing ones
85 wireproto.commands['capabilities'] = (proto.capabilities, '')
86 wireproto.commands['heads'] = (proto.heads, '')
87 wireproto.commands['lheads'] = (wireproto.heads, '')
88
89 # make putlfile behave the same as push and {get,stat}lfile behave the same
90 # as pull w.r.t. permissions checks
91 hgweb_mod.perms['putlfile'] = 'push'
92 hgweb_mod.perms['getlfile'] = 'pull'
93 hgweb_mod.perms['statlfile'] = 'pull'
94
95 # the hello wireproto command uses wireproto.capabilities, so it won't see
96 # our largefiles capability unless we replace the actual function as well.
97 proto.capabilities_orig = wireproto.capabilities
98 wireproto.capabilities = proto.capabilities
99
100 # these let us reject non-lfiles clients and make them display our error
101 # messages
102 protocol.webproto.refuseclient = proto.webproto_refuseclient
103 sshserver.sshserver.refuseclient = proto.sshproto_refuseclient
104
105 # can't do this in reposetup because it needs to have happened before
106 # wirerepo.__init__ is called
107 proto.ssh_oldcallstream = sshrepo.sshrepository._callstream
108 proto.http_oldcallstream = httprepo.httprepository._callstream
109 sshrepo.sshrepository._callstream = proto.sshrepo_callstream
110 httprepo.httprepository._callstream = proto.httprepo_callstream
111
112 # don't die on seeing a repo with the largefiles requirement
113 localrepo.localrepository.supported |= set(['largefiles'])
114
115 # override some extensions' stuff as well
116 for name, module in extensions.extensions():
117 if name == 'fetch':
118 extensions.wrapcommand(getattr(module, 'cmdtable'), 'fetch',
119 overrides.override_fetch)
120 if name == 'purge':
121 extensions.wrapcommand(getattr(module, 'cmdtable'), 'purge',
122 overrides.override_purge)
123 if name == 'rebase':
124 extensions.wrapcommand(getattr(module, 'cmdtable'), 'rebase',
125 overrides.override_rebase)