[game-data-packager] 02/03: Do not modify GamePackage.component in-place
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 742aaffcede4dd8c9b023df1ae211d3ea5c57749
Author: Simon McVittie <smcv at debian.org>
Date: Tue Nov 1 12:28:56 2016 +0000
Do not modify GamePackage.component in-place
---
game_data_packager/build.py | 21 +++++++++++++--------
game_data_packager/packaging/__init__.py | 10 ++++++----
game_data_packager/packaging/arch.py | 2 +-
game_data_packager/packaging/deb.py | 21 +++++++++++++--------
game_data_packager/packaging/rpm.py | 2 +-
5 files changed, 34 insertions(+), 22 deletions(-)
diff --git a/game_data_packager/build.py b/game_data_packager/build.py
index efa1b6a..979316f 100644
--- a/game_data_packager/build.py
+++ b/game_data_packager/build.py
@@ -231,6 +231,11 @@ class PackagingTask(object):
# 'usr/share/games/quake3-data/baseq3/pak0.pk3': '1197ca...' }
self.package_md5sums = {}
+ # Components for packages, possibly modified: if the license
+ # for a freely redistributable game is missing, we demote it from
+ # main or non-free to local (i.e. non-distributable).
+ self.package_components = {}
+
# Found CD tracks
# e.g. { 'quake-music': { 2: '/usr/.../id1/music/track02.ogg' } }
self.cd_tracks = {}
@@ -1189,10 +1194,10 @@ class PackagingTask(object):
'usr/share/doc/%s/%s' % (package.name,
license_file))
- if package.component == 'local':
+ if self.package_components[package.name] == 'local':
o.write('It contains proprietary game data '
'and must not be redistributed.\n\n')
- elif package.component == 'non-free':
+ elif self.package_components[package.name] == 'non-free':
o.write('It contains proprietary game data '
'that may be redistributed\n'
'only under conditions specified in\n')
@@ -1260,7 +1265,7 @@ class PackagingTask(object):
o.write(package.copyright or self.game.copyright)
o.write(', with all rights reserved.\n')
- if licenses and package.component == 'local':
+ if licenses and self.package_components[package.name] == 'local':
o.write('\nThe full license appears in ')
o.write(',\n'.join(licenses))
o.write('\n')
@@ -1281,6 +1286,7 @@ class PackagingTask(object):
shutil.copyfile(os.path.join(DATADIR, 'changelog.gz'),
os.path.join(dest_pkgdocdir, 'changelog.gz'))
+ self.__check_component(package)
self.fill_docs(package, destdir, pkgdocdir)
for wanted in (package.install_files | package.optional_files):
@@ -2013,10 +2019,10 @@ class PackagingTask(object):
destdir = os.path.join(per_package_dir, 'DESTDIR')
self.fill_dest_dir(package, destdir)
- self.__check_component(package)
pkg = self.packaging.build_package(per_package_dir, self.game,
package, destination, compress=compress,
- md5sums=self.package_md5sums.get(package.name))
+ md5sums=self.package_md5sums.get(package.name),
+ component=self.package_components[package.name])
assert pkg is not None
packages.add(pkg)
@@ -2133,8 +2139,7 @@ class PackagingTask(object):
def __check_component(self, package):
# redistributable packages are redistributable as long as their
# optional license file is present
- # FIXME: only do this for .deb?
- # FIXME: shouldn't modify package.component in-place
+ self.package_components[package.name] = package.component
if package.component == 'local':
return
for f in package.optional_files:
@@ -2142,7 +2147,7 @@ class PackagingTask(object):
continue
if self.file_status[f.name] is not FillResult.COMPLETE:
- package.component = 'local'
+ self.package_components[package.name] = 'local'
return
return
diff --git a/game_data_packager/packaging/__init__.py b/game_data_packager/packaging/__init__.py
index 4fd8325..6f5fa15 100644
--- a/game_data_packager/packaging/__init__.py
+++ b/game_data_packager/packaging/__init__.py
@@ -218,8 +218,10 @@ class PackagingSystem(metaclass=ABCMeta):
def merge_relations(self, package, rel):
return set(self.format_relations(package.relations[rel]))
- def generate_description(self, game, package):
+ def generate_description(self, game, package, component=None):
longname = package.longname or game.longname
+ if component is None:
+ component = package.component
if package.short_description is not None:
short_desc = package.short_description
@@ -234,10 +236,10 @@ class PackagingSystem(metaclass=ABCMeta):
return (short_desc, long_desc)
long_desc = 'This package was built using game-data-packager.\n'
- if package.component == 'local':
+ if component == 'local':
long_desc += 'It contains proprietary game data and must not be redistributed.\n'
long_desc += '.\n'
- elif package.component == 'non-free':
+ elif component == 'non-free':
long_desc += 'It contains proprietary game data that may be redistributed\n'
long_desc += 'only under some conditions.\n'
long_desc += '.\n'
@@ -304,7 +306,7 @@ class PackagingSystem(metaclass=ABCMeta):
@abstractmethod
def build_package(self, per_package_dir, game, package,
- destination, compress=True, md5sums=None):
+ destination, compress=True, md5sums=None, component=None):
"""Build the .deb or equivalent in destination, and return its
filename.
diff --git a/game_data_packager/packaging/arch.py b/game_data_packager/packaging/arch.py
index c8d92a1..c7e8364 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, md5sums=None):
+ compress=True, md5sums=None, component=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 b2e5673..a7512ae 100644
--- a/game_data_packager/packaging/deb.py
+++ b/game_data_packager/packaging/deb.py
@@ -217,7 +217,7 @@ class DebPackaging(PackagingSystem):
return self.rename_package(pr.package)
- def __generate_control(self, game, package, destdir):
+ def __generate_control(self, game, package, destdir, component):
if Deb822 is None:
raise FileNotFoundError('Cannot generate .deb packages without '
'python3-debian')
@@ -256,10 +256,10 @@ class DebPackaging(PackagingSystem):
installed_size += 1
control['Installed-Size'] = str(installed_size)
- if package.component == 'main':
+ if component == 'main':
control['Section'] = package.section
else:
- control['Section'] = package.component + '/' + package.section
+ control['Section'] = component + '/' + package.section
if package.architecture == 'all':
control['Architecture'] = 'all'
@@ -347,8 +347,12 @@ class DebPackaging(PackagingSystem):
return control
- def __fill_dest_dir_deb(self, game, package, destdir, md5sums=None):
- if package.component == 'local':
+ def __fill_dest_dir_deb(self, game, package, destdir, md5sums=None,
+ component=None):
+ if component is None:
+ component = package.component
+
+ if component == 'local':
self.override_lintian(destdir, package.name,
'unknown-section', 'local/%s' % package.section)
@@ -380,15 +384,16 @@ class DebPackaging(PackagingSystem):
os.chmod(md5sums_path, 0o644)
control = os.path.join(destdir, 'DEBIAN/control')
- self.__generate_control(game, package, destdir).dump(
+ self.__generate_control(game, package, destdir, component).dump(
fd=open(control, 'wb'), encoding='utf-8')
os.chmod(control, 0o644)
def build_package(self, per_package_dir, game, package, destination,
- compress=True, md5sums=None):
+ compress=True, md5sums=None, component=None):
destdir = os.path.join(per_package_dir, 'DESTDIR')
arch = self.get_effective_architecture(package)
- self.__fill_dest_dir_deb(game, package, destdir, md5sums)
+ self.__fill_dest_dir_deb(game, package, destdir, md5sums,
+ component)
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 f7d84a4..de2d2c7 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, md5sums=None):
+ compress=True, md5sums=None, component=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