comparison mercurial/commands.py @ 1209:920682a532df

Tighten up clone locking Add a lock on the destination, expand comment on source lock
author mpm@selenic.com
date Wed, 07 Sep 2005 19:37:11 -0700
parents 4644df4944ff
children 1c455338ad95
comparison
equal deleted inserted replaced
1208:4644df4944ff 1209:920682a532df
603 copyfile = (os.stat(dest).st_dev == other.dev() 603 copyfile = (os.stat(dest).st_dev == other.dev()
604 and getattr(os, 'link', None) or shutil.copy2) 604 and getattr(os, 'link', None) or shutil.copy2)
605 if copyfile is not shutil.copy2: 605 if copyfile is not shutil.copy2:
606 ui.note("cloning by hardlink\n") 606 ui.note("cloning by hardlink\n")
607 607
608 # we use a lock here because because we're not nicely ordered 608 # we use a lock here because if we race with commit, we can
609 l = lock.lock(os.path.join(source, ".hg", "lock")) 609 # end up with extra data in the cloned revlogs that's not
610 610 # pointed to by changesets, thus causing verify to fail
611 l1 = lock.lock(os.path.join(source, ".hg", "lock"))
612
613 # and here to avoid premature writing to the target
611 os.mkdir(os.path.join(dest, ".hg")) 614 os.mkdir(os.path.join(dest, ".hg"))
615 l2 = lock.lock(os.path.join(dest, ".hg", "lock"))
612 616
613 files = "data 00manifest.d 00manifest.i 00changelog.d 00changelog.i" 617 files = "data 00manifest.d 00manifest.i 00changelog.d 00changelog.i"
614 for f in files.split(): 618 for f in files.split():
615 src = os.path.join(source, ".hg", f) 619 src = os.path.join(source, ".hg", f)
616 dst = os.path.join(dest, ".hg", f) 620 dst = os.path.join(dest, ".hg", f)