Exemple #1
0
    def __init__(self, fn=None):
        self.package = None
        self.version = 'none'
        self.parsed_version = None
        self.architecture = None
        self.maintainer = None
        self.source = None
        self.description = None
        self.depends = None
        self.provides = None
        self.replaces = None
        self.conflicts = None
        self.recommends = None
        self.suggests = None
        self.section = None
        self.filename_header = None
        self.file_list = []
        # md5 is lazy attribute, computed on demand
        #self.md5 = None
        self.size = None
        self.installed_size = None
        self.filename = None
        self.isdeb = 0
        self.homepage = None
        self.oe = None
        self.priority = None
        self.fn = fn

        if fn:
            # see if it is deb format
            f = open(fn, "rb")
            magic = f.read(4)
            f.seek(0, 0)
            if (magic == "!<ar"):
                self.isdeb = 1

            stat = os.stat(fn)
            self.size = stat[ST_SIZE]
            self.filename = os.path.basename(fn)
            ## sys.stderr.write("  extracting control.tar.gz from %s\n"% (fn,))
            if self.isdeb:
                ar = arfile.ArFile(f)
                tarStream = ar.open("control.tar.gz")
                tarf = tarfile.open("control.tar.gz", "r", tarStream)

                try:
                    control = tarf.extractfile("control")
                except KeyError:
                    control = tarf.extractfile("./control")
            else:
                control = os.popen(
                    "tar -xzO -f " + fn +
                    " './control.tar.gz' | tar xfzO - './control'", "r")

            self.read_control(control)
            control.close()

        self.scratch_dir = None
        self.file_dir = None
        self.meta_dir = None
Exemple #2
0
    def __init__(self, fn=None, relpath=None):
        self.package = None
        self.version = 'none'
        self.parsed_version = None
        self.architecture = None
        self.maintainer = None
        self.source = None
        self.description = None
        self.depends = None
        self.provides = None
        self.replaces = None
        self.conflicts = None
        self.recommends = None
        self.suggests = None
        self.section = None
        self.filename_header = None
        self.file_list = []
        # md5 and size is lazy attribute, computed on demand
        #self.md5 = None
        #self.size = None
        self.installed_size = None
        self.filename = None
        self.file_ext_opk = "ipk"
        self.homepage = None
        self.oe = None
        self.priority = None
        self.tags = None
        self.fn = fn
        self.license = None

        if fn:
            # see if it is deb format
            f = open(fn, "rb")

            if relpath:
                self.filename = os.path.relpath(fn, relpath)
            else:
                self.filename = os.path.basename(fn)

            ## sys.stderr.write("  extracting control.tar.gz from %s\n"% (fn,))

            ar = arfile.ArFile(f, fn)
            tarStream = ar.open("control.tar.gz")
            tarf = tarfile.open("control.tar.gz", "r", tarStream)

            try:
                control = tarf.extractfile("control")
            except KeyError:
                control = tarf.extractfile("./control")
            try:
                self.read_control(control)
            except TypeError as e:
                sys.stderr.write("Cannot read control file '%s' - %s\n" %
                                 (fn, e))
            control.close()

        self.scratch_dir = None
        self.file_dir = None
        self.meta_dir = None
Exemple #3
0
    def __init__(self, fn=None):
        self.package = None
        self.version = 'none'
        self.parsed_version = None
        self.architecture = None
        self.maintainer = None
        self.source = None
        self.description = None
        self.depends = None
        self.provides = None
        self.replaces = None
        self.conflicts = None
        self.recommends = None
        self.suggests = None
        self.section = None
        self.filename_header = None
        self.file_list = []
        # md5 and size is lazy attribute, computed on demand
        #self.md5 = None
        #self.size = None
        self.installed_size = None
        self.filename = None
        self.isdeb = 0
        self.file_ext_opk = "ipk"
        self.homepage = None
        self.oe = None
        self.priority = None
        self.tags = None
        self.fn = fn

        if fn:
            # see if it is deb format
            f = open(fn, "rb")
            magic = f.read(4)
            f.seek(0, 0)
            if (magic == "!<ar"):
                self.isdeb = 1

            self.filename = os.path.basename(fn)
            assert self.isdeb == 1, "Old ipk format (non-deb) is unsupported"

            ## sys.stderr.write("  extracting control.tar.gz from %s\n"% (fn,))

            ar = arfile.ArFile(f)
            tarStream = ar.open("control.tar.gz")
            tarf = tarfile.open("control.tar.gz", "r", tarStream)

            try:
                control = tarf.extractfile("control")
            except KeyError:
                control = tarf.extractfile("./control")
            self.read_control(control)
            control.close()

        self.scratch_dir = None
        self.file_dir = None
        self.meta_dir = None
Exemple #4
0
    def get_file_list(self):
        if not self.fn:
            return []
        f = open(self.fn, "rb")
        ar = arfile.ArFile(f)
        tarStream = ar.open("data.tar.gz")
        tarf = tarfile.open("data.tar.gz", "r", tarStream)
        self.file_list = tarf.getnames()
        self.file_list = map(lambda a: ["./", ""][a.startswith("./")] + a,
                             self.file_list)

        f.close()
        return self.file_list
Exemple #5
0
    def get_file_list(self):
        if not self.fn:
            sys.stderr.write("Package '%s' has empty fn, returning empty filelist\n" % (self.package))
            return []
        f = open(self.fn, "rb")
        ar = arfile.ArFile(f, self.fn)
        tarStream = ar.open("data.tar.gz")
        tarf = tarfile.open("data.tar.gz", "r", tarStream)
        self.file_list = tarf.getnames()
        self.file_list = map(lambda a: ["./", ""][a.startswith("./")] + a, self.file_list)

        f.close()
        return self.file_list
Exemple #6
0
    def __init__(self, debfile):
        self.debfile = debfile
        self.fds = {}

        f = open(debfile, 'rb')
        a = arfile.ArFile(f)

        f2 = a.open('data.tar.xz')
        xz = lzma.LZMAFile(f2)
        tar = tarfile.open(fileobj=xz)

        self.store = tar

        print(tar.getmembers())
Exemple #7
0
    def get_file_list(self):
        if not self.fn:
            sys.stderr.write("Package '%s' has empty fn, returning empty filelist\n" % (self.package))
            return []
        f = open(self.fn, "rb")
        ar = arfile.ArFile(f, self.fn)
        try:
            tarStream = ar.open("data.tar.gz")
            tarf = tarfile.open("data.tar.gz", "r", tarStream)
        except IOError:
            tarStream = ar.open("data.tar.xz")
            tarf = tarfile.open("data.tar.xz", "r:xz", tarStream)
        self.file_list = tarf.getnames()
        self.file_list = [["./", ""][a.startswith("./")] + a for a in self.file_list]

        f.close()
        return self.file_list
Exemple #8
0
    def get_file_list(self):
        if not self.fn:
            return []
	
	if self.isdeb:
    	    f = open(self.fn, "rb")
    	    ar = arfile.ArFile(f)
    	    tarStream = ar.open("data.tar.gz")
    	    tarf = tarfile.open("data.tar.gz", "r", tarStream)
    	    self.file_list = tarf.getnames()
    	    f.close()
	else:
            f = os.popen("tar xfzO " + self.fn + " '*data.tar.gz' | tar tfz -","r") 
            while 1: 
                line = f.readline() 
                if not line: break 
                self.file_list.append(string.rstrip(line)) 
            f.close() 

        # Make sure that filelist has consistent format regardless of tar version
        self.file_list = map(lambda a: ["./", ""][a.startswith("./")] + a, self.file_list)
        return self.file_list
Exemple #9
0
 def setUp(self):
     os.system("ar r test.ar test_debfile.py test_changelog test_deb822.py >/dev/null 2>&1") 
     assert os.path.exists("test.ar")
     self.testmembers = [ x.strip()
             for x in os.popen("ar t test.ar").readlines() ]
     self.a = arfile.ArFile("test.ar")
Exemple #10
0
 def setUp(self):
     TestArFile.setUp(self)
     self.a = arfile.ArFile(fileobj=open("test.ar", "r"))