mirror of
https://github.com/moparisthebest/pacman
synced 2024-08-13 17:03:46 -04:00
* Indentation changes - 4 spaces for python, we standardized this before (and
it's a PEP) * Modified some sync tests
This commit is contained in:
parent
a8dd8d5770
commit
786cd38c0a
@ -32,42 +32,43 @@ __version__ = "0.3"
|
||||
|
||||
|
||||
def usage(retcode):
|
||||
"""
|
||||
"""
|
||||
print "Usage: %s [options] [[--test=<path/to/testfile.py>] ...]\n\n" % __file__
|
||||
sys.exit(retcode)
|
||||
"""
|
||||
"""
|
||||
print "Usage: %s [options] [[--test=<path/to/testfile.py>] ...]\n\n" % __file__
|
||||
sys.exit(retcode)
|
||||
|
||||
if __name__ == "__main__":
|
||||
env = pmenv.pmenv()
|
||||
testcases = []
|
||||
env = pmenv.pmenv()
|
||||
testcases = []
|
||||
|
||||
try:
|
||||
opts, args = getopt.getopt(sys.argv[1:],
|
||||
"d:hp:t:v",
|
||||
["debug=", "gdb", "help", "pacman=", "test=", "valgrind", "verbose", "nolog"])
|
||||
except getopt.GetoptError:
|
||||
usage(1)
|
||||
try:
|
||||
opts, args = getopt.getopt(sys.argv[1:],
|
||||
"d:hp:t:v",
|
||||
["debug=", "gdb", "help", "pacman=", "test=", "valgrind", "verbose", "nolog"])
|
||||
except getopt.GetoptError:
|
||||
usage(1)
|
||||
|
||||
for (cmd, param) in opts:
|
||||
if cmd == "-v" or cmd == "--verbose":
|
||||
util.verbose += 1
|
||||
elif cmd == "-d" or cmd == "--debug":
|
||||
env.pacman["debug"] = int(param)
|
||||
elif cmd == "-t" or cmd == "--test":
|
||||
testcases.extend(glob.glob(param))
|
||||
elif cmd == "-p" or cmd == "--pacman":
|
||||
env.pacman["bin"] = os.path.abspath(param)
|
||||
elif cmd == "-h" or cmd == "--help":
|
||||
usage(0)
|
||||
elif cmd == "--nolog":
|
||||
env.pacman["nolog"] = 1
|
||||
elif cmd == "--gdb":
|
||||
env.pacman["gdb"] = 1
|
||||
elif cmd == "--valgrind":
|
||||
env.pacman["valgrind"] = 1
|
||||
for (cmd, param) in opts:
|
||||
if cmd == "-v" or cmd == "--verbose":
|
||||
util.verbose += 1
|
||||
elif cmd == "-d" or cmd == "--debug":
|
||||
env.pacman["debug"] = int(param)
|
||||
elif cmd == "-t" or cmd == "--test":
|
||||
testcases.extend(glob.glob(param))
|
||||
elif cmd == "-p" or cmd == "--pacman":
|
||||
env.pacman["bin"] = os.path.abspath(param)
|
||||
elif cmd == "-h" or cmd == "--help":
|
||||
usage(0)
|
||||
elif cmd == "--nolog":
|
||||
env.pacman["nolog"] = 1
|
||||
elif cmd == "--gdb":
|
||||
env.pacman["gdb"] = 1
|
||||
elif cmd == "--valgrind":
|
||||
env.pacman["valgrind"] = 1
|
||||
|
||||
for i in testcases:
|
||||
env.addtest(i)
|
||||
for i in testcases:
|
||||
env.addtest(i)
|
||||
|
||||
env.run()
|
||||
env.results()
|
||||
env.run()
|
||||
env.results()
|
||||
# vim: set ts=4 sw=4 et:
|
||||
|
587
pactest/pmdb.py
587
pactest/pmdb.py
@ -27,337 +27,338 @@ from util import *
|
||||
|
||||
|
||||
def _mkfilelist(files):
|
||||
"""Generate a list of files from the list supplied as an argument.
|
||||
|
||||
Each path is decomposed to generate the list of all directories leading
|
||||
to the file.
|
||||
|
||||
Example with 'usr/local/bin/dummy':
|
||||
The resulting list will be
|
||||
usr/
|
||||
usr/local/
|
||||
usr/local/bin/
|
||||
usr/local/bin/dummy
|
||||
"""
|
||||
i = []
|
||||
for f in files:
|
||||
dir = getfilename(f)
|
||||
i.append(dir)
|
||||
while "/" in dir:
|
||||
[dir, tmp] = dir.rsplit("/", 1)
|
||||
if not dir + "/" in files:
|
||||
i.append(dir + "/")
|
||||
i.sort()
|
||||
return i
|
||||
"""Generate a list of files from the list supplied as an argument.
|
||||
|
||||
Each path is decomposed to generate the list of all directories leading
|
||||
to the file.
|
||||
|
||||
Example with 'usr/local/bin/dummy':
|
||||
The resulting list will be
|
||||
usr/
|
||||
usr/local/
|
||||
usr/local/bin/
|
||||
usr/local/bin/dummy
|
||||
"""
|
||||
i = []
|
||||
for f in files:
|
||||
dir = getfilename(f)
|
||||
i.append(dir)
|
||||
while "/" in dir:
|
||||
[dir, tmp] = dir.rsplit("/", 1)
|
||||
if not dir + "/" in files:
|
||||
i.append(dir + "/")
|
||||
i.sort()
|
||||
return i
|
||||
|
||||
def _mkbackuplist(backup):
|
||||
"""
|
||||
"""
|
||||
return ["%s\t%s" % (getfilename(i), mkmd5sum(i)) for i in backup]
|
||||
"""
|
||||
"""
|
||||
return ["%s\t%s" % (getfilename(i), mkmd5sum(i)) for i in backup]
|
||||
|
||||
def _getsection(fd):
|
||||
"""
|
||||
"""
|
||||
i = []
|
||||
while 1:
|
||||
line = fd.readline().strip("\n")
|
||||
if not line:
|
||||
break
|
||||
i.append(line)
|
||||
return i
|
||||
"""
|
||||
"""
|
||||
i = []
|
||||
while 1:
|
||||
line = fd.readline().strip("\n")
|
||||
if not line:
|
||||
break
|
||||
i.append(line)
|
||||
return i
|
||||
|
||||
def _mksection(title, data):
|
||||
"""
|
||||
"""
|
||||
s = ""
|
||||
if isinstance(data, list):
|
||||
s = "\n".join(data)
|
||||
else:
|
||||
s = data
|
||||
return "%%%s%%\n" \
|
||||
"%s\n" % (title, s)
|
||||
"""
|
||||
"""
|
||||
s = ""
|
||||
if isinstance(data, list):
|
||||
s = "\n".join(data)
|
||||
else:
|
||||
s = data
|
||||
return "%%%s%%\n" \
|
||||
"%s\n" % (title, s)
|
||||
|
||||
|
||||
class pmdb:
|
||||
"""Database object
|
||||
"""
|
||||
"""Database object
|
||||
"""
|
||||
|
||||
def __init__(self, treename, dbdir):
|
||||
self.treename = treename
|
||||
self.dbdir = dbdir
|
||||
self.pkgs = []
|
||||
def __init__(self, treename, dbdir):
|
||||
self.treename = treename
|
||||
self.dbdir = dbdir
|
||||
self.pkgs = []
|
||||
|
||||
def __str__(self):
|
||||
return "%s" % self.treename
|
||||
def __str__(self):
|
||||
return "%s" % self.treename
|
||||
|
||||
def getpkg(self, name):
|
||||
"""
|
||||
"""
|
||||
for pkg in self.pkgs:
|
||||
if name == pkg.name:
|
||||
return pkg
|
||||
def getpkg(self, name):
|
||||
"""
|
||||
"""
|
||||
for pkg in self.pkgs:
|
||||
if name == pkg.name:
|
||||
return pkg
|
||||
|
||||
def db_read(self, name):
|
||||
"""
|
||||
"""
|
||||
def db_read(self, name):
|
||||
"""
|
||||
"""
|
||||
|
||||
path = os.path.join(self.dbdir, self.treename)
|
||||
if not os.path.isdir(path):
|
||||
return None
|
||||
path = os.path.join(self.dbdir, self.treename)
|
||||
if not os.path.isdir(path):
|
||||
return None
|
||||
|
||||
dbentry = ""
|
||||
for roots, dirs, files in os.walk(path):
|
||||
for i in dirs:
|
||||
[pkgname, pkgver, pkgrel] = i.rsplit("-", 2)
|
||||
if pkgname == name:
|
||||
dbentry = i
|
||||
break
|
||||
if not dbentry:
|
||||
return None
|
||||
path = os.path.join(path, dbentry)
|
||||
dbentry = ""
|
||||
for roots, dirs, files in os.walk(path):
|
||||
for i in dirs:
|
||||
[pkgname, pkgver, pkgrel] = i.rsplit("-", 2)
|
||||
if pkgname == name:
|
||||
dbentry = i
|
||||
break
|
||||
if not dbentry:
|
||||
return None
|
||||
path = os.path.join(path, dbentry)
|
||||
|
||||
[pkgname, pkgver, pkgrel] = dbentry.rsplit("-", 2)
|
||||
pkg = pmpkg.pmpkg(pkgname, pkgver + "-" + pkgrel)
|
||||
[pkgname, pkgver, pkgrel] = dbentry.rsplit("-", 2)
|
||||
pkg = pmpkg.pmpkg(pkgname, pkgver + "-" + pkgrel)
|
||||
|
||||
# desc
|
||||
filename = os.path.join(path, "desc")
|
||||
fd = file(filename, "r")
|
||||
while 1:
|
||||
line = fd.readline()
|
||||
if not line:
|
||||
break
|
||||
line = line.strip("\n")
|
||||
if line == "%DESC%":
|
||||
pkg.desc = fd.readline().strip("\n")
|
||||
elif line == "%GROUPS%":
|
||||
pkg.groups = _getsection(fd)
|
||||
elif line == "%URL%":
|
||||
pkg.url = fd.readline().strip("\n")
|
||||
elif line == "%LICENSE%":
|
||||
pkg.license = _getsection(fd)
|
||||
elif line == "%ARCH%":
|
||||
pkg.arch = fd.readline().strip("\n")
|
||||
elif line == "%BUILDDATE%":
|
||||
pkg.builddate = fd.readline().strip("\n")
|
||||
elif line == "%INSTALLDATE%":
|
||||
pkg.installdate = fd.readline().strip("\n")
|
||||
elif line == "%PACKAGER%":
|
||||
pkg.packager = fd.readline().strip("\n")
|
||||
elif line == "%REASON%":
|
||||
pkg.reason = int(fd.readline().strip("\n"))
|
||||
elif line == "%SIZE%" or line == "%CSIZE%":
|
||||
pkg.size = int(fd.readline().strip("\n"))
|
||||
elif line == "%MD5SUM%":
|
||||
pkg.md5sum = fd.readline().strip("\n")
|
||||
elif line == "%REPLACES%":
|
||||
pkg.replaces = _getsection(fd)
|
||||
elif line == "%FORCE%":
|
||||
fd.readline()
|
||||
pkg.force = 1
|
||||
fd.close()
|
||||
pkg.checksum["desc"] = getmd5sum(filename)
|
||||
pkg.mtime["desc"] = getmtime(filename)
|
||||
# desc
|
||||
filename = os.path.join(path, "desc")
|
||||
fd = file(filename, "r")
|
||||
while 1:
|
||||
line = fd.readline()
|
||||
if not line:
|
||||
break
|
||||
line = line.strip("\n")
|
||||
if line == "%DESC%":
|
||||
pkg.desc = fd.readline().strip("\n")
|
||||
elif line == "%GROUPS%":
|
||||
pkg.groups = _getsection(fd)
|
||||
elif line == "%URL%":
|
||||
pkg.url = fd.readline().strip("\n")
|
||||
elif line == "%LICENSE%":
|
||||
pkg.license = _getsection(fd)
|
||||
elif line == "%ARCH%":
|
||||
pkg.arch = fd.readline().strip("\n")
|
||||
elif line == "%BUILDDATE%":
|
||||
pkg.builddate = fd.readline().strip("\n")
|
||||
elif line == "%INSTALLDATE%":
|
||||
pkg.installdate = fd.readline().strip("\n")
|
||||
elif line == "%PACKAGER%":
|
||||
pkg.packager = fd.readline().strip("\n")
|
||||
elif line == "%REASON%":
|
||||
pkg.reason = int(fd.readline().strip("\n"))
|
||||
elif line == "%SIZE%" or line == "%CSIZE%":
|
||||
pkg.size = int(fd.readline().strip("\n"))
|
||||
elif line == "%MD5SUM%":
|
||||
pkg.md5sum = fd.readline().strip("\n")
|
||||
elif line == "%REPLACES%":
|
||||
pkg.replaces = _getsection(fd)
|
||||
elif line == "%FORCE%":
|
||||
fd.readline()
|
||||
pkg.force = 1
|
||||
fd.close()
|
||||
pkg.checksum["desc"] = getmd5sum(filename)
|
||||
pkg.mtime["desc"] = getmtime(filename)
|
||||
|
||||
# files
|
||||
filename = os.path.join(path, "files")
|
||||
fd = file(filename, "r")
|
||||
while 1:
|
||||
line = fd.readline()
|
||||
if not line:
|
||||
break
|
||||
line = line.strip("\n")
|
||||
if line == "%FILES%":
|
||||
while line:
|
||||
line = fd.readline().strip("\n")
|
||||
if line and line[-1] != "/":
|
||||
pkg.files.append(line)
|
||||
if line == "%BACKUP%":
|
||||
pkg.backup = _getsection(fd)
|
||||
fd.close()
|
||||
pkg.checksum["files"] = getmd5sum(filename)
|
||||
pkg.mtime["files"] = getmtime(filename)
|
||||
# files
|
||||
filename = os.path.join(path, "files")
|
||||
fd = file(filename, "r")
|
||||
while 1:
|
||||
line = fd.readline()
|
||||
if not line:
|
||||
break
|
||||
line = line.strip("\n")
|
||||
if line == "%FILES%":
|
||||
while line:
|
||||
line = fd.readline().strip("\n")
|
||||
if line and line[-1] != "/":
|
||||
pkg.files.append(line)
|
||||
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")
|
||||
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 == "%REQUIREDBY%":
|
||||
pkg.requiredby = _getsection(fd)
|
||||
elif line == "%CONFLICTS%":
|
||||
pkg.conflicts = _getsection(fd)
|
||||
elif line == "%PROVIDES%":
|
||||
pkg.provides = _getsection(fd)
|
||||
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)
|
||||
# depends
|
||||
filename = os.path.join(path, "depends")
|
||||
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 == "%REQUIREDBY%":
|
||||
pkg.requiredby = _getsection(fd)
|
||||
elif line == "%CONFLICTS%":
|
||||
pkg.conflicts = _getsection(fd)
|
||||
elif line == "%PROVIDES%":
|
||||
pkg.provides = _getsection(fd)
|
||||
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)
|
||||
# install
|
||||
filename = os.path.join(path, "install")
|
||||
if os.path.isfile(filename):
|
||||
pkg.checksum["install"] = getmd5sum(filename)
|
||||
pkg.mtime["install"] = getmtime(filename)
|
||||
|
||||
return pkg
|
||||
return pkg
|
||||
|
||||
#
|
||||
# db_write is used to add both 'local' and 'sync' db entries
|
||||
#
|
||||
def db_write(self, pkg):
|
||||
"""
|
||||
"""
|
||||
#
|
||||
# db_write is used to add both 'local' and 'sync' db entries
|
||||
#
|
||||
def db_write(self, pkg):
|
||||
"""
|
||||
"""
|
||||
|
||||
path = os.path.join(self.dbdir, self.treename, pkg.fullname())
|
||||
if not os.path.isdir(path):
|
||||
os.makedirs(path);
|
||||
path = os.path.join(self.dbdir, self.treename, pkg.fullname())
|
||||
if not os.path.isdir(path):
|
||||
os.makedirs(path);
|
||||
|
||||
# desc
|
||||
# for local db entries: name, version, desc, groups, url, license,
|
||||
# arch, builddate, installdate, packager,
|
||||
# size, reason
|
||||
# for sync entries: name, version, desc, groups, csize, md5sum,
|
||||
# replaces, force
|
||||
data = [_mksection("NAME", pkg.name)]
|
||||
data.append(_mksection("VERSION", pkg.version))
|
||||
if pkg.desc:
|
||||
data.append(_mksection("DESC", pkg.desc))
|
||||
if pkg.groups:
|
||||
data.append(_mksection("GROUPS", pkg.groups))
|
||||
if self.treename == "local":
|
||||
if pkg.url:
|
||||
data.append(_mksection("URL", pkg.url))
|
||||
if pkg.license:
|
||||
data.append(_mksection("LICENSE", pkg.license))
|
||||
if pkg.arch:
|
||||
data.append(_mksection("ARCH", pkg.arch))
|
||||
if pkg.builddate:
|
||||
data.append(_mksection("BUILDDATE", pkg.builddate))
|
||||
if pkg.installdate:
|
||||
data.append(_mksection("INSTALLDATE", pkg.installdate))
|
||||
if pkg.packager:
|
||||
data.append(_mksection("PACKAGER", pkg.packager))
|
||||
if pkg.size:
|
||||
data.append(_mksection("SIZE", pkg.size))
|
||||
if pkg.reason:
|
||||
data.append(_mksection("REASON", pkg.reason))
|
||||
else:
|
||||
if pkg.csize:
|
||||
data.append(_mksection("CSIZE", pkg.csize))
|
||||
if pkg.md5sum:
|
||||
data.append(_mksection("MD5SUM", pkg.md5sum))
|
||||
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)
|
||||
# desc
|
||||
# for local db entries: name, version, desc, groups, url, license,
|
||||
# arch, builddate, installdate, packager,
|
||||
# size, reason
|
||||
# for sync entries: name, version, desc, groups, csize, md5sum,
|
||||
# replaces, force
|
||||
data = [_mksection("NAME", pkg.name)]
|
||||
data.append(_mksection("VERSION", pkg.version))
|
||||
if pkg.desc:
|
||||
data.append(_mksection("DESC", pkg.desc))
|
||||
if pkg.groups:
|
||||
data.append(_mksection("GROUPS", pkg.groups))
|
||||
if self.treename == "local":
|
||||
if pkg.url:
|
||||
data.append(_mksection("URL", pkg.url))
|
||||
if pkg.license:
|
||||
data.append(_mksection("LICENSE", pkg.license))
|
||||
if pkg.arch:
|
||||
data.append(_mksection("ARCH", pkg.arch))
|
||||
if pkg.builddate:
|
||||
data.append(_mksection("BUILDDATE", pkg.builddate))
|
||||
if pkg.installdate:
|
||||
data.append(_mksection("INSTALLDATE", pkg.installdate))
|
||||
if pkg.packager:
|
||||
data.append(_mksection("PACKAGER", pkg.packager))
|
||||
if pkg.size:
|
||||
data.append(_mksection("SIZE", pkg.size))
|
||||
if pkg.reason:
|
||||
data.append(_mksection("REASON", pkg.reason))
|
||||
else:
|
||||
if pkg.csize:
|
||||
data.append(_mksection("CSIZE", pkg.csize))
|
||||
if pkg.md5sum:
|
||||
data.append(_mksection("MD5SUM", pkg.md5sum))
|
||||
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)
|
||||
|
||||
# files
|
||||
# for local entries, fields are: files, backup
|
||||
# for sync ones: none
|
||||
if self.treename == "local":
|
||||
data = []
|
||||
if pkg.files:
|
||||
data.append(_mksection("FILES", _mkfilelist(pkg.files)))
|
||||
if pkg.backup:
|
||||
data.append(_mksection("BACKUP", _mkbackuplist(pkg.backup)))
|
||||
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)
|
||||
# files
|
||||
# for local entries, fields are: files, backup
|
||||
# for sync ones: none
|
||||
if self.treename == "local":
|
||||
data = []
|
||||
if pkg.files:
|
||||
data.append(_mksection("FILES", _mkfilelist(pkg.files)))
|
||||
if pkg.backup:
|
||||
data.append(_mksection("BACKUP", _mkbackuplist(pkg.backup)))
|
||||
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, requiredby, conflicts, provides
|
||||
# for sync ones: depends, conflicts, provides
|
||||
data = []
|
||||
if pkg.depends:
|
||||
data.append(_mksection("DEPENDS", pkg.depends))
|
||||
if self.treename == "local":
|
||||
if pkg.requiredby:
|
||||
data.append(_mksection("REQUIREDBY", pkg.requiredby))
|
||||
if pkg.conflicts:
|
||||
data.append(_mksection("CONFLICTS", pkg.conflicts))
|
||||
if pkg.provides:
|
||||
data.append(_mksection("PROVIDES", pkg.provides))
|
||||
if not 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)
|
||||
# depends
|
||||
# for local db entries: depends, requiredby, conflicts, provides
|
||||
# for sync ones: depends, conflicts, provides
|
||||
data = []
|
||||
if pkg.depends:
|
||||
data.append(_mksection("DEPENDS", pkg.depends))
|
||||
if self.treename == "local":
|
||||
if pkg.requiredby:
|
||||
data.append(_mksection("REQUIREDBY", pkg.requiredby))
|
||||
if pkg.conflicts:
|
||||
data.append(_mksection("CONFLICTS", pkg.conflicts))
|
||||
if pkg.provides:
|
||||
data.append(_mksection("PROVIDES", pkg.provides))
|
||||
if not 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)
|
||||
|
||||
# install
|
||||
if self.treename == "local":
|
||||
empty = 1
|
||||
for value in pkg.install.values():
|
||||
if value:
|
||||
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)
|
||||
# install
|
||||
if self.treename == "local":
|
||||
empty = 1
|
||||
for value in pkg.install.values():
|
||||
if value:
|
||||
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)
|
||||
|
||||
def gensync(self, path):
|
||||
"""
|
||||
"""
|
||||
def gensync(self, path):
|
||||
"""
|
||||
"""
|
||||
|
||||
curdir = os.getcwd()
|
||||
tmpdir = tempfile.mkdtemp()
|
||||
os.chdir(tmpdir)
|
||||
curdir = os.getcwd()
|
||||
tmpdir = tempfile.mkdtemp()
|
||||
os.chdir(tmpdir)
|
||||
|
||||
for pkg in self.pkgs:
|
||||
mkdescfile(pkg.fullname(), pkg)
|
||||
for pkg in self.pkgs:
|
||||
mkdescfile(pkg.fullname(), pkg)
|
||||
|
||||
# Generate database archive
|
||||
os.makedirs(path, 0755)
|
||||
archive = os.path.join(path, "%s%s" % (self.treename, PM_EXT_DB))
|
||||
os.system("tar zcf %s *" % archive)
|
||||
# Generate database archive
|
||||
os.makedirs(path, 0755)
|
||||
archive = os.path.join(path, "%s%s" % (self.treename, PM_EXT_DB))
|
||||
os.system("tar zcf %s *" % archive)
|
||||
|
||||
os.chdir(curdir)
|
||||
shutil.rmtree(tmpdir)
|
||||
os.chdir(curdir)
|
||||
shutil.rmtree(tmpdir)
|
||||
|
||||
def ispkgmodified(self, pkg):
|
||||
"""
|
||||
"""
|
||||
def ispkgmodified(self, pkg):
|
||||
"""
|
||||
"""
|
||||
|
||||
modified = 0
|
||||
modified = 0
|
||||
|
||||
oldpkg = self.getpkg(pkg.name)
|
||||
if not oldpkg:
|
||||
return 0
|
||||
oldpkg = self.getpkg(pkg.name)
|
||||
if not oldpkg:
|
||||
return 0
|
||||
|
||||
dbg("oldpkg.checksum : %s" % oldpkg.checksum)
|
||||
dbg("oldpkg.mtime : %s" % oldpkg.mtime)
|
||||
#dbg("oldpkg.checksum : %s" % oldpkg.checksum)
|
||||
#dbg("oldpkg.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 not oldpkg.mtime[key][1:3] == pkg.mtime[key][1:3]:
|
||||
modified += 1
|
||||
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 not oldpkg.mtime[key][1:3] == pkg.mtime[key][1:3]:
|
||||
modified += 1
|
||||
|
||||
return modified
|
||||
return modified
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
db = pmdb("local")
|
||||
print db
|
||||
db = pmdb("local")
|
||||
print db
|
||||
# vim: set ts=4 sw=4 et:
|
||||
|
157
pactest/pmenv.py
157
pactest/pmenv.py
@ -25,94 +25,95 @@ import pmtest
|
||||
|
||||
|
||||
class pmenv:
|
||||
"""Environment object
|
||||
"""
|
||||
"""Environment object
|
||||
"""
|
||||
|
||||
def __init__(self, root = "root"):
|
||||
self.root = os.path.abspath(root)
|
||||
self.pacman = {
|
||||
"bin": "pacman",
|
||||
"debug": 0,
|
||||
"gdb": 0,
|
||||
"valgrind": 0,
|
||||
"nolog": 0
|
||||
}
|
||||
self.testcases = []
|
||||
def __init__(self, root = "root"):
|
||||
self.root = os.path.abspath(root)
|
||||
self.pacman = {
|
||||
"bin": "pacman",
|
||||
"debug": 0,
|
||||
"gdb": 0,
|
||||
"valgrind": 0,
|
||||
"nolog": 0
|
||||
}
|
||||
self.testcases = []
|
||||
|
||||
def __str__(self):
|
||||
return "root = %s\n" \
|
||||
"pacman = %s" \
|
||||
% (self.root, self.pacman)
|
||||
def __str__(self):
|
||||
return "root = %s\n" \
|
||||
"pacman = %s" \
|
||||
% (self.root, self.pacman)
|
||||
|
||||
def addtest(self, testcase):
|
||||
"""
|
||||
"""
|
||||
if not os.path.isfile(testcase):
|
||||
err("file %s not found" % testcase)
|
||||
return
|
||||
test = pmtest.pmtest(testcase, self.root)
|
||||
self.testcases.append(test)
|
||||
def addtest(self, testcase):
|
||||
"""
|
||||
"""
|
||||
if not os.path.isfile(testcase):
|
||||
err("file %s not found" % testcase)
|
||||
return
|
||||
test = pmtest.pmtest(testcase, self.root)
|
||||
self.testcases.append(test)
|
||||
|
||||
def run(self):
|
||||
"""
|
||||
"""
|
||||
def run(self):
|
||||
"""
|
||||
"""
|
||||
|
||||
for t in self.testcases:
|
||||
print "=========="*8
|
||||
print "Running '%s'" % t.name.strip(".py")
|
||||
for t in self.testcases:
|
||||
print "=========="*8
|
||||
print "Running '%s'" % t.name.strip(".py")
|
||||
|
||||
t.load()
|
||||
print t.description
|
||||
print "----------"*8
|
||||
t.load()
|
||||
print t.description
|
||||
print "----------"*8
|
||||
|
||||
t.generate()
|
||||
# Hack for mtimes consistency
|
||||
modified = 0
|
||||
for i in t.rules:
|
||||
if i.rule.find("MODIFIED") != -1:
|
||||
modified = 1
|
||||
if modified:
|
||||
time.sleep(3)
|
||||
t.generate()
|
||||
# Hack for mtimes consistency
|
||||
modified = 0
|
||||
for i in t.rules:
|
||||
if i.rule.find("MODIFIED") != -1:
|
||||
modified = 1
|
||||
if modified:
|
||||
time.sleep(3)
|
||||
|
||||
t.run(self.pacman)
|
||||
t.run(self.pacman)
|
||||
|
||||
t.check()
|
||||
print "==> Test result"
|
||||
if t.result["ko"] == 0:
|
||||
print "\tPASSED"
|
||||
else:
|
||||
print "\tFAILED"
|
||||
print
|
||||
t.check()
|
||||
print "==> Test result"
|
||||
if t.result["fail"] == 0:
|
||||
print "\tPASSED"
|
||||
else:
|
||||
print "\tFAILED"
|
||||
print
|
||||
|
||||
def results(self):
|
||||
"""
|
||||
"""
|
||||
passed = 0
|
||||
print "=========="*8
|
||||
print "Results"
|
||||
print "----------"*8
|
||||
for test in self.testcases:
|
||||
ok = test.result["ok"]
|
||||
ko = test.result["ko"]
|
||||
rules = len(test.rules)
|
||||
if ko == 0:
|
||||
print "[PASSED]",
|
||||
passed += 1
|
||||
else:
|
||||
print "[FAILED]",
|
||||
print test.name.strip(".py").ljust(38),
|
||||
print "Rules:",
|
||||
print "OK = %2u KO = %2u SKIP = %2u" % (ok, ko, rules-(ok+ko))
|
||||
print "----------"*8
|
||||
total = len(self.testcases)
|
||||
failed = total - passed
|
||||
print "TOTAL = %3u" % total
|
||||
if total:
|
||||
print "PASSED = %3u (%6.2f%%)" % (passed, float(passed)*100/total)
|
||||
print "FAILED = %3u (%6.2f%%)" % (failed, float(failed)*100/total)
|
||||
print
|
||||
def results(self):
|
||||
"""
|
||||
"""
|
||||
passed = 0
|
||||
print "=========="*8
|
||||
print "Results"
|
||||
print "----------"*8
|
||||
for test in self.testcases:
|
||||
success = test.result["success"]
|
||||
fail = test.result["fail"]
|
||||
rules = len(test.rules)
|
||||
if fail == 0:
|
||||
print "[PASSED]",
|
||||
passed += 1
|
||||
else:
|
||||
print "[FAILED]",
|
||||
print test.name.strip(".py").ljust(38),
|
||||
print "Rules:",
|
||||
print " OK = %2u FAIL = %2u SKIP = %2u" % (success, fail, rules-(success+fail))
|
||||
print "----------"*8
|
||||
total = len(self.testcases)
|
||||
failed = total - passed
|
||||
print "TOTAL = %3u" % total
|
||||
if total:
|
||||
print "PASSED = %3u (%6.2f%%)" % (passed, float(passed)*100/total)
|
||||
print "FAILED = %3u (%6.2f%%)" % (failed, float(failed)*100/total)
|
||||
print
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
env = pmenv("/tmp")
|
||||
print env
|
||||
env = pmenv("/tmp")
|
||||
print env
|
||||
# vim: set ts=4 sw=4 et:
|
||||
|
@ -24,42 +24,43 @@ from util import *
|
||||
|
||||
|
||||
class pmfile:
|
||||
"""File object
|
||||
"""
|
||||
"""File object
|
||||
"""
|
||||
|
||||
def __init__(self, root, name):
|
||||
self.name = name
|
||||
self.root = root
|
||||
def __init__(self, root, name):
|
||||
self.name = name
|
||||
self.root = root
|
||||
|
||||
filename = os.path.join(self.root, self.name)
|
||||
self.checksum = getmd5sum(filename)
|
||||
self.mtime = getmtime(filename)
|
||||
filename = os.path.join(self.root, self.name)
|
||||
self.checksum = getmd5sum(filename)
|
||||
self.mtime = getmtime(filename)
|
||||
|
||||
def __str__(self):
|
||||
return "%s (%s / %lu)" % (self.name, self.checksum, self.mtime)
|
||||
def __str__(self):
|
||||
return "%s (%s / %lu)" % (self.name, self.checksum, self.mtime)
|
||||
|
||||
def ismodified(self):
|
||||
"""
|
||||
"""
|
||||
def ismodified(self):
|
||||
"""
|
||||
"""
|
||||
|
||||
retval = 0
|
||||
retval = 0
|
||||
|
||||
filename = os.path.join(self.root, self.name)
|
||||
checksum = getmd5sum(filename)
|
||||
mtime = getmtime(filename)
|
||||
filename = os.path.join(self.root, self.name)
|
||||
checksum = getmd5sum(filename)
|
||||
mtime = getmtime(filename)
|
||||
|
||||
if debug:
|
||||
print "ismodified(%s)" % self.name
|
||||
print "old: %s / %s" % (self.checksum, self.mtime)
|
||||
print "new: %s / %s" % (checksum, mtime)
|
||||
if debug:
|
||||
print "ismodified(%s)" % self.name
|
||||
print "old: %s / %s" % (self.checksum, self.mtime)
|
||||
print "new: %s / %s" % (checksum, mtime)
|
||||
|
||||
if not self.checksum == checksum \
|
||||
or not (self.mtime[1], self.mtime[2]) == (mtime[1], mtime[2]):
|
||||
retval = 1
|
||||
if not self.checksum == checksum \
|
||||
or not (self.mtime[1], self.mtime[2]) == (mtime[1], mtime[2]):
|
||||
retval = 1
|
||||
|
||||
return retval
|
||||
return retval
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
f = pmfile("/tmp", "foobar")
|
||||
print f
|
||||
f = pmfile("/tmp", "foobar")
|
||||
print f
|
||||
# vim: set ts=4 sw=4 et:
|
||||
|
271
pactest/pmpkg.py
271
pactest/pmpkg.py
@ -27,154 +27,155 @@ from util import *
|
||||
|
||||
|
||||
class pmpkg:
|
||||
"""Package object.
|
||||
|
||||
Object holding data from an ArchLinux package.
|
||||
"""
|
||||
"""Package object.
|
||||
|
||||
Object holding data from an ArchLinux package.
|
||||
"""
|
||||
|
||||
def __init__(self, name, version = "1.0-1"):
|
||||
# desc
|
||||
self.name = name
|
||||
self.version = version
|
||||
self.desc = ""
|
||||
self.groups = []
|
||||
self.url = ""
|
||||
self.license = []
|
||||
self.arch = ""
|
||||
self.builddate = ""
|
||||
self.installdate = ""
|
||||
self.packager = ""
|
||||
self.size = 0
|
||||
self.csize = 0
|
||||
self.reason = 0
|
||||
self.md5sum = "" # sync only
|
||||
self.replaces = [] # sync only (will be moved to depends)
|
||||
self.force = 0 # sync only (will be moved to depends)
|
||||
# depends
|
||||
self.depends = []
|
||||
self.requiredby = [] # local only
|
||||
self.conflicts = []
|
||||
self.provides = []
|
||||
# files
|
||||
self.files = []
|
||||
self.backup = []
|
||||
# install
|
||||
self.install = {
|
||||
"pre_install": "",
|
||||
"post_install": "",
|
||||
"pre_remove": "",
|
||||
"post_remove": "",
|
||||
"pre_upgrade": "",
|
||||
"post_upgrade": ""
|
||||
}
|
||||
self.checksum = {
|
||||
"desc": "",
|
||||
"depends": "",
|
||||
"files": "",
|
||||
"install": ""
|
||||
}
|
||||
self.mtime = {
|
||||
"desc": (0, 0, 0),
|
||||
"depends": (0, 0, 0),
|
||||
"files": (0, 0, 0),
|
||||
"install": (0, 0, 0)
|
||||
}
|
||||
def __init__(self, name, version = "1.0-1"):
|
||||
# desc
|
||||
self.name = name
|
||||
self.version = version
|
||||
self.desc = ""
|
||||
self.groups = []
|
||||
self.url = ""
|
||||
self.license = []
|
||||
self.arch = ""
|
||||
self.builddate = ""
|
||||
self.installdate = ""
|
||||
self.packager = ""
|
||||
self.size = 0
|
||||
self.csize = 0
|
||||
self.reason = 0
|
||||
self.md5sum = "" # sync only
|
||||
self.replaces = [] # sync only (will be moved to depends)
|
||||
self.force = 0 # sync only (will be moved to depends)
|
||||
# depends
|
||||
self.depends = []
|
||||
self.requiredby = [] # local only
|
||||
self.conflicts = []
|
||||
self.provides = []
|
||||
# files
|
||||
self.files = []
|
||||
self.backup = []
|
||||
# install
|
||||
self.install = {
|
||||
"pre_install": "",
|
||||
"post_install": "",
|
||||
"pre_remove": "",
|
||||
"post_remove": "",
|
||||
"pre_upgrade": "",
|
||||
"post_upgrade": ""
|
||||
}
|
||||
self.checksum = {
|
||||
"desc": "",
|
||||
"depends": "",
|
||||
"files": "",
|
||||
"install": ""
|
||||
}
|
||||
self.mtime = {
|
||||
"desc": (0, 0, 0),
|
||||
"depends": (0, 0, 0),
|
||||
"files": (0, 0, 0),
|
||||
"install": (0, 0, 0)
|
||||
}
|
||||
|
||||
def __str__(self):
|
||||
s = ["%s" % self.fullname()]
|
||||
s.append("description: %s" % self.desc)
|
||||
s.append("url: %s" % self.url)
|
||||
s.append("depends: %s" % " ".join(self.depends))
|
||||
s.append("files: %s" % " ".join(self.files))
|
||||
s.append("reason: %d" % self.reason)
|
||||
return "\n".join(s)
|
||||
def __str__(self):
|
||||
s = ["%s" % self.fullname()]
|
||||
s.append("description: %s" % self.desc)
|
||||
s.append("url: %s" % self.url)
|
||||
s.append("depends: %s" % " ".join(self.depends))
|
||||
s.append("files: %s" % " ".join(self.files))
|
||||
s.append("reason: %d" % self.reason)
|
||||
return "\n".join(s)
|
||||
|
||||
def fullname(self):
|
||||
"""Long name of a package.
|
||||
|
||||
Returns a string formatted as follows: "pkgname-pkgver".
|
||||
"""
|
||||
return "%s-%s" % (self.name, self.version)
|
||||
def fullname(self):
|
||||
"""Long name of a package.
|
||||
|
||||
Returns a string formatted as follows: "pkgname-pkgver".
|
||||
"""
|
||||
return "%s-%s" % (self.name, self.version)
|
||||
|
||||
def filename(self):
|
||||
"""File name of a package, including its extension.
|
||||
|
||||
Returns a string formatted as follows: "pkgname-pkgver.PKG_EXT_PKG".
|
||||
"""
|
||||
return "%s%s" % (self.fullname(), PM_EXT_PKG)
|
||||
def filename(self):
|
||||
"""File name of a package, including its extension.
|
||||
|
||||
Returns a string formatted as follows: "pkgname-pkgver.PKG_EXT_PKG".
|
||||
"""
|
||||
return "%s%s" % (self.fullname(), PM_EXT_PKG)
|
||||
|
||||
def install_files(self, root):
|
||||
"""Install files in the filesystem located under "root".
|
||||
|
||||
Files are created with content generated automatically.
|
||||
"""
|
||||
[mkfile(os.path.join(root, f), f) for f in self.files]
|
||||
def install_files(self, root):
|
||||
"""Install files in the filesystem located under "root".
|
||||
|
||||
Files are created with content generated automatically.
|
||||
"""
|
||||
[mkfile(os.path.join(root, f), f) for f in self.files]
|
||||
|
||||
def makepkg(self, path):
|
||||
"""Creates an ArchLinux package archive.
|
||||
|
||||
A package archive is generated in the location 'path', based on the data
|
||||
from the object.
|
||||
"""
|
||||
archive = os.path.join(path, self.filename())
|
||||
def makepkg(self, path):
|
||||
"""Creates an ArchLinux package archive.
|
||||
|
||||
A package archive is generated in the location 'path', based on the data
|
||||
from the object.
|
||||
"""
|
||||
archive = os.path.join(path, self.filename())
|
||||
|
||||
curdir = os.getcwd()
|
||||
tmpdir = tempfile.mkdtemp()
|
||||
os.chdir(tmpdir)
|
||||
curdir = os.getcwd()
|
||||
tmpdir = tempfile.mkdtemp()
|
||||
os.chdir(tmpdir)
|
||||
|
||||
# Generate package file system
|
||||
for f in self.files:
|
||||
mkfile(f, f)
|
||||
self.size += os.stat(getfilename(f))[stat.ST_SIZE]
|
||||
# Generate package file system
|
||||
for f in self.files:
|
||||
mkfile(f, f)
|
||||
self.size += os.stat(getfilename(f))[stat.ST_SIZE]
|
||||
|
||||
# .PKGINFO
|
||||
data = ["pkgname = %s" % self.name]
|
||||
data.append("pkgver = %s" % self.version)
|
||||
data.append("pkgdesc = %s" % self.desc)
|
||||
data.append("url = %s" % self.url)
|
||||
data.append("builddate = %s" % self.builddate)
|
||||
data.append("packager = %s" % self.packager)
|
||||
data.append("size = %s" % self.size)
|
||||
if self.arch:
|
||||
data.append("arch = %s" % self.arch)
|
||||
for i in self.license:
|
||||
data.append("license = %s" % i)
|
||||
for i in self.replaces:
|
||||
data.append("replaces = %s" % i)
|
||||
for i in self.groups:
|
||||
data.append("group = %s" % i)
|
||||
for i in self.depends:
|
||||
data.append("depend = %s" % i)
|
||||
for i in self.conflicts:
|
||||
data.append("conflict = %s" % i)
|
||||
for i in self.provides:
|
||||
data.append("provides = %s" % i)
|
||||
for i in self.backup:
|
||||
data.append("backup = %s" % i)
|
||||
mkfile(".PKGINFO", "\n".join(data))
|
||||
targets = ".PKGINFO"
|
||||
# .PKGINFO
|
||||
data = ["pkgname = %s" % self.name]
|
||||
data.append("pkgver = %s" % self.version)
|
||||
data.append("pkgdesc = %s" % self.desc)
|
||||
data.append("url = %s" % self.url)
|
||||
data.append("builddate = %s" % self.builddate)
|
||||
data.append("packager = %s" % self.packager)
|
||||
data.append("size = %s" % self.size)
|
||||
if self.arch:
|
||||
data.append("arch = %s" % self.arch)
|
||||
for i in self.license:
|
||||
data.append("license = %s" % i)
|
||||
for i in self.replaces:
|
||||
data.append("replaces = %s" % i)
|
||||
for i in self.groups:
|
||||
data.append("group = %s" % i)
|
||||
for i in self.depends:
|
||||
data.append("depend = %s" % i)
|
||||
for i in self.conflicts:
|
||||
data.append("conflict = %s" % i)
|
||||
for i in self.provides:
|
||||
data.append("provides = %s" % i)
|
||||
for i in self.backup:
|
||||
data.append("backup = %s" % i)
|
||||
mkfile(".PKGINFO", "\n".join(data))
|
||||
targets = ".PKGINFO"
|
||||
|
||||
# .INSTALL
|
||||
empty = 1
|
||||
for value in self.install.values():
|
||||
if value:
|
||||
empty = 0
|
||||
if not empty:
|
||||
mkinstallfile(".INSTALL", self.install)
|
||||
targets += " .INSTALL"
|
||||
# .INSTALL
|
||||
empty = 1
|
||||
for value in self.install.values():
|
||||
if value:
|
||||
empty = 0
|
||||
if not empty:
|
||||
mkinstallfile(".INSTALL", self.install)
|
||||
targets += " .INSTALL"
|
||||
|
||||
# .FILELIST
|
||||
if self.files:
|
||||
os.system("tar cvf /dev/null * | sort >.FILELIST")
|
||||
targets += " .FILELIST *"
|
||||
# .FILELIST
|
||||
if self.files:
|
||||
os.system("tar cvf /dev/null * | sort >.FILELIST")
|
||||
targets += " .FILELIST *"
|
||||
|
||||
# Generate package archive
|
||||
os.system("tar zcf %s %s" % (archive, targets))
|
||||
# Generate package archive
|
||||
os.system("tar zcf %s %s" % (archive, targets))
|
||||
|
||||
os.chdir(curdir)
|
||||
shutil.rmtree(tmpdir)
|
||||
os.chdir(curdir)
|
||||
shutil.rmtree(tmpdir)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
pkg = pmpkg("dummy")
|
||||
print pkg
|
||||
pkg = pmpkg("dummy")
|
||||
print pkg
|
||||
# vim: set ts=4 sw=4 et:
|
||||
|
@ -22,112 +22,113 @@ from util import *
|
||||
|
||||
|
||||
class pmrule:
|
||||
"""Rule object
|
||||
"""
|
||||
"""Rule object
|
||||
"""
|
||||
|
||||
def __init__(self, rule):
|
||||
self.rule = rule
|
||||
self.false = 0
|
||||
self.result = 0
|
||||
def __init__(self, rule):
|
||||
self.rule = rule
|
||||
self.false = 0
|
||||
self.result = 0
|
||||
|
||||
def __str__(self):
|
||||
return "rule = %s" % self.rule
|
||||
def __str__(self):
|
||||
return "rule = %s" % self.rule
|
||||
|
||||
def check(self, root, retcode, localdb, files):
|
||||
"""
|
||||
"""
|
||||
def check(self, root, retcode, localdb, files):
|
||||
"""
|
||||
"""
|
||||
|
||||
success = 1
|
||||
success = 1
|
||||
|
||||
[test, args] = self.rule.split("=")
|
||||
if test[0] == "!":
|
||||
self.false = 1
|
||||
test = test.lstrip("!")
|
||||
[kind, case] = test.split("_")
|
||||
if "|" in args:
|
||||
[key, value] = args.split("|", 1)
|
||||
else:
|
||||
[key, value] = [args, None]
|
||||
[test, args] = self.rule.split("=")
|
||||
if test[0] == "!":
|
||||
self.false = 1
|
||||
test = test.lstrip("!")
|
||||
[kind, case] = test.split("_")
|
||||
if "|" in args:
|
||||
[key, value] = args.split("|", 1)
|
||||
else:
|
||||
[key, value] = [args, None]
|
||||
|
||||
if kind == "PACMAN":
|
||||
if case == "RETCODE":
|
||||
if retcode != int(key):
|
||||
success = 0
|
||||
elif case == "OUTPUT":
|
||||
if not grep(os.path.join(root, LOGFILE), key):
|
||||
success = 0
|
||||
else:
|
||||
success = -1
|
||||
elif kind == "PKG":
|
||||
newpkg = localdb.db_read(key)
|
||||
if not newpkg:
|
||||
success = 0
|
||||
else:
|
||||
dbg("newpkg.checksum : %s" % newpkg.checksum)
|
||||
dbg("newpkg.mtime : %s" % newpkg.mtime)
|
||||
if case == "EXIST":
|
||||
success = 1
|
||||
elif case == "MODIFIED":
|
||||
if not localdb.ispkgmodified(newpkg):
|
||||
success = 0
|
||||
elif case == "VERSION":
|
||||
if value != newpkg.version:
|
||||
success = 0
|
||||
elif case == "GROUPS":
|
||||
if not value in newpkg.groups:
|
||||
success = 0
|
||||
elif case == "DEPENDS":
|
||||
if not value in newpkg.depends:
|
||||
success = 0
|
||||
elif case == "REQUIREDBY":
|
||||
if not value in newpkg.requiredby:
|
||||
success = 0
|
||||
elif case == "REASON":
|
||||
if not newpkg.reason == int(value):
|
||||
success = 0
|
||||
elif case == "FILES":
|
||||
if not value in newpkg.files:
|
||||
success = 0
|
||||
elif case == "BACKUP":
|
||||
found = 0
|
||||
for f in newpkg.backup:
|
||||
name, md5sum = f.split("\t")
|
||||
if value == name:
|
||||
found = 1
|
||||
if not found:
|
||||
success = 0
|
||||
else:
|
||||
success = -1
|
||||
elif kind == "FILE":
|
||||
filename = os.path.join(root, key)
|
||||
if case == "EXIST":
|
||||
if not os.path.isfile(filename):
|
||||
success = 0
|
||||
else:
|
||||
if case == "MODIFIED":
|
||||
for f in files:
|
||||
if f.name == key:
|
||||
if not f.ismodified():
|
||||
success = 0
|
||||
elif case == "PACNEW":
|
||||
if not os.path.isfile("%s%s" % (filename, PM_PACNEW)):
|
||||
success = 0
|
||||
elif case == "PACORIG":
|
||||
if not os.path.isfile("%s%s" % (filename, PM_PACORIG)):
|
||||
success = 0
|
||||
elif case == "PACSAVE":
|
||||
if not os.path.isfile("%s%s" % (filename, PM_PACSAVE)):
|
||||
success = 0
|
||||
else:
|
||||
success = -1
|
||||
else:
|
||||
success = -1
|
||||
if kind == "PACMAN":
|
||||
if case == "RETCODE":
|
||||
if retcode != int(key):
|
||||
success = 0
|
||||
elif case == "OUTPUT":
|
||||
if not grep(os.path.join(root, LOGFILE), key):
|
||||
success = 0
|
||||
else:
|
||||
success = -1
|
||||
elif kind == "PKG":
|
||||
newpkg = localdb.db_read(key)
|
||||
if not newpkg:
|
||||
success = 0
|
||||
else:
|
||||
#dbg("newpkg.checksum : %s" % newpkg.checksum)
|
||||
#dbg("newpkg.mtime : %s" % newpkg.mtime)
|
||||
if case == "EXIST":
|
||||
success = 1
|
||||
elif case == "MODIFIED":
|
||||
if not localdb.ispkgmodified(newpkg):
|
||||
success = 0
|
||||
elif case == "VERSION":
|
||||
if value != newpkg.version:
|
||||
success = 0
|
||||
elif case == "GROUPS":
|
||||
if not value in newpkg.groups:
|
||||
success = 0
|
||||
elif case == "DEPENDS":
|
||||
if not value in newpkg.depends:
|
||||
success = 0
|
||||
elif case == "REQUIREDBY":
|
||||
if not value in newpkg.requiredby:
|
||||
success = 0
|
||||
elif case == "REASON":
|
||||
if not newpkg.reason == int(value):
|
||||
success = 0
|
||||
elif case == "FILES":
|
||||
if not value in newpkg.files:
|
||||
success = 0
|
||||
elif case == "BACKUP":
|
||||
found = 0
|
||||
for f in newpkg.backup:
|
||||
name, md5sum = f.split("\t")
|
||||
if value == name:
|
||||
found = 1
|
||||
if not found:
|
||||
success = 0
|
||||
else:
|
||||
success = -1
|
||||
elif kind == "FILE":
|
||||
filename = os.path.join(root, key)
|
||||
if case == "EXIST":
|
||||
if not os.path.isfile(filename):
|
||||
success = 0
|
||||
else:
|
||||
if case == "MODIFIED":
|
||||
for f in files:
|
||||
if f.name == key:
|
||||
if not f.ismodified():
|
||||
success = 0
|
||||
elif case == "PACNEW":
|
||||
if not os.path.isfile("%s%s" % (filename, PM_PACNEW)):
|
||||
success = 0
|
||||
elif case == "PACORIG":
|
||||
if not os.path.isfile("%s%s" % (filename, PM_PACORIG)):
|
||||
success = 0
|
||||
elif case == "PACSAVE":
|
||||
if not os.path.isfile("%s%s" % (filename, PM_PACSAVE)):
|
||||
success = 0
|
||||
else:
|
||||
success = -1
|
||||
else:
|
||||
success = -1
|
||||
|
||||
if self.false and success != -1:
|
||||
success = not success
|
||||
self.result = success
|
||||
return success
|
||||
if self.false and success != -1:
|
||||
success = not success
|
||||
self.result = success
|
||||
return success
|
||||
|
||||
|
||||
if __name__ != "__main__":
|
||||
rule = pmrule("PKG_EXIST=dummy")
|
||||
rule = pmrule("PKG_EXIST=dummy")
|
||||
# vim: set ts=4 sw=4 et:
|
||||
|
@ -30,224 +30,225 @@ from util import *
|
||||
|
||||
|
||||
class pmtest:
|
||||
"""Test object
|
||||
"""
|
||||
"""Test object
|
||||
"""
|
||||
|
||||
def __init__(self, name, root):
|
||||
self.name = name
|
||||
self.root = root
|
||||
def __init__(self, name, root):
|
||||
self.name = name
|
||||
self.root = root
|
||||
|
||||
def __str__(self):
|
||||
return "name = %s\n" \
|
||||
"root = %s" % (self.name, self.root)
|
||||
def __str__(self):
|
||||
return "name = %s\n" \
|
||||
"root = %s" % (self.name, self.root)
|
||||
|
||||
def addpkg2db(self, treename, pkg):
|
||||
"""
|
||||
"""
|
||||
if not treename in self.db:
|
||||
self.db[treename] = pmdb.pmdb(treename, os.path.join(self.root, PM_DBPATH))
|
||||
self.db[treename].pkgs.append(pkg)
|
||||
def addpkg2db(self, treename, pkg):
|
||||
"""
|
||||
"""
|
||||
if not treename in self.db:
|
||||
self.db[treename] = pmdb.pmdb(treename, os.path.join(self.root, PM_DBPATH))
|
||||
self.db[treename].pkgs.append(pkg)
|
||||
|
||||
def addpkg(self, pkg):
|
||||
"""
|
||||
"""
|
||||
self.localpkgs.append(pkg)
|
||||
def addpkg(self, pkg):
|
||||
"""
|
||||
"""
|
||||
self.localpkgs.append(pkg)
|
||||
|
||||
def addrule(self, rulename):
|
||||
"""
|
||||
"""
|
||||
rule = pmrule.pmrule(rulename)
|
||||
self.rules.append(rule)
|
||||
def addrule(self, rulename):
|
||||
"""
|
||||
"""
|
||||
rule = pmrule.pmrule(rulename)
|
||||
self.rules.append(rule)
|
||||
|
||||
def load(self):
|
||||
"""
|
||||
"""
|
||||
def load(self):
|
||||
"""
|
||||
"""
|
||||
|
||||
# Reset test parameters
|
||||
self.result = {
|
||||
"ok": 0,
|
||||
"ko": 0
|
||||
}
|
||||
self.args = ""
|
||||
self.retcode = 0
|
||||
self.db = {
|
||||
"local": pmdb.pmdb("local", os.path.join(self.root, PM_DBPATH))
|
||||
}
|
||||
self.localpkgs = []
|
||||
self.filesystem = []
|
||||
# Reset test parameters
|
||||
self.result = {
|
||||
"success": 0,
|
||||
"fail": 0
|
||||
}
|
||||
self.args = ""
|
||||
self.retcode = 0
|
||||
self.db = {
|
||||
"local": pmdb.pmdb("local", os.path.join(self.root, PM_DBPATH))
|
||||
}
|
||||
self.localpkgs = []
|
||||
self.filesystem = []
|
||||
|
||||
self.description = ""
|
||||
self.option = {
|
||||
"noupgrade": [],
|
||||
"ignorepkg": [],
|
||||
"noextract": []
|
||||
}
|
||||
self.description = ""
|
||||
self.option = {
|
||||
"noupgrade": [],
|
||||
"ignorepkg": [],
|
||||
"noextract": []
|
||||
}
|
||||
|
||||
# Test rules
|
||||
self.rules = []
|
||||
self.files = []
|
||||
|
||||
if os.path.isfile(self.name):
|
||||
execfile(self.name)
|
||||
else:
|
||||
err("file %s does not exist!" % self.name)
|
||||
# Test rules
|
||||
self.rules = []
|
||||
self.files = []
|
||||
|
||||
if os.path.isfile(self.name):
|
||||
execfile(self.name)
|
||||
else:
|
||||
err("file %s does not exist!" % self.name)
|
||||
|
||||
def generate(self):
|
||||
"""
|
||||
"""
|
||||
def generate(self):
|
||||
"""
|
||||
"""
|
||||
|
||||
print "==> Generating test environment"
|
||||
print "==> Generating test environment"
|
||||
|
||||
# Cleanup leftover files from a previous test session
|
||||
if os.path.isdir(self.root):
|
||||
shutil.rmtree(self.root)
|
||||
vprint("\t%s" % self.root)
|
||||
# Cleanup leftover files from a previous test session
|
||||
if os.path.isdir(self.root):
|
||||
shutil.rmtree(self.root)
|
||||
vprint("\t%s" % self.root)
|
||||
|
||||
# Create directory structure
|
||||
vprint(" Creating directory structure:")
|
||||
dbdir = os.path.join(self.root, PM_DBPATH)
|
||||
cachedir = os.path.join(self.root, PM_CACHEDIR)
|
||||
syncdir = os.path.join(self.root, SYNCREPO)
|
||||
tmpdir = os.path.join(self.root, TMPDIR)
|
||||
logdir = os.path.join(self.root, os.path.dirname(LOGFILE))
|
||||
etcdir = os.path.join(self.root, os.path.dirname(PACCONF))
|
||||
for dir in [dbdir, cachedir, syncdir, tmpdir, logdir, etcdir]:
|
||||
if not os.path.isdir(dir):
|
||||
vprint("\t%s" % dir[len(self.root)+1:])
|
||||
os.makedirs(dir, 0755)
|
||||
# Create directory structure
|
||||
vprint(" Creating directory structure:")
|
||||
dbdir = os.path.join(self.root, PM_DBPATH)
|
||||
cachedir = os.path.join(self.root, PM_CACHEDIR)
|
||||
syncdir = os.path.join(self.root, SYNCREPO)
|
||||
tmpdir = os.path.join(self.root, TMPDIR)
|
||||
logdir = os.path.join(self.root, os.path.dirname(LOGFILE))
|
||||
etcdir = os.path.join(self.root, os.path.dirname(PACCONF))
|
||||
for dir in [dbdir, cachedir, syncdir, tmpdir, logdir, etcdir]:
|
||||
if not os.path.isdir(dir):
|
||||
vprint("\t%s" % dir[len(self.root)+1:])
|
||||
os.makedirs(dir, 0755)
|
||||
|
||||
# Configuration file
|
||||
vprint(" Creating configuration file")
|
||||
vprint("\t%s" % PACCONF)
|
||||
mkcfgfile(PACCONF, self.root, self.option, self.db)
|
||||
# Configuration file
|
||||
vprint(" Creating configuration file")
|
||||
vprint("\t%s" % PACCONF)
|
||||
mkcfgfile(PACCONF, self.root, self.option, self.db)
|
||||
|
||||
# Creating packages
|
||||
vprint(" Creating package archives")
|
||||
for pkg in self.localpkgs:
|
||||
vprint("\t%s" % os.path.join(TMPDIR, pkg.filename()))
|
||||
pkg.makepkg(tmpdir)
|
||||
for key, value in self.db.iteritems():
|
||||
if key == "local":
|
||||
continue
|
||||
for pkg in value.pkgs:
|
||||
archive = pkg.filename()
|
||||
vprint("\t%s" % os.path.join(PM_CACHEDIR, archive))
|
||||
pkg.makepkg(cachedir)
|
||||
pkg.md5sum = getmd5sum(os.path.join(cachedir, archive))
|
||||
pkg.csize = os.stat(os.path.join(cachedir, archive))[stat.ST_SIZE]
|
||||
# Creating packages
|
||||
vprint(" Creating package archives")
|
||||
for pkg in self.localpkgs:
|
||||
vprint("\t%s" % os.path.join(TMPDIR, pkg.filename()))
|
||||
pkg.makepkg(tmpdir)
|
||||
for key, value in self.db.iteritems():
|
||||
if key == "local":
|
||||
continue
|
||||
for pkg in value.pkgs:
|
||||
archive = pkg.filename()
|
||||
vprint("\t%s" % os.path.join(PM_CACHEDIR, archive))
|
||||
pkg.makepkg(cachedir)
|
||||
pkg.md5sum = getmd5sum(os.path.join(cachedir, archive))
|
||||
pkg.csize = os.stat(os.path.join(cachedir, archive))[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)
|
||||
# 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")
|
||||
for key, value in self.db.iteritems():
|
||||
if key == "local":
|
||||
continue
|
||||
archive = value.treename + PM_EXT_DB
|
||||
vprint("\t" + os.path.join(SYNCREPO, archive))
|
||||
value.gensync(os.path.join(syncdir, value.treename))
|
||||
# Creating sync database archives
|
||||
vprint(" Creating sync database archives")
|
||||
for key, value in self.db.iteritems():
|
||||
if key == "local":
|
||||
continue
|
||||
archive = value.treename + PM_EXT_DB
|
||||
vprint("\t" + os.path.join(SYNCREPO, archive))
|
||||
value.gensync(os.path.join(syncdir, value.treename))
|
||||
|
||||
# Filesystem
|
||||
vprint(" Populating file system")
|
||||
for pkg in self.db["local"].pkgs:
|
||||
vprint("\tinstalling %s" % pkg.fullname())
|
||||
pkg.install_files(self.root)
|
||||
for f in self.filesystem:
|
||||
vprint("\t%s" % f)
|
||||
mkfile(os.path.join(self.root, f), f)
|
||||
# Filesystem
|
||||
vprint(" Populating file system")
|
||||
for pkg in self.db["local"].pkgs:
|
||||
vprint("\tinstalling %s" % pkg.fullname())
|
||||
pkg.install_files(self.root)
|
||||
for f in self.filesystem:
|
||||
vprint("\t%s" % f)
|
||||
mkfile(os.path.join(self.root, f), f)
|
||||
|
||||
# Done.
|
||||
vprint(" Taking a snapshot of the file system")
|
||||
for roots, dirs, files in os.walk(self.root):
|
||||
for i in files:
|
||||
filename = os.path.join(roots, i)
|
||||
f = pmfile.pmfile(self.root, filename.replace(self.root + "/", ""))
|
||||
self.files.append(f)
|
||||
vprint("\t%s" % f.name)
|
||||
# Done.
|
||||
vprint(" Taking a snapshot of the file system")
|
||||
for roots, dirs, files in os.walk(self.root):
|
||||
for i in files:
|
||||
filename = os.path.join(roots, i)
|
||||
f = pmfile.pmfile(self.root, filename.replace(self.root + "/", ""))
|
||||
self.files.append(f)
|
||||
vprint("\t%s" % f.name)
|
||||
|
||||
def run(self, pacman):
|
||||
"""
|
||||
"""
|
||||
def run(self, pacman):
|
||||
"""
|
||||
"""
|
||||
|
||||
if os.path.isfile(PM_LOCK):
|
||||
print "\tERROR: another pacman session is on-going -- skipping"
|
||||
return
|
||||
if os.path.isfile(PM_LOCK):
|
||||
print "\tERROR: another pacman session is on-going -- skipping"
|
||||
return
|
||||
|
||||
print "==> Running test"
|
||||
vprint("\tpacman %s" % self.args)
|
||||
print "==> Running test"
|
||||
vprint("\tpacman %s" % self.args)
|
||||
|
||||
cmd = ["fakeroot"]
|
||||
if pacman["gdb"]:
|
||||
cmd.append("libtool gdb --args")
|
||||
if pacman["valgrind"]:
|
||||
cmd.append("valgrind --tool=memcheck --leak-check=full --show-reachable=yes")
|
||||
cmd.append("%s --noconfirm --config=%s --root=%s" \
|
||||
% (pacman["bin"], os.path.join(self.root, PACCONF), self.root))
|
||||
if pacman["debug"]:
|
||||
cmd.append("--debug=%s" % pacman["debug"])
|
||||
cmd.append("%s" % self.args)
|
||||
if not pacman["gdb"] and not pacman["valgrind"] and not pacman["nolog"]:
|
||||
cmd.append(">%s 2>&1" % os.path.join(self.root, LOGFILE))
|
||||
dbg(" ".join(cmd))
|
||||
cmd = ["fakeroot"]
|
||||
if pacman["gdb"]:
|
||||
cmd.append("libtool gdb --args")
|
||||
if pacman["valgrind"]:
|
||||
cmd.append("valgrind --tool=memcheck --leak-check=full --show-reachable=yes")
|
||||
cmd.append("%s --noconfirm --config=%s --root=%s" \
|
||||
% (pacman["bin"], os.path.join(self.root, PACCONF), self.root))
|
||||
if pacman["debug"]:
|
||||
cmd.append("--debug=%s" % pacman["debug"])
|
||||
cmd.append("%s" % self.args)
|
||||
if not pacman["gdb"] and not pacman["valgrind"] and not pacman["nolog"]:
|
||||
cmd.append(">%s 2>&1" % os.path.join(self.root, LOGFILE))
|
||||
dbg(" ".join(cmd))
|
||||
|
||||
# Change to the tmp dir before running pacman, so that local package
|
||||
# archives are made available more easily.
|
||||
curdir = os.getcwd()
|
||||
tmpdir = os.path.join(self.root, TMPDIR)
|
||||
os.chdir(tmpdir)
|
||||
# Change to the tmp dir before running pacman, so that local package
|
||||
# archives are made available more easily.
|
||||
curdir = os.getcwd()
|
||||
tmpdir = os.path.join(self.root, TMPDIR)
|
||||
os.chdir(tmpdir)
|
||||
|
||||
t0 = time.time()
|
||||
self.retcode = os.system(" ".join(cmd))
|
||||
t1 = time.time()
|
||||
vprint("\ttime elapsed: %ds" % (t1-t0))
|
||||
t0 = time.time()
|
||||
self.retcode = os.system(" ".join(cmd))
|
||||
t1 = time.time()
|
||||
vprint("\ttime elapsed: %ds" % (t1-t0))
|
||||
|
||||
if self.retcode == None:
|
||||
self.retcode = 0
|
||||
else:
|
||||
self.retcode /= 256
|
||||
dbg("retcode = %s" % self.retcode)
|
||||
os.chdir(curdir)
|
||||
if self.retcode == None:
|
||||
self.retcode = 0
|
||||
else:
|
||||
self.retcode /= 256
|
||||
dbg("retcode = %s" % self.retcode)
|
||||
os.chdir(curdir)
|
||||
|
||||
# Check if pacman failed because of bad permissions
|
||||
if self.retcode \
|
||||
and grep(os.path.join(self.root, LOGFILE),
|
||||
"you cannot perform this operation unless you are root"):
|
||||
print "\tERROR: pacman support for fakeroot is not disabled"
|
||||
# Check if the lock is still there
|
||||
if os.path.isfile(PM_LOCK):
|
||||
print "\tERROR: %s not removed" % PM_LOCK
|
||||
os.unlink(PM_LOCK)
|
||||
# Look for a core file
|
||||
if os.path.isfile(os.path.join(self.root, TMPDIR, "core")):
|
||||
print "\tERROR: pacman dumped a core file"
|
||||
# Check if pacman failed because of bad permissions
|
||||
if self.retcode and not pacman["nolog"] \
|
||||
and grep(os.path.join(self.root, LOGFILE),
|
||||
"you cannot perform this operation unless you are root"):
|
||||
print "\tERROR: pacman support for fakeroot is not disabled"
|
||||
# Check if the lock is still there
|
||||
if os.path.isfile(PM_LOCK):
|
||||
print "\tERROR: %s not removed" % PM_LOCK
|
||||
os.unlink(PM_LOCK)
|
||||
# Look for a core file
|
||||
if os.path.isfile(os.path.join(self.root, TMPDIR, "core")):
|
||||
print "\tERROR: pacman dumped a core file"
|
||||
|
||||
def check(self):
|
||||
"""
|
||||
"""
|
||||
def check(self):
|
||||
"""
|
||||
"""
|
||||
|
||||
print "==> Checking rules"
|
||||
print "==> Checking rules"
|
||||
|
||||
for i in self.rules:
|
||||
success = i.check(self.root, self.retcode, self.db["local"], self.files)
|
||||
if success == 1:
|
||||
msg = "OK"
|
||||
self.result["ok"] += 1
|
||||
elif success == 0:
|
||||
msg = "KO"
|
||||
self.result["ko"] += 1
|
||||
else:
|
||||
msg = "SKIP"
|
||||
print "\t[%s] %s" % (msg, i.rule)
|
||||
i.result = success
|
||||
for i in self.rules:
|
||||
success = i.check(self.root, self.retcode, self.db["local"], self.files)
|
||||
if success == 1:
|
||||
msg = " OK "
|
||||
self.result["success"] += 1
|
||||
elif success == 0:
|
||||
msg = "FAIL"
|
||||
self.result["fail"] += 1
|
||||
else:
|
||||
msg = "SKIP"
|
||||
print "\t[%s] %s" % (msg, i.rule)
|
||||
i.result = success
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
test = pmtest("test1", "./root")
|
||||
print test
|
||||
test = pmtest("test1", "./root")
|
||||
print test
|
||||
# vim: set ts=4 sw=4 et:
|
||||
|
@ -24,3 +24,4 @@ self.args = "-Su"
|
||||
self.addrule("PACMAN_RETCODE=0")
|
||||
self.addrule("PKG_EXIST=pkg1")
|
||||
self.addrule("!PKG_EXIST=pkg2")
|
||||
self.addrule("!PKG_EXIST=pkg3")
|
||||
|
@ -1,4 +1,4 @@
|
||||
self.description = "System upgrade"
|
||||
self.description = "System upgrade - conflict/provide with an installed package"
|
||||
|
||||
sp1 = pmpkg("pkg1", "1.0-2")
|
||||
sp1.conflicts = ["pkg2"]
|
||||
|
303
pactest/util.py
303
pactest/util.py
@ -49,16 +49,16 @@ debug = 1
|
||||
|
||||
|
||||
def err(msg):
|
||||
print "error: " + msg
|
||||
sys.exit(1)
|
||||
print "error: " + msg
|
||||
sys.exit(1)
|
||||
|
||||
def vprint(msg):
|
||||
if verbose:
|
||||
print msg
|
||||
if verbose:
|
||||
print msg
|
||||
|
||||
def dbg(msg):
|
||||
if debug:
|
||||
print msg
|
||||
if debug:
|
||||
print msg
|
||||
|
||||
|
||||
#
|
||||
@ -66,133 +66,133 @@ def dbg(msg):
|
||||
#
|
||||
|
||||
def getfilename(name):
|
||||
"""
|
||||
"""
|
||||
filename = ""
|
||||
link = ""
|
||||
if not name.find(" -> ") == -1:
|
||||
filename, link = name.split(" -> ")
|
||||
elif name[-1] == "*":
|
||||
filename = name.rstrip("*")
|
||||
else:
|
||||
filename = name
|
||||
return filename
|
||||
"""
|
||||
"""
|
||||
filename = ""
|
||||
link = ""
|
||||
if not name.find(" -> ") == -1:
|
||||
filename, link = name.split(" -> ")
|
||||
elif name[-1] == "*":
|
||||
filename = name.rstrip("*")
|
||||
else:
|
||||
filename = name
|
||||
return filename
|
||||
|
||||
def mkfile(name, data = ""):
|
||||
"""
|
||||
"""
|
||||
"""
|
||||
"""
|
||||
|
||||
isaltered = 0
|
||||
isdir = 0
|
||||
islink = 0
|
||||
link = ""
|
||||
filename = ""
|
||||
isaltered = 0
|
||||
isdir = 0
|
||||
islink = 0
|
||||
link = ""
|
||||
filename = ""
|
||||
|
||||
if not name.find(" -> ") == -1:
|
||||
islink = 1
|
||||
filename, link = name.split(" -> ")
|
||||
elif name[-1] == "*":
|
||||
isaltered = 1
|
||||
filename = name.rstrip("*")
|
||||
else:
|
||||
filename = name
|
||||
if name[-1] == "/":
|
||||
isdir = 1
|
||||
if not name.find(" -> ") == -1:
|
||||
islink = 1
|
||||
filename, link = name.split(" -> ")
|
||||
elif name[-1] == "*":
|
||||
isaltered = 1
|
||||
filename = name.rstrip("*")
|
||||
else:
|
||||
filename = name
|
||||
if name[-1] == "/":
|
||||
isdir = 1
|
||||
|
||||
if isdir:
|
||||
path = filename
|
||||
else:
|
||||
path = os.path.dirname(filename)
|
||||
try:
|
||||
if path and not os.path.isdir(path):
|
||||
os.makedirs(path, 0755)
|
||||
except:
|
||||
error("mkfile: could not create directory hierarchy '%s'" % path)
|
||||
if isdir:
|
||||
path = filename
|
||||
else:
|
||||
path = os.path.dirname(filename)
|
||||
try:
|
||||
if path and not os.path.isdir(path):
|
||||
os.makedirs(path, 0755)
|
||||
except:
|
||||
error("mkfile: could not create directory hierarchy '%s'" % path)
|
||||
|
||||
if isdir:
|
||||
return
|
||||
if islink:
|
||||
curdir = os.getcwd()
|
||||
os.chdir(path)
|
||||
os.symlink(link, os.path.basename(filename))
|
||||
os.chdir(curdir)
|
||||
else:
|
||||
fd = file(filename, "w")
|
||||
if data:
|
||||
fd.write(data)
|
||||
if data[-1] != "\n":
|
||||
fd.write("\n")
|
||||
fd.close()
|
||||
if isdir:
|
||||
return
|
||||
if islink:
|
||||
curdir = os.getcwd()
|
||||
os.chdir(path)
|
||||
os.symlink(link, os.path.basename(filename))
|
||||
os.chdir(curdir)
|
||||
else:
|
||||
fd = file(filename, "w")
|
||||
if data:
|
||||
fd.write(data)
|
||||
if data[-1] != "\n":
|
||||
fd.write("\n")
|
||||
fd.close()
|
||||
|
||||
def mkdescfile(filename, pkg):
|
||||
"""
|
||||
"""
|
||||
"""
|
||||
"""
|
||||
|
||||
data = []
|
||||
data = []
|
||||
|
||||
# desc
|
||||
#data.append("pkgname = %s" % pkg.name)
|
||||
#data.append("pkgver = %s" % pkg.version)
|
||||
if pkg.desc:
|
||||
data.append("pkgdesc = %s" % pkg.desc)
|
||||
if pkg.url:
|
||||
data.append("url = %s" % pkg.url)
|
||||
if pkg.builddate:
|
||||
data.append("builddate = %s" % pkg.builddate)
|
||||
if pkg.packager:
|
||||
data.append("packager = %s" % pkg.packager)
|
||||
if pkg.size:
|
||||
data.append("size = %s" % pkg.size)
|
||||
if pkg.arch:
|
||||
data.append("arch = %s" % pkg.arch)
|
||||
for i in pkg.groups:
|
||||
data.append("group = %s" % i)
|
||||
for i in pkg.license:
|
||||
data.append("license = %s" % i)
|
||||
if pkg.md5sum:
|
||||
data.append("md5sum = %s" % pkg.md5sum)
|
||||
# desc
|
||||
#data.append("pkgname = %s" % pkg.name)
|
||||
#data.append("pkgver = %s" % pkg.version)
|
||||
if pkg.desc:
|
||||
data.append("pkgdesc = %s" % pkg.desc)
|
||||
if pkg.url:
|
||||
data.append("url = %s" % pkg.url)
|
||||
if pkg.builddate:
|
||||
data.append("builddate = %s" % pkg.builddate)
|
||||
if pkg.packager:
|
||||
data.append("packager = %s" % pkg.packager)
|
||||
if pkg.size:
|
||||
data.append("size = %s" % pkg.size)
|
||||
if pkg.arch:
|
||||
data.append("arch = %s" % pkg.arch)
|
||||
for i in pkg.groups:
|
||||
data.append("group = %s" % i)
|
||||
for i in pkg.license:
|
||||
data.append("license = %s" % i)
|
||||
if pkg.md5sum:
|
||||
data.append("md5sum = %s" % pkg.md5sum)
|
||||
|
||||
# depends
|
||||
for i in pkg.replaces:
|
||||
data.append("replaces = %s" % i)
|
||||
for i in pkg.depends:
|
||||
data.append("depend = %s" % i)
|
||||
for i in pkg.conflicts:
|
||||
data.append("conflict = %s" % i)
|
||||
for i in pkg.provides:
|
||||
data.append("provides = %s" % i)
|
||||
for i in pkg.backup:
|
||||
data.append("backup = %s" % i)
|
||||
if pkg.force:
|
||||
data.append("force = 1")
|
||||
# depends
|
||||
for i in pkg.replaces:
|
||||
data.append("replaces = %s" % i)
|
||||
for i in pkg.depends:
|
||||
data.append("depend = %s" % i)
|
||||
for i in pkg.conflicts:
|
||||
data.append("conflict = %s" % i)
|
||||
for i in pkg.provides:
|
||||
data.append("provides = %s" % i)
|
||||
for i in pkg.backup:
|
||||
data.append("backup = %s" % i)
|
||||
if pkg.force:
|
||||
data.append("force = 1")
|
||||
|
||||
mkfile(filename, "\n".join(data))
|
||||
mkfile(filename, "\n".join(data))
|
||||
|
||||
def mkinstallfile(filename, install):
|
||||
"""
|
||||
"""
|
||||
data = []
|
||||
for key, value in install.iteritems():
|
||||
if value:
|
||||
data.append("%s() {\n%s\n}" % (key, value))
|
||||
|
||||
mkfile(filename, "\n".join(data))
|
||||
"""
|
||||
"""
|
||||
data = []
|
||||
for key, value in install.iteritems():
|
||||
if value:
|
||||
data.append("%s() {\n%s\n}" % (key, value))
|
||||
|
||||
mkfile(filename, "\n".join(data))
|
||||
|
||||
def mkcfgfile(filename, root, option, db):
|
||||
"""
|
||||
"""
|
||||
# Options
|
||||
data = ["[options]"]
|
||||
for key, value in option.iteritems():
|
||||
data.extend(["%s = %s" % (key, j) for j in value])
|
||||
"""
|
||||
"""
|
||||
# Options
|
||||
data = ["[options]"]
|
||||
for key, value in option.iteritems():
|
||||
data.extend(["%s = %s" % (key, j) for j in value])
|
||||
|
||||
# Repositories
|
||||
data.extend(["[%s]\n" \
|
||||
"server = file://%s\n" \
|
||||
% (value.treename, os.path.join(root, SYNCREPO, value.treename)) \
|
||||
for key, value in db.iteritems() if not key == "local"])
|
||||
# Repositories
|
||||
data.extend(["[%s]\n" \
|
||||
"server = file://%s\n" \
|
||||
% (value.treename, os.path.join(root, SYNCREPO, value.treename)) \
|
||||
for key, value in db.iteritems() if not key == "local"])
|
||||
|
||||
mkfile(os.path.join(root, filename), "\n".join(data))
|
||||
mkfile(os.path.join(root, filename), "\n".join(data))
|
||||
|
||||
|
||||
#
|
||||
@ -200,26 +200,26 @@ def mkcfgfile(filename, root, option, db):
|
||||
#
|
||||
|
||||
def getmd5sum(filename):
|
||||
"""
|
||||
"""
|
||||
fd = open(filename, "rb")
|
||||
checksum = md5.new()
|
||||
while 1:
|
||||
block = fd.read(1048576)
|
||||
if not block:
|
||||
break
|
||||
checksum.update(block)
|
||||
fd.close()
|
||||
digest = checksum.digest()
|
||||
return "%02x"*len(digest) % tuple(map(ord, digest))
|
||||
"""
|
||||
"""
|
||||
fd = open(filename, "rb")
|
||||
checksum = md5.new()
|
||||
while 1:
|
||||
block = fd.read(1048576)
|
||||
if not block:
|
||||
break
|
||||
checksum.update(block)
|
||||
fd.close()
|
||||
digest = checksum.digest()
|
||||
return "%02x"*len(digest) % tuple(map(ord, digest))
|
||||
|
||||
def mkmd5sum(data):
|
||||
"""
|
||||
"""
|
||||
checksum = md5.new()
|
||||
checksum.update("%s\n" % data)
|
||||
digest = checksum.digest()
|
||||
return "%02x"*len(digest) % tuple(map(ord, digest))
|
||||
"""
|
||||
"""
|
||||
checksum = md5.new()
|
||||
checksum.update("%s\n" % data)
|
||||
digest = checksum.digest()
|
||||
return "%02x"*len(digest) % tuple(map(ord, digest))
|
||||
|
||||
|
||||
#
|
||||
@ -227,15 +227,15 @@ def mkmd5sum(data):
|
||||
#
|
||||
|
||||
def getmtime(filename):
|
||||
"""
|
||||
"""
|
||||
st = os.stat(filename)
|
||||
return st[stat.ST_ATIME], st[stat.ST_MTIME], st[stat.ST_CTIME]
|
||||
"""
|
||||
"""
|
||||
st = os.stat(filename)
|
||||
return st[stat.ST_ATIME], st[stat.ST_MTIME], st[stat.ST_CTIME]
|
||||
|
||||
def diffmtime(mt1, mt2):
|
||||
"""ORE: TBD
|
||||
"""
|
||||
return not mt1 == mt2
|
||||
"""ORE: TBD
|
||||
"""
|
||||
return not mt1 == mt2
|
||||
|
||||
|
||||
#
|
||||
@ -243,17 +243,18 @@ def diffmtime(mt1, mt2):
|
||||
#
|
||||
|
||||
def grep(filename, pattern):
|
||||
found = 0
|
||||
fd = file(filename, "r")
|
||||
while 1 and not found:
|
||||
line = fd.readline()
|
||||
if not line:
|
||||
break
|
||||
if line.find(pattern) != -1:
|
||||
found = 1
|
||||
fd.close()
|
||||
return found
|
||||
found = 0
|
||||
fd = file(filename, "r")
|
||||
while 1 and not found:
|
||||
line = fd.readline()
|
||||
if not line:
|
||||
break
|
||||
if line.find(pattern) != -1:
|
||||
found = 1
|
||||
fd.close()
|
||||
return found
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
pass
|
||||
pass
|
||||
# vim: set ts=4 sw=4 et:
|
||||
|
Loading…
Reference in New Issue
Block a user