Skip to content

Commit

Permalink
Improve functions ordering
Browse files Browse the repository at this point in the history
  • Loading branch information
rockisch committed Nov 1, 2019
1 parent 790a85c commit f5adb95
Showing 1 changed file with 62 additions and 62 deletions.
124 changes: 62 additions & 62 deletions src/info.rs
Original file line number Diff line number Diff line change
Expand Up @@ -292,10 +292,10 @@ impl Info {
let workdir = repo.workdir().ok_or(Error::BareGitRepo)?;
let workdir_str = workdir.to_str().unwrap();

let config = Info::get_configuration(&repo)?;
let current_commit_info = Info::get_current_commit_info(&repo)?;
let authors = Info::get_authors(workdir_str, no_merges, 3);
let (git_v, git_user) = Info::get_git_info(workdir_str);
let current_commit_info = Info::get_current_commit_info(&repo)?;
let config = Info::get_configuration(&repo)?;
let version = Info::get_version(workdir_str)?;
let commits = Info::get_commits(workdir_str, no_merges)?;
let repo_size = Info::get_packed_size(workdir_str)?;
Expand Down Expand Up @@ -329,6 +329,66 @@ impl Info {
})
}

fn get_configuration(repo: &Repository) -> Result<Configuration> {
let config = repo.config().map_err(|_| Error::NoGitData)?;
let mut remote_url = String::new();
let mut repository_name = String::new();
let mut remote_upstream: Option<String> = None;

for entry in &config.entries(None).unwrap() {
let entry = entry.unwrap();
match entry.name().unwrap() {
"remote.origin.url" => remote_url = entry.value().unwrap().to_string(),
"remote.upstream.url" => remote_upstream = Some(entry.value().unwrap().to_string()),
_ => (),
}
}

if let Some(url) = remote_upstream {
remote_url = url.clone();
}

let url = remote_url.clone();
let name_parts: Vec<&str> = url.split('/').collect();

if !name_parts.is_empty() {
repository_name = name_parts[name_parts.len() - 1].to_string();
}

if repository_name.contains(".git") {
let repo_name = repository_name.clone();
let parts: Vec<&str> = repo_name.split(".git").collect();
repository_name = parts[0].to_string();
}

Ok(Configuration {
repository_name: repository_name.clone(),
repository_url: name_parts.join("/"),
})
}

fn get_current_commit_info(repo: &Repository) -> Result<CommitInfo> {
let head = repo.head().map_err(|_| Error::ReferenceInfoError)?;
let head_oid = head.target().ok_or(Error::ReferenceInfoError)?;
let refs = repo.references().map_err(|_| Error::ReferenceInfoError)?;
let refs_info = refs
.filter_map(|reference| match reference {
Ok(reference) => match (reference.target(), reference.shorthand()) {
(Some(oid), Some(shorthand)) if oid == head_oid => {
Some(if reference.is_tag() {
String::from("tags/") + shorthand
} else {
String::from(shorthand)
})
}
_ => None,
},
Err(_) => None,
})
.collect::<Vec<String>>();
Ok(CommitInfo::new(head_oid, refs_info))
}

// Return first n most active commiters as authors within this project.
fn get_authors(dir: &str, no_merges: bool, n: usize) -> Vec<(String, usize, usize)> {
let mut args = vec!["-C", dir, "log", "--format='%aN'"];
Expand Down Expand Up @@ -394,66 +454,6 @@ impl Info {
(version, username)
}

fn get_current_commit_info(repo: &Repository) -> Result<CommitInfo> {
let head = repo.head().map_err(|_| Error::ReferenceInfoError)?;
let head_oid = head.target().ok_or(Error::ReferenceInfoError)?;
let refs = repo.references().map_err(|_| Error::ReferenceInfoError)?;
let refs_info = refs
.filter_map(|reference| match reference {
Ok(reference) => match (reference.target(), reference.shorthand()) {
(Some(oid), Some(shorthand)) if oid == head_oid => {
Some(if reference.is_tag() {
String::from("tags/") + shorthand
} else {
String::from(shorthand)
})
}
_ => None,
},
Err(_) => None,
})
.collect::<Vec<String>>();
Ok(CommitInfo::new(head_oid, refs_info))
}

fn get_configuration(repo: &Repository) -> Result<Configuration> {
let config = repo.config().map_err(|_| Error::NoGitData)?;
let mut remote_url = String::new();
let mut repository_name = String::new();
let mut remote_upstream: Option<String> = None;

for entry in &config.entries(None).unwrap() {
let entry = entry.unwrap();
match entry.name().unwrap() {
"remote.origin.url" => remote_url = entry.value().unwrap().to_string(),
"remote.upstream.url" => remote_upstream = Some(entry.value().unwrap().to_string()),
_ => (),
}
}

if let Some(url) = remote_upstream {
remote_url = url.clone();
}

let url = remote_url.clone();
let name_parts: Vec<&str> = url.split('/').collect();

if !name_parts.is_empty() {
repository_name = name_parts[name_parts.len() - 1].to_string();
}

if repository_name.contains(".git") {
let repo_name = repository_name.clone();
let parts: Vec<&str> = repo_name.split(".git").collect();
repository_name = parts[0].to_string();
}

Ok(Configuration {
repository_name: repository_name.clone(),
repository_url: name_parts.join("/"),
})
}

fn get_version(dir: &str) -> Result<String> {
let output = Command::new("git")
.arg("-C")
Expand Down

0 comments on commit f5adb95

Please sign in to comment.