]> git.ipfire.org Git - people/ms/pakfire.git/commitdiff
Save capabilities in package metadata and database.
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 16 Oct 2011 08:45:30 +0000 (10:45 +0200)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 16 Oct 2011 08:55:43 +0000 (10:55 +0200)
po/pakfire.pot
python/pakfire/constants.py
python/pakfire/errors.py
python/pakfire/filelist.py
python/pakfire/packages/file.py
python/pakfire/packages/packager.py
python/pakfire/repository/database.py

index 655af5e14b38cdd7e2dc1ef8c28f58b7b68b81fe..c13f9537cbf92c45e1359fb313f955565c14843e 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-10-15 16:48+0200\n"
+"POT-Creation-Date: 2011-10-16 10:42+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -349,7 +349,7 @@ msgid "Do not verify build dependencies."
 msgstr ""
 
 #: ../python/pakfire/compress.py:133
-#: ../python/pakfire/packages/packager.py:495
+#: ../python/pakfire/packages/packager.py:501
 #, python-format
 msgid "Compressing %s"
 msgstr ""
@@ -362,22 +362,22 @@ msgstr ""
 msgid "An unhandled error occured."
 msgstr ""
 
-#: ../python/pakfire/errors.py:51
+#: ../python/pakfire/errors.py:54
 msgid "One or more dependencies could not been resolved."
 msgstr ""
 
-#: ../python/pakfire/errors.py:66
+#: ../python/pakfire/errors.py:69
 msgid ""
 "The requested action cannot be done on offline mode.\n"
 "Please connect your system to the network, remove --offline from the command "
 "line and try again."
 msgstr ""
 
-#: ../python/pakfire/errors.py:78
+#: ../python/pakfire/errors.py:81
 msgid "Running pakfire-build in a pakfire container?"
 msgstr ""
 
-#: ../python/pakfire/errors.py:82 ../python/pakfire/transaction.py:381
+#: ../python/pakfire/errors.py:85 ../python/pakfire/transaction.py:381
 msgid "Transaction test was not successful"
 msgstr ""
 
@@ -497,7 +497,7 @@ msgstr ""
 msgid "Filename: %s"
 msgstr ""
 
-#: ../python/pakfire/packages/file.py:259
+#: ../python/pakfire/packages/file.py:254
 #, python-format
 msgid "File in archive is missing in file metadata: /%s. Skipping."
 msgstr ""
@@ -521,11 +521,11 @@ msgid "Package version is undefined."
 msgstr ""
 
 #. Load progressbar.
-#: ../python/pakfire/packages/packager.py:333
+#: ../python/pakfire/packages/packager.py:339
 msgid "Packaging"
 msgstr ""
 
-#: ../python/pakfire/packages/packager.py:621
+#: ../python/pakfire/packages/packager.py:627
 #, python-format
 msgid "Building source package %s:"
 msgstr ""
@@ -534,7 +534,12 @@ msgstr ""
 msgid "The format of the database is not supported by this version of pakfire."
 msgstr ""
 
-#: ../python/pakfire/repository/database.py:217
+#: ../python/pakfire/repository/database.py:220
+#, python-format
+msgid "Cannot use database with version greater than %s."
+msgstr ""
+
+#: ../python/pakfire/repository/database.py:222
 #, python-format
 msgid "Migrating database from format %s to %s."
 msgstr ""
index a78a2a103a7bef8a8184bf6d15dce9cf6fa1faa3..baa112dc9b360c4ce5ea246278bafa072bcb9bc8 100644 (file)
@@ -57,9 +57,9 @@ METADATA_DOWNLOAD_PATH  = "repodata"
 METADATA_DOWNLOAD_FILE  = "repomd.json"
 METADATA_DATABASE_FILE  = "packages.solv"
 
-PACKAGE_FORMAT = 2
+PACKAGE_FORMAT = 3
 # XXX implement this properly
-PACKAGE_FORMATS_SUPPORTED = [0, 1, 2]
+PACKAGE_FORMATS_SUPPORTED = [0, 1, 2, 3]
 PACKAGE_EXTENSION = "pfm"
 MAKEFILE_EXTENSION = "nm"
 
index 9e8f0cc0e373a4ffb04c5fdd00bfe89de09d16e5..29103a5349c9251033a0f147c40682d0400d6132 100644 (file)
@@ -45,6 +45,9 @@ class BuildRootLocked(Error):
 class ConfigError(Error):
        pass
 
+class DatabaseError(Error):
+       pass
+
 class DependencyError(Error):
        exit_code = 4
 
index 05a06e0de1b10dc984e969495481b5d209bdd07a..ef7ee35f4cc42a08013b8f67bf407fe1626211b7 100644 (file)
@@ -67,6 +67,7 @@ class File(_File):
                self.user = 0
                self.group = 0
                self.mtime = 0
+               self.capabilities = None
 
        def is_config(self):
                return self.config
@@ -139,3 +140,7 @@ class FileDatabase(_File):
        @property
        def mtime(self):
                return self.row["mtime"]
+
+       @property
+       def capabilities(self):
+               return self.row["capabilities"]
index 0fb4abcb1c0412f00ea3b91be8ae6f721195320f..117be36d1d145ae249c6b89912fe56ea1dc23c78 100644 (file)
@@ -152,7 +152,7 @@ class FilePackage(Package):
                if not tarfile.is_tarfile(self.filename):
                        raise FileError, "Given file is not of correct format: %s" % self.filename
 
-               assert self.format in PACKAGE_FORMATS_SUPPORTED
+               assert self.format in PACKAGE_FORMATS_SUPPORTED, self.format
 
        def get_format(self):
                a = self.open_archive()
@@ -428,7 +428,10 @@ class FilePackage(Package):
                                line = line.rstrip()
                                line = line.split()
 
-                               if len(line) <= 6:
+                               # Check if fields do have the correct length.
+                               if self.format >= 3 and len(line) <= 7:
+                                       continue
+                               elif len(line) <= 6:
                                        continue
 
                                name = line[0]
@@ -471,6 +474,9 @@ class FilePackage(Package):
                                if not line[7] == "-":
                                        file.hash1 = line[7]
 
+                               if self.format >= 3 and not line[8] == "-":
+                                       file.capabilities = line[8]
+
                        else:
                                name = line
 
index 57273c09245ae62610416167bfc1d9c0f9145d7e..e48018eededa9b4f59a05facdc705750e87ac24c 100644 (file)
@@ -158,11 +158,17 @@ class Packager(object):
                                        h.update(buf)
 
                                mobj.close()
-                               f.write(" %s\n" % h.hexdigest())
+                               f.write(" %s" % h.hexdigest())
+                       else:
+                               f.write(" -")
 
-                       # For other files, just finish the line.
+                       caps = m.pax_headers.get("PAKFIRE.capabilities", None)
+                       if caps:
+                               f.write(" %s" % caps)
                        else:
-                               f.write(" -\n")
+                               f.write(" -")
+
+                       f.write("\n")
 
                logging.info("")
 
index 24d81541d5654e604bbd395dee3a42c5b5ec1e1f..fb548497b79c4241c7e63434a53e296a820a2a1d 100644 (file)
@@ -159,7 +159,8 @@ class DatabaseLocal(Database):
                                user            TEXT,
                                `group`         TEXT,
                                hash1           TEXT,
-                               mtime           INTEGER
+                               mtime           INTEGER,
+                               capabilities    TEXT
                        );
 
                        CREATE TABLE packages(
@@ -214,6 +215,10 @@ class DatabaseLocal(Database):
                if self.format == DATABASE_FORMAT:
                        return
 
+               # Check if database version is supported.
+               if self.format > DATABASE_FORMAT:
+                       raise DatabaseError, _("Cannot use database with version greater than %s.") % DATABASE_FORMAT
+
                logging.info(_("Migrating database from format %s to %s.") % (self.format, DATABASE_FORMAT))
 
                # Get a database cursor.
@@ -230,6 +235,9 @@ class DatabaseLocal(Database):
                        c.execute("ALTER TABLE files ADD COLUMN `group` TEXT")
                        c.execute("ALTER TABLE files ADD COLUMN `mtime` INTEGER")
 
+               if self.format < 3:
+                       c.execute("ALTER TABLE files ADD COLUMN `capabilities` TEXT")
+
                # In the end, we can easily update the version of the database.
                c.execute("UPDATE settings SET val = ? WHERE key = 'version'", (DATABASE_FORMAT,))
                self.__format = DATABASE_FORMAT
@@ -302,9 +310,9 @@ class DatabaseLocal(Database):
 
                        pkg_id = c.lastrowid
 
-                       c.executemany("INSERT INTO files(`name`, `pkg`, `size`, `config`, `type`, `hash1`, `mode`, `user`, `group`, `mtime`)"
-                                       " VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
-                               ((f.name, pkg_id, f.size, f.is_config(), f.type, f.hash1, f.mode, f.user, f.group, f.mtime) for f in pkg.filelist))
+                       c.executemany("INSERT INTO files(`name`, `pkg`, `size`, `config`, `type`, `hash1`, `mode`, `user`, `group`, `mtime`, `capabilities`)"
+                                       " VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
+                               ((f.name, pkg_id, f.size, f.is_config(), f.type, f.hash1, f.mode, f.user, f.group, f.mtime, f.capabilities or "") for f in pkg.filelist))
 
                except:
                        raise