Skip to content

Commit

Permalink
refactor(source): Pull out git ref logic
Browse files Browse the repository at this point in the history
  • Loading branch information
epage committed Nov 8, 2023
1 parent 0de0794 commit a94ed9d
Showing 1 changed file with 19 additions and 11 deletions.
30 changes: 19 additions & 11 deletions src/cargo/core/source_id.rs
Original file line number Diff line number Diff line change
Expand Up @@ -188,17 +188,7 @@ impl SourceId {
match kind {
"git" => {
let mut url = url.into_url()?;
let mut reference = GitReference::DefaultBranch;
for (k, v) in url.query_pairs() {
match &k[..] {
// Map older 'ref' to branch.
"branch" | "ref" => reference = GitReference::Branch(v.into_owned()),

"rev" => reference = GitReference::Rev(v.into_owned()),
"tag" => reference = GitReference::Tag(v.into_owned()),
_ => {}
}
}
let reference = GitReference::from_query(url.query_pairs());
let precise = url.fragment().map(|s| s.to_owned());
url.set_fragment(None);
url.set_query(None);
Expand Down Expand Up @@ -884,6 +874,24 @@ impl<'a> fmt::Display for SourceIdAsUrl<'a> {
}

impl GitReference {
pub fn from_query(
query_pairs: impl Iterator<Item = (impl AsRef<str>, impl AsRef<str>)>,
) -> Self {
let mut reference = GitReference::DefaultBranch;
for (k, v) in query_pairs {
let v = v.as_ref();
match k.as_ref() {
// Map older 'ref' to branch.
"branch" | "ref" => reference = GitReference::Branch(v.to_owned()),

"rev" => reference = GitReference::Rev(v.to_owned()),
"tag" => reference = GitReference::Tag(v.to_owned()),
_ => {}
}
}
reference
}

/// Returns a `Display`able view of this git reference, or None if using
/// the head of the default branch
pub fn pretty_ref(&self, url_encoded: bool) -> Option<PrettyRef<'_>> {
Expand Down

0 comments on commit a94ed9d

Please sign in to comment.