[PATCH 1 of 3] hg: extract copying the store out of clone
Simon Heimberg
simohe at besonet.ch
Fri Aug 26 17:06:33 CDT 2011
# HG changeset patch
# User Simon Heimberg <simohe at besonet.ch>
# Date 1313013796 -7200
# Node ID 49d9f9d670c5e9ace6238ca104cf265ccbaf0fb0
# Parent ef43610a4cce7b8810af95fab1591adf821c3669
hg: extract copying the store out of clone
diff -r ef43610a4cce -r 49d9f9d670c5 mercurial/hg.py
--- a/mercurial/hg.py Sam Aug 20 21:47:10 2011 +0100
+++ b/mercurial/hg.py Don Aug 11 00:03:16 2011 +0200
@@ -174,6 +174,36 @@
continue
_update(r, uprev)
+def copystore(ui, srcrepo, destpath):
+ '''copy files from store of srcrepo in destpath
+
+ returns destlock
+ '''
+ destlock = None
+ try:
+ hardlink = None
+ num = 0
+ for f in srcrepo.store.copylist():
+ src = os.path.join(srcrepo.sharedpath, f)
+ dst = os.path.join(destpath, f)
+ dstbase = os.path.dirname(dst)
+ if dstbase and not os.path.exists(dstbase):
+ os.mkdir(dstbase)
+ if os.path.exists(src):
+ if dst.endswith('data'):
+ # lock to avoid premature writing to the target
+ destlock = lock.lock(os.path.join(dstbase, "lock"))
+ hardlink, n = util.copyfiles(src, dst, hardlink)
+ num += n
+ if hardlink:
+ ui.debug("linked %d files\n" % num)
+ else:
+ ui.debug("copied %d files\n" % num)
+ return destlock
+ except:
+ release(destlock)
+ raise
+
def clone(ui, peeropts, source, dest=None, pull=False, rev=None,
update=True, stream=False, branch=None):
"""Make a copy of an existing repository.
@@ -287,24 +317,7 @@
% dest)
raise
- hardlink = None
- num = 0
- for f in srcrepo.store.copylist():
- src = os.path.join(srcrepo.sharedpath, f)
- dst = os.path.join(destpath, f)
- dstbase = os.path.dirname(dst)
- if dstbase and not os.path.exists(dstbase):
- os.mkdir(dstbase)
- if os.path.exists(src):
- if dst.endswith('data'):
- # lock to avoid premature writing to the target
- destlock = lock.lock(os.path.join(dstbase, "lock"))
- hardlink, n = util.copyfiles(src, dst, hardlink)
- num += n
- if hardlink:
- ui.debug("linked %d files\n" % num)
- else:
- ui.debug("copied %d files\n" % num)
+ destlock = copystore(ui, srcrepo, destpath)
# we need to re-init the repo after manually copying the data
# into it
More information about the Mercurial-devel
mailing list