Skip to content

Commit

Permalink
Merge pull request #8057 from ryanpetrello/proj-archive-py2
Browse files Browse the repository at this point in the history
update the project archive sync support for py2 compatability

Reviewed-by: https://github.com/apps/softwarefactory-project-zuul
  • Loading branch information
2 parents 967e35f + 798f637 commit b11a5c1
Showing 1 changed file with 26 additions and 10 deletions.
36 changes: 26 additions & 10 deletions awx/playbooks/action_plugins/project_archive.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,21 @@

__metaclass__ = type

import zipfile
import tarfile
import errno
import os
import tarfile
import zipfile

from ansible.plugins.action import ActionBase
from ansible.utils.display import Display

display = Display()

try:
from zipfile import BadZipFile
except ImportError:
from zipfile import BadZipfile as BadZipFile # py2 compat


class ActionModule(ActionBase):
def run(self, tmp=None, task_vars=None):
Expand All @@ -26,14 +32,15 @@ def run(self, tmp=None, task_vars=None):
archive = zipfile.ZipFile(src)
get_filenames = archive.namelist
get_members = archive.infolist
except zipfile.BadZipFile:
archive = tarfile.open(src)
except BadZipFile:
try:
archive = tarfile.open(src)
except tarfile.ReadError:
result["failed"] = True
result["msg"] = "{0} is not a valid archive".format(src)
return result
get_filenames = archive.getnames
get_members = archive.getmembers
except tarfile.ReadError:
result["failed"] = True
result["msg"] = "{0} is not a valid archive".format(src)
return result

# Most well formed archives contain a single root directory, typically named
# project-name-1.0.0. The project contents should be inside that directory.
Expand Down Expand Up @@ -62,10 +69,19 @@ def run(self, tmp=None, task_vars=None):
try:
is_dir = member.is_dir()
except AttributeError:
is_dir = member.isdir()
try:
is_dir = member.isdir()
except AttributeError:
is_dir = member.filename[-1] == '/' # py2 compat for ZipInfo

if is_dir:
os.makedirs(dest, exist_ok=True)
try:
os.makedirs(dest)
except OSError as exc: # Python >= 2.5
if exc.errno == errno.EEXIST and os.path.isdir(dest):
pass
else:
raise
else:
try:
member_f = archive.open(member)
Expand Down

0 comments on commit b11a5c1

Please sign in to comment.