# HG changeset patch # User FUJIWARA Katsunori # Date 2014-03-08 16:03:28 # Node ID c20f4898631e2f5f954d7e8afe5fc05b14b7e55f # Parent 37cdf1fca1b27ae970c7d5ea9a6abf5f39d95c6f changegroup: add "vfs" argument to "writebundle()" for relative access via vfs Before this patch, filename specified to "changegroup.writebundle()" should be absolute one. In some cases, they should be relative to repository root, store and so on (backup before strip, for example). This patch adds "vfs" argument to "writebundle()", and makes "writebundle()" open (and unlink) "filename" via vfs for relative access, if both filename and vfs are specified. diff --git a/mercurial/changegroup.py b/mercurial/changegroup.py --- a/mercurial/changegroup.py +++ b/mercurial/changegroup.py @@ -59,7 +59,7 @@ bundletypes = { # hgweb uses this list to communicate its preferred type bundlepriority = ['HG10GZ', 'HG10BZ', 'HG10UN'] -def writebundle(cg, filename, bundletype): +def writebundle(cg, filename, bundletype, vfs=None): """Write a bundle file and return its filename. Existing files will not be overwritten. @@ -72,7 +72,10 @@ def writebundle(cg, filename, bundletype cleanup = None try: if filename: - fh = open(filename, "wb") + if vfs: + fh = vfs.open(filename, "wb") + else: + fh = open(filename, "wb") else: fd, filename = tempfile.mkstemp(prefix="hg-bundle-", suffix=".hg") fh = os.fdopen(fd, "wb") @@ -112,7 +115,10 @@ def writebundle(cg, filename, bundletype if fh is not None: fh.close() if cleanup is not None: - os.unlink(cleanup) + if filename and vfs: + vfs.unlink(cleanup) + else: + os.unlink(cleanup) def decompressor(fh, alg): if alg == 'UN':