]> git.ipfire.org Git - people/ms/pakfire.git/commitdiff
Add scriptlets to the database and actually execute them.
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 26 Oct 2013 21:20:10 +0000 (23:20 +0200)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 26 Oct 2013 21:20:10 +0000 (23:20 +0200)
src/pakfire/packages/base.py
src/pakfire/packages/installed.py
src/pakfire/packages/solv.py
src/pakfire/repository/database.py

index 543f50969d5ac6d9ddc13a9b6e1074364f26fa27..36758e318dd72f5369fe2735f547e08880fd2d9c 100644 (file)
@@ -483,6 +483,9 @@ class Package(object):
        def scriptlets(self):
                return self.metadata.get("PKG_SCRIPTLETS", "").splitlines()
 
+       def get_scriptlet(self, action):
+               raise NotImplementedError
+
        @property
        def filelist(self):
                raise NotImplementedError
index 6210c888748f30ab637629979b04ebde3c6775df..b358f6404d304d553ee2d069c99bafce50d5e4d0 100644 (file)
@@ -198,6 +198,21 @@ class DatabasePackage(Package):
        def scriptlet(self):
                return self.metadata.get("scriptlet")
 
+       def get_scriptlet(self, action):
+               c = self.db.cursor()
+               c.execute("SELECT scriptlet FROM scriptlets WHERE pkg = ? AND action = ? LIMIT 1", (self.id, action,))
+
+               try:
+                       row = c.fetchone()
+
+                       # If no row was returned, no scriptlet for this action
+                       # does exist.
+                       if row:
+                               return row["scriptlet"]
+
+               finally:
+                       c.close()
+
        @property
        def filename(self):
                return self.metadata.get("filename")
index d6a8a407bfb518fc9eb11c72a9e59987c2c9b6e6..e8975028c2715f06342febf1d733f9389e3c8b35 100644 (file)
@@ -255,7 +255,3 @@ class SolvPackage(base.Package):
                        self.repo.download(self, text=text, logger=logger)
 
                return self.get_from_cache()
-
-       def get_scriptlet(self, type):
-               # XXX TODO
-               return None
index 4b3506e69bb76f7a52e03d10b88234e94891e3bb..6780aa2178c4616e575c4e784ba83e4482646687 100644 (file)
@@ -406,6 +406,17 @@ class DatabaseLocal(Database):
                                        " VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
                                ((f.name, pkg_id, f.size, f.is_config(), f.is_datafile(), f.type, f.hash1, f.mode, f.user, f.group, f.mtime, f.capabilities or "") for f in pkg.filelist))
 
+                       # Add scriptlets
+                       for scriptlet_action in SCRIPTS:
+                               scriptlet = pkg.get_scriptlet(scriptlet_action)
+
+                               # If there is no scriptlet, just skip to the next one.
+                               if not scriptlet:
+                                       continue
+
+                               c.execute("INSERT INTO scriptlets(pkg, action, scriptlet) VALUES(?, ?, ?)",
+                                       (pkg_id, scriptlet_action, scriptlet))
+
                except:
                        raise
 
@@ -422,6 +433,7 @@ class DatabaseLocal(Database):
                # First, delete all files from the database and then delete the pkg itself.
                c = self.cursor()
                c.execute("DELETE FROM files WHERE pkg = ?", (pkg.id,))
+               c.execute("DELETE FROM scriptlets WHERE pkg = ?", (pkg.id,))
                c.execute("DELETE FROM packages WHERE id = ?", (pkg.id,))
                c.close()