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