Kiln » TortoiseHg » TortoiseHg
Clone URL:  
Pushed to one repository · View In Graph Contained in 1.9, 1.9.1, and 1.9.2

repofilter: add a filter checkbutton

Toggles the display of revision sets as a filtered list or as part of the
whole revision graph. Filters and branch selections now survive reloads

Changeset f3be99f8c173

Parent a3d329cf076d

by Steve Borho

Changes to 4 files · Browse files at f3be99f8c173 Showing diff from parent a3d329cf076d Diff from another changeset...

 
36
37
38
39
 
40
41
42
 
36
37
38
 
39
40
41
42
@@ -36,7 +36,7 @@
  """   data is a HgHLRepo instance   """ - HgRepoListModel.__init__(self, repo, parent=parent) + HgRepoListModel.__init__(self, repo, '', [], False, parent)   self.setFilename(filename)     def setRepo(self, repo, branch='', fromhead=None, follow=False):
 
17
18
19
 
20
21
22
 
48
49
50
51
52
 
 
53
54
55
56
57
 
 
 
 
 
58
59
60
 
95
96
97
 
98
99
100
 
17
18
19
20
21
22
23
 
49
50
51
 
 
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
 
101
102
103
104
105
106
107
@@ -17,6 +17,7 @@
    revisionSet = pyqtSignal(object)   clearSet = pyqtSignal() + filterToggled = pyqtSignal(bool)     showMessage = pyqtSignal(QString)   progress = pyqtSignal(QString, object, QString, QString, object) @@ -48,13 +49,18 @@
  self.revsetle = le = QLineEdit()   le.setCompleter(QCompleter(self.revsethist))   le.returnPressed.connect(self.returnPressed) - # Requires Qt 4.7 - #self.revsetle.setPlaceholderText('### revision set query ###') + if hasattr(self.revsetle, 'setPlaceholderText'): # Qt >= 4.7 + self.revsetle.setPlaceholderText('### revision set query ###')   self.addWidget(le)     self.clear.clicked.connect(le.clear)   self.clear.clicked.connect(self.clearSet)   + self.filtercb = f = QCheckBox(_('filter')) + f.setChecked(s.value('revset-filter').toBool()) + f.toggled.connect(self.filterToggled) + self.addWidget(f) +   self.store = store = QPushButton(_('store'))   store.clicked.connect(self.saveQuery)   le.textChanged.connect(lambda t: store.setEnabled(False)) @@ -95,6 +101,7 @@
  def storeConfigs(self, s):   s.setValue('revset/geom', self.entrydlg.saveGeometry())   s.setValue('revset-queries', self.revsethist) + s.setValue('revset-filter', self.filtercb.isChecked())     def _initbranchfilter(self):   self._branchLabel = QToolButton(
 
85
86
87
88
 
89
90
91
 
97
98
99
100
 
 
101
102
103
 
126
127
128
129
 
130
131
132
 
85
86
87
 
88
89
90
91
 
97
98
99
 
100
101
102
103
104
 
127
128
129
 
130
131
132
133
@@ -85,7 +85,7 @@
  _columns = ('Graph', 'ID', 'Branch', 'Log', 'Author', 'Age', 'Tags',)   _stretchs = {'Log': 1, }   - def __init__(self, repo, branch='', parent=None): + def __init__(self, repo, branch, revset, rfilter, parent):   """   repo is a hg repo instance   """ @@ -97,7 +97,8 @@
  self.rowheight = 20   self.rowcount = 0   self.repo = repo - self.revset = () + self.revset = revset + self.filterbyrevset = rfilter   self.reloadConfig()   self.updateColumns()   self.setBranch(branch) @@ -126,7 +127,7 @@
  def setBranch(self, branch=None, allparents=True):   self.filterbranch = branch   self.datacache = {} - if self.revset: # TODO: and self.filterbyrevset + if self.revset and self.filterbyrevset:   grapher = revision_grapher(self.repo, revset=self.revset)   self.graph = Graph(self.repo, grapher, include_mq=False)   else:
 
54
55
56
 
 
 
57
58
59
 
78
79
80
 
81
82
 
 
83
84
85
 
148
149
150
151
 
152
153
154
 
207
208
209
210
211
 
 
 
 
 
 
212
213
214
215
 
 
 
 
 
 
 
 
 
 
 
 
 
216
217
218
 
312
313
314
315
316
317
318
 
367
368
369
370
371
372
373
374
 
 
 
 
 
 
 
 
375
376
377
 
400
401
402
403
404
 
 
 
405
406
407
408
409
410
411
412
413
 
519
520
521
 
522
523
524
 
54
55
56
57
58
59
60
61
62
 
81
82
83
84
85
86
87
88
89
90
91
 
154
155
156
 
157
158
159
160
 
213
214
215
 
 
216
217
218
219
220
221
222
223
 
 
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
 
333
334
335
 
336
337
338
 
387
388
389
 
 
 
 
 
390
391
392
393
394
395
396
397
398
399
400
 
423
424
425
 
 
426
427
428
429
430
431
 
 
 
432
433
434
 
540
541
542
543
544
545
546
@@ -54,6 +54,9 @@
  repo.repositoryDestroyed.connect(self.repositoryDestroyed)   repo.configChanged.connect(self.configChanged)   self.workbench = workbench + self.revsetfilter = False + self.branch = '' + self.revset = set()     self._reload_rev = '.' # select working parent at startup   self.currentMessage = '' @@ -78,8 +81,11 @@
  self.filterbar.showMessage.connect(self.showMessage)   self.filterbar.revisionSet.connect(self.setRevisionSet)   self.filterbar.clearSet.connect(self.clearSet) + self.filterbar.filterToggled.connect(self.filterToggled)   self.layout().addWidget(self.filterbar)   + self.revsetfilter = self.filterbar.filtercb.isChecked() +   self.layout().addWidget(self.repotabs_splitter)     self.repoview = view = HgRepoView(self.workbench, self.repo) @@ -148,7 +154,7 @@
  def createCommitWidget(self):   cw = self.getCommitWidget()   if cw: - cw.commitComplete.connect(self.reload) + cw.commitComplete.connect(self.reload) # todo: redundant?   return SharedWidget(cw)     pats = {} @@ -207,12 +213,27 @@
  return SharedWidget(sw)     def clearSet(self): - self.repomodel.revset = set() - self.refresh() + self.revset = [] + if self.revsetfilter: + self.reload() + else: + self.repomodel.revset = [] + self.refresh()     def setRevisionSet(self, nodes): - self.repomodel.revset = [self.repo[n].node() for n in nodes] - self.refresh() + self.revset = [self.repo[n].node() for n in nodes] + if self.revsetfilter: + self.reload() + else: + self.repomodel.revset = self.revset + self.refresh() + + @pyqtSlot(bool) + def filterToggled(self, checked): + self.revsetfilter = checked + if self.revset: + self.repomodel.filterbyrevset = checked + self.reload()     def setOutgoingNodes(self, nodes):   self.filterbar.revsetle.setText('outgoing()') @@ -312,7 +333,6 @@
    def thgimport(self, paths=None):   dlg = thgimport.ImportDialog(repo=self.repo, parent=self) - dlg.repoInvalidated.connect(self.reload)   dlg.finished.connect(dlg.deleteLater)   if paths:   dlg.setfilepaths(paths) @@ -367,11 +387,14 @@
  'by this rollback, leaving uncommitted changes.\n '   'Continue?' % rev)):   return - saved = self.repo.ui.quiet - self.repo.ui.quiet = True - self.repo.rollback() - self.repo.ui.quiet = saved - self.reload() + self.repo.incrementBusyCount() + try: + saved = self.repo.ui.quiet + self.repo.ui.quiet = True + self.repo.rollback() + self.repo.ui.quiet = saved + finally: + self.repo.decrementBusyCount()   QTimer.singleShot(500, lambda: shlib.shell_notify([self.repo.root]))     def purge(self): @@ -400,14 +423,12 @@
  self.taskTabsWidget.setCurrentIndex(self.grepTabIndex)   self.grepDemand.setSearch(pattern, **opts)   - def create_models(self): - self.repomodel = HgRepoListModel(self.repo, parent=self) + def setupModels(self): + self.repomodel = HgRepoListModel(self.repo, self.branch, self.revset, + self.revsetfilter, self)   self.repomodel.filled.connect(self.modelFilled)   self.repomodel.loaded.connect(self.modelLoaded)   self.repomodel.showMessage.connect(self.showMessage) - - def setupModels(self): - self.create_models()   self.repoview.setModel(self.repomodel)   self.revDetailsWidget.setupModels(self.repomodel)   @@ -519,6 +540,7 @@
  @pyqtSlot(unicode, bool)   def setBranch(self, branch, allparents=True):   'Change the branch filter' + self.branch = branch   self.repomodel.setBranch(branch=branch, allparents=allparents)   self.titleChanged.emit(self.title())