git_fame 2.2.0 → 2.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/git-fame +1 -1
- data/lib/git_fame/base.rb +28 -27
- data/lib/git_fame/version.rb +1 -1
- data/spec/bin_spec.rb +3 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f60cc8e1ebb619b563a10256cd86549fdd59a901
|
4
|
+
data.tar.gz: 93a5887855e265c463bd3c8ab1a48c24a107cfa1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 20cbb0c37d9d3637c0b9c3e73241c4a10e73ffa877e76e97014e7ddcfab064d03c1f2932b3d1b6e441ce298bdb8b7d96dffb9530f570a1ac19c75f844cb63673
|
7
|
+
data.tar.gz: 86e2e53e6f36480ec4bb3b9f99925a77429c4c9d5af99809558ff65b49fab52f82b523a7aea5219f7ae5e8f72ae4169d7f431f8e87c7887d52fb7ab56cea9569
|
data/bin/git-fame
CHANGED
@@ -28,7 +28,7 @@ unless GitFame::SORT.include?(opts[:sort])
|
|
28
28
|
Trollop::die :sort, "must be one of the following; #{GitFame::SORT.join(", ")}"
|
29
29
|
end
|
30
30
|
|
31
|
-
if opts[:timeout] <= 0
|
31
|
+
if opts[:timeout] != -1 and opts[:timeout] <= 0
|
32
32
|
Trollop::die :timeout, "must be positive"
|
33
33
|
end
|
34
34
|
|
data/lib/git_fame/base.rb
CHANGED
@@ -52,11 +52,12 @@ module GitFame
|
|
52
52
|
# Default sorting option is by loc
|
53
53
|
@include = args.fetch(:include, "").split(",")
|
54
54
|
@sort = args.fetch(:sort, @default_settings.fetch(:sorting))
|
55
|
-
@repository = args.fetch(:repository)
|
55
|
+
@repository = File.expand_path(args.fetch(:repository))
|
56
56
|
@by_type = args.fetch(:by_type, false)
|
57
57
|
@branch = args.fetch(:branch, nil)
|
58
58
|
@everything = args.fetch(:everything, false)
|
59
59
|
@timeout = args.fetch(:timeout, CMD_TIMEOUT)
|
60
|
+
@git_dir = File.join(@repository, ".git")
|
60
61
|
|
61
62
|
# Figure out what branch the caller is using
|
62
63
|
if present?(@branch = args[:branch])
|
@@ -89,7 +90,6 @@ module GitFame
|
|
89
90
|
@authors = {}
|
90
91
|
@cache = {}
|
91
92
|
@verbose = args.fetch(:verbose, false)
|
92
|
-
|
93
93
|
populate
|
94
94
|
end
|
95
95
|
|
@@ -186,7 +186,7 @@ module GitFame
|
|
186
186
|
# -w ignore whitespaces (defined in @wopt)
|
187
187
|
# -M detect moved or copied lines.
|
188
188
|
# -p procelain mode (parsed by BlameParser)
|
189
|
-
execute("git blame #{encoding_opt} -p -M #{default_params} #{commit_range.to_s} #{@wopt} -- '#{file}'") do |result|
|
189
|
+
execute("git #{git_directory_params} blame #{encoding_opt} -p -M #{default_params} #{commit_range.to_s} #{@wopt} -- '#{file}'") do |result|
|
190
190
|
BlameParser.new(result.to_s).parse.each do |row|
|
191
191
|
next if row[:boundary]
|
192
192
|
|
@@ -206,7 +206,7 @@ module GitFame
|
|
206
206
|
end
|
207
207
|
|
208
208
|
# Get repository summery and update each author accordingly
|
209
|
-
execute("git shortlog #{encoding_opt} #{default_params} -se #{commit_range.to_s}") do |result|
|
209
|
+
execute("git #{git_directory_params} shortlog #{encoding_opt} #{default_params} -se #{commit_range.to_s}") do |result|
|
210
210
|
result.to_s.split("\n").map do |line|
|
211
211
|
_, commits, name, email = line.match(/(\d+)\s+(.+)\s+<(.+?)>/).to_a
|
212
212
|
author = author_by_email(email)
|
@@ -233,7 +233,7 @@ module GitFame
|
|
233
233
|
|
234
234
|
# Return mime type for file (form: x/y)
|
235
235
|
def mime_type_for_file(file)
|
236
|
-
execute("git show #{commit_range.range.last}:'#{file}' | LC_ALL=C file --mime-type -").to_s.
|
236
|
+
execute("git #{git_directory_params} show #{commit_range.range.last}:'#{file}' | LC_ALL=C file --mime-type -").to_s.
|
237
237
|
match(/.+: (.+?)$/).to_a[1]
|
238
238
|
end
|
239
239
|
|
@@ -312,8 +312,7 @@ module GitFame
|
|
312
312
|
# Command to be executed at @repository
|
313
313
|
# @silent = true wont raise an error on exit code =! 0
|
314
314
|
def execute(command, silent = false, &block)
|
315
|
-
result =
|
316
|
-
|
315
|
+
result = run_with_timeout(command)
|
317
316
|
if result.success? or silent
|
318
317
|
warn command if @verbose
|
319
318
|
return result unless block
|
@@ -324,21 +323,19 @@ module GitFame
|
|
324
323
|
raise Error, cmd_error_message(command, $!.message)
|
325
324
|
end
|
326
325
|
|
327
|
-
def
|
326
|
+
def run_with_timeout(command)
|
328
327
|
if @timeout != -1
|
329
|
-
Timeout.timeout(CMD_TIMEOUT) {
|
328
|
+
Timeout.timeout(CMD_TIMEOUT) { run_no_timeout(command) }
|
330
329
|
else
|
331
|
-
|
330
|
+
run_no_timeout(command)
|
332
331
|
end
|
333
332
|
end
|
334
333
|
|
335
|
-
def
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
Result.new(output.scrub.strip, thread.value.success?)
|
341
|
-
end
|
334
|
+
def run_no_timeout(command)
|
335
|
+
out, err, status = Open3.capture3(command)
|
336
|
+
ok = status.success?
|
337
|
+
output = ok ? out : err
|
338
|
+
Result.new(output.scrub.strip, ok)
|
342
339
|
end
|
343
340
|
|
344
341
|
def cmd_error_message(command, message)
|
@@ -347,7 +344,7 @@ module GitFame
|
|
347
344
|
|
348
345
|
# Does @branch exist in the current git repo?
|
349
346
|
def branch_exists?(branch)
|
350
|
-
execute("git show-ref '#{branch}'", true) do |result|
|
347
|
+
execute("git #{git_directory_params} show-ref '#{branch}'", true) do |result|
|
351
348
|
result.success?
|
352
349
|
end
|
353
350
|
end
|
@@ -361,7 +358,7 @@ module GitFame
|
|
361
358
|
return @default_settings.fetch(:branch)
|
362
359
|
end
|
363
360
|
|
364
|
-
execute("git rev-parse HEAD | head -1") do |result|
|
361
|
+
execute("git #{git_directory_params} rev-parse HEAD | head -1") do |result|
|
365
362
|
return result.data.split(" ")[0] if result.success?
|
366
363
|
end
|
367
364
|
raise Error, "No branch found. Define one using --branch=<branch>"
|
@@ -375,11 +372,11 @@ module GitFame
|
|
375
372
|
# extensions in @extensions defined by the user
|
376
373
|
def current_files
|
377
374
|
if commit_range.is_range?
|
378
|
-
execute("git diff -
|
375
|
+
execute("git #{git_directory_params} -c diff.renames=0 -c diff.renameLimit=1000 diff -M -C -c --name-only --diff-filter=AM #{encoding_opt} #{default_params} #{commit_range.to_s}") do |result|
|
379
376
|
filter_files(result)
|
380
377
|
end
|
381
378
|
else
|
382
|
-
execute("git ls-tree -r #{commit_range.to_s}
|
379
|
+
execute("git #{git_directory_params} ls-tree --name-only -r #{commit_range.to_s}") do |result|
|
383
380
|
filter_files(result)
|
384
381
|
end
|
385
382
|
end
|
@@ -389,6 +386,10 @@ module GitFame
|
|
389
386
|
"--date=local"
|
390
387
|
end
|
391
388
|
|
389
|
+
def git_directory_params
|
390
|
+
"--git-dir='#{@git_dir}' --work-tree='#{@repository}'"
|
391
|
+
end
|
392
|
+
|
392
393
|
def encoding_opt
|
393
394
|
"--encoding=UTF-8"
|
394
395
|
end
|
@@ -436,11 +437,11 @@ module GitFame
|
|
436
437
|
commit2 = @branch
|
437
438
|
else
|
438
439
|
# Try finding a commit that day
|
439
|
-
commit2 = execute("git rev-list --before='#{@before} 23:59:59' --after='#{@before} 00:00:01' #{default_params} '#{@branch}' | head -1").to_s
|
440
|
+
commit2 = execute("git #{git_directory_params} rev-list --before='#{@before} 23:59:59' --after='#{@before} 00:00:01' #{default_params} '#{@branch}' | head -1").to_s
|
440
441
|
|
441
442
|
# Otherwise, look for the closest commit
|
442
443
|
if blank?(commit2)
|
443
|
-
commit2 = execute("git rev-list --before='#{@before}' #{default_params} '#{@branch}' | head -1").to_s
|
444
|
+
commit2 = execute("git #{git_directory_params} rev-list --before='#{@before}' #{default_params} '#{@branch}' | head -1").to_s
|
444
445
|
end
|
445
446
|
end
|
446
447
|
end
|
@@ -450,7 +451,7 @@ module GitFame
|
|
450
451
|
return present?(commit2) ? commit2 : @branch
|
451
452
|
end
|
452
453
|
|
453
|
-
commit1 = execute("git rev-list --before='#{end_of_yesterday(@after)}' #{default_params} '#{@branch}' | head -1").to_s
|
454
|
+
commit1 = execute("git #{git_directory_params} rev-list --before='#{end_of_yesterday(@after)}' #{default_params} '#{@branch}' | head -1").to_s
|
454
455
|
|
455
456
|
# No commit found this early
|
456
457
|
# If NO end date is choosen, just use current branch
|
@@ -478,11 +479,11 @@ module GitFame
|
|
478
479
|
end
|
479
480
|
|
480
481
|
def start_commit_date
|
481
|
-
Time.parse(execute("git log #{encoding_opt} --pretty=format:'%cd' #{default_params} #{@branch} | tail -1").to_s)
|
482
|
+
Time.parse(execute("git #{git_directory_params} log #{encoding_opt} --pretty=format:'%cd' #{default_params} #{@branch} | tail -1").to_s)
|
482
483
|
end
|
483
484
|
|
484
485
|
def end_commit_date
|
485
|
-
Time.parse(execute("git log #{encoding_opt} --pretty=format:'%cd' #{default_params} #{@branch} | head -1").to_s)
|
486
|
+
Time.parse(execute("git #{git_directory_params} log #{encoding_opt} --pretty=format:'%cd' #{default_params} #{@branch} | head -1").to_s)
|
486
487
|
end
|
487
488
|
|
488
489
|
def end_date
|
@@ -514,7 +515,7 @@ module GitFame
|
|
514
515
|
end
|
515
516
|
|
516
517
|
# TODO: Are all these needed?
|
517
|
-
memoize :populate, :
|
518
|
+
memoize :populate, :run_with_timeout
|
518
519
|
memoize :current_range, :current_files
|
519
520
|
memoize :printable_fields, :files_from_author
|
520
521
|
memoize :raw_fields, :fields, :file_list
|
data/lib/git_fame/version.rb
CHANGED
data/spec/bin_spec.rb
CHANGED
@@ -34,7 +34,8 @@ describe "bin/git-fame" do
|
|
34
34
|
"--help",
|
35
35
|
"--verbose",
|
36
36
|
"--everything",
|
37
|
-
"--timeout=10"
|
37
|
+
"--timeout=10",
|
38
|
+
"--timeout=-1"
|
38
39
|
].each do |option|
|
39
40
|
it "should support #{option}" do
|
40
41
|
run(option).should be_a_succees
|
@@ -67,8 +68,8 @@ describe "bin/git-fame" do
|
|
67
68
|
it "should fail on invalid timeout" do
|
68
69
|
run("--timeout=hello").should_not be_a_succees
|
69
70
|
run("--timeout=").should_not be_a_succees
|
70
|
-
run("--timeout=-1").should_not be_a_succees
|
71
71
|
run("--timeout=0").should_not be_a_succees
|
72
|
+
run("--timeout=-2").should_not be_a_succees
|
72
73
|
end
|
73
74
|
|
74
75
|
it "should not print stack trace on invalid dates (--before)" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: git_fame
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Linus Oleander
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-06-
|
11
|
+
date: 2016-06-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ruby-progressbar
|