comparison mercurial/localrepo.py @ 2016:ff5c9a92f556

fix backtrace printed when cannot get lock. change lock error handling code so exceptions have useful info and exception handling in one place. add test case for when cannot get lock.
author Vadim Gelfer <vadim.gelfer@gmail.com>
date Tue, 28 Mar 2006 09:01:07 -0800
parents 65cc17ae9649
children 00925397236c
comparison
equal deleted inserted replaced
2009:182f500805db 2016:ff5c9a92f556
29 29
30 if not create and not os.path.isdir(self.path): 30 if not create and not os.path.isdir(self.path):
31 raise repo.RepoError(_("repository %s not found") % path) 31 raise repo.RepoError(_("repository %s not found") % path)
32 32
33 self.root = os.path.abspath(path) 33 self.root = os.path.abspath(path)
34 self.origroot = path
34 self.ui = ui.ui(parentui=parentui) 35 self.ui = ui.ui(parentui=parentui)
35 self.opener = util.opener(self.path) 36 self.opener = util.opener(self.path)
36 self.wopener = util.opener(self.root) 37 self.wopener = util.opener(self.root)
37 self.manifest = manifest.manifest(self.opener) 38 self.manifest = manifest.manifest(self.opener)
38 self.changelog = changelog.changelog(self.opener) 39 self.changelog = changelog.changelog(self.opener)
259 self.changelog.load() 260 self.changelog.load()
260 self.manifest.load() 261 self.manifest.load()
261 self.tagscache = None 262 self.tagscache = None
262 self.nodetagscache = None 263 self.nodetagscache = None
263 264
264 def do_lock(self, lockname, wait, releasefn=None, acquirefn=None): 265 def do_lock(self, lockname, wait, releasefn=None, acquirefn=None,
266 desc=None):
265 try: 267 try:
266 l = lock.lock(self.join(lockname), 0, releasefn) 268 l = lock.lock(self.join(lockname), 0, releasefn, desc=desc)
267 except lock.LockHeld, inst: 269 except lock.LockHeld, inst:
268 if not wait: 270 if not wait:
269 raise inst 271 raise
270 self.ui.warn(_("waiting for lock held by %s\n") % inst.args[0]) 272 self.ui.warn(_("waiting for lock on %s held by %s\n") %
271 try: 273 (desc, inst.args[0]))
272 # default to 600 seconds timeout 274 # default to 600 seconds timeout
273 l = lock.lock(self.join(lockname), 275 l = lock.lock(self.join(lockname),
274 int(self.ui.config("ui", "timeout") or 600), 276 int(self.ui.config("ui", "timeout") or 600),
275 releasefn) 277 releasefn, desc=desc)
276 except lock.LockHeld, inst:
277 raise util.Abort(_("timeout while waiting for "
278 "lock held by %s") % inst.args[0])
279 if acquirefn: 278 if acquirefn:
280 acquirefn() 279 acquirefn()
281 return l 280 return l
282 281
283 def lock(self, wait=1): 282 def lock(self, wait=1):
284 return self.do_lock("lock", wait, acquirefn=self.reload) 283 return self.do_lock("lock", wait, acquirefn=self.reload,
284 desc=_('repository %s') % self.origroot)
285 285
286 def wlock(self, wait=1): 286 def wlock(self, wait=1):
287 return self.do_lock("wlock", wait, 287 return self.do_lock("wlock", wait, self.dirstate.write,
288 self.dirstate.write, 288 self.wreload,
289 self.wreload) 289 desc=_('working directory of %s') % self.origroot)
290 290
291 def checkfilemerge(self, filename, text, filelog, manifest1, manifest2): 291 def checkfilemerge(self, filename, text, filelog, manifest1, manifest2):
292 "determine whether a new filenode is needed" 292 "determine whether a new filenode is needed"
293 fp1 = manifest1.get(filename, nullid) 293 fp1 = manifest1.get(filename, nullid)
294 fp2 = manifest2.get(filename, nullid) 294 fp2 = manifest2.get(filename, nullid)