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) |
|