3 # Copyright 2011 Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
3 # Copyright 2011 Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
4 # Logilab SA <contact@logilab.fr> |
4 # Logilab SA <contact@logilab.fr> |
5 # |
5 # |
6 # This software may be used and distributed according to the terms of the |
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. |
7 # GNU General Public License version 2 or any later version. |
|
8 import os |
8 |
9 |
9 from mercurial import util |
10 from mercurial import util |
10 from mercurial import context |
11 from mercurial import context |
11 from mercurial import revset |
12 from mercurial import revset |
12 from mercurial import scmutil |
13 from mercurial import scmutil |
13 from mercurial import extensions |
14 from mercurial import extensions |
14 from mercurial import pushkey |
15 from mercurial import pushkey |
15 from mercurial import discovery |
16 from mercurial import discovery |
16 from mercurial import error |
17 from mercurial import error |
17 from mercurial.node import hex, bin |
18 from mercurial.node import hex, bin |
|
19 from mercurial.lock import release |
18 |
20 |
19 # Patch changectx |
21 # Patch changectx |
20 ############################# |
22 ############################# |
21 |
23 |
22 def obsolete(ctx): |
24 def obsolete(ctx): |
220 self.changelog.hiddenrevs.add(repo[obj].rev()) |
224 self.changelog.hiddenrevs.add(repo[obj].rev()) |
221 except error.RepoLookupError: |
225 except error.RepoLookupError: |
222 pass #unknow revision (but keep propagating the data |
226 pass #unknow revision (but keep propagating the data |
223 self._writeobsrels() |
227 self._writeobsrels() |
224 |
228 |
|
229 ### rollback support |
|
230 |
|
231 def _writejournal(self, desc): |
|
232 entries = list(o_writejournal(desc)) |
|
233 filename = 'obsolete-relations' |
|
234 filepath = self.join(filename) |
|
235 if os.path.exists(filepath): |
|
236 journalname = 'journal.' + filename |
|
237 journalpath = self.join(journalname) |
|
238 util.copyfile(filepath, journalpath) |
|
239 entries.append(journalpath) |
|
240 return tuple(entries) |
|
241 |
|
242 def rollback(self, dryrun=False): |
|
243 wlock = lock = None |
|
244 try: |
|
245 wlock = self.wlock() |
|
246 lock = self.lock() |
|
247 ret = orollback(dryrun) |
|
248 if not (ret or dryrun): #rollback did not failed |
|
249 src = self.join('undo.obsolete-relations') |
|
250 dst = self.join('obsolete-relations') |
|
251 if os.path.exists(src): |
|
252 util.rename(src, dst) |
|
253 elif os.path.exists(dst): #unlink in any case |
|
254 os.unlink(dst) |
|
255 # invalidate cache |
|
256 self.__dict__.pop('_obssubrels', None) |
|
257 self.__dict__.pop('_obsobjrels', None) |
|
258 return ret |
|
259 finally: |
|
260 release(lock, wlock) |
|
261 |
225 repo.__class__ = obsoletingrepo |
262 repo.__class__ = obsoletingrepo |
226 |
263 |
227 |
264 |
228 ### Other Extension compat |
265 ### Other Extension compat |
229 ############################ |
266 ############################ |