mirror of
https://github.com/gitbutlerapp/gitbutler.git
synced 2024-12-24 10:02:26 +03:00
Merge pull request #5268 from gitbutlerapp/kv-branch-2
Refactor - move commit signature code out of branch crate
This commit is contained in:
commit
5b5f9b2e45
1
Cargo.lock
generated
1
Cargo.lock
generated
@ -2510,7 +2510,6 @@ dependencies = [
|
||||
"base64 0.22.1",
|
||||
"bstr",
|
||||
"git2",
|
||||
"gitbutler-branch",
|
||||
"gitbutler-cherry-pick",
|
||||
"gitbutler-command-context",
|
||||
"gitbutler-commit",
|
||||
|
@ -2,12 +2,13 @@ use std::path::PathBuf;
|
||||
|
||||
use anyhow::{Context, Result};
|
||||
use git2::Commit;
|
||||
use gitbutler_branch::{BranchExt, SignaturePurpose};
|
||||
use gitbutler_branch::BranchExt;
|
||||
use gitbutler_commit::commit_headers::CommitHeadersV2;
|
||||
use gitbutler_oplog::SnapshotExt;
|
||||
use gitbutler_project::access::WorktreeWritePermission;
|
||||
use gitbutler_reference::{normalize_branch_name, ReferenceName, Refname};
|
||||
use gitbutler_repo::RepositoryExt;
|
||||
use gitbutler_repo::SignaturePurpose;
|
||||
use gitbutler_repo_actions::RepoActionsExt;
|
||||
use gitbutler_stack::{Stack, StackId};
|
||||
use tracing::instrument;
|
||||
@ -189,8 +190,8 @@ impl BranchManager<'_> {
|
||||
message.push_str("\n\n");
|
||||
|
||||
// Commit wip commit
|
||||
let committer = gitbutler_branch::signature(SignaturePurpose::Committer)?;
|
||||
let author = gitbutler_branch::signature(SignaturePurpose::Author)?;
|
||||
let committer = gitbutler_repo::signature(SignaturePurpose::Committer)?;
|
||||
let author = gitbutler_repo::signature(SignaturePurpose::Author)?;
|
||||
let parent = branch.get().peel_to_commit()?;
|
||||
|
||||
let commit_headers = CommitHeadersV2::new();
|
||||
|
@ -3,13 +3,14 @@ use std::{path::PathBuf, vec};
|
||||
use anyhow::{anyhow, Context, Result};
|
||||
use bstr::ByteSlice;
|
||||
use gitbutler_branch::BranchCreateRequest;
|
||||
use gitbutler_branch::{self, SignaturePurpose, GITBUTLER_WORKSPACE_REFERENCE};
|
||||
use gitbutler_branch::{self, GITBUTLER_WORKSPACE_REFERENCE};
|
||||
use gitbutler_cherry_pick::RepositoryExt as _;
|
||||
use gitbutler_command_context::CommandContext;
|
||||
use gitbutler_commit::commit_ext::CommitExt;
|
||||
use gitbutler_error::error::Marker;
|
||||
use gitbutler_operating_modes::OPEN_WORKSPACE_REFS;
|
||||
use gitbutler_project::access::WorktreeWritePermission;
|
||||
use gitbutler_repo::SignaturePurpose;
|
||||
use gitbutler_repo::{LogUntil, RepositoryExt};
|
||||
use gitbutler_stack::{Stack, VirtualBranchesHandle};
|
||||
use gitbutler_stack_api::StackExt;
|
||||
@ -67,8 +68,8 @@ pub(crate) fn get_workspace_head(ctx: &CommandContext) -> Result<git2::Oid> {
|
||||
}
|
||||
}
|
||||
|
||||
let committer = gitbutler_branch::signature(SignaturePurpose::Committer)?;
|
||||
let author = gitbutler_branch::signature(SignaturePurpose::Author)?;
|
||||
let committer = gitbutler_repo::signature(SignaturePurpose::Committer)?;
|
||||
let author = gitbutler_repo::signature(SignaturePurpose::Author)?;
|
||||
let mut heads: Vec<git2::Commit<'_>> = virtual_branches
|
||||
.iter()
|
||||
.filter(|b| b.head() != target.sha)
|
||||
@ -206,8 +207,8 @@ pub fn update_workspace_commit(
|
||||
message.push_str("For more information about what we're doing here, check out our docs:\n");
|
||||
message.push_str("https://docs.gitbutler.com/features/virtual-branches/integration-branch\n");
|
||||
|
||||
let committer = gitbutler_branch::signature(SignaturePurpose::Committer)?;
|
||||
let author = gitbutler_branch::signature(SignaturePurpose::Author)?;
|
||||
let committer = gitbutler_repo::signature(SignaturePurpose::Committer)?;
|
||||
let author = gitbutler_repo::signature(SignaturePurpose::Author)?;
|
||||
|
||||
// It would be nice if we could pass an `update_ref` parameter to this function, but that
|
||||
// requires committing to the tip of the branch, and we're mostly replacing the tip.
|
||||
|
@ -8,40 +8,8 @@ mod branch;
|
||||
pub mod serde;
|
||||
pub use branch::{BranchCreateRequest, BranchIdentity, BranchUpdateRequest};
|
||||
|
||||
use gitbutler_oxidize::gix_to_git2_signature;
|
||||
use lazy_static::lazy_static;
|
||||
lazy_static! {
|
||||
pub static ref GITBUTLER_WORKSPACE_REFERENCE: gitbutler_reference::LocalRefname =
|
||||
gitbutler_reference::LocalRefname::new("gitbutler/workspace", None);
|
||||
}
|
||||
|
||||
pub const GITBUTLER_COMMIT_AUTHOR_NAME: &str = "GitButler";
|
||||
pub const GITBUTLER_COMMIT_AUTHOR_EMAIL: &str = "gitbutler@gitbutler.com";
|
||||
|
||||
pub enum SignaturePurpose {
|
||||
Author,
|
||||
Committer,
|
||||
}
|
||||
|
||||
/// Provide a signature with the GitButler author, and the current time or the time overridden
|
||||
/// depending on the value for `purpose`.
|
||||
pub fn signature(purpose: SignaturePurpose) -> anyhow::Result<git2::Signature<'static>> {
|
||||
let signature = gix::actor::SignatureRef {
|
||||
name: GITBUTLER_COMMIT_AUTHOR_NAME.into(),
|
||||
email: GITBUTLER_COMMIT_AUTHOR_EMAIL.into(),
|
||||
time: commit_time(match purpose {
|
||||
SignaturePurpose::Author => "GIT_AUTHOR_DATE",
|
||||
SignaturePurpose::Committer => "GIT_COMMITTER_DATE",
|
||||
}),
|
||||
};
|
||||
gix_to_git2_signature(signature)
|
||||
}
|
||||
|
||||
/// Return the time of a commit as `now` unless the `overriding_variable_name` contains a parseable date,
|
||||
/// which is used instead.
|
||||
fn commit_time(overriding_variable_name: &str) -> gix::date::Time {
|
||||
std::env::var(overriding_variable_name)
|
||||
.ok()
|
||||
.and_then(|time| gix::date::parse(&time, Some(std::time::SystemTime::now())).ok())
|
||||
.unwrap_or_else(gix::date::Time::now_local_or_utc)
|
||||
}
|
||||
|
@ -5,7 +5,6 @@ use std::str::FromStr;
|
||||
use anyhow::{bail, Context, Result};
|
||||
use bstr::ByteSlice;
|
||||
use git2::build::CheckoutBuilder;
|
||||
use gitbutler_branch::{signature, SignaturePurpose};
|
||||
use gitbutler_branch_actions::branch_trees::{
|
||||
checkout_branch_trees, compute_updated_branch_head, BranchHeadAndTree,
|
||||
};
|
||||
@ -25,6 +24,7 @@ use gitbutler_operating_modes::{
|
||||
use gitbutler_project::access::{WorktreeReadPermission, WorktreeWritePermission};
|
||||
use gitbutler_reference::{ReferenceName, Refname};
|
||||
use gitbutler_repo::{rebase::cherry_rebase, RepositoryExt};
|
||||
use gitbutler_repo::{signature, SignaturePurpose};
|
||||
use gitbutler_stack::{Stack, VirtualBranchesHandle};
|
||||
use gitbutler_stack_api::StackExt;
|
||||
use serde::Serialize;
|
||||
|
@ -8,7 +8,6 @@ use std::{
|
||||
|
||||
use anyhow::{anyhow, bail, Context, Result};
|
||||
use git2::{DiffOptions, FileMode};
|
||||
use gitbutler_branch::SignaturePurpose;
|
||||
use gitbutler_command_context::RepositoryExtLite;
|
||||
use gitbutler_diff::{hunks_by_filepath, FileDiff};
|
||||
use gitbutler_project::{
|
||||
@ -16,6 +15,7 @@ use gitbutler_project::{
|
||||
Project,
|
||||
};
|
||||
use gitbutler_repo::RepositoryExt;
|
||||
use gitbutler_repo::SignaturePurpose;
|
||||
use gitbutler_stack::{Stack, VirtualBranchesHandle, VirtualBranchesState};
|
||||
use tracing::instrument;
|
||||
|
||||
@ -460,8 +460,8 @@ fn commit_snapshot(
|
||||
.and_then(|head_id| repo.find_commit(head_id).ok());
|
||||
|
||||
// Construct a new commit
|
||||
let committer = gitbutler_branch::signature(SignaturePurpose::Committer)?;
|
||||
let author = gitbutler_branch::signature(SignaturePurpose::Author)?;
|
||||
let committer = gitbutler_repo::signature(SignaturePurpose::Committer)?;
|
||||
let author = gitbutler_repo::signature(SignaturePurpose::Author)?;
|
||||
let parents = oplog_head_commit
|
||||
.as_ref()
|
||||
.map(|head| vec![head])
|
||||
|
@ -1,8 +1,8 @@
|
||||
use std::path::Path;
|
||||
|
||||
use anyhow::{Context, Result};
|
||||
use gitbutler_branch::{GITBUTLER_COMMIT_AUTHOR_EMAIL, GITBUTLER_COMMIT_AUTHOR_NAME};
|
||||
use gitbutler_fs::write;
|
||||
use gitbutler_repo::{GITBUTLER_COMMIT_AUTHOR_EMAIL, GITBUTLER_COMMIT_AUTHOR_NAME};
|
||||
use gix::config::tree::Key;
|
||||
|
||||
/// Sets a reference to the oplog head commit such that snapshots are reachable and will not be garbage collected.
|
||||
|
@ -18,7 +18,7 @@ resolve-path = "0.1.0"
|
||||
gitbutler-command-context.workspace = true
|
||||
gitbutler-config.workspace = true
|
||||
gitbutler-project.workspace = true
|
||||
gitbutler-branch.workspace = true
|
||||
# gitbutler-branch.workspace = true
|
||||
gitbutler-reference.workspace = true
|
||||
gitbutler-error.workspace = true
|
||||
gitbutler-commit.workspace = true
|
||||
|
@ -13,3 +13,35 @@ mod config;
|
||||
pub use config::Config;
|
||||
|
||||
pub mod temporary_workdir;
|
||||
|
||||
use gitbutler_oxidize::gix_to_git2_signature;
|
||||
pub const GITBUTLER_COMMIT_AUTHOR_NAME: &str = "GitButler";
|
||||
pub const GITBUTLER_COMMIT_AUTHOR_EMAIL: &str = "gitbutler@gitbutler.com";
|
||||
|
||||
pub enum SignaturePurpose {
|
||||
Author,
|
||||
Committer,
|
||||
}
|
||||
|
||||
/// Provide a signature with the GitButler author, and the current time or the time overridden
|
||||
/// depending on the value for `purpose`.
|
||||
pub fn signature(purpose: SignaturePurpose) -> anyhow::Result<git2::Signature<'static>> {
|
||||
let signature = gix::actor::SignatureRef {
|
||||
name: GITBUTLER_COMMIT_AUTHOR_NAME.into(),
|
||||
email: GITBUTLER_COMMIT_AUTHOR_EMAIL.into(),
|
||||
time: commit_time(match purpose {
|
||||
SignaturePurpose::Author => "GIT_AUTHOR_DATE",
|
||||
SignaturePurpose::Committer => "GIT_COMMITTER_DATE",
|
||||
}),
|
||||
};
|
||||
gix_to_git2_signature(signature)
|
||||
}
|
||||
|
||||
/// Return the time of a commit as `now` unless the `overriding_variable_name` contains a parseable date,
|
||||
/// which is used instead.
|
||||
fn commit_time(overriding_variable_name: &str) -> gix::date::Time {
|
||||
std::env::var(overriding_variable_name)
|
||||
.ok()
|
||||
.and_then(|time| gix::date::parse(&time, Some(std::time::SystemTime::now())).ok())
|
||||
.unwrap_or_else(gix::date::Time::now_local_or_utc)
|
||||
}
|
||||
|
@ -5,10 +5,10 @@ use std::os::windows::process::CommandExt;
|
||||
use std::{io::Write, path::Path, process::Stdio, str};
|
||||
|
||||
use crate::Config;
|
||||
use crate::SignaturePurpose;
|
||||
use anyhow::{anyhow, bail, Context, Result};
|
||||
use bstr::BString;
|
||||
use git2::{BlameOptions, StatusOptions, Tree};
|
||||
use gitbutler_branch::SignaturePurpose;
|
||||
use gitbutler_commit::commit_headers::CommitHeadersV2;
|
||||
use gitbutler_config::git::{GbConfig, GitConfig};
|
||||
use gitbutler_error::error::Code;
|
||||
@ -603,9 +603,9 @@ impl RepositoryExt for git2::Repository {
|
||||
repo.committer()
|
||||
.transpose()?
|
||||
.map(gix_to_git2_signature)
|
||||
.unwrap_or_else(|| gitbutler_branch::signature(SignaturePurpose::Committer))
|
||||
.unwrap_or_else(|| crate::signature(SignaturePurpose::Committer))
|
||||
} else {
|
||||
gitbutler_branch::signature(SignaturePurpose::Committer)
|
||||
crate::signature(SignaturePurpose::Committer)
|
||||
}?;
|
||||
|
||||
Ok((author, committer))
|
||||
|
Loading…
Reference in New Issue
Block a user