fn update_manifest()

in tools/pubsys/src/repo.rs [108:189]


fn update_manifest(repo_args: &RepoArgs, manifest: &mut Manifest) -> Result<()> {
    // Add update   =^..^=   =^..^=   =^..^=   =^..^=

    let filename = |path: &PathBuf| -> Result<String> {
        Ok(path
            .file_name()
            .context(error::InvalidImagePath { path })?
            .to_str()
            .context(error::NonUtf8Path { path })?
            .to_string())
    };

    let images = Images {
        boot: filename(&repo_args.boot_image)?,
        root: filename(&repo_args.root_image)?,
        hash: filename(&repo_args.hash_image)?,
    };

    info!(
        "Adding update to manifest for version: {}, arch: {}, variant: {}",
        repo_args.version, repo_args.arch, repo_args.variant
    );
    manifest
        .add_update(
            repo_args.version.clone(),
            None,
            repo_args.arch.clone(),
            repo_args.variant.clone(),
            images,
        )
        .context(error::AddUpdate)?;

    // Add migrations   =^..^=   =^..^=   =^..^=   =^..^=

    info!(
        "Using release config from path: {}",
        repo_args.release_config_path.display()
    );
    let release =
        Release::from_path(&repo_args.release_config_path).context(error::UpdateMetadataRead {
            path: &repo_args.release_config_path,
        })?;
    trace!(
        "Adding migrations to manifest for versions: {:#?}",
        release
            .migrations
            .keys()
            .map(|(from, to)| format!("({}, {})", from, to))
            .collect::<Vec<String>>()
    );
    // Replace the manifest 'migrations' section with the new data
    manifest.migrations = release.migrations;

    // Add update waves   =^..^=   =^..^=   =^..^=   =^..^=

    let wave_start_time = repo_args.release_start_time.unwrap_or(*DEFAULT_START_TIME);
    info!(
        "Using wave policy from path: {}",
        repo_args.wave_policy_path.display()
    );
    info!(
        "Offsets from that file will be added to the release start time of: {}",
        wave_start_time
    );
    let waves =
        UpdateWaves::from_path(&repo_args.wave_policy_path).context(error::UpdateMetadataRead {
            path: &repo_args.wave_policy_path,
        })?;
    manifest
        .set_waves(
            repo_args.variant.clone(),
            repo_args.arch.clone(),
            repo_args.version.clone(),
            wave_start_time,
            &waves,
        )
        .context(error::SetWaves {
            wave_policy_path: &repo_args.wave_policy_path,
        })?;

    Ok(())
}