From 88e76e1cd1faa22b0bb469de91921ecb627ad730 Mon Sep 17 00:00:00 2001 From: Pietro Albini Date: Thu, 10 Dec 2020 16:39:52 +0100 Subject: combine: allow choosing the compression formats to output --- src/combiner.rs | 11 +++++++-- src/main.rs | 1 + src/main.yml | 5 ++++ test.sh | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 87 insertions(+), 2 deletions(-) diff --git a/src/combiner.rs b/src/combiner.rs index b25063c..006a40c 100644 --- a/src/combiner.rs +++ b/src/combiner.rs @@ -1,6 +1,9 @@ use super::Scripter; use super::Tarballer; -use crate::{compression::CompressionFormat, util::*}; +use crate::{ + compression::{CompressionFormat, CompressionFormats}, + util::*, +}; use anyhow::{bail, Context, Result}; use std::io::{Read, Write}; use std::path::Path; @@ -35,6 +38,9 @@ actor! { /// The location to put the final image and tarball. output_dir: String = "./dist", + + /// The formats used to compress the tarball + compression_formats: CompressionFormats = CompressionFormats::default(), } } @@ -136,7 +142,8 @@ impl Combiner { tarballer .work_dir(self.work_dir) .input(self.package_name) - .output(path_to_str(&output)?.into()); + .output(path_to_str(&output)?.into()) + .compression_formats(self.compression_formats.clone()); tarballer.run()?; Ok(()) diff --git a/src/main.rs b/src/main.rs index c5d9f23..4e5b50d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -41,6 +41,7 @@ fn combine(matches: &ArgMatches<'_>) -> Result<()> { "non-installed-overlay" => non_installed_overlay, "work-dir" => work_dir, "output-dir" => output_dir, + "compression-formats" => compression_formats, }); combiner.run().context("failed to combine installers")?; diff --git a/src/main.yml b/src/main.yml index afe235c..c9eab6d 100644 --- a/src/main.yml +++ b/src/main.yml @@ -113,6 +113,11 @@ subcommands: long: output-dir takes_value: true value_name: DIR + - compression-formats: + help: Comma-separated list of compression formats to use + long: compression-formats + takes_value: true + value_name: FORMAT - script: about: Generate an installation script args: diff --git a/test.sh b/test.sh index a73ea9d..3c68458 100755 --- a/test.sh +++ b/test.sh @@ -1229,6 +1229,78 @@ generate_compression_formats_error() { } runtest generate_compression_formats_error +combine_compression_formats_one() { + try sh "$S/gen-installer.sh" \ + --image-dir="$TEST_DIR/image1" \ + --work-dir="$WORK_DIR" \ + --output-dir="$OUT_DIR" \ + --package-name=rustc \ + --component-name=rustc + try sh "$S/gen-installer.sh" \ + --image-dir="$TEST_DIR/image3" \ + --work-dir="$WORK_DIR" \ + --output-dir="$OUT_DIR" \ + --package-name=cargo \ + --component-name=cargo + try sh "$S/combine-installers.sh" \ + --work-dir="$WORK_DIR" \ + --output-dir="$OUT_DIR" \ + --package-name=rust \ + --input-tarballs="$OUT_DIR/rustc.tar.gz,$OUT_DIR/cargo.tar.gz" \ + --compression-formats=xz + + try test ! -e "${OUT_DIR}/rust.tar.gz" + try test -e "${OUT_DIR}/rust.tar.xz" +} +runtest combine_compression_formats_one + +combine_compression_formats_multiple() { + try sh "$S/gen-installer.sh" \ + --image-dir="$TEST_DIR/image1" \ + --work-dir="$WORK_DIR" \ + --output-dir="$OUT_DIR" \ + --package-name=rustc \ + --component-name=rustc + try sh "$S/gen-installer.sh" \ + --image-dir="$TEST_DIR/image3" \ + --work-dir="$WORK_DIR" \ + --output-dir="$OUT_DIR" \ + --package-name=cargo \ + --component-name=cargo + try sh "$S/combine-installers.sh" \ + --work-dir="$WORK_DIR" \ + --output-dir="$OUT_DIR" \ + --package-name=rust \ + --input-tarballs="$OUT_DIR/rustc.tar.gz,$OUT_DIR/cargo.tar.gz" \ + --compression-formats=xz,gz + + try test -e "${OUT_DIR}/rust.tar.gz" + try test -e "${OUT_DIR}/rust.tar.xz" +} +runtest combine_compression_formats_multiple + +combine_compression_formats_error() { + try sh "$S/gen-installer.sh" \ + --image-dir="$TEST_DIR/image1" \ + --work-dir="$WORK_DIR" \ + --output-dir="$OUT_DIR" \ + --package-name=rustc \ + --component-name=rustc + try sh "$S/gen-installer.sh" \ + --image-dir="$TEST_DIR/image3" \ + --work-dir="$WORK_DIR" \ + --output-dir="$OUT_DIR" \ + --package-name=cargo \ + --component-name=cargo + expect_fail sh "$S/combine-installers.sh" \ + --work-dir="$WORK_DIR" \ + --output-dir="$OUT_DIR" \ + --package-name=rust \ + --input-tarballs="$OUT_DIR/rustc.tar.gz,$OUT_DIR/cargo.tar.gz" \ + --compression-formats=xz,foobar +} +runtest combine_compression_formats_error + echo echo "TOTAL SUCCESS!" echo -- cgit v1.2.1