[game-data-packager] 01/03: Move md5sums from GameDataPackage to PackagingTask

Simon McVittie smcv at debian.org
Tue Nov 1 12:57:32 UTC 2016


This is an automated email from the git hooks/post-receive script.

smcv pushed a commit to branch master
in repository game-data-packager.

commit 1bbbb2a83bf8c1e7e234b60be39063fd19b855c7
Author: Simon McVittie <smcv at debian.org>
Date:   Tue Nov 1 12:51:26 2016 +0000

    Move md5sums from GameDataPackage to PackagingTask
    
    This removes another instance of storing mutable state in the
    GameDataPackage. My goal is that the GameDataPackage will never be
    modified after it has been loaded.
---
 game_data_packager/__init__.py           |  4 ----
 game_data_packager/build.py              | 11 +++++++++--
 game_data_packager/packaging/__init__.py |  5 ++++-
 game_data_packager/packaging/arch.py     |  2 +-
 game_data_packager/packaging/deb.py      | 22 ++++++++++++----------
 game_data_packager/packaging/rpm.py      |  2 +-
 6 files changed, 27 insertions(+), 19 deletions(-)

diff --git a/game_data_packager/__init__.py b/game_data_packager/__init__.py
index 5b31b0d..347ca6d 100644
--- a/game_data_packager/__init__.py
+++ b/game_data_packager/__init__.py
@@ -172,10 +172,6 @@ class GameDataPackage(object):
         # archives actually used to built a package
         self.used_sources = set()
 
-        # Remember the md5 of installed files
-        # that will end up in DEBIAN/md5sums
-        self.md5sums = dict()
-
     @property
     def aliases(self):
         return self._aliases
diff --git a/game_data_packager/build.py b/game_data_packager/build.py
index 2f07b8c..efa1b6a 100644
--- a/game_data_packager/build.py
+++ b/game_data_packager/build.py
@@ -225,6 +225,12 @@ class PackagingTask(object):
         # Block device from which to rip audio
         self.cd_device = None
 
+        # Remember the md5 of installed files that will end up in
+        # DEBIAN/md5sums
+        # e.g. { 'quake3-data': {
+        #           'usr/share/games/quake3-data/baseq3/pak0.pk3': '1197ca...' }
+        self.package_md5sums = {}
+
         # Found CD tracks
         # e.g. { 'quake-music': { 2: '/usr/.../id1/music/track02.ogg' } }
         self.cd_tracks = {}
@@ -1328,7 +1334,7 @@ class PackagingTask(object):
                     os.chmod(copy_to, 0o644)
 
                 fullname = os.path.join(install_to, install_as).strip('/')
-                package.md5sums[fullname] = md5
+                self.package_md5sums.setdefault(package.name, {})[fullname] = md5
 
         install_to = self.packaging.substitute(package.install_to,
                 package.name)
@@ -2009,7 +2015,8 @@ class PackagingTask(object):
 
             self.__check_component(package)
             pkg = self.packaging.build_package(per_package_dir, self.game,
-                    package, destination, compress=compress)
+                    package, destination, compress=compress,
+                    md5sums=self.package_md5sums.get(package.name))
             assert pkg is not None
             packages.add(pkg)
 
diff --git a/game_data_packager/packaging/__init__.py b/game_data_packager/packaging/__init__.py
index 207561c..4fd8325 100644
--- a/game_data_packager/packaging/__init__.py
+++ b/game_data_packager/packaging/__init__.py
@@ -304,7 +304,7 @@ class PackagingSystem(metaclass=ABCMeta):
 
     @abstractmethod
     def build_package(self, per_package_dir, game, package,
-            destination, compress=True):
+            destination, compress=True, md5sums=None):
         """Build the .deb or equivalent in destination, and return its
         filename.
 
@@ -313,6 +313,9 @@ class PackagingSystem(metaclass=ABCMeta):
         to be packaged (so it contains DESTDIR/usr, etc.)
 
         game and package are a GameData and a GameDataPackage respectively.
+
+        md5sums is either None, or a map like
+        { 'usr/share/games/quake3-data/baseq3/pak0.pk3': '1197ca...' }
         """
         raise NotImplementedError
 
diff --git a/game_data_packager/packaging/arch.py b/game_data_packager/packaging/arch.py
index 8c5576c..c8d92a1 100644
--- a/game_data_packager/packaging/arch.py
+++ b/game_data_packager/packaging/arch.py
@@ -155,7 +155,7 @@ class ArchPackaging(PackagingSystem):
                  + sorted(files), env={'LANG':'C'}, cwd=destdir)
 
     def build_package(self, per_package_dir, game, package, destination,
-            compress=True):
+            compress=True, md5sums=None):
         destdir = os.path.join(per_package_dir, 'DESTDIR')
         arch = self.get_effective_architecture(package)
 
diff --git a/game_data_packager/packaging/deb.py b/game_data_packager/packaging/deb.py
index 036449e..b2e5673 100644
--- a/game_data_packager/packaging/deb.py
+++ b/game_data_packager/packaging/deb.py
@@ -347,12 +347,14 @@ class DebPackaging(PackagingSystem):
 
         return control
 
-    def __fill_dest_dir_deb(self, game, package, destdir):
+    def __fill_dest_dir_deb(self, game, package, destdir, md5sums=None):
         if package.component == 'local':
              self.override_lintian(destdir, package.name,
                      'unknown-section', 'local/%s' % package.section)
 
         # same output as in dh_md5sums
+        if md5sums is None:
+            md5sums = {}
 
         # we only compute here the md5 we don't have yet,
         # for the (small) GDP-generated files
@@ -364,18 +366,18 @@ class DebPackaging(PackagingSystem):
                 if os.path.islink(full):
                     continue
                 file = full[len(destdir)+1:]
-                if file not in package.md5sums:
+                if file not in md5sums:
                     with open(full, 'rb') as opened:
                         hf = HashedFile.from_file(full, opened)
-                        package.md5sums[file] = hf.md5
+                        md5sums[file] = hf.md5
 
         debdir = os.path.join(destdir, 'DEBIAN')
         mkdir_p(debdir)
-        md5sums = os.path.join(destdir, 'DEBIAN/md5sums')
-        with open(md5sums, 'w', encoding='utf8') as outfile:
-            for file in sorted(package.md5sums.keys()):
-                outfile.write('%s  %s\n' % (package.md5sums[file], file))
-        os.chmod(md5sums, 0o644)
+        md5sums_path = os.path.join(destdir, 'DEBIAN/md5sums')
+        with open(md5sums_path, 'w', encoding='utf8') as outfile:
+            for file in sorted(md5sums.keys()):
+                outfile.write('%s  %s\n' % (md5sums[file], file))
+        os.chmod(md5sums_path, 0o644)
 
         control = os.path.join(destdir, 'DEBIAN/control')
         self.__generate_control(game, package, destdir).dump(
@@ -383,10 +385,10 @@ class DebPackaging(PackagingSystem):
         os.chmod(control, 0o644)
 
     def build_package(self, per_package_dir, game, package, destination,
-            compress=True):
+            compress=True, md5sums=None):
         destdir = os.path.join(per_package_dir, 'DESTDIR')
         arch = self.get_effective_architecture(package)
-        self.__fill_dest_dir_deb(game, package, destdir)
+        self.__fill_dest_dir_deb(game, package, destdir, md5sums)
         normalize_permissions(destdir)
 
         # it had better have a /usr and a DEBIAN directory or
diff --git a/game_data_packager/packaging/rpm.py b/game_data_packager/packaging/rpm.py
index 4012a42..f7d84a4 100644
--- a/game_data_packager/packaging/rpm.py
+++ b/game_data_packager/packaging/rpm.py
@@ -231,7 +231,7 @@ class RpmPackaging(PackagingSystem):
         return specfile
 
     def build_package(self, per_package_dir, game, package, destination,
-            compress=True):
+            compress=True, md5sums=None):
         destdir = os.path.join(per_package_dir, 'DESTDIR')
         arch = self.get_effective_architecture(package)
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/game-data-packager.git



More information about the Pkg-games-commits mailing list