From 60b4c5d22dcce0cfaa0a85a23149f2d84bd6baa6 Mon Sep 17 00:00:00 2001 From: Ryan Brue Date: Sep 27 2024 03:20:18 +0000 Subject: small updates to the helper program Signed-off-by: Ryan Brue --- diff --git a/docs/src/generating-license.md b/docs/src/generating-license.md index 0448b1d..22cffcf 100644 --- a/docs/src/generating-license.md +++ b/docs/src/generating-license.md @@ -2,7 +2,9 @@ ## Using the license_generator program -```cargo run -- ``` +```cargo run -- license-for-spec ``` +```cargo run -- license-gpl ``` +```cargo run -- license-summary ``` You will get an output in `/cosmic_licenses.txt` diff --git a/helper_programs/license_generator/src/main.rs b/helper_programs/license_generator/src/main.rs index d441d8a..a9d6ee5 100644 --- a/helper_programs/license_generator/src/main.rs +++ b/helper_programs/license_generator/src/main.rs @@ -1,11 +1,13 @@ use std::{env, fs, path::PathBuf, process::Command}; -use clap::Parser; +use clap::{Parser, ValueEnum}; #[derive(Parser)] #[command(version, about)] /// Generate licenses for cosmic packages struct Cli { + #[arg(value_enum)] + out_type: OutType, /// Working directory workdir: PathBuf, /// Clean working directory @@ -13,6 +15,13 @@ struct Cli { clean: bool, } +#[derive(ValueEnum, Clone, Debug)] +enum OutType { + LicenseForSpec, + LicenseGPL, + LicenseSummary, +} + const PACKAGES: [&str; 22] = [ "cosmic-applibrary", "cosmic-applets", @@ -50,23 +59,30 @@ fn main() -> anyhow::Result<()> { let res = || -> anyhow::Result<()> { for package in PACKAGES { println!("Package: {}", package); - let _ = Command::new("git") - .current_dir(&base_working_dir) - .arg("clone") - .arg(format!("https://github.com/pop-os/{}.git", package)) - .status()?; + if !&base_working_dir.join(package).exists() { + let _ = Command::new("git") + .current_dir(&base_working_dir) + .arg("clone") + .arg(format!("https://github.com/pop-os/{}.git", package)) + .status()?; + } let output = Command::new("sh") - .current_dir(base_working_dir.join(package)) - .arg("-c") - .arg( - r##"cargo tree --workspace --edges no-build,no-dev,no-proc-macro --no-dedupe --target all --prefix none --format "{l}" | sort | uniq | sed '/OR/ s/.*/(&)/' | awk '{printf("%s AND ", $0)} END {print ""}' | sed 's/AND$//'"## - ).output()?; + .current_dir(base_working_dir.join(package)) + .arg("-c") + .arg( + match args.out_type { + OutType::LicenseForSpec => r##"cargo tree --workspace --edges no-build,no-dev,no-proc-macro --no-dedupe --target all --prefix none --format "{l}" | sort | uniq | sed '/OR/ s/.*/(&)/' | awk '{printf("%s AND ", $0)} END {print ""}' | sed 's/AND$//'"##, + OutType::LicenseGPL => r##"cargo tree --workspace --edges no-build,no-dev,no-proc-macro --no-dedupe --target all --prefix none --format "{p}: {l}" | grep "GPL-3.0$""##, + OutType::LicenseSummary => r##"cargo tree --workspace --edges no-build,no-dev,no-proc-macro --no-dedupe --target all --prefix none --format "{l}""##, + } + + ).output()?; - let (stdout, stderr) = ( + let (stdout, _stderr) = ( String::from_utf8(output.stdout).unwrap(), String::from_utf8(output.stderr).unwrap(), ); - println!("stdout: {} stderr: {}\n", &stdout, &stderr); + // println!("stdout: {} stderr: {}\n", &stdout, &stderr); result_string.push_str(&format!("{}\n{}\n\n", package, &stdout)); } Ok(())