blob: aeedee5be22d124818205d4139c14432d24e3543 [file] [log] [blame]
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(())
}