diff options
Diffstat (limited to 'test/pacman')
| -rw-r--r-- | test/pacman/pmdb.py | 72 | ||||
| -rw-r--r-- | test/pacman/pmpkg.py | 2 | ||||
| -rw-r--r-- | test/pacman/pmtest.py | 22 | 
3 files changed, 48 insertions, 48 deletions
| diff --git a/test/pacman/pmdb.py b/test/pacman/pmdb.py index d5f9e618..06bc9a6f 100644 --- a/test/pacman/pmdb.py +++ b/test/pacman/pmdb.py @@ -17,6 +17,8 @@  import os +import shutil +from StringIO import StringIO  import tarfile  import pmpkg @@ -49,6 +51,7 @@ class pmdb(object):      def __init__(self, treename, root):          self.treename = treename +        self.root = root          self.pkgs = []          self.option = {}          if self.treename == "local": @@ -56,9 +59,7 @@ class pmdb(object):              self.dbfile = None              self.is_local = True          else: -            self.dbdir = os.path.join(root, util.PM_SYNCDBPATH, treename) -            # TODO: we should be doing this, don't need a sync db dir -            #self.dbdir = None +            self.dbdir = None              self.dbfile = os.path.join(root, util.PM_SYNCDBPATH, treename + ".db")              self.is_local = False @@ -77,12 +78,11 @@ class pmdb(object):                  return pkg      def db_read(self, name): -        path = self.dbdir -        if not os.path.isdir(path): +        if not self.dbdir or not os.path.isdir(self.dbdir):              return None          dbentry = "" -        for roots, dirs, files in os.walk(path): +        for roots, dirs, files in os.walk(self.dbdir):              for i in dirs:                  [pkgname, pkgver, pkgrel] = i.rsplit("-", 2)                  if pkgname == name: @@ -90,7 +90,7 @@ class pmdb(object):                      break          if not dbentry:              return None -        path = os.path.join(path, dbentry) +        path = os.path.join(self.dbdir, dbentry)          [pkgname, pkgver, pkgrel] = dbentry.rsplit("-", 2)          pkg = pmpkg.pmpkg(pkgname, pkgver + "-" + pkgrel) @@ -179,9 +179,7 @@ class pmdb(object):      # db_write is used to add both 'local' and 'sync' db entries      #      def db_write(self, pkg): -        path = os.path.join(self.dbdir, pkg.fullname()) -        util.mkdir(path) - +        entry = {}          # desc/depends type entries          data = []          make_section(data, "NAME", pkg.name) @@ -209,32 +207,48 @@ class pmdb(object):              make_section(data, "MD5SUM", pkg.md5sum)              make_section(data, "PGPSIG", pkg.pgpsig) -        filename = os.path.join(path, "desc") -        util.mkfile(filename, "\n".join(data)) +        entry["desc"] = "\n".join(data) + "\n"          # files and install          if self.is_local:              data = []              make_section(data, "FILES", pkg.full_filelist())              make_section(data, "BACKUP", pkg.local_backup_entries()) -            filename = os.path.join(path, "files") -            util.mkfile(filename, "\n".join(data)) +            entry["files"] = "\n".join(data) + "\n"              if any(pkg.install.values()): -                filename = os.path.join(path, "install") -                util.mkfile(filename, pkg.installfile()) - -    def gensync(self): -        if not self.dbfile: -            return -        curdir = os.getcwd() -        os.chdir(self.dbdir) - -        tar = tarfile.open(self.dbfile, "w:gz") -        for i in os.listdir("."): -            tar.add(i) -        tar.close() - -        os.chdir(curdir) +                entry["install"] = pkg.installfile() + "\n" + +        return entry + +    def generate(self): +        pkg_entries = [(pkg, self.db_write(pkg)) for pkg in self.pkgs] + +        if self.dbdir: +            for pkg, entry in pkg_entries: +                path = os.path.join(self.dbdir, pkg.fullname()) +                util.mkdir(path) +                for name, data in entry.iteritems(): +                    filename = os.path.join(path, name) +                    util.mkfile(filename, data) + +        if self.dbfile: +            tar = tarfile.open(self.dbfile, "w:gz") +            for pkg, entry in pkg_entries: +                # TODO: the addition of the directory is currently a +                # requirement for successful reading of a DB by libalpm +                info = tarfile.TarInfo(pkg.fullname()) +                info.type = tarfile.DIRTYPE +                tar.addfile(info) +                for name, data in entry.iteritems(): +                    filename = os.path.join(pkg.fullname(), name) +                    info = tarfile.TarInfo(filename) +                    info.size = len(data) +                    tar.addfile(info, StringIO(data)) +            tar.close() +            # TODO: this is a bit unnecessary considering only one test uses it +            serverpath = os.path.join(self.root, util.SYNCREPO, self.treename) +            util.mkdir(serverpath) +            shutil.copy(self.dbfile, serverpath)  # vim: set ts=4 sw=4 et: diff --git a/test/pacman/pmpkg.py b/test/pacman/pmpkg.py index e9721310..64c4f5ef 100644 --- a/test/pacman/pmpkg.py +++ b/test/pacman/pmpkg.py @@ -190,7 +190,7 @@ class pmpkg(object):          data = []          for key, value in self.install.iteritems():              if value: -                data.append("%s() {\n%s\n}" % (key, value)) +                data.append("%s() {\n%s\n}\n" % (key, value))          return "\n".join(data) diff --git a/test/pacman/pmtest.py b/test/pacman/pmtest.py index 105a841c..3f78ff92 100644 --- a/test/pacman/pmtest.py +++ b/test/pacman/pmtest.py @@ -55,7 +55,7 @@ class pmtest(object):          either sync databases or the local package collection. The local database          is allowed to match if allow_local is True."""          for db in self.db.itervalues(): -            if db.treename == "local" and not allow_local: +            if db.is_local and not allow_local:                  continue              pkg = db.getpkg(name)              if pkg and pkg.version == version: @@ -110,7 +110,7 @@ class pmtest(object):          # Create directory structure          vprint("    Creating directory structure:") -        dbdir = os.path.join(self.root, util.PM_DBPATH) +        dbdir = os.path.join(self.root, util.PM_SYNCDBPATH)          cachedir = os.path.join(self.root, util.PM_CACHEDIR)          syncdir = os.path.join(self.root, util.SYNCREPO)          tmpdir = os.path.join(self.root, util.TMPDIR) @@ -146,25 +146,11 @@ class pmtest(object):                  pkg.md5sum = util.getmd5sum(pkg.path)                  pkg.csize = os.stat(pkg.path)[stat.ST_SIZE] -        # Populating databases -        vprint("    Populating databases") -        for key, value in self.db.iteritems(): -            for pkg in value.pkgs: -                vprint("\t%s/%s" % (key, pkg.fullname())) -                if key == "local": -                    pkg.installdate = time.ctime() -                value.db_write(pkg) -          # Creating sync database archives -        vprint("    Creating sync database archives") +        vprint("    Creating databases")          for key, value in self.db.iteritems(): -            if key == "local": -                continue              vprint("\t" + value.treename) -            value.gensync() -            serverpath = os.path.join(syncdir, value.treename) -            util.mkdir(serverpath) -            shutil.copy(value.dbfile, serverpath) +            value.generate()          # Filesystem          vprint("    Populating file system") | 
