Function git_repository::create::into
source · Expand description
Create a new .git
repository of kind
within the possibly non-existing directory
and return its path.
Note that this is a simple template-based initialization routine which should be accompanied with additional corrections
to respect git configuration, which is accomplished by its callers
that return a Repository.
Examples found in repository?
src/init.rs (line 64)
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
pub fn init_opts(
directory: impl AsRef<Path>,
kind: crate::create::Kind,
create_options: crate::create::Options,
mut open_options: crate::open::Options,
) -> Result<Self, Error> {
let path = crate::create::into(directory.as_ref(), kind, create_options)?;
let (git_dir, worktree_dir) = path.into_repository_and_work_tree_directories();
open_options.git_dir_trust = Some(git_sec::Trust::Full);
open_options.current_dir = std::env::current_dir()?.into();
let repo = ThreadSafeRepository::open_from_paths(git_dir, worktree_dir, open_options)?;
let branch_name = repo
.config
.resolved
.string("init", None, "defaultBranch")
.unwrap_or_else(|| Cow::Borrowed(DEFAULT_BRANCH_NAME.into()));
if branch_name.as_ref() != DEFAULT_BRANCH_NAME {
let sym_ref: FullName =
format!("refs/heads/{branch_name}")
.try_into()
.map_err(|err| Error::InvalidBranchName {
name: branch_name.into_owned(),
source: err,
})?;
let mut repo = repo.to_thread_local();
let prev_write_reflog = repo.refs.write_reflog;
repo.refs.write_reflog = WriteReflog::Disable;
repo.edit_reference(RefEdit {
change: git_ref::transaction::Change::Update {
log: Default::default(),
expected: PreviousValue::Any,
new: Target::Symbolic(sym_ref),
},
name: "HEAD".try_into().expect("valid"),
deref: false,
})?;
repo.refs.write_reflog = prev_write_reflog;
}
Ok(repo)
}