[game-data-packager] 16/17: Add support for including symlinks in a .deb, and use it for rott-data
Simon McVittie
smcv at debian.org
Fri Jan 2 21:11:57 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 ed3e15ed9b9ea04d196af7d99699c9d18886218d
Author: Simon McVittie <smcv at debian.org>
Date: Fri Jan 2 20:26:03 2015 +0000
Add support for including symlinks in a .deb, and use it for rott-data
VENDOR.DOC is installed to both /usr/share/doc/rott-data and
/usr/share/games/rott by g-d-p 37. Presumably that's actually
necessary. It is valid for the doc copy to be a symlink to the other.
---
data/rott-data.yaml | 8 +++++---
lib/game_data_packager/__init__.py | 32 ++++++++++++++++++++++++++++++++
2 files changed, 37 insertions(+), 3 deletions(-)
diff --git a/data/rott-data.yaml b/data/rott-data.yaml
index 080c20f..ae6da72 100644
--- a/data/rott-data.yaml
+++ b/data/rott-data.yaml
@@ -14,10 +14,12 @@ install_files_from_cksums: |
3228256652 110484 REMOTE1.RTS
4153237746 7752 VENDOR.DOC
-files:
- VENDOR.DOC:
- install_to: usr/share/doc/rott-data
+# format: {'symlink': 'real file'}
+symlinks:
+ usr/share/doc/rott-data/VENDOR.DOC:
+ usr/share/games/rott/VENDOR.DOC
+files:
1rott13.zip:
size: 3668139
download:
diff --git a/lib/game_data_packager/__init__.py b/lib/game_data_packager/__init__.py
index 8f62b33..7fc0f96 100644
--- a/lib/game_data_packager/__init__.py
+++ b/lib/game_data_packager/__init__.py
@@ -270,9 +270,17 @@ class GameDataPackage(object):
if 'install_to' in self.yaml:
self.install_to = self.yaml['install_to']
+ # symlink => real file (the opposite way round that debhelper does it,
+ # because the links must be unique but the real files are not
+ # necessarily)
+ self.symlinks = {}
+
self._populate_files(self.yaml.get('files'))
self._populate_files(self.yaml.get('install_files'), install=True)
+ if 'symlinks' in self.yaml:
+ self.symlinks = self.yaml['symlinks']
+
if 'install_files_from_cksums' in self.yaml:
for line in self.yaml['install_files_from_cksums'].splitlines():
stripped = line.strip()
@@ -882,6 +890,30 @@ class GameDataPackage(object):
subprocess.check_call(['cp', '--reflink=auto', copy_from,
copy_to])
+ for symlink, real_file in self.symlinks.items():
+ symlink = symlink.lstrip('/')
+ real_file = real_file.lstrip('/')
+
+ toplevel, rest = symlink.split('/', 1)
+ if real_file.startswith(toplevel + '/'):
+ symlink_dirs = symlink.split('/')
+ real_file_dirs = real_file.split('/')
+
+ while (len(symlink_dirs) > 0 and len(real_file_dirs) > 0 and
+ symlink_dirs[0] == real_file_dirs[0]):
+ symlink_dirs.pop(0)
+ real_file_dirs.pop(0)
+
+ if len(symlink_dirs) == 0:
+ raise ValueError('Cannot create a symlink to itself')
+
+ target = ('../' * (len(symlink_dirs) - 1)) + '/'.join(real_file_dirs)
+ else:
+ target = '/' + real_file
+
+ mkdir_p(os.path.dirname(os.path.join(destdir, symlink)))
+ os.symlink(target, os.path.join(destdir, symlink))
+
# FIXME: eventually we should build the .deb in Python, but for now
# we let the shell script do it
--
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