1
1
use {
2
2
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 ,
5
5
} ,
6
6
colored:: { Color , ColoredString , Colorize } ,
7
7
git2:: Repository ,
@@ -26,8 +26,7 @@ pub struct Info {
26
26
repo_url : String ,
27
27
number_of_commits : String ,
28
28
lines_of_code : usize ,
29
- packed_repo_size : String ,
30
- files_count : u64 ,
29
+ file_count : u64 ,
31
30
repo_size : String ,
32
31
license : String ,
33
32
pub dominant_language : Language ,
@@ -38,7 +37,10 @@ pub struct Info {
38
37
39
38
impl std:: fmt:: Display for Info {
40
39
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
+ {
42
44
let git_info_length = self . git_username . len ( ) + self . git_version . len ( ) + 3 ;
43
45
44
46
writeln ! (
@@ -173,12 +175,14 @@ impl std::fmt::Display for Info {
173
175
) ?;
174
176
}
175
177
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
+
177
181
writeln ! (
178
182
f,
179
183
"{}{}" ,
180
184
& 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) ,
182
186
) ?;
183
187
}
184
188
@@ -212,28 +216,22 @@ impl std::fmt::Display for Info {
212
216
213
217
impl Info {
214
218
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 ( ) ?;
237
235
let license = Detector :: new ( ) ?. get_license ( & workdir) ?;
238
236
let dependencies = deps:: DependencyDetector :: new ( ) . get_dependencies ( & workdir) ?;
239
237
let ( languages, lines_of_code) =
@@ -264,9 +262,8 @@ impl Info {
264
262
repo_url,
265
263
number_of_commits,
266
264
lines_of_code,
267
- packed_repo_size,
268
- files_count,
269
265
repo_size,
266
+ file_count,
270
267
license,
271
268
dominant_language,
272
269
ascii_colors,
@@ -383,6 +380,16 @@ impl Info {
383
380
format ! ( "({}, {})" , branches_str, tags_str)
384
381
}
385
382
}
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
+ }
386
393
}
387
394
388
395
impl Serialize for Info {
@@ -393,7 +400,7 @@ impl Serialize for Info {
393
400
let mut state = serializer. serialize_struct ( "Info" , 21 ) ?;
394
401
// Only collect the version number
395
402
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 ( ) ;
397
404
398
405
state. serialize_field ( "gitVersion" , & git_version_split[ 2 ] ) ?;
399
406
state. serialize_field ( "gitUsername" , & self . git_username ) ?;
@@ -407,17 +414,16 @@ impl Serialize for Info {
407
414
state. serialize_field ( "languages" , & self . languages ) ?;
408
415
409
416
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 ( ) ;
411
418
412
419
state. serialize_field ( "dependencies" , & dependencies_split[ 0 ] ) ?;
413
420
state. serialize_field ( "authors" , & self . authors ) ?;
414
421
state. serialize_field ( "lastChange" , & self . last_change ) ?;
415
422
state. serialize_field ( "repoUrl" , & self . repo_url ) ?;
416
423
state. serialize_field ( "numberOfCommits" , & self . number_of_commits ) ?;
417
424
state. serialize_field ( "linesOfCode" , & self . lines_of_code ) ?;
418
- state. serialize_field ( "packedRepoSize" , & self . packed_repo_size ) ?;
419
425
state. serialize_field ( "repoSize" , & self . repo_size ) ?;
420
- state. serialize_field ( "filesCount" , & self . files_count ) ?;
426
+ state. serialize_field ( "filesCount" , & self . file_count ) ?;
421
427
state. serialize_field ( "license" , & self . license ) ?;
422
428
state. serialize_field ( "dominantLanguage" , & self . dominant_language ) ?;
423
429
state. serialize_field ( "textColors" , & self . text_colors ) ?;
0 commit comments