summaryrefslogtreecommitdiffstats
path: root/test/pacman/pmdb.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/pacman/pmdb.py')
-rwxr-xr-xtest/pacman/pmdb.py188
1 files changed, 47 insertions, 141 deletions
diff --git a/test/pacman/pmdb.py b/test/pacman/pmdb.py
index 218e3b58..b31498a7 100755
--- a/test/pacman/pmdb.py
+++ b/test/pacman/pmdb.py
@@ -17,13 +17,10 @@
import os
-import tempfile
-import shutil
import tarfile
import pmpkg
-from util import *
-
+import util
def _mkfilelist(files):
"""Generate a list of files from the list supplied as an argument.
@@ -38,19 +35,19 @@ def _mkfilelist(files):
usr/local/bin/
usr/local/bin/dummy
"""
- file_list = set()
+ file_set = set()
for f in files:
- dir = getfilename(f)
- file_list.add(dir)
- while "/" in dir:
- [dir, tmp] = dir.rsplit("/", 1)
- file_list.add(dir + "/")
- return sorted(file_list)
+ name = util.getfilename(f)
+ file_set.add(name)
+ while "/" in name:
+ [name, tmp] = name.rsplit("/", 1)
+ file_set.add(name + "/")
+ return sorted(file_set)
def _mkbackuplist(backup):
"""
"""
- return ["%s\t%s" % (getfilename(i), mkmd5sum(i)) for i in backup]
+ return ["%s\t%s" % (util.getfilename(i), util.mkmd5sum(i)) for i in backup]
def _getsection(fd):
"""
@@ -75,15 +72,19 @@ def _mksection(title, data):
"%s\n" % (title, s)
-class pmdb:
+class pmdb(object):
"""Database object
"""
- def __init__(self, treename, dbdir):
+ def __init__(self, treename, root):
self.treename = treename
- self.dbdir = dbdir
self.pkgs = []
self.option = {}
+ if self.treename == "local":
+ self.dbdir = os.path.join(root, util.PM_DBPATH, treename)
+ else:
+ self.dbdir = os.path.join(root, util.PM_SYNCDBPATH, treename)
+ self.dbfile = os.path.join(root, util.PM_SYNCDBPATH, treename + ".db")
def __str__(self):
return "%s" % self.treename
@@ -98,8 +99,7 @@ class pmdb:
def db_read(self, name):
"""
"""
-
- path = os.path.join(self.dbdir, self.treename)
+ path = self.dbdir
if not os.path.isdir(path):
return None
@@ -152,12 +152,15 @@ class pmdb:
pkg.md5sum = fd.readline().strip("\n")
elif line == "%REPLACES%":
pkg.replaces = _getsection(fd)
- elif line == "%FORCE%":
- fd.readline()
- pkg.force = 1
+ elif line == "%DEPENDS%":
+ pkg.depends = _getsection(fd)
+ elif line == "%OPTDEPENDS%":
+ pkg.optdepends = _getsection(fd)
+ elif line == "%CONFLICTS%":
+ pkg.conflicts = _getsection(fd)
+ elif line == "%PROVIDES%":
+ pkg.provides = _getsection(fd)
fd.close()
- pkg.checksum["desc"] = getmd5sum(filename)
- pkg.mtime["desc"] = getmtime(filename)
# files
filename = os.path.join(path, "files")
@@ -178,43 +181,9 @@ class pmdb:
if line == "%BACKUP%":
pkg.backup = _getsection(fd)
fd.close()
- pkg.checksum["files"] = getmd5sum(filename)
- pkg.mtime["files"] = getmtime(filename)
-
- # depends
- filename = os.path.join(path, "depends")
- if not os.path.isfile(filename):
- print "invalid db entry found (depends missing) for pkg", pkgname
- return None
- fd = file(filename, "r")
- while 1:
- line = fd.readline()
- if not line:
- break
- line = line.strip("\n")
- if line == "%DEPENDS%":
- pkg.depends = _getsection(fd)
- elif line == "%OPTDEPENDS%":
- pkg.optdepends = _getsection(fd)
- elif line == "%CONFLICTS%":
- pkg.conflicts = _getsection(fd)
- elif line == "%PROVIDES%":
- pkg.provides = _getsection(fd)
- # TODO this was going to be changed, but isn't anymore
- #elif line == "%REPLACES%":
- # pkg.replaces = _getsection(fd)
- #elif line == "%FORCE%":
- # fd.readline()
- # pkg.force = 1
- fd.close()
- pkg.checksum["depends"] = getmd5sum(filename)
- pkg.mtime["depends"] = getmtime(filename)
# install
filename = os.path.join(path, "install")
- if os.path.isfile(filename):
- pkg.checksum["install"] = getmd5sum(filename)
- pkg.mtime["install"] = getmtime(filename)
return pkg
@@ -224,19 +193,15 @@ class pmdb:
def db_write(self, pkg):
"""
"""
-
- if self.treename == "local":
- path = os.path.join(self.dbdir, self.treename, pkg.fullname())
- else:
- path = os.path.join(self.dbdir, "sync", self.treename, pkg.fullname())
- mkdir(path)
+ path = os.path.join(self.dbdir, pkg.fullname())
+ util.mkdir(path)
# desc
# for local db entries: name, version, desc, groups, url, license,
# arch, builddate, installdate, packager,
- # size, reason
+ # size, reason, depends, conflicts, provides
# for sync entries: name, version, desc, groups, csize, md5sum,
- # replaces, force
+ # replaces, force, depends, conflicts, provides
data = [_mksection("NAME", pkg.name)]
data.append(_mksection("VERSION", pkg.version))
if pkg.desc:
@@ -251,6 +216,14 @@ class pmdb:
data.append(_mksection("BUILDDATE", pkg.builddate))
if pkg.packager:
data.append(_mksection("PACKAGER", pkg.packager))
+ if pkg.depends:
+ data.append(_mksection("DEPENDS", pkg.depends))
+ if pkg.optdepends:
+ data.append(_mksection("OPTDEPENDS", pkg.optdepends))
+ if pkg.conflicts:
+ data.append(_mksection("CONFLICTS", pkg.conflicts))
+ if pkg.provides:
+ data.append(_mksection("PROVIDES", pkg.provides))
if self.treename == "local":
if pkg.url:
data.append(_mksection("URL", pkg.url))
@@ -264,8 +237,6 @@ class pmdb:
data.append(_mksection("FILENAME", pkg.filename()))
if pkg.replaces:
data.append(_mksection("REPLACES", pkg.replaces))
- if pkg.force:
- data.append(_mksection("FORCE", ""))
if pkg.csize:
data.append(_mksection("CSIZE", pkg.csize))
if pkg.md5sum:
@@ -273,9 +244,7 @@ class pmdb:
if data:
data.append("")
filename = os.path.join(path, "desc")
- mkfile(filename, "\n".join(data))
- pkg.checksum["desc"] = getmd5sum(filename)
- pkg.mtime["desc"] = getmtime(filename)
+ util.mkfile(filename, "\n".join(data))
# files
# for local entries, fields are: files, backup
@@ -289,33 +258,7 @@ class pmdb:
if data:
data.append("")
filename = os.path.join(path, "files")
- mkfile(filename, "\n".join(data))
- pkg.checksum["files"] = getmd5sum(filename)
- pkg.mtime["files"] = getmtime(filename)
-
- # depends
- # for local db entries: depends, conflicts, provides
- # for sync ones: depends, conflicts, provides
- data = []
- if pkg.depends:
- data.append(_mksection("DEPENDS", pkg.depends))
- if pkg.optdepends:
- data.append(_mksection("OPTDEPENDS", pkg.optdepends))
- if pkg.conflicts:
- data.append(_mksection("CONFLICTS", pkg.conflicts))
- if pkg.provides:
- data.append(_mksection("PROVIDES", pkg.provides))
- #if self.treename != "local":
- # if pkg.replaces:
- # data.append(_mksection("REPLACES", pkg.replaces))
- # if pkg.force:
- # data.append(_mksection("FORCE", ""))
- if data:
- data.append("")
- filename = os.path.join(path, "depends")
- mkfile(filename, "\n".join(data))
- pkg.checksum["depends"] = getmd5sum(filename)
- pkg.mtime["depends"] = getmtime(filename)
+ util.mkfile(filename, "\n".join(data))
# install
if self.treename == "local":
@@ -325,60 +268,23 @@ class pmdb:
empty = 0
if not empty:
filename = os.path.join(path, "install")
- mkinstallfile(filename, pkg.install)
- pkg.checksum["install"] = getmd5sum(filename)
- pkg.mtime["install"] = getmtime(filename)
+ util.mkinstallfile(filename, pkg.install)
- def gensync(self, path):
+ def gensync(self):
"""
"""
+ if not self.dbfile:
+ return
curdir = os.getcwd()
- tmpdir = tempfile.mkdtemp()
- os.chdir(tmpdir)
-
- for pkg in self.pkgs:
- mkdescfile(pkg.fullname(), pkg)
+ os.chdir(self.dbdir)
# Generate database archive
- mkdir(path)
- archive = os.path.join(path, "%s%s" % (self.treename, PM_EXT_DB))
- tar = tarfile.open(archive, "w:gz")
- for root, dirs, files in os.walk('.'):
- for d in dirs:
- tar.add(os.path.join(root, d), recursive=False)
- for f in files:
- tar.add(os.path.join(root, f))
+ tar = tarfile.open(self.dbfile, "w:gz")
+ for i in os.listdir("."):
+ tar.add(i)
tar.close()
os.chdir(curdir)
- shutil.rmtree(tmpdir)
-
- def ispkgmodified(self, pkg):
- """
- """
-
- modified = 0
-
- oldpkg = self.getpkg(pkg.name)
- if not oldpkg:
- return 0
-
- vprint("\toldpkg.checksum : %s" % oldpkg.checksum)
- vprint("\toldpkg.mtime : %s" % oldpkg.mtime)
-
- for key in pkg.mtime.keys():
- if key == "install" \
- and oldpkg.mtime[key] == (0, 0, 0) \
- and pkg.mtime[key] == (0, 0, 0):
- continue
- if oldpkg.mtime[key][1:3] != pkg.mtime[key][1:3]:
- modified += 1
-
- return modified
-
-if __name__ == "__main__":
- db = pmdb("local")
- print db
# vim: set ts=4 sw=4 et: