comparison mercurial/localrepo.py @ 1751:e9bf415a8ecb

localrepo: refactor the locking functions
author Benoit Boissinot <benoit.boissinot@ens-lyon.org>
date Sun, 19 Feb 2006 22:39:09 +0100
parents 91c56c427171
children 457cdec745f8
comparison
equal deleted inserted replaced
1748:2428e6d66f06 1751:e9bf415a8ecb
252 util.rename(self.join("undo.dirstate"), self.join("dirstate")) 252 util.rename(self.join("undo.dirstate"), self.join("dirstate"))
253 self.dirstate.read() 253 self.dirstate.read()
254 else: 254 else:
255 self.ui.warn(_("no undo information available\n")) 255 self.ui.warn(_("no undo information available\n"))
256 256
257 def lock(self, wait=1): 257 def do_lock(self, lockname, wait, releasefn=None, acquirefn=None):
258 try: 258 try:
259 return lock.lock(self.join("lock"), 0) 259 l = lock.lock(self.join(lockname), 0, releasefn)
260 except lock.LockHeld, inst:
261 if wait:
262 self.ui.warn(_("waiting for lock held by %s\n") % inst.args[0])
263 return lock.lock(self.join("lock"), wait)
264 raise inst
265
266 def wlock(self, wait=1):
267 try:
268 wlock = lock.lock(self.join("wlock"), 0, self.dirstate.write)
269 except lock.LockHeld, inst: 260 except lock.LockHeld, inst:
270 if not wait: 261 if not wait:
271 raise inst 262 raise inst
272 self.ui.warn(_("waiting for lock held by %s\n") % inst.args[0]) 263 self.ui.warn(_("waiting for lock held by %s\n") % inst.args[0])
273 wlock = lock.lock(self.join("wlock"), wait, self.dirstate.write) 264 l = lock.lock(self.join(lockname), wait, releasefn)
274 self.dirstate.read() 265 if acquirefn:
275 return wlock 266 acquirefn()
267 return l
268
269 def lock(self, wait=1):
270 return self.do_lock("lock", wait)
271
272 def wlock(self, wait=1):
273 return self.do_lock("wlock", wait,
274 self.dirstate.write,
275 self.dirstate.read)
276 276
277 def checkfilemerge(self, filename, text, filelog, manifest1, manifest2): 277 def checkfilemerge(self, filename, text, filelog, manifest1, manifest2):
278 "determine whether a new filenode is needed" 278 "determine whether a new filenode is needed"
279 fp1 = manifest1.get(filename, nullid) 279 fp1 = manifest1.get(filename, nullid)
280 fp2 = manifest2.get(filename, nullid) 280 fp2 = manifest2.get(filename, nullid)