summaryrefslogtreecommitdiff
path: root/files
diff options
context:
space:
mode:
authorRyan Brown <sb@ryansb.com>2016-10-14 12:19:36 -0400
committerGitHub <noreply@github.com>2016-10-14 12:19:36 -0400
commit352088bd94482be3a524845ef0173ce78fa0e790 (patch)
tree77928abe647147525548f61588bca8ffea037d0f /files
parentd4fa1f2037a01c0af34f2729cc2144ed91940b76 (diff)
downloadansible-modules-extras-352088bd94482be3a524845ef0173ce78fa0e790.tar.gz
Fix `archive` truncating archived file names based on prefix length (#3124)
When archiving multiple files, the full length of the calculated `arcroot` would be removed from the beginning of all file names. If there was no arcroot, the first two characters of all files would be removed, so `file.txt` would become `le.txt`. This patch uses the regular expressions substitution anchored to the start of the string, so the arcroot is only removed if it is actually present.
Diffstat (limited to 'files')
-rw-r--r--files/archive.py9
1 files changed, 5 insertions, 4 deletions
diff --git a/files/archive.py b/files/archive.py
index 2b927e39..3b11d86b 100644
--- a/files/archive.py
+++ b/files/archive.py
@@ -245,6 +245,7 @@ def main():
elif format == 'tar':
arcfile = tarfile.open(dest, 'w')
+ match_root = re.compile('^%s' % re.escape(arcroot))
for path in archive_paths:
if os.path.isdir(path):
# Recurse into directories
@@ -254,7 +255,7 @@ def main():
for dirname in dirnames:
fullpath = dirpath + dirname
- arcname = fullpath[len(arcroot):]
+ arcname = match_root.sub('', fullpath)
try:
if format == 'zip':
@@ -268,7 +269,7 @@ def main():
for filename in filenames:
fullpath = dirpath + filename
- arcname = fullpath[len(arcroot):]
+ arcname = match_root.sub('', fullpath)
if not filecmp.cmp(fullpath, dest):
try:
@@ -283,9 +284,9 @@ def main():
errors.append('Adding %s: %s' % (path, str(e)))
else:
if format == 'zip':
- arcfile.write(path, path[len(arcroot):])
+ arcfile.write(path, match_root.sub('', path))
else:
- arcfile.add(path, path[len(arcroot):], recursive=False)
+ arcfile.add(path, match_root.sub('', path), recursive=False)
successes.append(path)