refactor: merge git::validate module into git::validation
This commit is contained in:
parent
dd5532d3a3
commit
f10dc25aeb
8 changed files with 60 additions and 51 deletions
|
@ -4,6 +4,7 @@ mod file;
|
|||
#[cfg(test)]
|
||||
mod tests;
|
||||
|
||||
use git::validation::repo::validate_repo;
|
||||
use git_next_config as config;
|
||||
use git_next_git as git;
|
||||
|
||||
|
@ -98,7 +99,7 @@ impl git::ForgeLike for ForgeJo {
|
|||
self.repo.open(&gitdir)?
|
||||
};
|
||||
info!("Validating...");
|
||||
git::validate(&repository, &self.repo_details)
|
||||
validate_repo(&repository, &self.repo_details)
|
||||
.map_err(|e| git::repository::Error::Validation(e.to_string()))?;
|
||||
Ok(repository)
|
||||
}
|
||||
|
|
|
@ -11,7 +11,6 @@ mod git_remote;
|
|||
pub mod push;
|
||||
mod repo_details;
|
||||
pub mod repository;
|
||||
pub mod validate;
|
||||
pub mod validation;
|
||||
|
||||
#[cfg(test)]
|
||||
|
@ -25,5 +24,3 @@ pub use git_remote::GitRemote;
|
|||
pub use repo_details::RepoDetails;
|
||||
pub use repository::OpenRepository;
|
||||
pub use repository::Repository;
|
||||
pub use validate::validate;
|
||||
pub use validation::validate_positions;
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
mod validate {
|
||||
|
||||
use assert2::let_assert;
|
||||
use git_next_config::{ForgeDetails, GitDir, Hostname, RepoPath};
|
||||
|
||||
use crate::{
|
||||
repository::{self, Direction},
|
||||
validate, GitRemote, RepoDetails,
|
||||
repository,
|
||||
validation::{self, repo::validate_repo},
|
||||
GitRemote, RepoDetails,
|
||||
};
|
||||
|
||||
#[test]
|
||||
|
@ -27,8 +29,9 @@ mod validate {
|
|||
|open_repo| {
|
||||
let_assert!(
|
||||
Ok(_) = open_repo.lock().map(|mut open_repo| {
|
||||
open_repo.has_default_remote(Direction::Push, remote.clone());
|
||||
open_repo.has_default_remote(Direction::Fetch, remote);
|
||||
open_repo
|
||||
.has_default_remote(repository::Direction::Push, remote.clone());
|
||||
open_repo.has_default_remote(repository::Direction::Fetch, remote);
|
||||
})
|
||||
);
|
||||
}
|
||||
|
@ -37,7 +40,7 @@ mod validate {
|
|||
|
||||
let_assert!(Ok(open_repository) = repository.open(&gitdir));
|
||||
|
||||
let_assert!(Ok(_) = validate(&open_repository, &repo_details));
|
||||
let_assert!(Ok(_) = validation::repo::validate_repo(&open_repository, &repo_details));
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -61,7 +64,7 @@ mod validate {
|
|||
let_assert!(
|
||||
Ok(_) = open_repo.lock().map(|mut open_repo| {
|
||||
// INFO: open_repo.has_default_remote(Direction::Push, remote.clone());
|
||||
open_repo.has_default_remote(Direction::Fetch, remote);
|
||||
open_repo.has_default_remote(repository::Direction::Fetch, remote);
|
||||
})
|
||||
);
|
||||
}
|
||||
|
@ -70,7 +73,7 @@ mod validate {
|
|||
|
||||
let_assert!(Ok(open_repository) = repository.open(&gitdir));
|
||||
|
||||
let_assert!(Err(_) = validate(&open_repository, &repo_details));
|
||||
let_assert!(Err(_) = validate_repo(&open_repository, &repo_details));
|
||||
}
|
||||
#[test]
|
||||
fn should_fail_where_no_default_fetch_remote() {
|
||||
|
@ -92,7 +95,7 @@ mod validate {
|
|||
|open_repo| {
|
||||
let_assert!(
|
||||
Ok(_) = open_repo.lock().map(|mut open_repo| {
|
||||
open_repo.has_default_remote(Direction::Push, remote);
|
||||
open_repo.has_default_remote(repository::Direction::Push, remote);
|
||||
// INFO: open_repo.has_default_remote(Direction::Fetch, remote);
|
||||
})
|
||||
);
|
||||
|
@ -102,7 +105,7 @@ mod validate {
|
|||
|
||||
let_assert!(Ok(open_repository) = repository.open(&gitdir));
|
||||
|
||||
let_assert!(Err(_) = validate(&open_repository, &repo_details));
|
||||
let_assert!(Err(_) = validate_repo(&open_repository, &repo_details));
|
||||
}
|
||||
#[test]
|
||||
fn should_fail_where_invalid_default_push_remote() {
|
||||
|
@ -128,8 +131,8 @@ mod validate {
|
|||
|open_repo| {
|
||||
let_assert!(
|
||||
Ok(_) = open_repo.lock().map(|mut open_repo| {
|
||||
open_repo.has_default_remote(Direction::Push, other_remote);
|
||||
open_repo.has_default_remote(Direction::Fetch, remote);
|
||||
open_repo.has_default_remote(repository::Direction::Push, other_remote);
|
||||
open_repo.has_default_remote(repository::Direction::Fetch, remote);
|
||||
})
|
||||
);
|
||||
}
|
||||
|
@ -138,7 +141,7 @@ mod validate {
|
|||
|
||||
let_assert!(Ok(open_repository) = repository.open(&gitdir));
|
||||
|
||||
let_assert!(Err(_) = validate(&open_repository, &repo_details));
|
||||
let_assert!(Err(_) = validate_repo(&open_repository, &repo_details));
|
||||
}
|
||||
#[test]
|
||||
fn should_fail_where_invalid_default_fetch_remote() {
|
||||
|
@ -164,8 +167,9 @@ mod validate {
|
|||
|open_repo| {
|
||||
let_assert!(
|
||||
Ok(_) = open_repo.lock().map(|mut open_repo| {
|
||||
open_repo.has_default_remote(Direction::Push, remote);
|
||||
open_repo.has_default_remote(Direction::Fetch, other_remote);
|
||||
open_repo.has_default_remote(repository::Direction::Push, remote);
|
||||
open_repo
|
||||
.has_default_remote(repository::Direction::Fetch, other_remote);
|
||||
})
|
||||
);
|
||||
}
|
||||
|
@ -174,7 +178,7 @@ mod validate {
|
|||
|
||||
let_assert!(Ok(open_repository) = repository.open(&gitdir));
|
||||
|
||||
let_assert!(Err(_) = validate(&open_repository, &repo_details));
|
||||
let_assert!(Err(_) = validate_repo(&open_repository, &repo_details));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -182,7 +186,7 @@ mod git_clone {
|
|||
use assert2::let_assert;
|
||||
use git_next_config::{ForgeDetails, GitDir, Hostname, RepoPath};
|
||||
|
||||
use crate::{repository::Direction, GitRemote, RepoDetails};
|
||||
use crate::{repository, GitRemote, RepoDetails};
|
||||
|
||||
#[test]
|
||||
fn should_clone_repo() {
|
||||
|
@ -195,7 +199,7 @@ mod git_clone {
|
|||
.with_gitdir(GitDir::new(fs.base()))
|
||||
.with_repo_path(RepoPath::new("kemitix/git-next".to_string()));
|
||||
let_assert!(Ok(open_repo) = r.git_clone(&repo_details));
|
||||
let_assert!(Some(remote) = open_repo.find_default_remote(Direction::Fetch));
|
||||
let_assert!(Some(remote) = open_repo.find_default_remote(repository::Direction::Fetch));
|
||||
assert_eq!(
|
||||
remote,
|
||||
GitRemote::new(
|
||||
|
|
2
crates/git/src/validation/mod.rs
Normal file
2
crates/git/src/validation/mod.rs
Normal file
|
@ -0,0 +1,2 @@
|
|||
pub mod positions;
|
||||
pub mod repo;
|
|
@ -26,7 +26,7 @@ pub fn validate_positions(
|
|||
Ok(commit_histories) => commit_histories,
|
||||
Err(err) => {
|
||||
error!(?err, "Failed to get commit histories");
|
||||
return Err(git::validation::Error::CommitLog(err));
|
||||
return Err(git::validation::positions::Error::CommitLog(err));
|
||||
}
|
||||
};
|
||||
// Validations
|
||||
|
@ -35,7 +35,7 @@ pub fn validate_positions(
|
|||
"No commits on main branch '{}'",
|
||||
repo_config.branches().main()
|
||||
);
|
||||
return Err(git::validation::Error::BranchHasNoCommits(
|
||||
return Err(git::validation::positions::Error::BranchHasNoCommits(
|
||||
repo_config.branches().main(),
|
||||
));
|
||||
};
|
||||
|
@ -48,7 +48,7 @@ pub fn validate_positions(
|
|||
repo_config.branches().main(),
|
||||
repo_config.branches().main(),
|
||||
);
|
||||
return Err(git::validation::Error::DevBranchNotBasedOn(
|
||||
return Err(git::validation::positions::Error::DevBranchNotBasedOn(
|
||||
repo_config.branches().main(),
|
||||
));
|
||||
}
|
||||
|
@ -58,7 +58,7 @@ pub fn validate_positions(
|
|||
"No commits on next branch '{}",
|
||||
repo_config.branches().next()
|
||||
);
|
||||
return Err(git::validation::Error::BranchHasNoCommits(
|
||||
return Err(git::validation::positions::Error::BranchHasNoCommits(
|
||||
repo_config.branches().next(),
|
||||
));
|
||||
};
|
||||
|
@ -73,12 +73,12 @@ pub fn validate_positions(
|
|||
git::push::Force::From(next.clone().into()),
|
||||
) {
|
||||
warn!(?err, "Failed to reset next to main");
|
||||
return Err(git::validation::Error::FailedToResetBranch {
|
||||
return Err(git::validation::positions::Error::FailedToResetBranch {
|
||||
branch: repo_config.branches().next(),
|
||||
commit: next,
|
||||
});
|
||||
}
|
||||
return Err(git::validation::Error::BranchReset(
|
||||
return Err(git::validation::positions::Error::BranchReset(
|
||||
repo_config.branches().next(),
|
||||
));
|
||||
}
|
||||
|
@ -103,12 +103,12 @@ pub fn validate_positions(
|
|||
git::push::Force::From(next.clone().into()),
|
||||
) {
|
||||
warn!(?err, "Failed to reset next to main");
|
||||
return Err(git::validation::Error::FailedToResetBranch {
|
||||
return Err(git::validation::positions::Error::FailedToResetBranch {
|
||||
branch: repo_config.branches().next(),
|
||||
commit: next,
|
||||
});
|
||||
}
|
||||
return Err(git::validation::Error::BranchReset(
|
||||
return Err(git::validation::positions::Error::BranchReset(
|
||||
repo_config.branches().next(),
|
||||
));
|
||||
}
|
||||
|
@ -117,7 +117,7 @@ pub fn validate_positions(
|
|||
"No commits on next branch '{}'",
|
||||
repo_config.branches().next()
|
||||
);
|
||||
return Err(git::validation::Error::BranchHasNoCommits(
|
||||
return Err(git::validation::positions::Error::BranchHasNoCommits(
|
||||
repo_config.branches().next(),
|
||||
));
|
||||
};
|
||||
|
@ -131,7 +131,7 @@ pub fn validate_positions(
|
|||
repo_config.branches().dev(),
|
||||
repo_config.branches().next()
|
||||
);
|
||||
return Err(git::validation::Error::DevBranchNotBasedOn(
|
||||
return Err(git::validation::positions::Error::DevBranchNotBasedOn(
|
||||
repo_config.branches().next(),
|
||||
)); // dev is not based on next
|
||||
}
|
||||
|
@ -140,11 +140,11 @@ pub fn validate_positions(
|
|||
"No commits on dev branch '{}'",
|
||||
repo_config.branches().dev()
|
||||
);
|
||||
return Err(git::validation::Error::BranchHasNoCommits(
|
||||
return Err(git::validation::positions::Error::BranchHasNoCommits(
|
||||
repo_config.branches().dev(),
|
||||
));
|
||||
};
|
||||
Ok(git::validation::Positions {
|
||||
Ok(git::validation::positions::Positions {
|
||||
main,
|
||||
next,
|
||||
dev,
|
|
@ -1,15 +1,17 @@
|
|||
use tracing::info;
|
||||
|
||||
use crate::repository::{Direction, OpenRepository};
|
||||
|
||||
use super::{GitRemote, RepoDetails};
|
||||
use crate as git;
|
||||
|
||||
#[tracing::instrument(skip_all)]
|
||||
pub fn validate(repository: &OpenRepository, repo_details: &RepoDetails) -> Result<()> {
|
||||
let Some(push_remote) = repository.find_default_remote(Direction::Push) else {
|
||||
pub fn validate_repo(
|
||||
repository: &git::OpenRepository,
|
||||
repo_details: &git::RepoDetails,
|
||||
) -> Result<()> {
|
||||
let Some(push_remote) = repository.find_default_remote(git::repository::Direction::Push) else {
|
||||
return Err(Error::NoDefaultPushRemote);
|
||||
};
|
||||
let Some(fetch_remote) = repository.find_default_remote(Direction::Fetch) else {
|
||||
let Some(fetch_remote) = repository.find_default_remote(git::repository::Direction::Fetch)
|
||||
else {
|
||||
return Err(Error::NoDefaultFetchRemote);
|
||||
};
|
||||
let git_remote = repo_details.git_remote();
|
||||
|
@ -40,13 +42,13 @@ pub enum Error {
|
|||
Io(std::io::Error),
|
||||
#[display("MismatchDefaultPushRemote(found: {found}, expected: {expected})")]
|
||||
MismatchDefaultPushRemote {
|
||||
found: GitRemote,
|
||||
expected: GitRemote,
|
||||
found: git::GitRemote,
|
||||
expected: git::GitRemote,
|
||||
},
|
||||
#[display("MismatchDefaultFetchRemote(found: {found}, expected: {expected})")]
|
||||
MismatchDefaultFetchRemote {
|
||||
found: GitRemote,
|
||||
expected: GitRemote,
|
||||
found: git::GitRemote,
|
||||
expected: git::GitRemote,
|
||||
},
|
||||
}
|
||||
impl std::error::Error for Error {}
|
|
@ -9,6 +9,7 @@ mod tests;
|
|||
use std::time::Duration;
|
||||
|
||||
use actix::prelude::*;
|
||||
use git::validation::positions::{validate_positions, Positions};
|
||||
|
||||
use crate as repo_actor;
|
||||
use git_next_config as config;
|
||||
|
@ -185,8 +186,8 @@ impl Handler<ValidateRepo> for RepoActor {
|
|||
let addr = ctx.address();
|
||||
let message_token = self.message_token;
|
||||
async move {
|
||||
match git::validate_positions(&repository, &repo_details, repo_config) {
|
||||
Ok(git::validation::Positions {
|
||||
match validate_positions(&repository, &repo_details, repo_config) {
|
||||
Ok(Positions {
|
||||
main,
|
||||
next,
|
||||
dev,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
use assert2::let_assert;
|
||||
use git::repository::Direction;
|
||||
use git::{repository::Direction, validation::repo::validate_repo};
|
||||
use git_next_config::{
|
||||
self as config, ForgeType, GitDir, Hostname, RepoBranches, RepoConfig, RepoConfigSource,
|
||||
RepoPath,
|
||||
|
@ -46,7 +46,7 @@ fn gitdir_should_display_as_pathbuf() {
|
|||
// git.kemitix.net:kemitix/git-next
|
||||
// If the default push remote is something else, then this test will fail
|
||||
fn repo_details_find_default_push_remote_finds_correct_remote() -> Result<()> {
|
||||
let cli_crate_dir = std::env::current_dir().map_err(git::validate::Error::Io)?;
|
||||
let cli_crate_dir = std::env::current_dir().map_err(git::validation::repo::Error::Io)?;
|
||||
let_assert!(Some(Some(root)) = cli_crate_dir.parent().map(|p| p.parent()));
|
||||
let mut repo_details = git::common::repo_details(
|
||||
1,
|
||||
|
@ -77,7 +77,7 @@ fn repo_details_find_default_push_remote_finds_correct_remote() -> Result<()> {
|
|||
|
||||
#[test]
|
||||
fn gitdir_validate_should_pass_a_valid_git_repo() -> Result<()> {
|
||||
let cli_crate_dir = std::env::current_dir().map_err(git::validate::Error::Io)?;
|
||||
let cli_crate_dir = std::env::current_dir().map_err(git::validation::repo::Error::Io)?;
|
||||
let_assert!(Some(Some(root)) = cli_crate_dir.parent().map(|p| p.parent()));
|
||||
let mut repo_details = git::common::repo_details(
|
||||
1,
|
||||
|
@ -92,14 +92,16 @@ fn gitdir_validate_should_pass_a_valid_git_repo() -> Result<()> {
|
|||
repo_details.repo_path = RepoPath::new("kemitix/git-next".to_string());
|
||||
let gitdir = &repo_details.gitdir;
|
||||
let repository = git::repository::new().open(gitdir)?;
|
||||
git::validate(&repository, &repo_details)?;
|
||||
validate_repo(&repository, &repo_details)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn gitdir_validate_should_fail_a_git_repo_with_wrong_remote() -> Result<()> {
|
||||
let_assert!(Ok(cli_crate_dir) = std::env::current_dir().map_err(git::validate::Error::Io));
|
||||
let_assert!(
|
||||
Ok(cli_crate_dir) = std::env::current_dir().map_err(git::validation::repo::Error::Io)
|
||||
);
|
||||
let_assert!(Some(Some(root)) = cli_crate_dir.parent().map(|p| p.parent()));
|
||||
let mut repo_details = git::common::repo_details(
|
||||
1,
|
||||
|
@ -111,7 +113,7 @@ fn gitdir_validate_should_fail_a_git_repo_with_wrong_remote() -> Result<()> {
|
|||
repo_details.repo_path = RepoPath::new("hello/world".to_string());
|
||||
let gitdir = &repo_details.gitdir;
|
||||
let repository = git::repository::new().open(gitdir)?;
|
||||
let_assert!(Err(_) = git::validate(&repository, &repo_details));
|
||||
let_assert!(Err(_) = validate_repo(&repository, &repo_details));
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue