[game-data-packager] 01/05: Convert lgeneral to Python/YAML style

Simon McVittie smcv at debian.org
Sat Jan 17 18:15:37 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 cac6d722e8059601bf5974f346a028d70b245847
Author: Simon McVittie <smcv at debian.org>
Date:   Sat Jan 17 17:22:09 2015 +0000

    Convert lgeneral to Python/YAML style
---
 .../lgeneral-data-nonfree.control.in               |   0
 .../lgeneral-data-nonfree.copyright                |   2 +-
 data/lgeneral.yaml                                 |  33 +++++++
 etc/lgeneral-mirrors                               |   1 +
 lib/game_data_packager/__init__.py                 |   2 +-
 lib/game_data_packager/games/lgeneral.py           |  72 ++++++++++++++
 lib/lgeneral-mirrors                               |   1 -
 supported/lgeneral                                 | 103 +--------------------
 8 files changed, 109 insertions(+), 105 deletions(-)

diff --git a/lgeneral-data-nonfree/DEBIAN/control b/data/lgeneral-data-nonfree.control.in
similarity index 100%
rename from lgeneral-data-nonfree/DEBIAN/control
rename to data/lgeneral-data-nonfree.control.in
diff --git a/lgeneral-data-nonfree/copyright.in b/data/lgeneral-data-nonfree.copyright
similarity index 92%
rename from lgeneral-data-nonfree/copyright.in
rename to data/lgeneral-data-nonfree.copyright
index 6301d19..69a6eb8 100644
--- a/lgeneral-data-nonfree/copyright.in
+++ b/data/lgeneral-data-nonfree.copyright
@@ -1,4 +1,4 @@
-The PACKAGE package was generated using game-data-packager.
+The lgeneral-data-nonfree package was generated using game-data-packager.
 Copyright © 2008-2013 Jonathan Dowland <jmtd at debian.org>.
 
 The files under "/usr/share/games/lgeneral" are user-supplied
diff --git a/data/lgeneral.yaml b/data/lgeneral.yaml
new file mode 100644
index 0000000..92ff7e7
--- /dev/null
+++ b/data/lgeneral.yaml
@@ -0,0 +1,33 @@
+%YAML 1.2
+---
+shortname: lgeneral
+longname: LGeneral
+
+help_text: |
+  Data from Panzer General can be downloaded automatically.
+  You can skip the download by providing pg-data.tar.gz.
+
+packages:
+  lgeneral-data-nonfree:
+    longname: Panzer General data for LGeneral
+    type: full
+    install_to: usr/share/games/lgeneral
+    # pg-data.tar.gz is not actually needed, but it's small, and putting it
+    # in the .deb means we can easily repack it if lgc-pg changes
+    #
+    # The actual game files are converted by lgc-pg, in Python code.
+    install:
+    - pg-data.tar.gz
+
+files:
+  pg-data.tar.gz:
+    size: 410476
+    md5: 40c4be23f60d1dc732aabe13b58fc5e3
+    sha1: 2f7a63f0a8efc3215e5e61ec6b513b7d8ee3c32b
+    sha256: cc6fa5d263d1d5824d706517958b1bb09b405ba0ed21e63e4a4d38e2727d7a04
+    download:
+      lgeneral-mirrors:
+        path: .
+
+...
+# vim:set sw=2 sts=2 et:
diff --git a/etc/lgeneral-mirrors b/etc/lgeneral-mirrors
new file mode 100644
index 0000000..2920430
--- /dev/null
+++ b/etc/lgeneral-mirrors
@@ -0,0 +1 @@
+http://sourceforge.net/projects/lgeneral/files/lgeneral-data
diff --git a/lib/game_data_packager/__init__.py b/lib/game_data_packager/__init__.py
index a0c5875..f3d0e15 100644
--- a/lib/game_data_packager/__init__.py
+++ b/lib/game_data_packager/__init__.py
@@ -1543,7 +1543,7 @@ class GameData(object):
                     build_demos=args.demo)
         except NoPackagesPossible:
             logger.error('Unable to complete any packages.')
-            if self.unpack_failed and self.missing_tools:
+            if self.missing_tools:
                 # we already logged warnings about the files as they came up
                 self.log_missing_tools()
                 raise SystemExit(1)
diff --git a/lib/game_data_packager/games/lgeneral.py b/lib/game_data_packager/games/lgeneral.py
new file mode 100644
index 0000000..d51f962
--- /dev/null
+++ b/lib/game_data_packager/games/lgeneral.py
@@ -0,0 +1,72 @@
+#!/usr/bin/python3
+# vim:set fenc=utf-8:
+#
+# Copyright © 2015 Simon McVittie <smcv at debian.org>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License version 2
+# as published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#
+# You can find the GPL license text on a Debian system under
+# /usr/share/common-licenses/GPL-2.
+
+import logging
+import os
+import shutil
+import subprocess
+
+from .. import (GameData, NoPackagesPossible)
+from ..util import (mkdir_p, which)
+
+logger = logging.getLogger('game-data-packager.games.lgeneral')
+
+class LGeneralGameData(GameData):
+    def add_parser(self, parsers, base_parser):
+        parser = super(LGeneralGameData, self).add_parser(parsers, base_parser)
+        parser.add_argument('-f', action='append', dest='paths',
+                metavar='pg-data.tar.gz', help='Path to pg-data.tar.gz')
+        parser.add_argument('-w', dest='download', action='store_true',
+                help='Download pg-data.tar.gz (done automatically ' +
+                    'if necessary)')
+        return parser
+
+    def prepare_packages(self, packages, build_demos=False):
+        # don't bother even trying if it isn't going to work
+        if which('lgc-pg') is None:
+            logger.error('The "lgc-pg" tool is required for this package.')
+            raise NoPackagesPossible()
+
+        ready = super(LGeneralGameData, self).prepare_packages(packages,
+                build_demos=build_demos)
+
+        # would have raised an exception if not
+        assert self.packages['lgeneral-data-nonfree'] in ready
+        return ready
+
+    def fill_dest_dir(self, package, destdir):
+        assert package.name == 'lgeneral-data-nonfree'
+        if not super(LGeneralGameData, self).fill_dest_dir(package, destdir):
+            return False
+
+        installdir = os.path.join(destdir, 'usr/share/games/lgeneral')
+        unpackdir = os.path.join(self.get_workdir(), 'tmp', 'pg-data.tar.gz.d')
+
+        for d in ('gfx/flags', 'gfx/terrain', 'gfx/units', 'maps/pg',
+                'nations', 'scenarios/pg', 'sounds/pg', 'units'):
+            mkdir_p(os.path.join(installdir, d))
+
+        shutil.unpack_archive(
+                os.path.join(installdir, 'pg-data.tar.gz'),
+                unpackdir,
+                'gztar')
+
+        subprocess.check_call(['lgc-pg', '-s', unpackdir + '/pg-data/',
+            '-d', installdir + '/'])
+
+        return True
+
+GAME_DATA_SUBCLASS = LGeneralGameData
diff --git a/lib/lgeneral-mirrors b/lib/lgeneral-mirrors
deleted file mode 100644
index da94ab7..0000000
--- a/lib/lgeneral-mirrors
+++ /dev/null
@@ -1 +0,0 @@
-http://sourceforge.net/projects/lgeneral/files/lgeneral-data/pg-data.tar.gz
diff --git a/supported/lgeneral b/supported/lgeneral
index 3946fae..9619639 100644
--- a/supported/lgeneral
+++ b/supported/lgeneral
@@ -3,105 +3,4 @@
 SHORTNAME=lgeneral
 LONGNAME="LGeneral"
 
-TGZSUM=40c4be23f60d1dc732aabe13b58fc5e3
-
-lgeneral_usage() {
-    echo "game-data-packager ${SHORTNAME} arguments:"
-    printf "\tgame-data-packager ${SHORTNAME} [ -f path ] | [ -w ]
-\t\t-f file\t\tpath to your tar.gz compressed Panzer General DAT directory\n\
-\t\t-w\t\tfetch compressed pg-data.tar.gz from the web\n"
-}
-
-verify_args() {
-    case $# in
-        0)
-            lgeneral_usage
-            exit 0
-            ;;
-        1)
-            if [ "$1" != "-w" ]; then
-                usage >&2
-                lgeneral_usage >&2
-                exit 1
-            fi
-            downloadtgz
-            ;;
-        2)
-            if [ "$1" != "-f" ]; then
-                usage >&2
-                lgeneral_usage >&2
-                exit 1
-            fi
-            downloaded=false
-            lgeneraltgz="$2"
-            ;;
-        *)
-            usage >&2
-            lgeneral_usage >&2
-            exit 1
-            ;;
-    esac
-}
-
-lgeneralmirrors=$LIBDIR/lgeneral-mirrors
-
-downloadtgz() {
-    dest="$WORKDIR/pg-data.tar.gz"
-    mirror=$(grep -v ^# "$lgeneralmirrors" | sort -R | head -n1)
-    for try in $mirror; do
-        if wget --progress=dot --directory-prefix "$WORKDIR" -c "$try"
-        then
-            lgeneraltgz="$dest"
-            downloaded=true
-            return
-        fi
-    done
-    die "error: could not find pg-data.tar.gz at our chosen mirror"
-}
-
-DEBBASE="lgeneral-data-nonfree_${GAME_PACKAGE_VERSION}_all.deb"
-DEB="$DATADIR/$DEBBASE"
-
-go() {
-    verify_args "$@"
-    require_program lgc-pg lgc-pg
-
-    TGZFILE=`unravel "$lgeneraltgz"`
-
-    verify_file "$TGZFILE"
-
-    verify_md5sum_alternatives "$TGZFILE" "$TGZSUM" \
-        "warning: checksum is not what we expected"
-
-    OUTFILE=`unravel "$OUTDIR"`"/$DEBBASE"
-    cp -p "$DEB" "$OUTFILE"
-    oldpwd=`pwd`
-    cd "$WORKDIR"
-
-    # create directory structure required by lgc-pg
-    mkdir -p lgeneral/gfx/flags \
-             lgeneral/gfx/terrain \
-             lgeneral/gfx/units \
-             lgeneral/maps/pg \
-             lgeneral/nations \
-             lgeneral/scenarios/pg \
-             lgeneral/sounds/pg \
-             lgeneral/units
-
-    # extract pg-data and convert to lgeneral's native file format
-    tar xfz "$TGZFILE" pg-data
-    lgc-pg -s pg-data/ -d lgeneral/
-    
-    slipstream_dir "$OUTFILE" "usr/share/games/" "lgeneral/"
-
-    if [ "$downloaded" = "true" ]; then
-        rm "$TGZFILE"
-        rm -rf pg-data/
-        rm -rf lgeneral/
-    elif [ "$downloaded" = "false" ]; then
-        rm -rf pg-data/
-        rm -rf lgeneral/
-    fi
-
-    cd "$oldpwd"
-}
+. $LIBDIR/via-python

-- 
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