Skip to content

Commit 1b6d864

Browse files
committed
refactor(sources): Don't impl on schema types
1 parent 370cd35 commit 1b6d864

File tree

3 files changed

+47
-48
lines changed

3 files changed

+47
-48
lines changed

src/cargo/sources/git/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
//! [CVE-2022-46176]: https://blog.rust-lang.org/2023/01/10/cve-2022-46176.html
99
1010
pub use self::source::GitSource;
11-
pub use self::utils::{fetch, GitCheckout, GitDatabase, GitRemote};
11+
pub use self::utils::{fetch, resolve_ref, GitCheckout, GitDatabase, GitRemote};
1212
mod known_hosts;
1313
mod oxide;
1414
mod source;

src/cargo/sources/git/utils.rs

+44-46
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ impl GitRemote {
123123

124124
let resolved_commit_hash = match locked_rev {
125125
Some(rev) => db.contains(rev).then_some(rev),
126-
None => reference.resolve(&db.repo).ok(),
126+
None => resolve_ref(reference, &db.repo).ok(),
127127
};
128128
if let Some(rev) = resolved_commit_hash {
129129
return Ok((db, rev));
@@ -148,7 +148,7 @@ impl GitRemote {
148148
.with_context(|| format!("failed to clone into: {}", into.display()))?;
149149
let rev = match locked_rev {
150150
Some(rev) => rev,
151-
None => reference.resolve(&repo)?,
151+
None => resolve_ref(reference, &repo)?,
152152
};
153153

154154
Ok((
@@ -207,56 +207,54 @@ impl GitDatabase {
207207
self.repo.revparse_single(&oid.to_string()).is_ok()
208208
}
209209

210-
/// [`GitReference::resolve`]s this reference with this database.
210+
/// [`resolve_ref`]s this reference with this database.
211211
pub fn resolve(&self, r: &GitReference) -> CargoResult<git2::Oid> {
212-
r.resolve(&self.repo)
212+
resolve_ref(r, &self.repo)
213213
}
214214
}
215215

216-
impl GitReference {
217-
/// Resolves self to an object ID with objects the `repo` currently has.
218-
pub fn resolve(&self, repo: &git2::Repository) -> CargoResult<git2::Oid> {
219-
let id = match self {
220-
// Note that we resolve the named tag here in sync with where it's
221-
// fetched into via `fetch` below.
222-
GitReference::Tag(s) => (|| -> CargoResult<git2::Oid> {
223-
let refname = format!("refs/remotes/origin/tags/{}", s);
224-
let id = repo.refname_to_id(&refname)?;
225-
let obj = repo.find_object(id, None)?;
226-
let obj = obj.peel(ObjectType::Commit)?;
227-
Ok(obj.id())
228-
})()
229-
.with_context(|| format!("failed to find tag `{}`", s))?,
230-
231-
// Resolve the remote name since that's all we're configuring in
232-
// `fetch` below.
233-
GitReference::Branch(s) => {
234-
let name = format!("origin/{}", s);
235-
let b = repo
236-
.find_branch(&name, git2::BranchType::Remote)
237-
.with_context(|| format!("failed to find branch `{}`", s))?;
238-
b.get()
239-
.target()
240-
.ok_or_else(|| anyhow::format_err!("branch `{}` did not have a target", s))?
241-
}
216+
/// Resolves [`GitReference`] to an object ID with objects the `repo` currently has.
217+
pub fn resolve_ref(gitref: &GitReference, repo: &git2::Repository) -> CargoResult<git2::Oid> {
218+
let id = match gitref {
219+
// Note that we resolve the named tag here in sync with where it's
220+
// fetched into via `fetch` below.
221+
GitReference::Tag(s) => (|| -> CargoResult<git2::Oid> {
222+
let refname = format!("refs/remotes/origin/tags/{}", s);
223+
let id = repo.refname_to_id(&refname)?;
224+
let obj = repo.find_object(id, None)?;
225+
let obj = obj.peel(ObjectType::Commit)?;
226+
Ok(obj.id())
227+
})()
228+
.with_context(|| format!("failed to find tag `{}`", s))?,
229+
230+
// Resolve the remote name since that's all we're configuring in
231+
// `fetch` below.
232+
GitReference::Branch(s) => {
233+
let name = format!("origin/{}", s);
234+
let b = repo
235+
.find_branch(&name, git2::BranchType::Remote)
236+
.with_context(|| format!("failed to find branch `{}`", s))?;
237+
b.get()
238+
.target()
239+
.ok_or_else(|| anyhow::format_err!("branch `{}` did not have a target", s))?
240+
}
242241

243-
// We'll be using the HEAD commit
244-
GitReference::DefaultBranch => {
245-
let head_id = repo.refname_to_id("refs/remotes/origin/HEAD")?;
246-
let head = repo.find_object(head_id, None)?;
247-
head.peel(ObjectType::Commit)?.id()
248-
}
242+
// We'll be using the HEAD commit
243+
GitReference::DefaultBranch => {
244+
let head_id = repo.refname_to_id("refs/remotes/origin/HEAD")?;
245+
let head = repo.find_object(head_id, None)?;
246+
head.peel(ObjectType::Commit)?.id()
247+
}
249248

250-
GitReference::Rev(s) => {
251-
let obj = repo.revparse_single(s)?;
252-
match obj.as_tag() {
253-
Some(tag) => tag.target_id(),
254-
None => obj.id(),
255-
}
249+
GitReference::Rev(s) => {
250+
let obj = repo.revparse_single(s)?;
251+
match obj.as_tag() {
252+
Some(tag) => tag.target_id(),
253+
None => obj.id(),
256254
}
257-
};
258-
Ok(id)
259-
}
255+
}
256+
};
257+
Ok(id)
260258
}
261259

262260
impl<'a> GitCheckout<'a> {
@@ -1404,7 +1402,7 @@ fn github_fast_path(
14041402
return Ok(FastPathRev::Indeterminate);
14051403
}
14061404

1407-
let local_object = reference.resolve(repo).ok();
1405+
let local_object = resolve_ref(reference, repo).ok();
14081406

14091407
let github_branch_name = match reference {
14101408
GitReference::Branch(branch) => branch,

src/cargo/sources/registry/remote.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use crate::core::global_cache_tracker;
44
use crate::core::{GitReference, PackageId, SourceId};
55
use crate::sources::git;
66
use crate::sources::git::fetch::RemoteKind;
7+
use crate::sources::git::resolve_ref;
78
use crate::sources::registry::download;
89
use crate::sources::registry::MaybeLock;
910
use crate::sources::registry::{LoadResponse, RegistryConfig, RegistryData};
@@ -149,7 +150,7 @@ impl<'cfg> RemoteRegistry<'cfg> {
149150
fn head(&self) -> CargoResult<git2::Oid> {
150151
if self.head.get().is_none() {
151152
let repo = self.repo()?;
152-
let oid = self.index_git_ref.resolve(repo)?;
153+
let oid = resolve_ref(&self.index_git_ref, repo)?;
153154
self.head.set(Some(oid));
154155
}
155156
Ok(self.head.get().unwrap())

0 commit comments

Comments
 (0)