Show More
@@ -912,6 +912,15 b' class localrepository(repo.repository):' | |||||
912 | acquirefn() |
|
912 | acquirefn() | |
913 | return l |
|
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 | def lock(self, wait=True): |
|
924 | def lock(self, wait=True): | |
916 | '''Lock the repository store (.hg/store) and return a weak reference |
|
925 | '''Lock the repository store (.hg/store) and return a weak reference | |
917 | to the lock. Use this before modifying the store (e.g. committing or |
|
926 | to the lock. Use this before modifying the store (e.g. committing or |
@@ -35,6 +35,7 b' class lock(object):' | |||||
35 | self.timeout = timeout |
|
35 | self.timeout = timeout | |
36 | self.releasefn = releasefn |
|
36 | self.releasefn = releasefn | |
37 | self.desc = desc |
|
37 | self.desc = desc | |
|
38 | self.postreleasehooks = [] | |||
38 | self.lock() |
|
39 | self.lock() | |
39 |
|
40 | |||
40 | def __del__(self): |
|
41 | def __del__(self): | |
@@ -119,6 +120,10 b' class lock(object):' | |||||
119 | return locker |
|
120 | return locker | |
120 |
|
121 | |||
121 | def release(self): |
|
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 | if self.held > 1: |
|
127 | if self.held > 1: | |
123 | self.held -= 1 |
|
128 | self.held -= 1 | |
124 | elif self.held == 1: |
|
129 | elif self.held == 1: | |
@@ -129,6 +134,8 b' class lock(object):' | |||||
129 | util.unlink(self.f) |
|
134 | util.unlink(self.f) | |
130 | except OSError: |
|
135 | except OSError: | |
131 | pass |
|
136 | pass | |
|
137 | for callback in self.postreleasehooks: | |||
|
138 | callback() | |||
132 |
|
139 | |||
133 | def release(*locks): |
|
140 | def release(*locks): | |
134 | for lock in locks: |
|
141 | for lock in locks: |
General Comments 0
You need to be logged in to leave comments.
Login now