Fix snap-seed-parse to take filename argument instead of printing to

stdout
This commit is contained in:
Dimitri John Ledkov 2018-11-09 22:21:46 +00:00
commit 0c2e3c1342
4 changed files with 38 additions and 21 deletions

5
debian/changelog vendored
View File

@ -1,8 +1,13 @@
livecd-rootfs (2.545) UNRELEASED; urgency=medium
[ Dimitri John Ledkov ]
* Do not mount result, on top of lowerdir, appears to fail in
disco. Should unblock building server-live images in disco.
[ Cody Shepherd ]
* Fix snap-seed-parse to take filename argument instead of printing to
stdout
-- Dimitri John Ledkov <xnox@ubuntu.com> Fri, 09 Nov 2018 22:13:49 +0000
livecd-rootfs (2.544) disco; urgency=medium

View File

@ -552,7 +552,7 @@ fi
# '--initramfs none' produces different manifest names.
# NB! we want stdout appended to the manifest, yet stderr to be printed on stdout
if [ -e "binary/$INITFS/filesystem.packages" ]; then
./config/snap-seed-parse "chroot/" 2>&1 >> "binary/${INITFS}/filesystem.packages"
./config/snap-seed-parse "chroot/" "binary/${INITFS}/filesystem.packages"
ln "binary/$INITFS/filesystem.packages" "$PREFIX.manifest"
chmod 644 "$PREFIX.manifest"
fi

View File

@ -50,7 +50,7 @@ create_manifest() {
echo "create_manifest chroot_root: ${chroot_root}"
dpkg-query --show --admindir="${chroot_root}/var/lib/dpkg" > ${target_file}
echo "create_manifest call to dpkg-query finished."
./config/snap-seed-parse "${chroot_root}" 2>&1 >> ${target_file}
./config/snap-seed-parse "${chroot_root}" "${target_file}"
echo "create_manifest call to snap_seed_parse finished."
echo "create_manifest finished"
}

View File

@ -1,26 +1,35 @@
#!/usr/bin/python3
"""
Usage: snap-seed-parse ${chroot_dir} > somefile.manifest
Usage: snap-seed-parse [${chroot_dir}] <output file>
This script looks for a seed.yaml path in the given root directory, parsing
it and printing generated manifest lines to stdout for easy redirection.
it and appending the parsed lines to the given output file.
The $chroot_dir argument is optional and will default to the empty string.
"""
import re
import sys
import yaml
import argparse
import os.path
import re
import yaml
def log(msg):
sys.stderr.write("snap-seed-parse: {}\n".format(msg))
print("snap-seed-parse: {}\n".format(msg))
log("Parsing seed.yaml")
CHROOT_ROOT = sys.argv[1] if len(sys.argv) > 1 and len(sys.argv[1]) > 0 \
else ''
parser = argparse.ArgumentParser()
parser.add_argument('chroot', nargs='?', default='',
help='root dir for the chroot from which to generate the '
'manifest')
parser.add_argument('file', help='Output manifest to this file')
ARGS = parser.parse_args()
CHROOT_ROOT = ARGS.chroot
FNAME = ARGS.file
# Trim any trailing slashes for correct appending
log("CHROOT_ROOT: {}".format(CHROOT_ROOT))
@ -43,14 +52,17 @@ else:
with open(YAML_PATH, 'r') as fh:
yaml_lines = yaml.safe_load(fh)['snaps']
# Loop over dict items, outputting one manifest line from each triplet
for item in yaml_lines:
filestring = item['file']
# Pull the revision number off the file name
revision = filestring[filestring.rindex('_')+1:]
revision = re.sub(r'[^0-9]', '', revision)
print("{}{}\t{}\t{}".format(LINE_PREFIX,
item['name'],
item['channel'],
revision,
))
log('Writing manifest to {}'.format(FNAME))
with open(FNAME, 'a+') as fh:
for item in yaml_lines:
filestring = item['file']
# Pull the revision number off the file name
revision = filestring[filestring.rindex('_')+1:]
revision = re.sub(r'[^0-9]', '', revision)
fh.write("{}{}\t{}\t{}\n".format(LINE_PREFIX,
item['name'],
item['channel'],
revision,
))
log('Manifest output finished.')