Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/sshserver.py @ 11442:ee1ed6afac21 stable
addchangegroup: pass in lock to release it before changegroup hook is called
Currently, callers of addchangegroup first acquire the repository
lock, usually to check that an unbundle request isn't racing. This
means that changegroup hook actions that might write to a repo get
stuck waiting for a lock. Here, we add a new optional lock parameter
and update all the callers. Post-1.6 we may make it non-optional.
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Fri, 25 Jun 2010 13:47:28 -0500 |
parents | 02a4373ca5cd |
children | c19d7e91cc46 |
comparison
equal
deleted
inserted
replaced
11441:d74fe370ab04 | 11442:ee1ed6afac21 |
---|---|
159 if not self.lock: | 159 if not self.lock: |
160 self.respond("not locked") | 160 self.respond("not locked") |
161 return | 161 return |
162 | 162 |
163 self.respond("") | 163 self.respond("") |
164 r = self.repo.addchangegroup(self.fin, 'serve', self.client_url()) | 164 r = self.repo.addchangegroup(self.fin, 'serve', self.client_url(), |
165 lock=self.lock) | |
165 self.respond(str(r)) | 166 self.respond(str(r)) |
166 | 167 |
167 def client_url(self): | 168 def client_url(self): |
168 client = os.environ.get('SSH_CLIENT', '').split(' ', 1)[0] | 169 client = os.environ.get('SSH_CLIENT', '').split(' ', 1)[0] |
169 return 'remote:ssh:' + client | 170 return 'remote:ssh:' + client |
203 self.respond('') | 204 self.respond('') |
204 | 205 |
205 # push can proceed | 206 # push can proceed |
206 | 207 |
207 fp.seek(0) | 208 fp.seek(0) |
208 r = self.repo.addchangegroup(fp, 'serve', self.client_url()) | 209 r = self.repo.addchangegroup(fp, 'serve', self.client_url(), |
210 lock=self.lock) | |
209 self.respond(str(r)) | 211 self.respond(str(r)) |
210 finally: | 212 finally: |
211 if not was_locked: | 213 if not was_locked: |
212 self.lock.release() | 214 self.lock.release() |
213 self.lock = None | 215 self.lock = None |