summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/pacman/pmdb.py2
-rw-r--r--test/pacman/pmpkg.py54
-rw-r--r--test/pacman/pmtest.py3
3 files changed, 37 insertions, 22 deletions
diff --git a/test/pacman/pmdb.py b/test/pacman/pmdb.py
index b694dff6..3e9d305e 100644
--- a/test/pacman/pmdb.py
+++ b/test/pacman/pmdb.py
@@ -219,7 +219,7 @@ class pmdb(object):
# files and install
if self.is_local:
data = []
- make_section(data, "FILES", pkg.full_filelist())
+ make_section(data, "FILES", pkg.filelist())
make_section(data, "BACKUP", pkg.local_backup_entries())
entry["files"] = "\n".join(data)
diff --git a/test/pacman/pmpkg.py b/test/pacman/pmpkg.py
index c0c9f131..988c73f3 100644
--- a/test/pacman/pmpkg.py
+++ b/test/pacman/pmpkg.py
@@ -69,6 +69,7 @@ class pmpkg(object):
"post_upgrade": "",
}
self.path = None
+ self.finalized = False
def __str__(self):
s = ["%s" % self.fullname()]
@@ -182,27 +183,38 @@ class pmpkg(object):
if os.path.isfile(path):
os.utime(path, (355, 355))
- def full_filelist(self):
- """Generate a list of package files.
-
- 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
- """
- file_set = set()
- for name in self.files:
- name = self.parse_filename(name)
- file_set.add(name)
- while "/" in name:
- name, tmp = name.rsplit("/", 1)
- file_set.add(name + "/")
- return sorted(file_set)
+ def filelist(self):
+ """Generate a list of package files."""
+ return sorted([self.parse_filename(f) for f in self.files])
+
+ def finalize(self):
+ """Perform any necessary operations to ready the package for use."""
+ if self.finalized:
+ return
+
+ # add missing parent dirs to file list
+ # use bare file names so trailing ' -> ', '*', etc don't throw off the
+ # checks for existing files
+ file_names = self.filelist()
+ for name in list(file_names):
+ if os.path.isabs(name):
+ raise ValueError("Absolute path in filelist '%s'." % name)
+
+ name = os.path.dirname(name.rstrip("/"))
+ while name:
+ if name in file_names:
+ # path exists as both a file and a directory
+ raise ValueError("Duplicate path in filelist '%s'." % name)
+ elif name + "/" in file_names:
+ # path was either manually included or already processed
+ break
+ else:
+ file_names.append(name + "/")
+ self.files.append(name + "/")
+ name = os.path.dirname(name)
+ self.files.sort()
+
+ self.finalized = True
def local_backup_entries(self):
return ["%s\t%s" % (self.parse_filename(i), util.mkmd5sum(i)) for i in self.backup]
diff --git a/test/pacman/pmtest.py b/test/pacman/pmtest.py
index 6dc0ee64..2eafe682 100644
--- a/test/pacman/pmtest.py
+++ b/test/pacman/pmtest.py
@@ -147,8 +147,11 @@ class pmtest(object):
vprint(" Creating package archives")
for pkg in self.localpkgs:
vprint("\t%s" % os.path.join(util.TMPDIR, pkg.filename()))
+ pkg.finalize()
pkg.makepkg(tmpdir)
for key, value in self.db.iteritems():
+ for pkg in value.pkgs:
+ pkg.finalize()
if key == "local" and not self.createlocalpkgs:
continue
for pkg in value.pkgs: