Skip to content

Commit

Permalink
fix(cli): edit option accepts argument (#376)
Browse files Browse the repository at this point in the history
* fix(cli): edit option accepts argument

Signed-off-by: KeisukeYamashita <19yamashita15@gmail.com>

* fix(cli): remove redundunt return in last line of the func

Signed-off-by: KeisukeYamashita <19yamashita15@gmail.com>

* fix(cli): refactor based on coderabbitai

Signed-off-by: KeisukeYamashita <19yamashita15@gmail.com>

---------

Signed-off-by: KeisukeYamashita <19yamashita15@gmail.com>
  • Loading branch information
KeisukeYamashita authored Oct 29, 2024
1 parent 893e009 commit c234e90
Showing 1 changed file with 30 additions and 16 deletions.
46 changes: 30 additions & 16 deletions src/args.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ pub struct Args {

/// Read last commit from the specified file or fallbacks to ./.git/COMMIT_EDITMSG
#[arg(short = 'e', long)]
pub edit: bool,
pub edit: Option<String>,

/// Lower end of the commit range to lint
#[arg(short = 'f', long)]
Expand All @@ -53,10 +53,12 @@ impl Args {
pub fn read(&self) -> Result<Vec<Message>, Error> {
// Check first whether or not the --edit option was supplied. When running from tooling such as
// `pre-commit`, stdin exists, so this needs to come first.
if self.edit {
let msg = std::fs::read_to_string("./.git/COMMIT_EDITMSG")
.expect("Failed to read './.git/COMMIT_EDITMSG'");
return Ok(vec![Message::new(msg)]);
if let Some(edit) = self.edit.as_deref() {
if edit != "false" {
let msg = std::fs::read_to_string(edit)
.expect(format!("Failed to read commit message from {}", edit).as_str());
return Ok(vec![Message::new(msg)]);
}
}

// Otherwise, check for stdin and use the incoming text buffer from there if so.
Expand All @@ -68,18 +70,30 @@ impl Args {
return Ok(vec![Message::new(buffer)]);
}

// And if none of the above, we're expecting to be reading directly from Git...
let config = ReadCommitMessageOptions {
from: self.from.clone(),
path: self.cwd.clone(),
to: self.to.clone(),
};
if self.from.is_some() || self.to.is_some() {
// Reading directly from Git if from or to is specified.
let config = ReadCommitMessageOptions {
from: self.from.clone(),
path: self.cwd.clone(),
to: self.to.clone(),
};

let messages = git::read(config)
.iter()
.map(|s| Message::new(s.to_string()))
.collect();
let messages = git::read(config)
.iter()
.map(|s| Message::new(s.to_string()))
.collect();

Ok(messages)
return Ok(messages);
}

let default_path = std::path::PathBuf::from(".git").join("COMMIT_EDITMSG");
let msg = std::fs::read_to_string(&default_path).expect(
format!(
"Failed to read commit message from {}",
default_path.display()
)
.as_str(),
);
Ok(vec![Message::new(msg)])
}
}

0 comments on commit c234e90

Please sign in to comment.