Skip to content

Commit d178a5c

Browse files
committed
gather language statistics in parallel to everything else
1 parent 5394f3c commit d178a5c

File tree

2 files changed

+29
-13
lines changed

2 files changed

+29
-13
lines changed

Diff for: src/info/langs/language.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ macro_rules! define_colors {
2424
( [ $($bc:ident),+ ] : [ $($c:ident($r:expr, $g:expr, $b:expr)),+ ] ) => { Colors { basic_colors: vec![$(clean_color!($bc)),+], true_colors: Some(vec![$(DynColors::$c($r, $g, $b)),+]) } };
2525
}
2626

27-
#[derive(PartialEq, EnumString, EnumIter, IntoStaticStr)]
27+
#[derive(Clone, PartialEq, EnumString, EnumIter, IntoStaticStr)]
2828
#[strum(serialize_all = "lowercase")]
2929
pub enum LanguageType {
3030
Programming,

Diff for: src/info/mod.rs

+28-12
Original file line numberDiff line numberDiff line change
@@ -165,15 +165,31 @@ impl Info {
165165
&config.bot_regex_pattern,
166166
config.number_of_authors,
167167
)?;
168-
let (repo_name, repo_url) = internal_repo.get_name_and_url()?;
168+
let workdir = internal_repo.get_work_dir()?;
169+
169170
let pending_changes = std::thread::spawn({
170171
let git_dir = repo.path().to_owned();
171172
move || {
172173
let repo = git2::Repository::open(git_dir)?;
173174
repo::get_pending_changes(&repo)
174175
}
175176
});
177+
let languages_handle = std::thread::spawn({
178+
let ignored_directories = config.ignored_directories.clone();
179+
let language_types = config.language_types.clone();
180+
let include_hidden = config.include_hidden;
181+
let workdir = workdir.clone();
182+
move || {
183+
langs::get_language_statistics(
184+
&workdir,
185+
&ignored_directories,
186+
&language_types,
187+
include_hidden,
188+
)
189+
}
190+
});
176191

192+
let (repo_name, repo_url) = internal_repo.get_name_and_url()?;
177193
let head_refs = internal_repo.get_head_refs()?;
178194
let version = internal_repo.get_version()?;
179195
let git_username = internal_repo.get_git_username()?;
@@ -184,15 +200,18 @@ impl Info {
184200
let (authors, contributors) = internal_repo.take_authors(config.show_email);
185201
let last_change = internal_repo.get_date_of_last_commit(config.iso_time);
186202
let (repo_size, file_count) = internal_repo.get_repo_size();
187-
let workdir = internal_repo.get_work_dir()?;
188203
let license = Detector::new()?.get_license(&workdir)?;
189204
let dependencies = DependencyDetector::new().get_dependencies(&workdir)?;
190-
let (languages, lines_of_code) = langs::get_language_statistics(
191-
&workdir,
192-
&config.ignored_directories,
193-
&config.language_types,
194-
config.include_hidden,
195-
)?;
205+
206+
let pending_changes = pending_changes
207+
.join()
208+
.ok()
209+
.context("BUG: panic in pending-changes thread")??;
210+
211+
let (languages, lines_of_code) = languages_handle
212+
.join()
213+
.ok()
214+
.context("BUG: panic in language statistics thread")??;
196215
let dominant_language = langs::get_dominant_language(&languages);
197216
let ascii_colors = get_ascii_colors(
198217
&config.ascii_language,
@@ -209,10 +228,7 @@ impl Info {
209228
number_of_tags,
210229
number_of_branches,
211230
head_refs,
212-
pending_changes: pending_changes
213-
.join()
214-
.ok()
215-
.context("BUG: panic in pending-changes thread")??,
231+
pending_changes,
216232
version,
217233
creation_date,
218234
languages,

0 commit comments

Comments
 (0)