Commit d412a16a authored by Seblu's avatar Seblu
Browse files

Rewrite command cat

parent 3d5606a9
Loading
Loading
Loading
Loading
+7 −13
Original line number Diff line number Diff line
@@ -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)
    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
+4 −8
Original line number Diff line number Diff line
@@ -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:
        for filename in self._tarball.getnames(glob_pattern=filename):
            arrow(filename)
                out(fd.read())
                fd.close()
            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
+10 −5
Original line number Diff line number Diff line
@@ -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):
        '''