pactest: revamp modified logic
Remove all logic dealing with PKG_MODIFIED as this rule no longer exists. This removes a bunch of unnecessary stat and checksum logic that most of the time we were never even using. Also update the file modified checks to mark every file created using mkfile() with an older time so any modified checks will just work without hacks. Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
parent
5699f2c94c
commit
32727efc38
6 changed files with 18 additions and 91 deletions
|
@ -161,8 +161,6 @@ class pmdb:
|
||||||
elif line == "%PROVIDES%":
|
elif line == "%PROVIDES%":
|
||||||
pkg.provides = _getsection(fd)
|
pkg.provides = _getsection(fd)
|
||||||
fd.close()
|
fd.close()
|
||||||
pkg.checksum["desc"] = util.getmd5sum(filename)
|
|
||||||
pkg.mtime["desc"] = util.getmtime(filename)
|
|
||||||
|
|
||||||
# files
|
# files
|
||||||
filename = os.path.join(path, "files")
|
filename = os.path.join(path, "files")
|
||||||
|
@ -183,14 +181,9 @@ class pmdb:
|
||||||
if line == "%BACKUP%":
|
if line == "%BACKUP%":
|
||||||
pkg.backup = _getsection(fd)
|
pkg.backup = _getsection(fd)
|
||||||
fd.close()
|
fd.close()
|
||||||
pkg.checksum["files"] = util.getmd5sum(filename)
|
|
||||||
pkg.mtime["files"] = util.getmtime(filename)
|
|
||||||
|
|
||||||
# install
|
# install
|
||||||
filename = os.path.join(path, "install")
|
filename = os.path.join(path, "install")
|
||||||
if os.path.isfile(filename):
|
|
||||||
pkg.checksum["install"] = util.getmd5sum(filename)
|
|
||||||
pkg.mtime["install"] = util.getmtime(filename)
|
|
||||||
|
|
||||||
return pkg
|
return pkg
|
||||||
|
|
||||||
|
@ -252,8 +245,6 @@ class pmdb:
|
||||||
data.append("")
|
data.append("")
|
||||||
filename = os.path.join(path, "desc")
|
filename = os.path.join(path, "desc")
|
||||||
util.mkfile(filename, "\n".join(data))
|
util.mkfile(filename, "\n".join(data))
|
||||||
pkg.checksum["desc"] = util.getmd5sum(filename)
|
|
||||||
pkg.mtime["desc"] = util.getmtime(filename)
|
|
||||||
|
|
||||||
# files
|
# files
|
||||||
# for local entries, fields are: files, backup
|
# for local entries, fields are: files, backup
|
||||||
|
@ -268,8 +259,6 @@ class pmdb:
|
||||||
data.append("")
|
data.append("")
|
||||||
filename = os.path.join(path, "files")
|
filename = os.path.join(path, "files")
|
||||||
util.mkfile(filename, "\n".join(data))
|
util.mkfile(filename, "\n".join(data))
|
||||||
pkg.checksum["files"] = util.getmd5sum(filename)
|
|
||||||
pkg.mtime["files"] = util.getmtime(filename)
|
|
||||||
|
|
||||||
# install
|
# install
|
||||||
if self.treename == "local":
|
if self.treename == "local":
|
||||||
|
@ -280,8 +269,6 @@ class pmdb:
|
||||||
if not empty:
|
if not empty:
|
||||||
filename = os.path.join(path, "install")
|
filename = os.path.join(path, "install")
|
||||||
util.mkinstallfile(filename, pkg.install)
|
util.mkinstallfile(filename, pkg.install)
|
||||||
pkg.checksum["install"] = util.getmd5sum(filename)
|
|
||||||
pkg.mtime["install"] = util.getmtime(filename)
|
|
||||||
|
|
||||||
def gensync(self):
|
def gensync(self):
|
||||||
"""
|
"""
|
||||||
|
@ -300,31 +287,4 @@ class pmdb:
|
||||||
|
|
||||||
os.chdir(curdir)
|
os.chdir(curdir)
|
||||||
|
|
||||||
def ispkgmodified(self, pkg):
|
|
||||||
"""
|
|
||||||
"""
|
|
||||||
|
|
||||||
modified = 0
|
|
||||||
|
|
||||||
oldpkg = self.getpkg(pkg.name)
|
|
||||||
if not oldpkg:
|
|
||||||
return 0
|
|
||||||
|
|
||||||
util.vprint("\toldpkg.checksum : %s" % oldpkg.checksum)
|
|
||||||
util.vprint("\toldpkg.mtime : %s" % oldpkg.mtime)
|
|
||||||
|
|
||||||
for key in pkg.mtime.keys():
|
|
||||||
if key == "install" \
|
|
||||||
and oldpkg.mtime[key] == (0, 0, 0) \
|
|
||||||
and pkg.mtime[key] == (0, 0, 0):
|
|
||||||
continue
|
|
||||||
if oldpkg.mtime[key][1:3] != pkg.mtime[key][1:3]:
|
|
||||||
modified += 1
|
|
||||||
|
|
||||||
return modified
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
db = pmdb("local")
|
|
||||||
print db
|
|
||||||
# vim: set ts=4 sw=4 et:
|
# vim: set ts=4 sw=4 et:
|
||||||
|
|
|
@ -68,13 +68,6 @@ class pmenv:
|
||||||
print "----------"*8
|
print "----------"*8
|
||||||
|
|
||||||
t.generate()
|
t.generate()
|
||||||
# Hack for mtimes consistency
|
|
||||||
for i in t.rules:
|
|
||||||
if i.rule.find("FILE_MODIFIED") != -1:
|
|
||||||
[test, arg] = i.rule.split("=")
|
|
||||||
for f in t.files:
|
|
||||||
if f.name == arg:
|
|
||||||
f.resettimes()
|
|
||||||
|
|
||||||
t.run(self.pacman)
|
t.run(self.pacman)
|
||||||
|
|
||||||
|
|
|
@ -27,10 +27,10 @@ class pmfile:
|
||||||
def __init__(self, root, name):
|
def __init__(self, root, name):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.root = root
|
self.root = root
|
||||||
|
self.filename = os.path.join(self.root, self.name)
|
||||||
|
|
||||||
filename = os.path.join(self.root, self.name)
|
self.checksum = util.getmd5sum(self.filename)
|
||||||
self.checksum = util.getmd5sum(filename)
|
self.mtime = util.getmtime(self.filename)
|
||||||
self.mtime = util.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)
|
||||||
|
@ -38,12 +38,8 @@ class pmfile:
|
||||||
def ismodified(self):
|
def ismodified(self):
|
||||||
"""
|
"""
|
||||||
"""
|
"""
|
||||||
|
checksum = util.getmd5sum(self.filename)
|
||||||
retval = 0
|
mtime = util.getmtime(self.filename)
|
||||||
|
|
||||||
filename = os.path.join(self.root, self.name)
|
|
||||||
checksum = util.getmd5sum(filename)
|
|
||||||
mtime = util.getmtime(filename)
|
|
||||||
|
|
||||||
util.vprint("\tismodified(%s)" % self.name)
|
util.vprint("\tismodified(%s)" % self.name)
|
||||||
util.vprint("\t\told: %s / %s" % (self.checksum, self.mtime))
|
util.vprint("\t\told: %s / %s" % (self.checksum, self.mtime))
|
||||||
|
@ -51,17 +47,8 @@ class pmfile:
|
||||||
|
|
||||||
if self.checksum != checksum \
|
if self.checksum != checksum \
|
||||||
or (self.mtime[1], self.mtime[2]) != (mtime[1], mtime[2]):
|
or (self.mtime[1], self.mtime[2]) != (mtime[1], mtime[2]):
|
||||||
retval = 1
|
return 1
|
||||||
|
|
||||||
return retval
|
return 0
|
||||||
|
|
||||||
def resettimes(self):
|
|
||||||
"""
|
|
||||||
"""
|
|
||||||
|
|
||||||
filename = os.path.join(self.root, self.name)
|
|
||||||
os.utime(filename, (355, 355))
|
|
||||||
self.mtime = util.getmtime(filename)
|
|
||||||
util.vprint("\tmtime reset (%s)" % self.name)
|
|
||||||
|
|
||||||
# vim: set ts=4 sw=4 et:
|
# vim: set ts=4 sw=4 et:
|
||||||
|
|
|
@ -64,16 +64,6 @@ class pmpkg:
|
||||||
"pre_upgrade": "",
|
"pre_upgrade": "",
|
||||||
"post_upgrade": ""
|
"post_upgrade": ""
|
||||||
}
|
}
|
||||||
self.checksum = {
|
|
||||||
"desc": "",
|
|
||||||
"files": "",
|
|
||||||
"install": ""
|
|
||||||
}
|
|
||||||
self.mtime = {
|
|
||||||
"desc": (0, 0, 0),
|
|
||||||
"files": (0, 0, 0),
|
|
||||||
"install": (0, 0, 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
s = ["%s" % self.fullname()]
|
s = ["%s" % self.fullname()]
|
||||||
|
@ -97,13 +87,6 @@ class pmpkg:
|
||||||
"""
|
"""
|
||||||
return "%s%s" % (self.fullname(), util.PM_EXT_PKG)
|
return "%s%s" % (self.fullname(), util.PM_EXT_PKG)
|
||||||
|
|
||||||
def install_files(self, root):
|
|
||||||
"""Install files in the filesystem located under "root".
|
|
||||||
|
|
||||||
Files are created with content generated automatically.
|
|
||||||
"""
|
|
||||||
[util.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.
|
||||||
|
|
||||||
|
|
|
@ -69,13 +69,8 @@ class pmrule:
|
||||||
if not newpkg:
|
if not newpkg:
|
||||||
success = 0
|
success = 0
|
||||||
else:
|
else:
|
||||||
util.vprint("\tnewpkg.checksum : %s" % newpkg.checksum)
|
|
||||||
util.vprint("\tnewpkg.mtime : %s" % newpkg.mtime)
|
|
||||||
if case == "EXIST":
|
if case == "EXIST":
|
||||||
success = 1
|
success = 1
|
||||||
elif case == "MODIFIED":
|
|
||||||
if not localdb.ispkgmodified(newpkg):
|
|
||||||
success = 0
|
|
||||||
elif case == "VERSION":
|
elif case == "VERSION":
|
||||||
if value != newpkg.version:
|
if value != newpkg.version:
|
||||||
success = 0
|
success = 0
|
||||||
|
@ -121,6 +116,7 @@ class pmrule:
|
||||||
if f.name == key:
|
if f.name == key:
|
||||||
if not f.ismodified():
|
if not f.ismodified():
|
||||||
success = 0
|
success = 0
|
||||||
|
break
|
||||||
elif case == "MODE":
|
elif case == "MODE":
|
||||||
if not os.path.isfile(filename):
|
if not os.path.isfile(filename):
|
||||||
success = 0
|
success = 0
|
||||||
|
|
|
@ -166,10 +166,18 @@ class pmtest:
|
||||||
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)
|
for f in pkg.files:
|
||||||
|
vprint("\t%s" % f)
|
||||||
|
path = os.path.join(self.root, f)
|
||||||
|
util.mkfile(path, f)
|
||||||
|
if os.path.isfile(path):
|
||||||
|
os.utime(path, (355, 355))
|
||||||
for f in self.filesystem:
|
for f in self.filesystem:
|
||||||
vprint("\t%s" % f)
|
vprint("\t%s" % f)
|
||||||
util.mkfile(os.path.join(self.root, f), f)
|
path = os.path.join(self.root, f)
|
||||||
|
util.mkfile(path, f)
|
||||||
|
if os.path.isfile(path):
|
||||||
|
os.utime(path, (355, 355))
|
||||||
|
|
||||||
# Done.
|
# Done.
|
||||||
vprint(" Taking a snapshot of the file system")
|
vprint(" Taking a snapshot of the file system")
|
||||||
|
|
Loading…
Add table
Reference in a new issue