def filelistsmetadata_from_sqlite_factory(sqlitepath, archpath):
    fil_obj = FilelistsMetadata(sqlitepath, archpath)

    con = sqlite.Connection(sqlitepath)
    fil_cur = con.cursor()
    fil_cur.execute('SELECT * FROM packages')
    for row in fil_cur:
        fp = FilelistsDbPackage()
        pkgkey = row[0]

        fp.checksum = row[1]

        cur = con.cursor()
        cur.execute(
            'SELECT dirname, filenames, filetypes FROM filelist WHERE pkgKey=?',
            (pkgkey, ))

        for dirname, filenames, filetypes in cur:
            # XXX: If there is dir without name '/' it's splited into 2 empty string
            #      so, if there are two empty string next to each other, replace
            #      it with only one empty string
            splited_filenames = filenames.split('/')
            filtered_splited_filenames = []
            if len(filenames):
                filtered_splited_filenames.append(splited_filenames[0])
            for i in xrange(1, len(filenames.split('/'))):
                if splited_filenames[i] == '' and splited_filenames[i -
                                                                    1] == '':
                    continue
                filtered_splited_filenames.append(splited_filenames[i])
            # XXX: End

            for filename, ftype in zip(filtered_splited_filenames,
                                       list(filetypes)):
                # If in XML is "foo" in db will be DIR: "." FILE: "foo"
                # Thus result will be "./foo" after join, so if dir is "."
                # do not do a join
                if dirname != ".":
                    path = os.path.join(dirname, filename)
                else:
                    path = filename

                if ftype == 'f':
                    fp.files.add(path)
                    fp.files_db.add(filename)
                elif ftype == 'd':
                    fp.dirs.add(path)
                    fp.dirs_db.add(filename)
                else:
                    fp.ghosts.add(path)
                    fp.ghosts_db.add(filename)
                fp.dbdirectories.append(dirname)
        fp.dbdirectories = sorted(fp.dbdirectories)
        fil_obj.append(fp.checksum, fp)
    return fil_obj
Beispiel #2
0
def filelistsmetadata_from_sqlite_factory(sqlitepath, archpath):
    fil_obj = FilelistsMetadata(sqlitepath, archpath)

    con = sqlite.Connection(sqlitepath)
    fil_cur = con.cursor()
    fil_cur.execute('SELECT * FROM packages')
    for row in fil_cur:
        fp = FilelistsDbPackage()
        pkgkey = row[0]

        fp.checksum = row[1]

        cur = con.cursor()
        cur.execute('SELECT dirname, filenames, filetypes FROM filelist WHERE pkgKey=?',
                                                                    (pkgkey,))

        for dirname, filenames, filetypes in cur:
            # XXX: If there is dir without name '/' it's splited into 2 empty string
            #      so, if there are two empty string next to each other, replace
            #      it with only one empty string
            splited_filenames = filenames.split('/')
            filtered_splited_filenames = []
            if len(filenames):
                filtered_splited_filenames.append(splited_filenames[0])
            for i in xrange(1, len(filenames.split('/'))):
                if splited_filenames[i] == '' and splited_filenames[i-1] == '':
                    continue
                filtered_splited_filenames.append(splited_filenames[i])
            # XXX: End

            for filename, ftype in zip(filtered_splited_filenames, list(filetypes)):
                # If in XML is "foo" in db will be DIR: "." FILE: "foo"
                # Thus result will be "./foo" after join, so if dir is "."
                # do not do a join
                if dirname != ".":
                    path = os.path.join(dirname, filename)
                else:
                    path = filename

                if ftype == 'f':
                    fp.files.add(path)
                    fp.files_db.add(filename)
                elif ftype == 'd':
                    fp.dirs.add(path)
                    fp.dirs_db.add(filename)
                else:
                    fp.ghosts.add(path)
                    fp.ghosts_db.add(filename)
                fp.dbdirectories.append(dirname)
        fp.dbdirectories = sorted(fp.dbdirectories)
        fil_obj.append(fp.checksum, fp)
    return fil_obj
Beispiel #3
0
def filelistsmetadata_from_xml_factory(xmlpath, archpath):
    fil_obj = FilelistsMetadata(xmlpath, archpath)
    for _, elements in etree.iterparse(xmlpath, tag="%spackage" % FIL_NS):
        elements = MyElement(elements)
        fp = FilelistsPackage()
        fp.checksum = elements.get("pkgid")
        fp.arch = elements.get("arch")
        fp.name = elements.get("name")
        for elem in elements:
            elem = MyElement(elem)
            if elem.tag.endswith("version"):
                fp.epoch = elem.get("epoch")
                fp.version = elem.get("ver")
                fp.release = elem.get("rel")
            elif elem.tag.endswith("file"):
                if elem.get("type") == "dir":
                    fp.dirs.add(elem.text)
                elif elem.get("type") == "ghost":
                    fp.ghosts.add(elem.text)
                else:
                    fp.files.add(elem.text)
        elements.clear()
        fil_obj.append(fp.checksum, fp)
    return fil_obj
def filelistsmetadata_from_xml_factory(xmlpath, archpath):
    fil_obj = FilelistsMetadata(xmlpath, archpath)
    for _, elements in etree.iterparse(xmlpath, tag="%spackage" % FIL_NS):
        elements = MyElement(elements)
        fp = FilelistsPackage()
        fp.checksum = elements.get("pkgid")
        fp.arch = elements.get("arch")
        fp.name = elements.get("name")
        for elem in elements:
            elem = MyElement(elem)
            if elem.tag.endswith("version"):
                fp.epoch = elem.get("epoch")
                fp.version = elem.get("ver")
                fp.release = elem.get("rel")
            elif elem.tag.endswith("file"):
                if elem.get("type") == "dir":
                    fp.dirs.add(elem.text)
                elif elem.get("type") == "ghost":
                    fp.ghosts.add(elem.text)
                else:
                    fp.files.add(elem.text)
        elements.clear()
        fil_obj.append(fp.checksum, fp)
    return fil_obj