Open erkolson opened 7 years ago
It is something with text encoding in the Open3.popen3()
function?
You can reproduce it with this code:
#!/usr/bin/env ruby
require 'open3'
Open3.popen3('diff', '-U 10000', '/file1', '/file2') do |i, o, e|
puts "o = #{o.read}"
puts "e = #{e.read}"
end
It outputs this:
o =
e = diff: invalid number ' 10000'
A workaround is to pass a different value for :diff
when invoking diffy:
puts Diffy::Diff.new('/file1', '/file2', {:source => 'files', :diff => '-U10000'})
I've tested diff with -U10000
on OS X, Alpine/Busybox, and Ubuntu; all work.
Tried the solution on ruby-alpine 2.4.1. The solution works on command line, but in rails the generated HTML diff results in "unchanged" for all lines.
Text output seems to work as expected:
-first line
+first changed line
second line
-
+added line
HTML output
<div class="diff">
<ul>
<li class="unchanged"><span>second line</span></li>
</ul>
</div>
@erkolson :diff => '-U10000'
did the trick! thanks! how did you find that out???
is there a work around for :context ? It stops working again when I use :context....
I just found out that :context => 0
is the same thing as :diff => '-U0'
Ruby 2.4.1, diffy 3.2.0, BusyBox v1.24.2 (2017-11-23 08:52:33 GMT) multi-call binary.
irb(main):029:0> Diffy::Diff.new("foo\n", "bar\n", diff: '-U0').to_s
=> "-foo\n+bar\n"
irb(main):030:0> Diffy::Diff.new("foo\n", "bar\n", diff: '-U0').to_s(:html)
=> "<div class=\"diff\"></div>"
for me works only if redefine ORIGINAL_DEFAULT_OPTIONS constant (used in html_formatter.rb)
Diffy::Diff::ORIGINAL_DEFAULT_OPTIONS = {
:diff => '-U10000', # was :diff => '-U 10000',
:source => 'strings',
:include_diff_info => false,
:include_plus_and_minus_in_html => false,
:context => nil,
:allow_empty_diff => true,
}
Diffy::Diff.new("Hello!\n", "Hallo!\n", diff: '-U10000', include_plus_and_minus_in_html: true, include_diff_info: true).to_s(:html)
Result
=> "<div class=\"diff\">\n <ul>\n <li class=\"diff-comment\"><span>--- /tmp/diffy20180321-96-sulp0x</span></li>\n <li class=\"diff-comment\"><span>+++ /tmp/diffy20180321-96-1tutkxl</span></li>\n <li class=\"diff-block-info\"><span>@@ -1 +1 @@</span></li>\n <li class=\"del\"><del><span class=\"symbol\">-</span>H<strong>e</strong>llo!</del></li>\n <li class=\"ins\"><ins><span class=\"symbol\">+</span>H<strong>a</strong>llo!</ins></li>\n </ul>\n</div>\n"
Though the diff binary that ships with Alpine linux will produce output as expected for differing files, diffy fails to produce any output.
I've tested diffy with all output types =>
:text
,:color
,:html
, etc. I've also tested with variables and files.After compiling gnu diff from source and installing in /usr/bin, diffy works!