comparison mercurial/localrepo.py @ 2827:2a0c599f7bb0

fetch: hold lock and wlock across all operations
author Vadim Gelfer <vadim.gelfer@gmail.com>
date Tue, 08 Aug 2006 17:08:59 -0700
parents 987c31e2a08c
children e78cad1f6b1f
comparison
equal deleted inserted replaced
2826:bce6918b0474 2827:2a0c599f7bb0
1175 if heads: 1175 if heads:
1176 return subset, updated_heads.keys() 1176 return subset, updated_heads.keys()
1177 else: 1177 else:
1178 return subset 1178 return subset
1179 1179
1180 def pull(self, remote, heads=None, force=False): 1180 def pull(self, remote, heads=None, force=False, lock=None):
1181 l = self.lock() 1181 mylock = False
1182 1182 if not lock:
1183 fetch = self.findincoming(remote, force=force) 1183 lock = self.lock()
1184 if fetch == [nullid]: 1184 mylock = True
1185 self.ui.status(_("requesting all changes\n")) 1185
1186 1186 try:
1187 if not fetch: 1187 fetch = self.findincoming(remote, force=force)
1188 self.ui.status(_("no changes found\n")) 1188 if fetch == [nullid]:
1189 return 0 1189 self.ui.status(_("requesting all changes\n"))
1190 1190
1191 if heads is None: 1191 if not fetch:
1192 cg = remote.changegroup(fetch, 'pull') 1192 self.ui.status(_("no changes found\n"))
1193 else: 1193 return 0
1194 cg = remote.changegroupsubset(fetch, heads, 'pull') 1194
1195 return self.addchangegroup(cg, 'pull', remote.url()) 1195 if heads is None:
1196 cg = remote.changegroup(fetch, 'pull')
1197 else:
1198 cg = remote.changegroupsubset(fetch, heads, 'pull')
1199 return self.addchangegroup(cg, 'pull', remote.url())
1200 finally:
1201 if mylock:
1202 lock.release()
1196 1203
1197 def push(self, remote, force=False, revs=None): 1204 def push(self, remote, force=False, revs=None):
1198 # there are two ways to push to remote repo: 1205 # there are two ways to push to remote repo:
1199 # 1206 #
1200 # addchangegroup assumes local user can lock remote 1207 # addchangegroup assumes local user can lock remote