45 lines · 1.2 KB · Rust
RawDownload
use std::path::{Path, PathBuf}; use anyhow::{Context as _, Result};use clap::Parser; use crate::workspace::load_workspace; #[derive(Parser)]pub struct LicensesArgs {} pub fn run_licenses(_args: LicensesArgs) -> Result<()> {    const LICENSE_FILES: &[&str] = &["LICENSE-APACHE", "LICENSE-GPL"];     let workspace = load_workspace()?;     for package in workspace.workspace_packages() {        let crate_dir = package            .manifest_path            .parent()            .with_context(|| format!("no crate directory for {}", package.name))?;         if let Some(license_file) = first_license_file(crate_dir, LICENSE_FILES) {            if !license_file.is_symlink() {                println!("{} is not a symlink", license_file.display());            }             continue;        }         println!("Missing license: {}", package.name);    }     Ok(())} fn first_license_file(path: impl AsRef<Path>, license_files: &[&str]) -> Option<PathBuf> {    for license_file in license_files {        let path_to_license = path.as_ref().join(license_file);        if path_to_license.exists() {            return Some(path_to_license);        }    }     None}