Skip to content

Commit f145dfb

Browse files
author
cshinaver
committed
(#1069) smartlog does not panic when run in a non-git directory
1 parent 7520d22 commit f145dfb

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

git-branchless-smartlog/src/lib.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -758,7 +758,16 @@ pub fn smartlog(
758758
reverse,
759759
} = options;
760760

761-
let repo = Repo::from_dir(&git_run_info.working_directory)?;
761+
let repo = match Repo::from_dir(&git_run_info.working_directory) {
762+
Ok(repo) => repo,
763+
Err(err) => {
764+
writeln!(
765+
effects.get_error_stream(),
766+
"{err}",
767+
)?;
768+
return Ok(Err(ExitCode(1)));
769+
}
770+
};
762771
let head_info = repo.get_head_info()?;
763772
let conn = repo.get_db_conn()?;
764773
let event_log_db = EventLogDb::new(&conn)?;

git-branchless-smartlog/tests/test_smartlog.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -650,6 +650,24 @@ fn test_smartlog_sparse_main_false_head() -> eyre::Result<()> {
650650
Ok(())
651651
}
652652

653+
#[test]
654+
fn test_error_without_panic_on_missing_repo() -> eyre::Result<()> {
655+
let git = make_git()?;
656+
657+
{
658+
let (_stdout, stderr) = git.branchless_with_options(
659+
"smartlog",
660+
&[],
661+
&GitRunOptions {
662+
expected_exit_code: 1,
663+
..Default::default()
664+
})?;
665+
insta::assert_snapshot!(stderr, @"could not open repository: could not find repository from '<repo-path>'; class=Repository (6); code=NotFound (-3)");
666+
}
667+
668+
Ok(())
669+
}
670+
653671
#[test]
654672
fn test_smartlog_hidden() -> eyre::Result<()> {
655673
let git = make_git()?;

0 commit comments

Comments
 (0)