Kiln » TortoiseHg » TortoiseHg
Clone URL:  
Pushed to one repository · View In Graph

quickop, wctxactions, lfprompt: add support for adding largefiles

Changeset ee22f90f98aa

Parent 4dfdb0026af9

by David Golub

Changes to 3 files · Browse files at ee22f90f98aa Showing diff from parent 4dfdb0026af9 Diff from another changeset...

Change 1 of 2 Show Entire File tortoisehg/​hgqt/​lfprompt.py Stacked
renamed from tortoisehg/hgqt/bfprompt.py
 
11
12
13
 
 
 
 
 
 
 
 
 
 
 
 
14
15
16
 
23
24
25
26
27
28
29
30
 
 
 
 
 
 
 
 
 
 
 
31
32
33
34
35
36
37
 
38
39
40
41
42
 
 
 
 
 
 
 
43
44
45
46
 
 
 
47
48
49
 
50
51
52
 
 
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
35
36
37
 
 
 
 
 
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
 
55
56
 
 
 
 
57
58
59
60
61
62
63
64
 
 
 
65
66
67
68
69
 
70
71
72
 
73
@@ -11,6 +11,18 @@
 from tortoisehg.hgqt import qtlib  from tortoisehg.hgqt.i18n import _   +class LfilesPrompt(qtlib.CustomPrompt): + def __init__(self, parent, files=None): + qtlib.CustomPrompt.__init__(self, _('Confirm Add'), + _('Some of the files that you have selected are of a size ' + 'over 10 MB. You may make more efficient use of disk space ' + 'by adding these files as largefiles, which will store only the ' + 'most recent revision of each file in your local repository, ' + 'with older revisions available on the server. Do you wish ' + 'to add these files as largefiles?'), parent, + (_('Add as &Largefiles'), _('Add as &Normal Files'), _('Cancel')), + 0, 2, files) +  class BfilesPrompt(qtlib.CustomPrompt):   def __init__(self, parent, files=None):   qtlib.CustomPrompt.__init__(self, _('Confirm Add'), @@ -23,30 +35,39 @@
  (_('Add as &Bfiles'), _('Add as &Normal Files'), _('Cancel')),   0, 2, files)   -def promptForBfiles(parent, ui, repo, files): - bfiles = [] - usekbf = os.path.exists(repo.standin('.kbf')) - minsize = int(ui.config('kilnbfiles', 'size', default='10')) - patterns = ui.config('kilnbfiles', 'patterns', default=()) +def promptForLfiles(parent, ui, repo, files, haskbf=False): + lfiles = [] + usekbf = os.path.exists('.kbf') + uself = os.path.exists('.hglf') + useneither = not usekbf and not uself + if haskbf: + section = 'kilnbfiles' + else: + section = 'largefiles' + minsize = int(ui.config(section, 'size', default='10')) + patterns = ui.config(section, 'patterns', default=())   if patterns:   patterns = patterns.split(' ')   matcher = match.match(repo.root, '', list(patterns))   else:   matcher = None   for wfile in files: - if not matcher or not matcher(wfile) or not usekbf: + if not matcher or not matcher(wfile) or useneither:   filesize = os.path.getsize(repo.wjoin(wfile)) - if filesize >= 10*1024*1024 and (filesize < minsize*1024*1024 or not usekbf): - bfiles.append(wfile) - if bfiles: - ret = BfilesPrompt(parent, files).run() + if filesize >= 10*1024*1024 and (filesize < minsize*1024*1024 or useneither): + lfiles.append(wfile) + if lfiles: + if haskbf: + ret = BfilesPrompt(parent, files).run() + else: + ret = LfilesPrompt(parent, files).run()   if ret == 0: - # add as bfiles - for bfile in bfiles: - files.remove(bfile) + # add as largefiles/bfiles + for lfile in lfiles: + files.remove(lfile)   elif ret == 1:   # add as normal files - bfiles = [] + lfiles = []   elif ret == 2:   return None - return files, bfiles + return files, lfiles
 
12
13
14
15
 
16
17
18
 
102
103
104
105
106
107
108
 
 
 
 
 
 
 
 
 
 
109
110
111
 
142
143
144
 
145
146
 
147
148
149
 
152
153
154
155
156
157
 
 
 
 
158
159
160
 
175
176
177
178
179
 
 
 
 
 
180
181
182
 
188
189
190
191
 
 
192
193
194
 
198
199
200
201
 
 
 
 
202
203
204
 
12
13
14
 
15
16
17
18
 
102
103
104
 
 
 
 
105
106
107
108
109
110
111
112
113
114
115
116
117
 
148
149
150
151
152
153
154
155
156
157
 
160
161
162
 
 
 
163
164
165
166
167
168
169
 
184
185
186
 
 
187
188
189
190
191
192
193
194
 
200
201
202
 
203
204
205
206
207
 
211
212
213
 
214
215
216
217
218
219
220
@@ -12,7 +12,7 @@
   from tortoisehg.util import hglib, shlib  from tortoisehg.hgqt.i18n import _ -from tortoisehg.hgqt import qtlib, status, cmdui, bfprompt +from tortoisehg.hgqt import qtlib, status, cmdui, lfprompt    from PyQt4.QtCore import *  from PyQt4.QtGui import * @@ -102,10 +102,16 @@
  toplayout.addLayout(hbox)   self.bb = bb   - if self.command == 'add' and 'kbfiles' in self.repo.extensions(): - self.addBfilesButton = QPushButton(_("Add &Bfiles")) - self.addBfilesButton.clicked.connect(self.addBfiles) - bb.addButton(self.addBfilesButton, BB.ActionRole) + if self.command == 'add': + if 'largefiles' in self.repo.extensions(): + self.addLfilesButton = QPushButton(_('Add &Largefiles')) + elif 'kbfiles' in self.repo.extensions(): + self.addLfilesButton = QPushButton(_("Add &Bfiles")) + else: + self.addLfilesButton = None + if self.addLfilesButton: + self.addLfilesButton.clicked.connect(self.addLfiles) + bb.addButton(self.addLfilesButton, BB.ActionRole)     layout.addWidget(self.statusbar)   @@ -142,8 +148,10 @@
  return   if self.command == 'remove':   self.repo.bfstatus = True + self.repo.lfstatus = True   repostate = self.repo.status()   self.repo.bfstatus = False + self.repo.lfstatus = False   unknown, ignored = repostate[4:6]   for wfile in files:   if wfile in unknown or wfile in ignored: @@ -152,9 +160,10 @@
  except EnvironmentError:   pass   files.remove(wfile) - elif self.command == 'add' and 'kbfiles' in self.repo.extensions(): - self.addWithPrompt(files) - return + elif self.command == 'add': + if 'largefiles' in self.repo.extensions() or 'kbfiles' in self.repo.extensions(): + self.addWithPrompt(files) + return   if files:   cmdline.extend(files)   self.files = files @@ -175,8 +184,11 @@
  s.setValue('quickop/nobackup', self.chk.isChecked())   QDialog.reject(self)   - def addBfiles(self): - cmdline = ['add', '--bf'] + def addLfiles(self): + if 'kbfiles' in self.repo.extensions(): + cmdline = ['add', '--bf'] + else: + cmdline = ['add', '--large']   files = self.stwidget.getChecked()   if not files:   qtlib.WarningMsgBox(_('No files selected'), @@ -188,7 +200,8 @@
  self.cmd.run(cmdline)     def addWithPrompt(self, files): - result = bfprompt.promptForBfiles(self, self.repo.ui, self.repo, files) + result = lfprompt.promptForLfiles(self, self.repo.ui, self.repo, files, + 'kbfiles' in self.repo.extensions())   if not result:   return   files, bfiles = result @@ -198,7 +211,10 @@
  self.files = files   self.cmd.run(cmdline)   if bfiles: - cmdline = ['add', '--bf'] + if 'kbfiles' in self.repo.extensions(): + cmdline = ['add', '--bf'] + else: + cmdline = ['add', '--large']   cmdline.extend(bfiles)   self.files = bfiles   self.cmd.run(cmdline)
 
52
53
54
55
56
 
 
 
 
57
58
59
 
268
269
270
271
 
 
272
273
274
275
 
276
 
 
 
 
 
 
 
277
278
279
280
281
282
 
 
283
284
285
286
287
 
288
 
 
 
 
289
290
291
 
52
53
54
 
 
55
56
57
58
59
60
61
 
270
271
272
 
273
274
275
276
277
 
278
279
280
281
282
283
284
285
286
287
288
289
290
 
 
291
292
293
294
295
296
 
297
298
299
300
301
302
303
304
305
@@ -52,8 +52,10 @@
  allactions.append(None)   make(_('&Forget'), forget, frozenset('MAC!'), 'filedelete')   make(_('&Add'), add, frozenset('I?'), 'fileadd') - if 'kbfiles' in self.repo.extensions(): - make(_('Add &Bfiles'), addbf, frozenset('I?')) + if 'largefiles' in self.repo.extensions(): + make(_('Add &Largefiles...'), addlf, frozenset('I?')) + elif 'kbfiles' in self.repo.extensions(): + make(_('Add &Bfiles'), addlf, frozenset('I?'))   make(_('&Detect Renames...'), guessRename, frozenset('A?!'),   'detect_rename')   make(_('&Ignore...'), ignore, frozenset('?'), 'ignore') @@ -268,24 +270,36 @@
  return True    def add(parent, ui, repo, files): - if 'kbfiles' in repo.extensions(): + haslf = 'largefiles' in repo.extensions() + if haslf or 'kbfiles' in repo.extensions():   result = bfprompt.promptForBfiles(parent, ui, repo, files)   if not result:   return False - files, bfiles = result + files, lfiles = result   for name, module in extensions.extensions(): + if name == 'largefiles': + override_add = module.lfsetup.override_add + if files: + override_add(commands.add, ui, repo, *files) + if lfiles: + override_add(commands.add, ui, repo, large=True, *lfiles) + return True   if name == 'kbfiles':   override_add = module.bfsetup.override_add   if files:   override_add(commands.add, ui, repo, *files) - if bfiles: - override_add(commands.add, ui, repo, bf=1, *bfiles) + if lfiles: + override_add(commands.add, ui, repo, bf=True, *lfiles)   return True   commands.add(ui, repo, *files)   return True   -def addbf(parent, ui, repo, files): +def addlf(parent, ui, repo, files):   for name, module in extensions.extensions(): + if name == 'largefiles': + override_add = module.lfsetup.override_add + override_add(commands.add, ui, repo, large=True, *files) + return True   if name == 'kbfiles':   override_add = module.bfsetup.override_add   override_add(commands.add, ui, repo, bf=True, *files)