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

purge: add support for trashcan folder

Changeset c8065af0f354

Parent fb7ad672a175

by Steve Borho

Changes to one file · Browse files at c8065af0f354 Showing diff from parent fb7ad672a175 Diff from another changeset...

 
7
8
9
 
10
11
12
 
27
28
29
 
30
31
32
33
34
 
35
36
37
38
39
 
 
 
 
 
 
 
40
41
42
 
76
77
78
79
 
 
 
 
 
 
80
81
82
 
89
90
91
92
 
93
94
95
 
98
99
100
 
 
 
 
 
101
102
103
104
105
106
107
108
109
 
110
111
112
113
 
114
115
116
 
125
126
127
128
 
129
130
131
 
135
136
137
138
 
139
140
141
142
143
144
 
 
145
146
147
148
149
 
150
151
 
152
153
154
 
 
 
 
 
 
 
 
155
156
157
 
7
8
9
10
11
12
13
 
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
 
86
87
88
 
89
90
91
92
93
94
95
96
97
 
104
105
106
 
107
108
109
110
 
113
114
115
116
117
118
119
120
121
122
123
124
125
126
 
127
128
129
130
131
132
 
133
134
135
136
 
145
146
147
 
148
149
150
151
 
155
156
157
 
158
159
160
161
162
163
 
164
165
166
167
168
169
 
170
171
 
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
@@ -7,6 +7,7 @@
   import os  import stat +import shutil    from mercurial import cmdutil   @@ -27,16 +28,25 @@
  f = self.windowFlags()   self.setWindowFlags(f & ~Qt.WindowContextHelpButtonHint)   self.setLayout(QVBoxLayout()) +   cb = QCheckBox(_('No unknown files found'))   cb.setChecked(False)   cb.setEnabled(False)   self.layout().addWidget(cb)   self.ucb = cb +   cb = QCheckBox(_('No ignored files found'))   cb.setChecked(False)   cb.setEnabled(False)   self.layout().addWidget(cb)   self.icb = cb + + cb = QCheckBox(_('No trash files found')) + cb.setChecked(False) + cb.setEnabled(False) + self.layout().addWidget(cb) + self.tcb = cb +   self.foldercb = QCheckBox(_('Delete empty folders'))   self.foldercb.setChecked(True)   self.layout().addWidget(self.foldercb) @@ -76,7 +86,12 @@
  try:   wctx = repo[None]   wctx.status(ignored=True, unknown=True) - self.files = wctx.unknown(), wctx.ignored() + trashcan = repo.join('Trashcan') + if os.path.isdir(trashcan): + trash = os.listdir(trashcan) + else: + trash = [] + self.files = wctx.unknown(), wctx.ignored(), trash   except Exception, e:   self.error = str(e)   @@ -89,7 +104,7 @@
  self.showMessage.emit(hglib.tounicode(self.th.error))   else:   self.showMessage.emit(_('Ready to purge.')) - U, I = self.files + U, I, T = self.files   if U:   self.ucb.setText(_('Delete %d unknown files') % len(U))   self.ucb.setChecked(True) @@ -98,19 +113,24 @@
  self.icb.setText(_('Delete %d ignored files') % len(I))   self.icb.setChecked(True)   self.icb.setEnabled(True) + if T: + self.tcb.setText(_('Delete %d files in .hg/Trashcan') % + len(T)) + self.tcb.setChecked(True) + self.tcb.setEnabled(True)     self.th = CheckThread(self)   self.th.finished.connect(completed)   self.th.start()     def accept(self): - U, I = self.files   unknown = self.ucb.isChecked()   ignored = self.icb.isChecked() + trash = self.tcb.isChecked()   delf = self.foldercb.isChecked()   keep = self.hgfilecb.isChecked()   - if not (unknown or ignored or delf): + if not (unknown or ignored or trash or delf):   QDialog.accept(self)   return   if not qtlib.QuestionMsgBox(_('Confirm file deletions'), @@ -125,7 +145,7 @@
  len(self.th.failures), parent=self)   QDialog.accept(self)   - self.th = PurgeThread(self.repo, ignored, unknown, delf, keep, self) + self.th = PurgeThread(self.repo, ignored, unknown, trash, delf, keep, self)   self.th.progress.connect(self.progress)   self.th.showMessage.connect(self.showMessage)   self.th.finished.connect(completed) @@ -135,23 +155,32 @@
  progress = pyqtSignal(QString, object, QString, QString, object)   showMessage = pyqtSignal(QString)   - def __init__(self, repo, ignored, unknown, delfolders, keephg, parent): + def __init__(self, repo, ignored, unknown, trash, delf, keephg, parent):   super(PurgeThread, self).__init__(parent)   self.failures = 0   self.repo = repo   self.ignored = ignored   self.unknown = unknown - self.delfolders = delfolders + self.trash = trash + self.delfolders = delf   self.keephg = keephg     def run(self):   self.failures = self.purge(self.repo, self.ignored, self.unknown, - self.delfolders, self.keephg) + self.trash, self.delfolders, self.keephg)   - def purge(self, repo, ignored, unknown, delfolders, keephg): + def purge(self, repo, ignored, unknown, trash, delfolders, keephg):   directories = []   failures = []   + if trash: + self.showMessage.emit(_('Deleting trash folder...')) + trashcan = self.repo.join('Trashcan') + try: + shutil.rmtree(trashcan) + except EnvironmentError: + failures.append(trashcan) +   self.showMessage.emit('')   match = cmdutil.match(repo, [], {})   match.dir = directories.append