##// END OF EJS Templates
transaction: do not rely on a global variable to post_finalize file...
marmoute -
r49534:21ac6aed default
parent child Browse files
Show More
@@ -212,7 +212,11 b' class bmstore(object):'
212 The transaction is then responsible for updating the file content."""
212 The transaction is then responsible for updating the file content."""
213 location = b'' if bookmarksinstore(self._repo) else b'plain'
213 location = b'' if bookmarksinstore(self._repo) else b'plain'
214 tr.addfilegenerator(
214 tr.addfilegenerator(
215 b'bookmarks', (b'bookmarks',), self._write, location=location
215 b'bookmarks',
216 (b'bookmarks',),
217 self._write,
218 location=location,
219 post_finalize=True,
216 )
220 )
217 tr.hookargs[b'bookmark_moved'] = b'1'
221 tr.hookargs[b'bookmark_moved'] = b'1'
218
222
@@ -730,12 +730,14 b' class dirstate(object):'
730 (self._filename_tk,),
730 (self._filename_tk,),
731 lambda f: self._write_tracked_key(tr, f),
731 lambda f: self._write_tracked_key(tr, f),
732 location=b'plain',
732 location=b'plain',
733 post_finalize=True,
733 )
734 )
734 tr.addfilegenerator(
735 tr.addfilegenerator(
735 b'dirstate-1-main',
736 b'dirstate-1-main',
736 (self._filename,),
737 (self._filename,),
737 lambda f: self._writedirstate(tr, f),
738 lambda f: self._writedirstate(tr, f),
738 location=b'plain',
739 location=b'plain',
740 post_finalize=True,
739 )
741 )
740 if write_key:
742 if write_key:
741 tr.addfilegenerator(
743 tr.addfilegenerator(
@@ -743,6 +745,7 b' class dirstate(object):'
743 (self._filename_tk,),
745 (self._filename_tk,),
744 lambda f: self._write_tracked_key(tr, f),
746 lambda f: self._write_tracked_key(tr, f),
745 location=b'plain',
747 location=b'plain',
748 post_finalize=True,
746 )
749 )
747 return
750 return
748
751
@@ -1425,6 +1428,7 b' class dirstate(object):'
1425 (self._filename,),
1428 (self._filename,),
1426 lambda f: self._writedirstate(tr, f),
1429 lambda f: self._writedirstate(tr, f),
1427 location=b'plain',
1430 location=b'plain',
1431 post_finalize=True,
1428 )
1432 )
1429
1433
1430 # ensure that pending file written above is unlinked at
1434 # ensure that pending file written above is unlinked at
@@ -25,16 +25,6 b' from .utils import stringutil'
25
25
26 version = 2
26 version = 2
27
27
28 # These are the file generators that should only be executed after the
29 # finalizers are done, since they rely on the output of the finalizers (like
30 # the changelog having been written).
31 postfinalizegenerators = {
32 b'bookmarks',
33 b'dirstate-0-key-pre',
34 b'dirstate-1-main',
35 b'dirstate-2-key-post',
36 }
37
38 GEN_GROUP_ALL = b'all'
28 GEN_GROUP_ALL = b'all'
39 GEN_GROUP_PRE_FINALIZE = b'prefinalize'
29 GEN_GROUP_PRE_FINALIZE = b'prefinalize'
40 GEN_GROUP_POST_FINALIZE = b'postfinalize'
30 GEN_GROUP_POST_FINALIZE = b'postfinalize'
@@ -339,7 +329,13 b' class transaction(util.transactional):'
339
329
340 @active
330 @active
341 def addfilegenerator(
331 def addfilegenerator(
342 self, genid, filenames, genfunc, order=0, location=b''
332 self,
333 genid,
334 filenames,
335 genfunc,
336 order=0,
337 location=b'',
338 post_finalize=False,
343 ):
339 ):
344 """add a function to generates some files at transaction commit
340 """add a function to generates some files at transaction commit
345
341
@@ -362,10 +358,14 b' class transaction(util.transactional):'
362 The `location` arguments may be used to indicate the files are located
358 The `location` arguments may be used to indicate the files are located
363 outside of the the standard directory for transaction. It should match
359 outside of the the standard directory for transaction. It should match
364 one of the key of the `transaction.vfsmap` dictionary.
360 one of the key of the `transaction.vfsmap` dictionary.
361
362 The `post_finalize` argument can be set to `True` for file generation
363 that must be run after the transaction has been finalized.
365 """
364 """
366 # For now, we are unable to do proper backup and restore of custom vfs
365 # For now, we are unable to do proper backup and restore of custom vfs
367 # but for bookmarks that are handled outside this mechanism.
366 # but for bookmarks that are handled outside this mechanism.
368 self._filegenerators[genid] = (order, filenames, genfunc, location)
367 entry = (order, filenames, genfunc, location, post_finalize)
368 self._filegenerators[genid] = entry
369
369
370 @active
370 @active
371 def removefilegenerator(self, genid):
371 def removefilegenerator(self, genid):
@@ -385,13 +385,12 b' class transaction(util.transactional):'
385
385
386 for id, entry in sorted(pycompat.iteritems(self._filegenerators)):
386 for id, entry in sorted(pycompat.iteritems(self._filegenerators)):
387 any = True
387 any = True
388 order, filenames, genfunc, location = entry
388 order, filenames, genfunc, location, post_finalize = entry
389
389
390 # for generation at closing, check if it's before or after finalize
390 # for generation at closing, check if it's before or after finalize
391 is_post = id in postfinalizegenerators
391 if skip_post and post_finalize:
392 if skip_post and is_post:
393 continue
392 continue
394 elif skip_pre and not is_post:
393 elif skip_pre and not post_finalize:
395 continue
394 continue
396
395
397 vfs = self._vfsmap[location]
396 vfs = self._vfsmap[location]
@@ -9,7 +9,6 b' from __future__ import absolute_import'
9
9
10 from mercurial import (
10 from mercurial import (
11 error,
11 error,
12 transaction,
13 )
12 )
14
13
15
14
@@ -18,14 +17,15 b' def abort(fp):'
18
17
19
18
20 def reposetup(ui, repo):
19 def reposetup(ui, repo):
21
22 transaction.postfinalizegenerators.add(b'late-abort')
23
24 class LateAbortRepo(repo.__class__):
20 class LateAbortRepo(repo.__class__):
25 def transaction(self, *args, **kwargs):
21 def transaction(self, *args, **kwargs):
26 tr = super(LateAbortRepo, self).transaction(*args, **kwargs)
22 tr = super(LateAbortRepo, self).transaction(*args, **kwargs)
27 tr.addfilegenerator(
23 tr.addfilegenerator(
28 b'late-abort', [b'late-abort'], abort, order=9999999
24 b'late-abort',
25 [b'late-abort'],
26 abort,
27 order=9999999,
28 post_finalize=True,
29 )
29 )
30 return tr
30 return tr
31
31
General Comments 0
You need to be logged in to leave comments. Login now