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

hgignore: complete most of the TODO items

Changeset 4b8339bc5377

Parent 344105df4215

by Steve Borho

Changes to one file · Browse files at 4b8339bc5377 Showing diff from parent 344105df4215 Diff from another changeset...

 
20
21
22
23
24
25
26
27
28
 
87
88
89
 
 
 
 
 
90
91
92
 
99
100
101
 
102
103
104
105
106
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
107
108
109
 
150
151
152
153
 
154
155
 
156
157
158
 
20
21
22
 
 
 
23
24
25
 
84
85
86
87
88
89
90
91
92
93
94
 
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
 
197
198
199
 
200
201
 
202
203
204
205
@@ -20,9 +20,6 @@
   # Technical Debt:  # Labels for list widgets -# 'del' and 'backspace' to delete lines of hgignore file -# clicking on an unknown should setup a glob for it -# right click on an unknown should offer extension & dir globs    class HgignoreDialog(QDialog):   'Edit a reposiory .hgignore file' @@ -87,6 +84,11 @@
    ignorelist = QListWidget(split)   unknownlist = QListWidget(split) + unknownlist.currentTextChanged.connect(self.setGlobFilter) + unknownlist.setContextMenuPolicy(Qt.CustomContextMenu) + self.connect(unknownlist, + SIGNAL('customContextMenuRequested(const QPoint &)'), + self.customContextMenuRequested)     # layer 4 - dialog buttons   BB = QDialogButtonBox @@ -99,11 +101,56 @@
  le.setFocus()   self.le, self.recombo, self.filecombo = le, recombo, filecombo   self.ignorelist, self.unknownlist = ignorelist, unknownlist + ignorelist.installEventFilter(self)   QTimer.singleShot(0, self.refresh)     s = QSettings()   self.restoreGeometry(s.value('hgignore/geom').toByteArray())   + def eventFilter(self, obj, event): + if obj != self.ignorelist: + return False + if event.type() != QEvent.KeyPress: + return False + elif event.key() not in (Qt.Key_Backspace, Qt.Key_Delete): + return False + row = obj.currentRow() + if row < 0: + return False + self.ignorelines.pop(row) + self.writeIgnoreFile() + self.refresh() + return True + + def customContextMenuRequested(self, point): + 'context menu request for unknown list' + def trigger(text): + self.ignorelines.append('glob:'+text) + self.writeIgnoreFile() + self.refresh() + point = self.unknownlist.mapToGlobal(point) + local = self.lclunknowns[self.unknownlist.currentRow()] + menu = QMenu(self) + menu.setTitle(_('Add ignore filter...')) + filters = [local] + base, ext = os.path.splitext(local) + if ext: + filters.append('*'+ext) + dirname = os.path.dirname(local) + while dirname: + filters.append(dirname) + dirname = os.path.dirname(dirname) + for f in filters: + action = menu.addAction(_('Ignore ') + hglib.tounicode(f)) + action.localtext = f + action.wrapper = lambda f=f: trigger(f) + self.connect(action, SIGNAL('triggered()'), action.wrapper) + menu.exec_(point) + + def setGlobFilter(self, qstr): + 'user selected an unknown file; prep a glob filter' + self.recombo.setCurrentIndex(0) + self.le.setText(qstr)     def fileselect(self):   'user selected another ignore file' @@ -150,9 +197,9 @@
  qtlib.WarningMsgBox(_('Unable to read repository status'),   uni(str(e)), parent=self)   - self.unknown = wctx.unknown() + self.lclunknowns = wctx.unknown()   self.unknownlist.clear() - self.unknownlist.addItems([uni(u) for u in self.unknown]) + self.unknownlist.addItems([uni(u) for u in self.lclunknowns])     try:   l = open(self.ignorefile, 'rb').readlines()