##// END OF EJS Templates
fix race in localrepo.addchangegroup....
Vadim Gelfer -
r1998:65cc17ae default
parent child Browse files
Show More
@@ -11,7 +11,7 b' from node import *'
11 from i18n import gettext as _
11 from i18n import gettext as _
12 from demandload import *
12 from demandload import *
13 demandload(globals(), "re lock transaction tempfile stat mdiff errno ui")
13 demandload(globals(), "re lock transaction tempfile stat mdiff errno ui")
14 demandload(globals(), "changegroup")
14 demandload(globals(), "appendfile changegroup")
15
15
16 class localrepository(object):
16 class localrepository(object):
17 def __del__(self):
17 def __del__(self):
@@ -1343,10 +1343,10 b' class localrepository(object):'
1343
1343
1344 def csmap(x):
1344 def csmap(x):
1345 self.ui.debug(_("add changeset %s\n") % short(x))
1345 self.ui.debug(_("add changeset %s\n") % short(x))
1346 return self.changelog.count()
1346 return cl.count()
1347
1347
1348 def revmap(x):
1348 def revmap(x):
1349 return self.changelog.rev(x)
1349 return cl.rev(x)
1350
1350
1351 if not source:
1351 if not source:
1352 return
1352 return
@@ -1357,23 +1357,29 b' class localrepository(object):'
1357
1357
1358 tr = self.transaction()
1358 tr = self.transaction()
1359
1359
1360 oldheads = len(self.changelog.heads())
1360 # write changelog and manifest data to temp files so
1361 # concurrent readers will not see inconsistent view
1362 cl = appendfile.appendchangelog(self.opener)
1363
1364 oldheads = len(cl.heads())
1361
1365
1362 # pull off the changeset group
1366 # pull off the changeset group
1363 self.ui.status(_("adding changesets\n"))
1367 self.ui.status(_("adding changesets\n"))
1364 co = self.changelog.tip()
1368 co = cl.tip()
1365 chunkiter = changegroup.chunkiter(source)
1369 chunkiter = changegroup.chunkiter(source)
1366 cn = self.changelog.addgroup(chunkiter, csmap, tr, 1) # unique
1370 cn = cl.addgroup(chunkiter, csmap, tr, 1) # unique
1367 cnr, cor = map(self.changelog.rev, (cn, co))
1371 cnr, cor = map(cl.rev, (cn, co))
1368 if cn == nullid:
1372 if cn == nullid:
1369 cnr = cor
1373 cnr = cor
1370 changesets = cnr - cor
1374 changesets = cnr - cor
1371
1375
1376 mf = appendfile.appendmanifest(self.opener)
1377
1372 # pull off the manifest group
1378 # pull off the manifest group
1373 self.ui.status(_("adding manifests\n"))
1379 self.ui.status(_("adding manifests\n"))
1374 mm = self.manifest.tip()
1380 mm = mf.tip()
1375 chunkiter = changegroup.chunkiter(source)
1381 chunkiter = changegroup.chunkiter(source)
1376 mo = self.manifest.addgroup(chunkiter, revmap, tr)
1382 mo = mf.addgroup(chunkiter, revmap, tr)
1377
1383
1378 # process the files
1384 # process the files
1379 self.ui.status(_("adding file changes\n"))
1385 self.ui.status(_("adding file changes\n"))
@@ -1389,6 +1395,15 b' class localrepository(object):'
1389 revisions += fl.count() - o
1395 revisions += fl.count() - o
1390 files += 1
1396 files += 1
1391
1397
1398 # write order here is important so concurrent readers will see
1399 # consistent view of repo
1400 mf.writedata()
1401 cl.writedata()
1402
1403 # make changelog and manifest see real files again
1404 self.changelog = changelog.changelog(self.opener)
1405 self.manifest = manifest.manifest(self.opener)
1406
1392 newheads = len(self.changelog.heads())
1407 newheads = len(self.changelog.heads())
1393 heads = ""
1408 heads = ""
1394 if oldheads and newheads > oldheads:
1409 if oldheads and newheads > oldheads:
General Comments 0
You need to be logged in to leave comments. Login now