[game-data-packager] 04/09: make_template: make better use of groups
Simon McVittie
smcv at debian.org
Thu Dec 24 16:28:21 UTC 2015
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 59f625ab23d2e4fb19978bdfbc7d21fb0466b663
Author: Simon McVittie <smcv at debian.org>
Date: Mon Dec 21 13:26:12 2015 +0000
make_template: make better use of groups
Each file found is now placed in one of several groups:
"probably required", "probably optional", "probably documentation",
"probably licenses", "probably unwanted" and "archives".
As a step towards sharing code between make-template and
the rest of g-d-p, we use the same WantedFile objects for groups
as we do in the main g-d-p codebase.
---
game_data_packager/make_template.py | 158 ++++++++++++++++++++----------------
1 file changed, 87 insertions(+), 71 deletions(-)
diff --git a/game_data_packager/make_template.py b/game_data_packager/make_template.py
index bd21d74..3178f05 100644
--- a/game_data_packager/make_template.py
+++ b/game_data_packager/make_template.py
@@ -35,7 +35,7 @@ except ImportError:
from distutils.version import LooseVersion as Version
ON_DEBIAN = False
-from . import HashedFile
+from . import (HashedFile, WantedFile)
from .gog import GOG
from .steam import parse_acf
from .util import (
@@ -143,12 +143,19 @@ class GameData(object):
self.gog = dict()
self.data = dict()
- # global list of files across packages
- self.install = set()
- self.optional = set()
- self.doc = set()
- self.license = set()
- self.loose_file = set()
+
+ self.required = WantedFile('probably required')
+ self.required.group_members = set()
+ self.optional = WantedFile('probably optional')
+ self.optional.group_members = set()
+ self.documentation = WantedFile('probably documentation')
+ self.documentation.group_members = set()
+ self.licenses = WantedFile('probably licenses')
+ self.licenses.group_members = set()
+ self.unwanted = WantedFile('probably unwanted')
+ self.unwanted.group_members = set()
+ self.archives = WantedFile('archives')
+ self.archives.group_members = set()
self.file_data = {}
self.size = {}
@@ -163,21 +170,20 @@ class GameData(object):
return True
return False
- def add_one_file(self, name, lower, is_content=True):
+ def add_one_file(self, name, lower, group=None):
out_name = os.path.basename(name)
if lower:
out_name = out_name.lower()
- if not is_content:
- pass
+ if group is not None:
+ group.group_members.add(out_name)
elif is_license(name):
out_name = os.path.basename(out_name)
- self.loose_file.add(out_name)
+ self.licenses.group_members.add(out_name)
elif is_doc(name):
- self.loose_file.add(out_name)
- self.file_data[out_name] = dict(install_to='$docdir')
+ self.documentation.group_members.add(out_name)
else:
- self.loose_file.add(out_name)
+ self.required.group_members.add(out_name)
hf = HashedFile.from_file(name, open(name, 'rb'))
self.size[out_name] = size = os.path.getsize(name)
@@ -219,10 +225,10 @@ class GameData(object):
self.package['lang'] = lang
self.package['provides'] = virtual
- self.package['install'] = []
- self.package['optional'] = []
- self.package['doc'] = []
- self.package['license'] = []
+ self.package['install'] = [self.required.name]
+ self.package['optional'] = [self.optional.name]
+ self.package['doc'] = [self.documentation.name]
+ self.package['license'] = [self.licenses.name]
if steam > 0:
self.package['steam'] = steam_dict
@@ -244,17 +250,21 @@ class GameData(object):
if os.path.isdir(path):
continue
- elif is_dosbox(path):
- has_dosbox = True
- elif os.path.splitext(fn.lower())[1] in ('.exe', '.exe$0', '.ovl',
- '.dll', '.dll$0', '.bat', '.386'):
- logger.warning('ignoring dos/windows binary %s' % fn)
- elif out_name.startswith('goggame-') or out_name in ('webcache.zip',
- 'gog.ico', 'gfw_high.ico'):
- logger.warning('ignoring GOG stuff %s' % fn)
elif os.path.islink(path):
self.package.setdefault('symlinks', {})[name] = os.path.realpath(path).lstrip('/')
elif os.path.isfile(path):
+ ignorable = False
+
+ if is_dosbox(path):
+ has_dosbox = True
+ ignorable = True
+ elif os.path.splitext(fn.lower())[1] in ('.exe', '.exe$0', '.ovl',
+ '.dll', '.dll$0', '.bat', '.386'):
+ ignorable = True
+ elif out_name.startswith('goggame-') or out_name in ('webcache.zip',
+ 'gog.ico', 'gfw_high.ico'):
+ ignorable = True
+
size = os.path.getsize(path)
hf = HashedFile.from_file(name, open(path, 'rb'))
# avoid that look_for: overlaps in cases where
@@ -279,20 +289,18 @@ class GameData(object):
else:
out_name += ('?' + hf.md5[1:6])
- if is_license(fn):
+ if ignorable:
+ self.unwanted.group_members.add(out_name)
+ elif is_license(fn):
out_name = os.path.basename(out_name)
- self.license.add(out_name)
- self.package['license'].append(out_name)
+ self.licenses.group_members.add(out_name)
elif is_doc(path):
- self.doc.add(out_name)
- self.package['doc'].append(out_name)
+ self.documentation.group_members.add(out_name)
# most of the times these files are not needed
elif fn.lower().split('.')[-1] in ('cfg', 'cmd', 'com', 'drv', 'ico', 'ini'):
- self.optional.add(out_name)
- self.package['optional'].append(out_name)
+ self.optional.group_members.add(out_name)
else:
- self.install.add(out_name)
- self.package['install'].append(out_name)
+ self.required.group_members.add(out_name)
self.size[out_name] = size
self.md5[out_name] = hf.md5
@@ -322,7 +330,7 @@ class GameData(object):
del self.package['license']
def add_one_zip(self,archive):
- self.add_one_file(archive, lower=False, is_content=False)
+ self.add_one_file(archive, lower=False, group=self.archives)
# TODO
return
@@ -366,7 +374,7 @@ class GameData(object):
self.add_one_dir(os.path.join(tmp, 'app'), True, game=game, lang=guess_lang(exe))
os.system('rm -r ' + tmp)
- self.add_one_file(exe, lower=False, is_content=False)
+ self.add_one_file(exe, lower=False, group=self.archives)
self.file_data[os.path.basename(exe)] = dict(unpack=dict(format='innoextract'),provides=['file1','file2'])
def add_one_deb(self,deb,lower):
@@ -410,9 +418,12 @@ class GameData(object):
self.data = dict(packages={ control['package']: {} })
self.package = self.data['packages'][control['package']]
- self.package['install'] = []
- self.package['optional'] = []
- self.package['license'] = []
+
+ self.package['install'] = [self.required.name]
+ self.package['optional'] = [self.optional.name]
+ self.package['doc'] = [self.documentation.name]
+ self.package['license'] = [self.licenses.name]
+
if version:
self.package['version'] = version
@@ -463,21 +474,16 @@ class GameData(object):
basename_l = os.path.basename(name_l)
if os.path.splitext(name_l)[1] in ('.exe', '.bat'):
- logger.warning('ignoring dos/windows binary %s' % name)
- continue
+ self.unwanted.group_members.add(name_l)
elif 'support/gog' in name_l or os.path.basename(name_l) in (
'start.sh', 'uninstall.sh'):
- logger.warning('ignoring GOG stuff %s' % name)
- continue
+ self.unwanted.group_members.add(name_l)
elif name.startswith('opt/') and is_license(name):
name = basename_l
- self.license.add(name)
- self.package['license'].append(name)
+ self.licenses.group_members.add(name)
elif name.startswith('opt/') and is_doc(name):
name = basename_l
- self.optional.add(name)
- self.package['optional'].append(name)
- self.file_data[name] = dict(install_to='$docdir')
+ self.documentation.group_members.add(name)
elif (install_to is not None and
name.startswith(install_to + '/')):
name = name[len(install_to) + 1:]
@@ -485,10 +491,9 @@ class GameData(object):
name = name.lower()
if self.gog and name.startswith('data/'):
name = name[len('data/'):]
- self.install.add(name)
- self.package['install'].append(name)
+ self.required.group_members.add(name)
else:
- self.optional.add(name)
+ self.optional.group_members.add(name)
self.file_data[name] = dict(install_to='.')
self.size[name] = entry.size
@@ -540,35 +545,46 @@ class GameData(object):
print('')
yaml.safe_dump(self.data, stream=sys.stdout, default_flow_style=False)
- if self.loose_file:
- print(' XXX:')
- for file in sorted(self.loose_file):
- print(' - %s' % file)
-
if self.file_data:
yaml.safe_dump({ 'files': self.file_data }, stream=sys.stdout,
default_flow_style=False)
- print_order = sorted(self.install | self.optional) + sorted(self.doc) + sorted(self.license)
- print_order += sorted(set(self.size.keys()) - set(print_order))
-
print('\ngroups:')
- print(' FIXME:')
- print(' group_members: |')
- for filename in print_order:
- print(' %-9s %s %s' % (self.size[filename], self.md5[filename], filename))
+ for group in (self.required, self.optional, self.documentation,
+ self.licenses, self.archives, self.unwanted):
+ if not group.group_members:
+ # skip empty group
+ continue
+
+ print(' %s:' % group.name)
+
+ if group == self.documentation:
+ print(' doc: True')
+ elif group == self.licenses:
+ print(' license: True')
+
+ print(' group_members: |')
+ for f in sorted(group.group_members):
+ print(' %-9s %s %s' % (self.size[f], self.md5[f], f))
+
print('\nsha1sums: |')
- for filename in print_order:
- if filename in self.sha1:
- print(' %s %s' % (self.sha1[filename], filename))
+
+ for f in sorted(self.sha1.keys()):
+ if f in self.unwanted.group_members:
+ print(' #%s %s' % (self.sha1[f], f))
+ else:
+ print(' %s %s' % (self.sha1[f], f))
print('\nsha256sums: |')
- for filename in print_order:
- if filename in self.sha256:
- print(' %s %s' % (self.sha256[filename], filename))
- print('...')
+ for f in sorted(self.sha256.keys()):
+ if f in self.unwanted.group_members:
+ print(' #%s %s' % (self.sha256[f], f))
+ else:
+ print(' %s %s' % (self.sha256[f], f))
+
+ print('\n...')
def do_one_file(name,lower):
hf = HashedFile.from_file(name, open(name, 'rb'))
--
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