di 0.4.0 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/HISTORY +12 -0
- data/lib/di.rb +59 -39
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 89485791b2612b6df2c0cce66f24856571c85dde
|
4
|
+
data.tar.gz: 8ac703cf8b70c4ccb5a680c91f64c12f8d7c21cf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6693cdfccee6b3787ed382feb31cd51818f548ba2e5643121920bfb81d7932632ed2ca01bb263e56d1a9c60d6a39f4077a21e988338274bb4c4baf97274d774e
|
7
|
+
data.tar.gz: 032c8c70a6851bc94f2901401b454011873419dc9cc80a6ec0e2f2de2272abe555d1682529217cb6298a7f700d3ac922bd81b8a6c7d1a0524d490b0fa90df48f
|
data/HISTORY
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
== 0.4.1 2013-04-11
|
2
|
+
|
3
|
+
* Set better labels and disable pager if invoked by git difftool.
|
4
|
+
|
5
|
+
* Enhance the --color option like Git.
|
6
|
+
|
7
|
+
== 0.4.0 2013-04-04
|
8
|
+
|
9
|
+
* Add inline word-diff highlighting.
|
10
|
+
|
11
|
+
* Improve suspicious whitespace highlighting.
|
12
|
+
|
1
13
|
== 0.3.2 2013-01-09
|
2
14
|
|
3
15
|
* Do not choke on encoding errors when colorizing on Ruby 1.9+.
|
data/lib/di.rb
CHANGED
@@ -28,7 +28,7 @@
|
|
28
28
|
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
29
29
|
# SUCH DAMAGE.
|
30
30
|
|
31
|
-
MYVERSION = "0.4.
|
31
|
+
MYVERSION = "0.4.1"
|
32
32
|
MYNAME = File.basename($0)
|
33
33
|
MYCOPYRIGHT = "Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013 Akinori MUSHA"
|
34
34
|
|
@@ -130,9 +130,18 @@ usage: #{MYNAME} [flags] [files]
|
|
130
130
|
'Pipe output into pager if stdout is a terminal. [+][*]') { |val|
|
131
131
|
$diff.use_pager = val if $stdout.tty?
|
132
132
|
}
|
133
|
-
opts.on('--[no-]color',
|
133
|
+
opts.on('--[no-]color[=WHEN]',
|
134
134
|
'Colorize output if stdout is a terminal and the format is unified or context. [+][*]') { |val|
|
135
|
-
|
135
|
+
case val
|
136
|
+
when true, 'always'
|
137
|
+
$diff.colorize = true
|
138
|
+
when 'auto'
|
139
|
+
$diff.colorize = $stdout.tty?
|
140
|
+
when false, 'never'
|
141
|
+
$diff.colorize = false
|
142
|
+
else
|
143
|
+
raise OptionParser::ParseError, "unknown value for --color: #{val}"
|
144
|
+
end
|
136
145
|
}
|
137
146
|
opts.on('--[no-]highlight-whitespace',
|
138
147
|
'Highlight whitespace differences in colorized output. [+][*]') { |val|
|
@@ -392,9 +401,16 @@ EOS
|
|
392
401
|
|
393
402
|
begin
|
394
403
|
opts.parse('--rsync-exclude', '--fignore-exclude', '--ignore-cvs-lines',
|
395
|
-
'--pager', '--color', '--highlight-whitespace',
|
404
|
+
'--pager', '--color=auto', '--highlight-whitespace',
|
396
405
|
'-U3', '-N', '-r', '-p', '-d')
|
397
406
|
|
407
|
+
if ENV['GIT_DIFFTOOL_EXTCMD']
|
408
|
+
if base = ENV['BASE']
|
409
|
+
opts.parse('--label', File.join('a', base), '--label', File.join('b', base))
|
410
|
+
end
|
411
|
+
opts.parse('--no-pager')
|
412
|
+
end
|
413
|
+
|
398
414
|
if value = ENV[ENV_NAME]
|
399
415
|
require 'shellwords'
|
400
416
|
opts.parse(*value.shellsplit)
|
@@ -452,11 +468,7 @@ EOS
|
|
452
468
|
end
|
453
469
|
end
|
454
470
|
|
455
|
-
def
|
456
|
-
invoke_pager! if $diff.use_pager
|
457
|
-
end
|
458
|
-
|
459
|
-
def invoke_pager!
|
471
|
+
def invoke_filter
|
460
472
|
$stdout.flush
|
461
473
|
$stderr.flush
|
462
474
|
pr, pw = IO.pipe
|
@@ -466,11 +478,7 @@ def invoke_pager!
|
|
466
478
|
pr.close
|
467
479
|
pw.close
|
468
480
|
IO.select([$stdin], nil, [$stdin])
|
469
|
-
|
470
|
-
exec(ENV['PAGER'] || 'more')
|
471
|
-
rescue
|
472
|
-
$stderr.puts "Pager failed."
|
473
|
-
end
|
481
|
+
yield
|
474
482
|
}
|
475
483
|
|
476
484
|
$stdout.reopen(pw)
|
@@ -485,6 +493,35 @@ def invoke_pager!
|
|
485
493
|
}
|
486
494
|
end
|
487
495
|
|
496
|
+
def invoke_pager
|
497
|
+
invoke_pager! if $diff.use_pager
|
498
|
+
end
|
499
|
+
|
500
|
+
def invoke_pager!
|
501
|
+
invoke_filter {
|
502
|
+
begin
|
503
|
+
exec(ENV['PAGER'] || 'more')
|
504
|
+
rescue
|
505
|
+
$stderr.puts "Pager failed."
|
506
|
+
end
|
507
|
+
}
|
508
|
+
end
|
509
|
+
|
510
|
+
def invoke_colorizer
|
511
|
+
invoke_colorizer! if $diff.colorize
|
512
|
+
end
|
513
|
+
|
514
|
+
def invoke_colorizer!
|
515
|
+
invoke_filter {
|
516
|
+
case $diff.format
|
517
|
+
when :unified
|
518
|
+
colorize_unified_diff
|
519
|
+
when :context
|
520
|
+
colorize_context_diff
|
521
|
+
end
|
522
|
+
}
|
523
|
+
end
|
524
|
+
|
488
525
|
def set_flag(flag, val)
|
489
526
|
case val
|
490
527
|
when true, false
|
@@ -585,21 +622,8 @@ def diff_files(file1, file2)
|
|
585
622
|
end
|
586
623
|
|
587
624
|
def call_diff(*args)
|
588
|
-
|
589
|
-
|
590
|
-
case $diff.format
|
591
|
-
when :unified
|
592
|
-
filter = method(:colorize_unified_diff)
|
593
|
-
when :context
|
594
|
-
filter = method(:colorize_context_diff)
|
595
|
-
end
|
596
|
-
end
|
597
|
-
if filter
|
598
|
-
require 'shellwords'
|
599
|
-
filter.call(IO.popen(command_args.shelljoin, 'r'))
|
600
|
-
else
|
601
|
-
system(*command_args)
|
602
|
-
end
|
625
|
+
invoke_colorizer
|
626
|
+
system *[DIFF_CMD, $diff.flags, args].flatten
|
603
627
|
status = $? >> 8
|
604
628
|
$status = status if $status < status
|
605
629
|
return status
|
@@ -709,7 +733,7 @@ def diff_exclude?(dir, basename)
|
|
709
733
|
return false
|
710
734
|
end
|
711
735
|
|
712
|
-
def colorize_unified_diff
|
736
|
+
def colorize_unified_diff
|
713
737
|
begin
|
714
738
|
require 'diff/lcs'
|
715
739
|
colorize_unified_diff_hunk = method(:colorize_hunk_in_unified_diff_inline)
|
@@ -723,7 +747,7 @@ def colorize_unified_diff(io)
|
|
723
747
|
state = :comment
|
724
748
|
hunk_left = nil
|
725
749
|
hunk = []
|
726
|
-
|
750
|
+
$stdin.each_line { |line|
|
727
751
|
line.chomp!
|
728
752
|
replace_invalid_bytes!(line)
|
729
753
|
case state
|
@@ -762,8 +786,6 @@ def colorize_unified_diff(io)
|
|
762
786
|
|
763
787
|
print color, line, colors.off, "\n"
|
764
788
|
}
|
765
|
-
|
766
|
-
io.close
|
767
789
|
end
|
768
790
|
|
769
791
|
def colorize_hunk_in_unified_diff_normal(hunk)
|
@@ -893,8 +915,8 @@ def colorize_inline_diff(line1, line2)
|
|
893
915
|
}
|
894
916
|
}
|
895
917
|
|
896
|
-
print colors.old, '-', aline1, "\n",
|
897
|
-
colors.new, '+', aline2, "\n"
|
918
|
+
print colors.old, '-', aline1, colors.off, "\n",
|
919
|
+
colors.new, '+', aline2, colors.off, "\n"
|
898
920
|
end
|
899
921
|
|
900
922
|
def highlight_whitespace_in_unified_diff!(line, color)
|
@@ -910,13 +932,13 @@ def highlight_whitespace_in_unified_diff!(line, color)
|
|
910
932
|
}
|
911
933
|
end
|
912
934
|
|
913
|
-
def colorize_context_diff
|
935
|
+
def colorize_context_diff
|
914
936
|
colors = $diff.colors
|
915
937
|
colors.to_function ||= colors.off + colors.function
|
916
938
|
|
917
939
|
state = :comment
|
918
940
|
hunk_part = nil
|
919
|
-
|
941
|
+
$stdin.each_line { |line|
|
920
942
|
line.chomp!
|
921
943
|
replace_invalid_bytes!(line)
|
922
944
|
case state
|
@@ -982,8 +1004,6 @@ def colorize_context_diff(io)
|
|
982
1004
|
|
983
1005
|
print color, line, colors.off, "\n"
|
984
1006
|
}
|
985
|
-
|
986
|
-
io.close
|
987
1007
|
end
|
988
1008
|
|
989
1009
|
def highlight_whitespace_in_context_diff!(line, color)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: di
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Akinori MUSHA
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-04-
|
11
|
+
date: 2013-04-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: diff-lcs
|
@@ -66,7 +66,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
66
66
|
version: '0'
|
67
67
|
requirements: []
|
68
68
|
rubyforge_project:
|
69
|
-
rubygems_version: 2.0.
|
69
|
+
rubygems_version: 2.0.0
|
70
70
|
signing_key:
|
71
71
|
specification_version: 4
|
72
72
|
summary: A wrapper around GNU diff(1)
|