Show More
@@ -912,6 +912,15 b' class localrepository(repo.repository):' | |||
|
912 | 912 | acquirefn() |
|
913 | 913 | return l |
|
914 | 914 | |
|
915 | def _postrelease(self, callback): | |
|
916 | """add a callback to the current repository lock. | |
|
917 | ||
|
918 | The callback will be executed on lock release.""" | |
|
919 | l = self._lockref and self._lockref() | |
|
920 | assert l is not None | |
|
921 | assert l.held | |
|
922 | l.postreleasehooks.append(callback) | |
|
923 | ||
|
915 | 924 | def lock(self, wait=True): |
|
916 | 925 | '''Lock the repository store (.hg/store) and return a weak reference |
|
917 | 926 | to the lock. Use this before modifying the store (e.g. committing or |
@@ -35,6 +35,7 b' class lock(object):' | |||
|
35 | 35 | self.timeout = timeout |
|
36 | 36 | self.releasefn = releasefn |
|
37 | 37 | self.desc = desc |
|
38 | self.postreleasehooks = [] | |
|
38 | 39 | self.lock() |
|
39 | 40 | |
|
40 | 41 | def __del__(self): |
@@ -119,6 +120,10 b' class lock(object):' | |||
|
119 | 120 | return locker |
|
120 | 121 | |
|
121 | 122 | def release(self): |
|
123 | """release the lock and execute callback function if any | |
|
124 | ||
|
125 | If the lock have been aquired multiple time, the actual release is | |
|
126 | delayed to the last relase call.""" | |
|
122 | 127 | if self.held > 1: |
|
123 | 128 | self.held -= 1 |
|
124 | 129 | elif self.held == 1: |
@@ -129,6 +134,8 b' class lock(object):' | |||
|
129 | 134 | util.unlink(self.f) |
|
130 | 135 | except OSError: |
|
131 | 136 | pass |
|
137 | for callback in self.postreleasehooks: | |
|
138 | callback() | |
|
132 | 139 | |
|
133 | 140 | def release(*locks): |
|
134 | 141 | for lock in locks: |
General Comments 0
You need to be logged in to leave comments.
Login now