Show More
@@ -213,7 +213,7 b' def copystore(ui, srcrepo, destpath):' | |||||
213 | if srcvfs.exists(f): |
|
213 | if srcvfs.exists(f): | |
214 | if f.endswith('data'): |
|
214 | if f.endswith('data'): | |
215 | # lock to avoid premature writing to the target |
|
215 | # lock to avoid premature writing to the target | |
216 |
destlock = lock.lock(dstvfs |
|
216 | destlock = lock.lock(dstvfs, dstbase + "/lock") | |
217 | hardlink, n = util.copyfiles(srcvfs.join(f), dstvfs.join(f), |
|
217 | hardlink, n = util.copyfiles(srcvfs.join(f), dstvfs.join(f), | |
218 | hardlink) |
|
218 | hardlink) | |
219 | num += n |
|
219 | num += n |
@@ -1000,16 +1000,16 b' class localrepository(object):' | |||||
1000 | pass |
|
1000 | pass | |
1001 | self.invalidatecaches() |
|
1001 | self.invalidatecaches() | |
1002 |
|
1002 | |||
1003 | def _lock(self, lockname, wait, releasefn, acquirefn, desc): |
|
1003 | def _lock(self, vfs, lockname, wait, releasefn, acquirefn, desc): | |
1004 | try: |
|
1004 | try: | |
1005 | l = lockmod.lock(lockname, 0, releasefn, desc=desc) |
|
1005 | l = lockmod.lock(vfs, lockname, 0, releasefn, desc=desc) | |
1006 | except error.LockHeld, inst: |
|
1006 | except error.LockHeld, inst: | |
1007 | if not wait: |
|
1007 | if not wait: | |
1008 | raise |
|
1008 | raise | |
1009 | self.ui.warn(_("waiting for lock on %s held by %r\n") % |
|
1009 | self.ui.warn(_("waiting for lock on %s held by %r\n") % | |
1010 | (desc, inst.locker)) |
|
1010 | (desc, inst.locker)) | |
1011 | # default to 600 seconds timeout |
|
1011 | # default to 600 seconds timeout | |
1012 | l = lockmod.lock(lockname, |
|
1012 | l = lockmod.lock(vfs, lockname, | |
1013 | int(self.ui.config("ui", "timeout", "600")), |
|
1013 | int(self.ui.config("ui", "timeout", "600")), | |
1014 | releasefn, desc=desc) |
|
1014 | releasefn, desc=desc) | |
1015 | if acquirefn: |
|
1015 | if acquirefn: | |
@@ -1044,7 +1044,7 b' class localrepository(object):' | |||||
1044 | continue |
|
1044 | continue | |
1045 | ce.refresh() |
|
1045 | ce.refresh() | |
1046 |
|
1046 | |||
1047 |
l = self._lock(self.s |
|
1047 | l = self._lock(self.svfs, "lock", wait, unlock, | |
1048 | self.invalidate, _('repository %s') % self.origroot) |
|
1048 | self.invalidate, _('repository %s') % self.origroot) | |
1049 | self._lockref = weakref.ref(l) |
|
1049 | self._lockref = weakref.ref(l) | |
1050 | return l |
|
1050 | return l | |
@@ -1062,7 +1062,7 b' class localrepository(object):' | |||||
1062 | self.dirstate.write() |
|
1062 | self.dirstate.write() | |
1063 | self._filecache['dirstate'].refresh() |
|
1063 | self._filecache['dirstate'].refresh() | |
1064 |
|
1064 | |||
1065 |
l = self._lock(self. |
|
1065 | l = self._lock(self.vfs, "wlock", wait, unlock, | |
1066 | self.invalidatedirstate, _('working directory of %s') % |
|
1066 | self.invalidatedirstate, _('working directory of %s') % | |
1067 | self.origroot) |
|
1067 | self.origroot) | |
1068 | self._wlockref = weakref.ref(l) |
|
1068 | self._wlockref = weakref.ref(l) |
@@ -29,7 +29,8 b' class lock(object):' | |||||
29 |
|
29 | |||
30 | _host = None |
|
30 | _host = None | |
31 |
|
31 | |||
32 | def __init__(self, file, timeout=-1, releasefn=None, desc=None): |
|
32 | def __init__(self, vfs, file, timeout=-1, releasefn=None, desc=None): | |
|
33 | self.vfs = vfs | |||
33 | self.f = file |
|
34 | self.f = file | |
34 | self.held = 0 |
|
35 | self.held = 0 | |
35 | self.timeout = timeout |
|
36 | self.timeout = timeout | |
@@ -75,13 +76,14 b' class lock(object):' | |||||
75 | lockname = '%s:%s' % (lock._host, self.pid) |
|
76 | lockname = '%s:%s' % (lock._host, self.pid) | |
76 | while not self.held: |
|
77 | while not self.held: | |
77 | try: |
|
78 | try: | |
78 |
|
|
79 | self.vfs.makelock(lockname, self.f) | |
79 | self.held = 1 |
|
80 | self.held = 1 | |
80 | except (OSError, IOError), why: |
|
81 | except (OSError, IOError), why: | |
81 | if why.errno == errno.EEXIST: |
|
82 | if why.errno == errno.EEXIST: | |
82 | locker = self.testlock() |
|
83 | locker = self.testlock() | |
83 | if locker is not None: |
|
84 | if locker is not None: | |
84 |
raise error.LockHeld(errno.EAGAIN, |
|
85 | raise error.LockHeld(errno.EAGAIN, | |
|
86 | self.vfs.join(self.f), self.desc, | |||
85 | locker) |
|
87 | locker) | |
86 | else: |
|
88 | else: | |
87 | raise error.LockUnavailable(why.errno, why.strerror, |
|
89 | raise error.LockUnavailable(why.errno, why.strerror, | |
@@ -99,7 +101,7 b' class lock(object):' | |||||
99 |
|
101 | |||
100 | """ |
|
102 | """ | |
101 | try: |
|
103 | try: | |
102 |
locker = |
|
104 | locker = self.vfs.readlock(self.f) | |
103 | except (OSError, IOError), why: |
|
105 | except (OSError, IOError), why: | |
104 | if why.errno == errno.ENOENT: |
|
106 | if why.errno == errno.ENOENT: | |
105 | return None |
|
107 | return None | |
@@ -119,8 +121,8 b' class lock(object):' | |||||
119 | # if locker dead, break lock. must do this with another lock |
|
121 | # if locker dead, break lock. must do this with another lock | |
120 | # held, or can race and break valid lock. |
|
122 | # held, or can race and break valid lock. | |
121 | try: |
|
123 | try: | |
122 | l = lock(self.f + '.break', timeout=0) |
|
124 | l = lock(self.vfs, self.f + '.break', timeout=0) | |
123 |
|
|
125 | self.vfs.unlink(self.f) | |
124 | l.release() |
|
126 | l.release() | |
125 | except error.LockError: |
|
127 | except error.LockError: | |
126 | return locker |
|
128 | return locker | |
@@ -140,7 +142,7 b' class lock(object):' | |||||
140 | if self.releasefn: |
|
142 | if self.releasefn: | |
141 | self.releasefn() |
|
143 | self.releasefn() | |
142 | try: |
|
144 | try: | |
143 |
|
|
145 | self.vfs.unlink(self.f) | |
144 | except OSError: |
|
146 | except OSError: | |
145 | pass |
|
147 | pass | |
146 | for callback in self.postrelease: |
|
148 | for callback in self.postrelease: |
General Comments 0
You need to be logged in to leave comments.
Login now