Skip to content

Commit bd3abbf

Browse files
committed
pull ssl/ssh features from git2 + code cleanup
1 parent dfd0472 commit bd3abbf

File tree

5 files changed

+77
-37
lines changed

5 files changed

+77
-37
lines changed

Cargo.lock

Lines changed: 37 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,12 @@ clap = "2.33.3"
2929
color_quant = "1.1.0"
3030
colored = "2.0.0"
3131
error-chain = "0.12"
32-
git2 = {version = "0.13.18", default-features = false}
32+
git2 = "0.13.18"
33+
hex = "0.4"
3334
image = "0.23.14"
35+
indicatif = "0.16"
3436
json = "0.12.4"
37+
md5 = "0.7"
3538
regex = "1.4.6"
3639
serde = "1.0.125"
3740
serde_json = "1.0.64"
@@ -41,9 +44,6 @@ term_size = "0.3.2"
4144
tokei = "12.1.2"
4245
toml = "0.5.8"
4346
yaml-rust = "0.4"
44-
md5 = "0.7"
45-
hex = "0.4"
46-
indicatif = "0.16"
4747

4848
[target.'cfg(windows)'.dependencies]
4949
ansi_term = "0.12"

src/main.rs

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,34 +2,12 @@
22
#![recursion_limit = "1024"]
33
#![cfg_attr(feature = "fail-on-deprecated", deny(deprecated))]
44

5-
use onefetch::{cli::Cli, cli_utils, error::*, info, printer::Printer, repo};
5+
use onefetch::{cli::Cli, cli_utils, error::*, info, printer::Printer};
66

77
use std::{io, process};
88

99
mod onefetch;
1010

11-
fn get_repo(config: &Cli) -> Result<git2::Repository> {
12-
let repo = if config.is_remote {
13-
let temp_directory = std::env::temp_dir();
14-
let repo_digest = md5::compute(&config.repo_path);
15-
let mut repo_directory = temp_directory;
16-
repo_directory.push("onefetch");
17-
repo_directory.push(hex::encode(repo_digest.0));
18-
if repo_directory.exists() {
19-
git2::Repository::discover(repo_directory)?
20-
} else {
21-
repo::clone_remote(&config.repo_path, &repo_directory)?
22-
}
23-
24-
} else {
25-
if !repo::is_valid(&config.repo_path)? {
26-
return Err("please run onefetch inside of a non-bare git repository".into());
27-
}
28-
git2::Repository::discover(&config.repo_path)?
29-
};
30-
Ok(repo)
31-
}
32-
3311
fn run() -> Result<()> {
3412
#[cfg(windows)]
3513
let _ = ansi_term::enable_ansi_support();
@@ -44,9 +22,7 @@ fn run() -> Result<()> {
4422
return cli_utils::print_supported_package_managers();
4523
}
4624

47-
let repo = get_repo(&config)?;
48-
49-
let info = info::Info::new(config, repo)?;
25+
let info = info::Info::new(config)?;
5026

5127
let mut printer = Printer::new(io::BufWriter::new(io::stdout()), info);
5228

src/onefetch/info.rs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
use {
22
crate::onefetch::{
3-
cli::Cli, cli_utils, commit_info::CommitInfo, error::*, language::Language,
4-
license::Detector, package_managers::DependencyDetector, repo::Repo, text_color::TextColor,
3+
cli::Cli,
4+
cli_utils,
5+
commit_info::CommitInfo,
6+
error::*,
7+
language::Language,
8+
license::Detector,
9+
package_managers::DependencyDetector,
10+
repo::{get_repo, Repo},
11+
text_color::TextColor,
512
},
613
colored::{Color, ColoredString, Colorize},
7-
git2::Repository,
814
serde::ser::SerializeStruct,
915
serde::Serialize,
1016
};
@@ -208,8 +214,9 @@ impl std::fmt::Display for Info {
208214
}
209215

210216
impl Info {
211-
pub fn new(config: Cli, repo: Repository) -> Result<Info> {
217+
pub fn new(config: Cli) -> Result<Info> {
212218
let git_version = cli_utils::get_git_version();
219+
let repo = get_repo(config.is_remote, &config.repo_path)?;
213220
let internal_repo = Repo::new(&repo, config.no_merges)?;
214221
let (repo_name, repo_url) = internal_repo.get_name_and_url()?;
215222
let head_refs = internal_repo.get_head_refs()?;

src/onefetch/repo.rs

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -267,9 +267,28 @@ impl<'a> Repo<'a> {
267267
}
268268
}
269269

270-
pub fn clone_remote(url: &str, path: &std::path::PathBuf) -> Result<Repository> {
271-
// I'm creating new scope for each option to avoid exposing mutable variables
270+
pub fn get_repo(is_remote: bool, repo_path: &str) -> Result<Repository> {
271+
let repo = if is_remote {
272+
let temp_directory = std::env::temp_dir();
273+
let repo_digest = md5::compute(repo_path);
274+
let mut repo_directory = temp_directory;
275+
repo_directory.push("onefetch");
276+
repo_directory.push(hex::encode(repo_digest.0));
277+
if repo_directory.exists() {
278+
Repository::discover(repo_directory)?
279+
} else {
280+
clone_remote(repo_path, &repo_directory)?
281+
}
282+
} else {
283+
if !is_valid(repo_path)? {
284+
return Err("please run onefetch inside of a non-bare git repository".into());
285+
}
286+
Repository::discover(repo_path)?
287+
};
288+
Ok(repo)
289+
}
272290

291+
fn clone_remote(url: &str, path: &std::path::PathBuf) -> Result<Repository> {
273292
let progress_bar = ProgressBar::new(1);
274293
let progress_bar_style = ProgressStyle::default_bar()
275294
.template("{msg}\n{spinner:.green} [{elapsed}] [{wide_bar:.cyan/blue}] {pos}/{len}")
@@ -284,6 +303,7 @@ pub fn clone_remote(url: &str, path: &std::path::PathBuf) -> Result<Repository>
284303
progress_bar.set_position(v.received_objects() as u64);
285304
true
286305
});
306+
287307
v
288308
};
289309

@@ -302,7 +322,7 @@ pub fn clone_remote(url: &str, path: &std::path::PathBuf) -> Result<Repository>
302322
Ok(repository)
303323
}
304324

305-
pub fn is_valid(repo_path: &str) -> Result<bool> {
325+
fn is_valid(repo_path: &str) -> Result<bool> {
306326
let repo = Repository::open_ext(repo_path, RepositoryOpenFlags::empty(), Vec::<&Path>::new());
307327
Ok(repo.is_ok() && !repo?.is_bare())
308328
}

0 commit comments

Comments
 (0)