diffy 3.2.1 → 3.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/CHANGELOG +13 -0
- data/CONTRIBUTORS +1 -0
- data/README.md +9 -0
- data/lib/diffy/diff.rb +16 -11
- data/lib/diffy/html_formatter.rb +8 -4
- data/lib/diffy/version.rb +1 -1
- data/spec/diffy_spec.rb +31 -0
- metadata +6 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: b2120d3e1b623e2536ad4bb44454847c1ea2033c96cd83a98bc8ec7179a45f55
|
4
|
+
data.tar.gz: 306bc14f06cbacb86496e89290ff4c0c4454358939d694f172d423f20d9357ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2eaed71c7d28fe17f60eaac94491abdbae0ae40d8596d61e92e4c4436d49ee898393268afc70e3bbaca95aecb9d4d10732bec403eaf949790667bca32cdccbca
|
7
|
+
data.tar.gz: ba4d8b43b5110ad6143acaf4ee8b9742198164569d4a006bae4e22aca93ca2904ca3b2f66fe43b004f23aea295453be92120d6752741f3fcf88171427f6d5127
|
data/CHANGELOG
CHANGED
@@ -1,5 +1,18 @@
|
|
1
|
+
== 3.4.1 ==
|
2
|
+
Prevent remote code execution from user controlled diff file paths. This
|
3
|
+
issue was only present in Windows platforms. Thanks @tehryanx for reporting
|
4
|
+
and testing the fix!
|
5
|
+
|
6
|
+
== 3.4.0 ==
|
7
|
+
Remove space between U diff option and context number. Thanks @tomas!
|
8
|
+
Add option to ignore CRLF diffs in HTML comparisons. Thanks @ptyagi16!
|
9
|
+
|
10
|
+
== 3.3.0 ==
|
11
|
+
Fix diff lines that begin with -- or ++. Thanks @dark-panda!
|
12
|
+
|
1
13
|
== 3.2.1 ==
|
2
14
|
Fix default options on alpine linux. Thanks @evgen!
|
15
|
+
|
3
16
|
== 3.1.0 ==
|
4
17
|
Side by side diffs. Thanks Runar Skaare Tveiten!
|
5
18
|
|
data/CONTRIBUTORS
CHANGED
data/README.md
CHANGED
@@ -277,6 +277,15 @@ combined with the `:context` option.
|
|
277
277
|
foo
|
278
278
|
bar
|
279
279
|
|
280
|
+
### `:ignore_crlf` when doing HTML compares
|
281
|
+
|
282
|
+
You can make the HTML output ignore the CRLF by passing the `:ignore_crlf` option a truthy value.
|
283
|
+
|
284
|
+
>> puts Diffy::Diff.new(" foo\nbar\n", "foo\r\nbar\r\n", ignore_crlf: true).to_s(:html)
|
285
|
+
"<div class=\"diff\"></div>"
|
286
|
+
|
287
|
+
|
288
|
+
|
280
289
|
Default Diff Options
|
281
290
|
--------------------
|
282
291
|
|
data/lib/diffy/diff.rb
CHANGED
@@ -42,20 +42,14 @@ module Diffy
|
|
42
42
|
|
43
43
|
def diff
|
44
44
|
@diff ||= begin
|
45
|
-
paths = case options[:source]
|
45
|
+
@paths = case options[:source]
|
46
46
|
when 'strings'
|
47
47
|
[tempfile(string1), tempfile(string2)]
|
48
48
|
when 'files'
|
49
49
|
[string1, string2]
|
50
50
|
end
|
51
51
|
|
52
|
-
|
53
|
-
# don't use open3 on windows
|
54
|
-
cmd = sprintf '"%s" %s %s', diff_bin, diff_options.join(' '), paths.map { |s| %("#{s}") }.join(' ')
|
55
|
-
diff = `#{cmd}`
|
56
|
-
else
|
57
|
-
diff = Open3.popen3(diff_bin, *(diff_options + paths)) { |i, o, e| o.read }
|
58
|
-
end
|
52
|
+
diff, stderr, process_status = Open3.capture3(diff_bin, *(diff_options + @paths))
|
59
53
|
diff.force_encoding('ASCII-8BIT') if diff.respond_to?(:valid_encoding?) && !diff.valid_encoding?
|
60
54
|
if diff =~ /\A\s*\Z/ && !options[:allow_empty_diff]
|
61
55
|
diff = case options[:source]
|
@@ -84,9 +78,20 @@ module Diffy
|
|
84
78
|
|
85
79
|
def each
|
86
80
|
lines = case @options[:include_diff_info]
|
87
|
-
when false
|
88
|
-
|
81
|
+
when false
|
82
|
+
# this "primes" the diff and sets up the paths we'll reference below.
|
83
|
+
diff
|
84
|
+
|
85
|
+
# caching this regexp improves the performance of the loop by a
|
86
|
+
# considerable amount.
|
87
|
+
regexp = /^(--- "?#{@paths[0]}"?|\+\+\+ "?#{@paths[1]}"?|@@|\\\\)/
|
88
|
+
|
89
|
+
diff.split("\n").reject{|x| x =~ regexp }.map {|line| line + "\n" }
|
90
|
+
|
91
|
+
when true
|
92
|
+
diff.split("\n").map {|line| line + "\n" }
|
89
93
|
end
|
94
|
+
|
90
95
|
if block_given?
|
91
96
|
lines.each{|line| yield line}
|
92
97
|
else
|
@@ -163,7 +168,7 @@ module Diffy
|
|
163
168
|
|
164
169
|
# options pass to diff program
|
165
170
|
def diff_options
|
166
|
-
Array(options[:context] ? "-U
|
171
|
+
Array(options[:context] ? "-U#{options[:context]}" : options[:diff])
|
167
172
|
end
|
168
173
|
|
169
174
|
end
|
data/lib/diffy/html_formatter.rb
CHANGED
@@ -90,10 +90,14 @@ module Diffy
|
|
90
90
|
|
91
91
|
def split_characters(chunk)
|
92
92
|
chunk.gsub(/^./, '').each_line.map do |line|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
93
|
+
if @options[:ignore_crlf]
|
94
|
+
(line.chomp.split('') + ['\n']).map{|chr| ERB::Util.h(chr) }
|
95
|
+
else
|
96
|
+
chars = line.sub(/([\r\n]$)/, '').split('')
|
97
|
+
# add escaped newlines
|
98
|
+
chars << '\n'
|
99
|
+
chars.map{|chr| ERB::Util.h(chr) }
|
100
|
+
end
|
97
101
|
end.flatten.join("\n") + "\n"
|
98
102
|
end
|
99
103
|
|
data/lib/diffy/version.rb
CHANGED
data/spec/diffy_spec.rb
CHANGED
@@ -503,6 +503,13 @@ baz
|
|
503
503
|
expect(@diff.to_s(:html)).to eq(html)
|
504
504
|
end
|
505
505
|
|
506
|
+
it "should treat unix vs windows newlines as same if option :ignore_crlf" do
|
507
|
+
@diff = Diffy::Diff.new("one\ntwo\nthree\n", "one\r\ntwo\r\nthree\r\n",
|
508
|
+
ignore_crlf: true)
|
509
|
+
empty_diff = "<div class=\"diff\"></div>"
|
510
|
+
expect(@diff.to_s(:html)).to eq(empty_diff)
|
511
|
+
end
|
512
|
+
|
506
513
|
describe 'with lines that include \n' do
|
507
514
|
before do
|
508
515
|
string1 = 'a\nb'"\n"
|
@@ -585,6 +592,30 @@ baz
|
|
585
592
|
line
|
586
593
|
end).to eq([" foo\n", " bar\n", "+baz\n"])
|
587
594
|
end
|
595
|
+
|
596
|
+
it "should handle lines that begin with --" do
|
597
|
+
string1 = "a a\n-- b\nc c\n"
|
598
|
+
string2 = "a a\nb b\nc c\n"
|
599
|
+
|
600
|
+
expect(Diffy::Diff.new(string1, string2).to_s).to eq <<-DIFF
|
601
|
+
a a
|
602
|
+
--- b
|
603
|
+
+b b
|
604
|
+
c c
|
605
|
+
DIFF
|
606
|
+
end
|
607
|
+
|
608
|
+
it "should handle lines that begin with ++" do
|
609
|
+
string1 = "a a\nb b\nc c\n"
|
610
|
+
string2 = "a a\n++ b\nc c\n"
|
611
|
+
|
612
|
+
expect(Diffy::Diff.new(string1, string2).to_s).to eq <<-DIFF
|
613
|
+
a a
|
614
|
+
-b b
|
615
|
+
+++ b
|
616
|
+
c c
|
617
|
+
DIFF
|
618
|
+
end
|
588
619
|
end
|
589
620
|
end
|
590
621
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: diffy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Goldstein
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-06-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -68,7 +68,7 @@ homepage: http://github.com/samg/diffy
|
|
68
68
|
licenses:
|
69
69
|
- MIT
|
70
70
|
metadata: {}
|
71
|
-
post_install_message:
|
71
|
+
post_install_message:
|
72
72
|
rdoc_options: []
|
73
73
|
require_paths:
|
74
74
|
- lib
|
@@ -83,9 +83,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
83
83
|
- !ruby/object:Gem::Version
|
84
84
|
version: '0'
|
85
85
|
requirements: []
|
86
|
-
|
87
|
-
|
88
|
-
signing_key:
|
86
|
+
rubygems_version: 3.0.6
|
87
|
+
signing_key:
|
89
88
|
specification_version: 4
|
90
89
|
summary: A convenient way to diff string in ruby
|
91
90
|
test_files:
|