use clap::Parser; use crate::sync::{GitSync, RustcPullError}; mod sync; #[derive(clap::Parser)] enum Args { /// Pull changes from the main `rustc` repository. /// This creates new commits that should be then merged into `rustc-dev-guide`. RustcPull, /// Push changes from `rustc-dev-guide` to the given `branch` of a `rustc` fork under the given /// GitHub `username`. /// The pushed branch should then be merged into the `rustc` repository. RustcPush { branch: String, github_username: String }, } fn main() -> anyhow::Result<()> { let args = Args::parse(); let sync = GitSync::from_current_dir()?; match args { Args::RustcPull => { if let Err(error) = sync.rustc_pull(None) { match error { RustcPullError::NothingToPull => { eprintln!("Nothing to pull"); std::process::exit(2); } RustcPullError::PullFailed(error) => { eprintln!("Pull failure: {error:?}"); std::process::exit(1); } } } } Args::RustcPush { github_username, branch } => { sync.rustc_push(github_username, branch)?; } } Ok(()) }