Skip to content

Commit

Permalink
Added head resetting
Browse files Browse the repository at this point in the history
  • Loading branch information
jdjfisher committed Apr 15, 2023
1 parent 3b23bbf commit 195e237
Showing 1 changed file with 33 additions and 4 deletions.
37 changes: 33 additions & 4 deletions src/main.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use clap::Parser;
use clap::{Parser, ValueEnum};
use console::{Key, Term};
use std::path::PathBuf;

Expand All @@ -10,37 +10,66 @@ pub struct Args {
/// Target branch or commit to step back from
target: String,

/// Mode for resetting the HEAD on exit
#[arg(long, value_enum, default_value_t = HeadMode::Original)]
head: HeadMode,

/// Path
#[arg(short, long)]
directory: Option<PathBuf>,
}

#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum, Debug)]
enum HeadMode {
Target,
Original,
Final,
}

fn main() {
let args = Args::parse();
let stdout = Term::buffered_stdout();

let commits = git::get_commits(&args);
let mut index = commits.len() - 1;
let mut steps = 1;

let stdout = Term::buffered_stdout();

let mut index = 0;
git::checkout_target(&args.target, &args);

// TODO: Tidy
loop {
if let Ok(character) = stdout.read_key() {
match character {
Key::ArrowLeft => {
if index > 1 {
index -= 1;
git::checkout_target(&commits[index], &args);
steps += 1;
}
}
Key::ArrowRight => {
if index < commits.len() - 1 {
index += 1;
git::checkout_target(&commits[index], &args);
steps += 1;
}
}
_ => break,
}
}
}

reset_head(args, steps);
}

fn reset_head(args: Args, steps: i32) {
match args.head {
HeadMode::Target => {
git::checkout_target(&args.target, &args);
}
HeadMode::Original => {
git::checkout_target(&format!("@{{-{}}}", steps), &args);
}
HeadMode::Final => {}
}
}

0 comments on commit 195e237

Please sign in to comment.