D2654: archival: fsdecode paths before passing to tar or zip objects
durin42 (Augie Fackler)
phabricator at mercurial-scm.org
Sun Mar 4 18:12:02 UTC 2018
durin42 created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
Both of these traffic in unicodes for filenames on Python 3, and
inspection of the tarfile module shows that it uses the filesystem
encoding, so fsdecode is the right choice.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D2654
AFFECTED FILES
mercurial/archival.py
CHANGE DETAILS
diff --git a/mercurial/archival.py b/mercurial/archival.py
--- a/mercurial/archival.py
+++ b/mercurial/archival.py
@@ -21,6 +21,7 @@
error,
formatter,
match as matchmod,
+ pycompat,
scmutil,
util,
vfs as vfsmod,
@@ -171,13 +172,14 @@
self.z = taropen('w|', fileobj=dest)
def addfile(self, name, mode, islink, data):
+ name = pycompat.fsdecode(name)
i = tarfile.TarInfo(name)
i.mtime = self.mtime
i.size = len(data)
if islink:
i.type = tarfile.SYMTYPE
i.mode = 0o777
- i.linkname = data
+ i.linkname = pycompat.fsdecode(data)
data = None
i.size = 0
else:
@@ -218,7 +220,7 @@
dest.tell()
except (AttributeError, IOError):
dest = tellable(dest)
- self.z = zipfile.ZipFile(dest, r'w',
+ self.z = zipfile.ZipFile(pycompat.fsdecode(dest), r'w',
compress and zipfile.ZIP_DEFLATED or
zipfile.ZIP_STORED)
@@ -232,7 +234,7 @@
self.date_time = time.gmtime(mtime)[:6]
def addfile(self, name, mode, islink, data):
- i = zipfile.ZipInfo(name, self.date_time)
+ i = zipfile.ZipInfo(pycompat.fsdecode(name), self.date_time)
i.compress_type = self.z.compression
# unzip will not honor unix file modes unless file creator is
# set to unix (id 3).
To: durin42, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list