Mercurial > public > mercurial-scm > hg
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) |