From d412a16a70d6027ffbc7b73d09a789f0be0929d6 Mon Sep 17 00:00:00 2001 From: Seblu <sebastien.luttringer@smartjog.com> Date: Wed, 24 Aug 2011 17:11:31 +0200 Subject: [PATCH] Rewrite command cat --- bin/is | 20 +++++++------------- installsystems/image.py | 12 ++++-------- installsystems/tarball.py | 15 ++++++++++----- 3 files changed, 21 insertions(+), 26 deletions(-) diff --git a/bin/is b/bin/is index 2ef02e9..3a5beb9 100755 --- a/bin/is +++ b/bin/is @@ -98,17 +98,13 @@ def c_build(parser, args): def c_cat(parser, args): ''' - Display image's file(s) + Display image's file ''' # looks if arguments is a file or image name - if istools.isfile(args.image) and os.path.isfile(args.image): - pkg = PackageImage(istools.abspath(args.image)) - elif PackageImage.check_image_name(args.image): - # get image package - repoman = load_repositories(args) - pkg = repoman.get(args.image, args.image_version) - for filename in args.files: - pkg.cat(filename) + repoman = load_repositories(args) + img, repo = select_image(args.image, repoman) + for filename in args.file: + img.cat(filename) def c_clean(parser, args): ''' @@ -340,10 +336,8 @@ p_build.set_defaults(func=c_build) # cat command parser p_cat = subparsers.add_parser("cat", help=c_cat.__doc__.lower()) -p_cat.add_argument("-v", "--image-version", type=int, default=None, - help="image version") -p_cat.add_argument("image", help="image (path or name)") -p_cat.add_argument("files", nargs="+", help="files to cat") +p_cat.add_argument("image") +p_cat.add_argument("file", nargs="+", help="file to cat (glob allowed)") p_cat.set_defaults(func=c_cat) # clean command parser diff --git a/installsystems/image.py b/installsystems/image.py index 494a8e8..621735b 100644 --- a/installsystems/image.py +++ b/installsystems/image.py @@ -17,7 +17,6 @@ import re import cStringIO import shutil import gzip -import fnmatch import installsystems.template as istemplate import installsystems.tools as istools from installsystems.printer import * @@ -458,12 +457,9 @@ class PackageImage(Image): ''' Display filename in the tarball ''' - for filename in fnmatch.filter(self._tarball.getnames(), filename): - fd = self._tarball.extractfile(filename) - if fd is not None: - arrow(filename) - out(fd.read()) - fd.close() + for filename in self._tarball.getnames(glob_pattern=filename): + arrow(filename) + out(self._tarball.get_str(filename)) def run_parser(self, **kwargs): ''' @@ -484,7 +480,7 @@ class PackageImage(Image): arrow("Run %s scripts" % directory) arrowlevel(1) # get list of parser scripts - l_scripts = self._tarball.getnames("%s/.*\.py" % directory) + l_scripts = self._tarball.getnames(re_pattern="%s/.*\.py" % directory) # order matter! l_scripts.sort() # run scripts diff --git a/installsystems/tarball.py b/installsystems/tarball.py index 9b41f0c..a9c5245 100644 --- a/installsystems/tarball.py +++ b/installsystems/tarball.py @@ -11,6 +11,7 @@ import time import tarfile import StringIO import re +import fnmatch class Tarball(tarfile.TarFile): def add_str(self, name, content, ftype, mode): @@ -31,15 +32,19 @@ class Tarball(tarfile.TarFile): Return a string from a filename in a tarball ''' ti = self.getmember(name) - return self.extractfile(ti).read() + fd = self.extractfile(ti) + return fd.read() if fd is not None else "" - def getnames(self, reg_pattern=None): + def getnames(self, re_pattern=None, glob_pattern=None): lorig = super(Tarball, self).getnames() - if reg_pattern is None: - return lorig - else: + # regexp matching + if re_pattern is not None: return [ tpname for tpname in lorig if re.match(reg_pattern, tpname) ] + # globbing matching + if glob_pattern is not None: + return fnmatch.filter(lorig, glob_pattern) + return lorig def size(self): ''' -- GitLab