summaryrefslogtreecommitdiffstats
path: root/test/pacman/util.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/pacman/util.py')
-rwxr-xr-xtest/pacman/util.py276
1 files changed, 276 insertions, 0 deletions
diff --git a/test/pacman/util.py b/test/pacman/util.py
new file mode 100755
index 00000000..e01a3b8f
--- /dev/null
+++ b/test/pacman/util.py
@@ -0,0 +1,276 @@
+#! /usr/bin/python
+#
+# Copyright (c) 2006 by Aurelien Foret <orelien@chez.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+import sys
+import os
+import hashlib
+import stat
+
+
+# ALPM
+PM_ROOT = "/"
+PM_DBPATH = "var/lib/pacman"
+PM_LOCK = "var/lib/pacman/db.lck"
+PM_CACHEDIR = "var/cache/pacman/pkg"
+PM_EXT_PKG = ".pkg.tar.gz"
+PM_EXT_DB = ".db.tar.gz"
+PM_PACNEW = ".pacnew"
+PM_PACORIG = ".pacorig"
+PM_PACSAVE = ".pacsave"
+
+# Pacman
+PACCONF = "etc/pacman.conf"
+
+# Pactest
+TMPDIR = "tmp"
+SYNCREPO = "var/pub"
+LOGFILE = "var/log/pactest.log"
+
+verbose = 0
+
+def vprint(msg):
+ if verbose:
+ print msg
+
+#
+# Methods to generate files
+#
+
+def getfilename(name):
+ """
+ """
+ filename = name
+ extra = ""
+ if filename[-1] == "*":
+ filename = filename.rstrip("*")
+ if filename.find(" -> ") != -1:
+ filename, extra = filename.split(" -> ")
+ elif filename.find("|") != -1:
+ filename, extra = filename.split("|")
+ return filename
+
+def mkfile(name, data = ""):
+ """
+ """
+ isdir = 0
+ islink = 0
+ setperms = 0
+ filename = name
+ link = ""
+ perms = ""
+
+ if filename[-1] == "*":
+ filename = filename.rstrip("*")
+ if filename.find(" -> ") != -1:
+ islink = 1
+ filename, link = filename.split(" -> ")
+ elif filename.find("|") != -1:
+ setperms = 1
+ filename, perms = filename.split("|")
+ if filename[-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:
+ return
+ if islink:
+ curdir = os.getcwd()
+ if path:
+ 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 setperms:
+ os.chmod(filename, int(perms, 8))
+
+def mkdescfile(filename, pkg):
+ """
+ """
+
+ 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)
+
+ # 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.optdepends:
+ data.append("optdepend = %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))
+
+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))
+
+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])
+
+ # Repositories
+ for key, value in db.iteritems():
+ if key != "local":
+ data.append("[%s]\n" \
+ "Server = file://%s" \
+ % (value.treename,
+ os.path.join(root, SYNCREPO, value.treename)))
+ for optkey, optval in value.option.iteritems():
+ data.extend(["%s = %s" % (optkey, j) for j in optval])
+
+ mkfile(os.path.join(root, filename), "\n".join(data))
+
+
+#
+# MD5 helpers
+#
+
+def getmd5sum(filename):
+ """
+ """
+ if not os.path.isfile(filename):
+ print "file %s does not exist!" % filename
+ return ""
+ fd = open(filename, "rb")
+ checksum = hashlib.md5()
+ 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 = hashlib.md5()
+ checksum.update("%s\n" % data)
+ digest = checksum.digest()
+ return "%02x"*len(digest) % tuple(map(ord, digest))
+
+
+#
+# Mtime helpers
+#
+
+def getmtime(filename):
+ """
+ """
+ if not os.path.exists(filename):
+ print "path %s does not exist!" % filename
+ return 0, 0, 0
+ 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
+
+
+#
+# Miscellaneous
+#
+
+def which(filename):
+ path = os.environ["PATH"].split(':')
+ for p in path:
+ f = os.path.join(p, filename)
+ if os.access(f, os.F_OK):
+ return f
+ return None
+
+def grep(filename, pattern):
+ lines = file(filename, 'r').readlines()
+ for line in lines:
+ if not line: break
+ if line.find(pattern) != -1:
+ return True
+ return False
+
+def mkdir(dir):
+ if os.path.isdir(dir):
+ return
+ elif os.path.isfile(dir):
+ raise OSError("'%s' already exists and is not a directory" % dir)
+ else:
+ parent, thisdir = os.path.split(dir)
+ if parent: mkdir(parent) #recurse to make all parents
+ vprint("making dir %s" % thisdir)
+ if thisdir: os.mkdir(dir)
+
+if __name__ == "__main__":
+ pass
+
+# vim: set ts=4 sw=4 et: