diff --git a/debian/changelog b/debian/changelog index b84a17fb..7a3f41e4 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +livecd-rootfs (2.545) disco; urgency=medium + + [ Cody Shepherd ] + * Fix snap-seed-parse to take filename argument instead of printing to + stdout + livecd-rootfs (2.544) disco; urgency=medium [ Steve Langasek ] diff --git a/live-build/auto/build b/live-build/auto/build index 0bead613..c875d66e 100755 --- a/live-build/auto/build +++ b/live-build/auto/build @@ -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 diff --git a/live-build/functions b/live-build/functions index f12a364b..84c35702 100644 --- a/live-build/functions +++ b/live-build/functions @@ -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" } diff --git a/live-build/snap-seed-parse.py b/live-build/snap-seed-parse.py index c441dc5a..d9314170 100755 --- a/live-build/snap-seed-parse.py +++ b/live-build/snap-seed-parse.py @@ -1,26 +1,35 @@ #!/usr/bin/python3 """ -Usage: snap-seed-parse ${chroot_dir} > somefile.manifest +Usage: snap-seed-parse [${chroot_dir}] 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 argparse +import os.path import re -import sys import yaml -import os.path 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.')