Skip to content

Commit e99c56f

Browse files
committed
Multiple changes linked to git2-rs migration
- Merge git_utils with repo into a single file - Move get_repo_size_field into info file - Remove blocking dependency with Git binary from onefetch
1 parent 826ac93 commit e99c56f

File tree

7 files changed

+161
-182
lines changed

7 files changed

+161
-182
lines changed

src/main.rs

-4
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,6 @@ fn run() -> Result<()> {
2222
return cli_utils::print_supported_package_managers();
2323
}
2424

25-
if !cli_utils::is_git_installed() {
26-
return Err("git failed to execute!".into());
27-
}
28-
2925
if !repo::is_valid(&config.repo_path)? {
3026
return Err("please run onefetch inside of a non-bare git repository".into());
3127
}

src/onefetch/cli_utils.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::onefetch::{deps::package_manager::PackageManager, error::*, language::Language};
22
use std::env;
3-
use std::process::{Command, Stdio};
3+
use std::process::Command;
44
use strum::IntoEnumIterator;
55

66
pub fn print_supported_languages() -> Result<()> {
@@ -25,11 +25,11 @@ pub fn is_truecolor_terminal() -> bool {
2525
.unwrap_or(false)
2626
}
2727

28-
pub fn get_git_version() -> Result<String> {
29-
let version = Command::new("git").arg("--version").output()?;
30-
Ok(String::from_utf8_lossy(&version.stdout).replace('\n', ""))
31-
}
28+
pub fn get_git_version() -> String {
29+
let version = Command::new("git").arg("--version").output();
3230

33-
pub fn is_git_installed() -> bool {
34-
Command::new("git").arg("--version").stdout(Stdio::null()).status().is_ok()
31+
match version {
32+
Ok(v) => String::from_utf8_lossy(&v.stdout).replace('\n', ""),
33+
Err(_) => String::new(),
34+
}
3535
}

src/onefetch/git_utils.rs

-124
This file was deleted.

src/onefetch/info.rs

+41-35
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use {
22
crate::onefetch::{
3-
cli::Cli, cli_utils, commit_info::CommitInfo, deps, error::*, git_utils,
4-
language::Language, license::Detector, repo::Repo, text_color::TextColor,
3+
cli::Cli, cli_utils, commit_info::CommitInfo, deps, error::*, language::Language,
4+
license::Detector, repo::Repo, text_color::TextColor,
55
},
66
colored::{Color, ColoredString, Colorize},
77
git2::Repository,
@@ -26,8 +26,7 @@ pub struct Info {
2626
repo_url: String,
2727
number_of_commits: String,
2828
lines_of_code: usize,
29-
packed_repo_size: String,
30-
files_count: u64,
29+
file_count: u64,
3130
repo_size: String,
3231
license: String,
3332
pub dominant_language: Language,
@@ -38,7 +37,10 @@ pub struct Info {
3837

3938
impl std::fmt::Display for Info {
4039
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
41-
if !self.config.disabled_fields.git_info {
40+
if !self.config.disabled_fields.git_info
41+
&& !&self.git_username.is_empty()
42+
&& !&self.git_version.is_empty()
43+
{
4244
let git_info_length = self.git_username.len() + self.git_version.len() + 3;
4345

4446
writeln!(
@@ -173,12 +175,14 @@ impl std::fmt::Display for Info {
173175
)?;
174176
}
175177

176-
if !self.config.disabled_fields.size && !self.packed_repo_size.is_empty() {
178+
if !self.config.disabled_fields.size && !self.repo_size.is_empty() {
179+
let repo_size_str = self.get_repo_size_field();
180+
177181
writeln!(
178182
f,
179183
"{}{}",
180184
&self.get_formatted_subtitle_label("Size"),
181-
&self.packed_repo_size.color(self.text_colors.info),
185+
&repo_size_str.color(self.text_colors.info),
182186
)?;
183187
}
184188

@@ -212,28 +216,22 @@ impl std::fmt::Display for Info {
212216

213217
impl Info {
214218
pub fn new(config: Cli) -> Result<Info> {
215-
let repo = Repo::new(&config.repo_path)?;
216-
let workdir = repo.get_work_dir()?;
217-
let (repo_name, repo_url) = repo.get_name_and_url()?;
218-
let head_refs = repo.get_head_refs()?;
219-
let pending_changes = repo.get_pending_changes()?;
220-
let version = repo.get_version()?;
221-
let git_username = repo.get_git_username()?;
222-
let number_of_tags = repo.get_number_of_tags()?;
223-
let number_of_branches = repo.get_number_of_branches()?;
224-
225-
let repo = Repository::discover(&workdir)?;
226-
227-
let git_client = git_utils::GitClient::new(&repo, config.no_merges)?;
228-
let creation_date = git_client.get_creation_date()?;
229-
let number_of_commits = git_client.get_number_of_commits();
230-
let authors = git_client.get_authors(config.number_of_authors);
231-
let last_change = git_client.get_date_of_last_commit();
232-
let (repo_size, files_count) = git_client.get_repo_size();
233-
let packed_repo_size = git_utils::get_packed_size(repo_size.clone(), files_count)?;
234-
235-
let git_version = cli_utils::get_git_version()?;
236-
219+
let git_version = cli_utils::get_git_version();
220+
let repo = Repository::discover(&config.repo_path)?;
221+
let internal_repo = Repo::new(&repo, config.no_merges)?;
222+
let (repo_name, repo_url) = internal_repo.get_name_and_url()?;
223+
let head_refs = internal_repo.get_head_refs()?;
224+
let pending_changes = internal_repo.get_pending_changes()?;
225+
let version = internal_repo.get_version()?;
226+
let git_username = internal_repo.get_git_username()?;
227+
let number_of_tags = internal_repo.get_number_of_tags()?;
228+
let number_of_branches = internal_repo.get_number_of_branches()?;
229+
let creation_date = internal_repo.get_creation_date()?;
230+
let number_of_commits = internal_repo.get_number_of_commits();
231+
let authors = internal_repo.get_authors(config.number_of_authors);
232+
let last_change = internal_repo.get_date_of_last_commit();
233+
let (repo_size, file_count) = internal_repo.get_repo_size();
234+
let workdir = internal_repo.get_work_dir()?;
237235
let license = Detector::new()?.get_license(&workdir)?;
238236
let dependencies = deps::DependencyDetector::new().get_dependencies(&workdir)?;
239237
let (languages, lines_of_code) =
@@ -264,9 +262,8 @@ impl Info {
264262
repo_url,
265263
number_of_commits,
266264
lines_of_code,
267-
packed_repo_size,
268-
files_count,
269265
repo_size,
266+
file_count,
270267
license,
271268
dominant_language,
272269
ascii_colors,
@@ -383,6 +380,16 @@ impl Info {
383380
format!("({}, {})", branches_str, tags_str)
384381
}
385382
}
383+
384+
fn get_repo_size_field(&self) -> String {
385+
match self.file_count {
386+
0 => String::from(&self.repo_size),
387+
_ => {
388+
let res = format!("{} ({} files)", self.repo_size, self.file_count.to_string());
389+
res
390+
}
391+
}
392+
}
386393
}
387394

388395
impl Serialize for Info {
@@ -393,7 +400,7 @@ impl Serialize for Info {
393400
let mut state = serializer.serialize_struct("Info", 21)?;
394401
// Only collect the version number
395402
let git_version_split: Vec<String> =
396-
self.git_version.split(" ").map(|s| s.to_string()).collect();
403+
self.git_version.split(' ').map(|s| s.to_string()).collect();
397404

398405
state.serialize_field("gitVersion", &git_version_split[2])?;
399406
state.serialize_field("gitUsername", &self.git_username)?;
@@ -407,17 +414,16 @@ impl Serialize for Info {
407414
state.serialize_field("languages", &self.languages)?;
408415

409416
let dependencies_split: Vec<String> =
410-
self.dependencies.split(" ").map(|s| s.to_string()).collect();
417+
self.dependencies.split(' ').map(|s| s.to_string()).collect();
411418

412419
state.serialize_field("dependencies", &dependencies_split[0])?;
413420
state.serialize_field("authors", &self.authors)?;
414421
state.serialize_field("lastChange", &self.last_change)?;
415422
state.serialize_field("repoUrl", &self.repo_url)?;
416423
state.serialize_field("numberOfCommits", &self.number_of_commits)?;
417424
state.serialize_field("linesOfCode", &self.lines_of_code)?;
418-
state.serialize_field("packedRepoSize", &self.packed_repo_size)?;
419425
state.serialize_field("repoSize", &self.repo_size)?;
420-
state.serialize_field("filesCount", &self.files_count)?;
426+
state.serialize_field("filesCount", &self.file_count)?;
421427
state.serialize_field("license", &self.license)?;
422428
state.serialize_field("dominantLanguage", &self.dominant_language)?;
423429
state.serialize_field("textColors", &self.text_colors)?;

src/onefetch/mod.rs

-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ pub mod cli_utils;
44
mod commit_info;
55
mod deps;
66
pub mod error;
7-
mod git_utils;
87
mod image_backends;
98
pub mod info;
109
mod info_field;

0 commit comments

Comments
 (0)