Skip to content

Commit

Permalink
# This is a combination of 9 commits.
Browse files Browse the repository at this point in the history
# This is the 1st commit message:

Fix improperly placed chunks

Resolve #65

- Also add even more tests for checking `ldiff` results against `diff` results.
- Fix issues with diff/ldiff output highlighted by the above tests.
- Add a parameter to indicate that the hunk being processed is the _last_ hunk;
  this results in correct counting of the hunk size.
- The misplaced chunks were happening because of an improper `.abs` on
  `#diff_size`, when the `.abs` needed to be on the finding of the maximum diff
  size.

# This is the commit message #2:

Ooops. Debugger

# This is the commit message #3:

Restore missing test

- Fix some more format issues raised by the missing test.
- Start fixing Rubocop formatting.

# This is the commit message #4:

Last RuboCop fixes

# This is the commit message #5:

Finalize diff-lcs 1.4

# This is the commit message #6:

Fix #44

The problem here was the precedence of `or` vs `||`. Switching to `||` resulted
in the expected behaviour.

# This is the commit message #7:

Resolve #43

# This is the commit message #8:

Typo

# This is the commit message #9:

Resolve #35 with a comment
  • Loading branch information
halostatue committed Jul 1, 2020
1 parent 99f65fd commit 60613d2
Show file tree
Hide file tree
Showing 28 changed files with 455 additions and 152 deletions.
26 changes: 19 additions & 7 deletions .rubocop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ AllCops:
- diff-lcs.gemspec
- research/**/*

Layout/AlignParameters:
Layout/ParameterAlignment:
EnforcedStyle: with_fixed_indentation

Layout/DotPosition:
Expand All @@ -20,7 +20,7 @@ Layout/ExtraSpacing:
Layout/MultilineMethodCallIndentation:
EnforcedStyle: indented

Metrics/LineLength:
Layout/LineLength:
Max: 110

Naming/FileName:
Expand All @@ -30,17 +30,15 @@ Naming/FileName:
Naming/MemoizedInstanceVariableName:
Exclude: []

Naming/UncommunicativeMethodParamName:
Naming/MethodParameterName:
Exclude:
- lib/diff/lcs/internals.rb
- lib/diff/lcs/hunk.rb
- spec/spec_helper.rb

Naming/VariableNumber:
Exclude: []

Performance/Caller:
Exclude: []

Security/MarshalLoad:
Exclude: []

Expand Down Expand Up @@ -91,7 +89,7 @@ Style/RescueStandardError:
Style/SignalException:
EnforcedStyle: semantic

Layout/IndentHeredoc: { Enabled: false }
Layout/HeredocIndentation: { Enabled: false }
Metrics/AbcSize: { Enabled: false }
Metrics/BlockLength: { Enabled: false }
Metrics/BlockNesting: { Enabled: false }
Expand Down Expand Up @@ -119,3 +117,17 @@ Style/SpecialGlobalVars: { Enabled: false }
Style/SymbolArray: { Enabled: false }
Style/SymbolProc: { Enabled: false }
Style/WordArray: { Enabled: false }

Layout/EmptyLinesAroundAttributeAccessor: { Enabled: true }
Layout/SpaceAroundMethodCallOperator: { Enabled: true }
Lint/DeprecatedOpenSSLConstant: { Enabled: true }
Lint/MixedRegexpCaptureTypes: { Enabled: true }
Lint/RaiseException: { Enabled: true }
Lint/StructNewOverride: { Enabled: true }
Style/ExponentialNotation: { Enabled: true }
Style/HashEachMethods: { Enabled: true }
Style/HashTransformKeys: { Enabled: true }
Style/HashTransformValues: { Enabled: true }
Style/RedundantRegexpCharacterClass: { Enabled: true }
Style/RedundantRegexpEscape: { Enabled: true }
Style/SlicingWithRange: { Enabled: true }
3 changes: 2 additions & 1 deletion Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,15 @@
source 'https://rubygems.org/'

if RUBY_VERSION < '1.9'
gem 'hoe', '~> 3.20'
gem 'rake', '< 11'
gem 'rdoc', '< 4'
gem 'hoe', '~> 3.20'

gem 'ruby-debug'
elsif RUBY_VERSION >= '2.0'
if RUBY_ENGINE == 'ruby'
gem 'simplecov', '~> 0.18'

gem 'byebug'
end
end
Expand Down
14 changes: 14 additions & 0 deletions History.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
# History

## 1.4.4 / 2020-07-01

- Fixed an issue reported by Jun Aruga in the Diff::LCS::Ldiff binary text
detection. [#44][]
- Fixed a theoretical issue reported by Jun Aruga in Diff::LCS::Hunk to raise
a more useful exception. [#43][]
- Added documentation that should address custom object issues as reported in
[#35][].
- Fixed more diff errors, in part reported in [#65][].

## 1.4.3 / 2020-06-29

- Fixed several issues with the 1.4 on Rubies older than 2.0. Some of this was
Expand Down Expand Up @@ -263,8 +273,11 @@
[#29]: https://github.com/halostatue/diff-lcs/pull/29
[#33]: https://github.com/halostatue/diff-lcs/issues/33
[#34]: https://github.com/halostatue/diff-lcs/pull/34
[#35]: https://github.com/halostatue/diff-lcs/issues/35
[#36]: https://github.com/halostatue/diff-lcs/pull/36
[#38]: https://github.com/halostatue/diff-lcs/issues/38
[#43]: https://github.com/halostatue/diff-lcs/issues/43
[#44]: https://github.com/halostatue/diff-lcs/issues/44
[#47]: https://github.com/halostatue/diff-lcs/pull/47
[#48]: https://github.com/halostatue/diff-lcs/issues/48
[#49]: https://github.com/halostatue/diff-lcs/pull/49
Expand All @@ -276,3 +289,4 @@
[#60]: https://github.com/halostatue/diff-lcs/issues/60
[#61]: https://github.com/halostatue/diff-lcs/pull/61
[#63]: https://github.com/halostatue/diff-lcs/issues/63
[#65]: https://github.com/halostatue/diff-lcs/issues/65
29 changes: 23 additions & 6 deletions Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,19 @@ Hoe.plugin :gemspec2
Hoe.plugin :git

if RUBY_VERSION < '1.9'

This comment has been minimized.

Copy link
@mjobin-mdsol

mjobin-mdsol Aug 26, 2020

we still need support for ruby 1.8 ?

This comment has been minimized.

Copy link
@halostatue

halostatue Aug 26, 2020

Author Owner

diff-lcs is one of the oldest libraries for Ruby. Until it hits version 2, we will be supporting Ruby 1.8 as part of the modified semantic versioning support. We no longer test on Ruby 1.8, but breaking Ruby 1.8 is a breaking change.

Something similar will end up happening with diff-lcs 2.x: I will choose a minimum version of Ruby to support (probably Ruby 2.6, but possibly as old as Ruby 2.4) and that will be the minimum version supported through the life of diff-lcs 2.x.

class Array
class Array #:nodoc:
def to_h
Hash[*self.flatten(1)]
Hash[*flatten(1)]
end
end

class Gem::Specification
def metadata=(*)
end
class Gem::Specification #:nodoc:
def metadata=(*); end

def default_value(*); end
end

class Object
class Object #:nodoc:
def caller_locations(*)
[]
end
Expand Down Expand Up @@ -55,3 +56,19 @@ if RUBY_VERSION >= '2.0' && RUBY_ENGINE == 'ruby'
end
end
end

task :ruby18 do
puts <<-MESSAGE
You are starting a barebones Ruby 1.8 docker environment. You will need to
do the following:
- mv Gemfile.lock{,.v2}
- gem install bundler --version 1.17.2 --no-ri --no-rdoc
- ruby -S bundle
- rake
Don't forget to restore your Gemfile.lock after testing.
MESSAGE
sh "docker run -it --rm -v #{Dir.pwd}:/root/diff-lcs bellbind/docker-ruby18-rails2 bash -l"
end
8 changes: 4 additions & 4 deletions diff-lcs.gemspec
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
# -*- encoding: utf-8 -*-
# stub: diff-lcs 1.4.3 ruby lib
# stub: diff-lcs 1.4.4 ruby lib

Gem::Specification.new do |s|
s.name = "diff-lcs".freeze
s.version = "1.4.3"
s.version = "1.4.4"

s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
s.metadata = { "bug_tracker_uri" => "https://github.com/halostatue/diff-lcs/issues", "homepage_uri" => "https://github.com/halostatue/diff-lcs", "source_code_uri" => "https://github.com/halostatue/diff-lcs" } if s.respond_to? :metadata=
s.require_paths = ["lib".freeze]
s.authors = ["Austin Ziegler".freeze]
s.date = "2020-06-29"
s.description = "Diff::LCS computes the difference between two Enumerable sequences using the\nMcIlroy-Hunt longest common subsequence (LCS) algorithm. It includes utilities\nto create a simple HTML diff output format and a standard diff-like tool.\n\nThis is release 1.4, providing a simple extension that allows for\nDiff::LCS::Change objects to be treated implicitly as arrays. Ruby versions\nbelow 2.5 are soft-deprecated.\n\nThis means that older versions are no longer part of the CI test suite. If any\nchanges have been introduced that break those versions, bug reports and patches\nwill be accepted, but it will be up to the reporter to verify any fixes prior\nto release. A future release will completely break compatibility.".freeze
s.date = "2020-07-01"
s.description = "Diff::LCS computes the difference between two Enumerable sequences using the\nMcIlroy-Hunt longest common subsequence (LCS) algorithm. It includes utilities\nto create a simple HTML diff output format and a standard diff-like tool.\n\nThis is release 1.4.3, providing a simple extension that allows for\nDiff::LCS::Change objects to be treated implicitly as arrays and fixes a\nnumber of formatting issues.\n\nRuby versions below 2.5 are soft-deprecated, which means that older versions\nare no longer part of the CI test suite. If any changes have been introduced\nthat break those versions, bug reports and patches will be accepted, but it\nwill be up to the reporter to verify any fixes prior to release. The next\nmajor release will completely break compatibility.".freeze
s.email = ["[email protected]".freeze]
s.executables = ["htmldiff".freeze, "ldiff".freeze]
s.extra_rdoc_files = ["Code-of-Conduct.md".freeze, "Contributing.md".freeze, "History.md".freeze, "License.md".freeze, "Manifest.txt".freeze, "README.rdoc".freeze, "docs/COPYING.txt".freeze, "docs/artistic.txt".freeze]
Expand Down
9 changes: 8 additions & 1 deletion lib/diff/lcs.rb
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ module Diff; end unless defined? Diff # rubocop:disable Style/Documentation
# a x b y c z p d q
# a b c a x b y c z
module Diff::LCS
VERSION = '1.4.3'
VERSION = '1.4.4'
end

require 'diff/lcs/callbacks'
Expand All @@ -60,6 +60,13 @@ module Diff::LCS # rubocop:disable Style/Documentation
# +self+ and +other+. See Diff::LCS#lcs.
#
# lcs = seq1.lcs(seq2)
#
# A note when using objects: Diff::LCS only works properly when each object
# can be used as a key in a Hash, which typically means that the objects must
# implement Object#eql? in a way that two identical values compare
# identically for key purposes. That is:
#
# O.new('a').eql?(O.new('a')) == true
def lcs(other, &block) #:yields self[i] if there are matched subsequences:
Diff::LCS.lcs(self, other, &block)
end
Expand Down
2 changes: 1 addition & 1 deletion lib/diff/lcs/block.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ def initialize(chunk)
end

def diff_size
(@insert.size - @remove.size).abs
@insert.size - @remove.size
end

def op
Expand Down
Loading

0 comments on commit 60613d2

Please sign in to comment.