diff-lcs 1.3 → 1.4.2
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/Contributing.md +1 -0
- data/History.md +196 -153
- data/Manifest.txt +8 -0
- data/README.rdoc +9 -10
- data/Rakefile +4 -21
- data/autotest/discover.rb +3 -1
- data/bin/htmldiff +7 -4
- data/bin/ldiff +4 -1
- data/lib/diff-lcs.rb +1 -1
- data/lib/diff/lcs.rb +177 -170
- data/lib/diff/lcs/array.rb +1 -1
- data/lib/diff/lcs/backports.rb +9 -0
- data/lib/diff/lcs/block.rb +2 -2
- data/lib/diff/lcs/callbacks.rb +15 -12
- data/lib/diff/lcs/change.rb +30 -37
- data/lib/diff/lcs/htmldiff.rb +17 -16
- data/lib/diff/lcs/hunk.rb +67 -52
- data/lib/diff/lcs/internals.rb +36 -39
- data/lib/diff/lcs/ldiff.rb +33 -25
- data/lib/diff/lcs/string.rb +1 -1
- data/spec/change_spec.rb +31 -7
- data/spec/diff_spec.rb +16 -12
- data/spec/fixtures/aX +1 -0
- data/spec/fixtures/bXaX +1 -0
- data/spec/fixtures/ldiff/output.diff +4 -0
- data/spec/fixtures/ldiff/output.diff-c +7 -0
- data/spec/fixtures/ldiff/output.diff-e +3 -0
- data/spec/fixtures/ldiff/output.diff-f +3 -0
- data/spec/fixtures/ldiff/output.diff-u +5 -0
- data/spec/hunk_spec.rb +20 -20
- data/spec/issues_spec.rb +59 -10
- data/spec/lcs_spec.rb +10 -10
- data/spec/ldiff_spec.rb +62 -29
- data/spec/patch_spec.rb +93 -99
- data/spec/sdiff_spec.rb +89 -89
- data/spec/spec_helper.rb +115 -63
- data/spec/traverse_balanced_spec.rb +173 -173
- data/spec/traverse_sequences_spec.rb +28 -28
- metadata +30 -30
| @@ -1,10 +1,10 @@ | |
| 1 | 
            -
            #  | 
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 3 | 
             
            require 'spec_helper'
         | 
| 4 4 |  | 
| 5 | 
            -
            describe  | 
| 6 | 
            -
              describe  | 
| 7 | 
            -
                describe  | 
| 5 | 
            +
            describe 'Diff::LCS.traverse_sequences' do
         | 
| 6 | 
            +
              describe 'callback with no finishers' do
         | 
| 7 | 
            +
                describe 'over (seq1, seq2)' do
         | 
| 8 8 | 
             
                  before(:each) do
         | 
| 9 9 | 
             
                    @callback_s1_s2 = simple_callback_no_finishers
         | 
| 10 10 | 
             
                    Diff::LCS.traverse_sequences(seq1, seq2, @callback_s1_s2)
         | 
| @@ -13,27 +13,27 @@ describe "Diff::LCS.traverse_sequences" do | |
| 13 13 | 
             
                    Diff::LCS.traverse_sequences(seq2, seq1, @callback_s2_s1)
         | 
| 14 14 | 
             
                  end
         | 
| 15 15 |  | 
| 16 | 
            -
                  it  | 
| 16 | 
            +
                  it 'has the correct LCS result on left-matches' do
         | 
| 17 17 | 
             
                    expect(@callback_s1_s2.matched_a).to eq(correct_lcs)
         | 
| 18 18 | 
             
                    expect(@callback_s2_s1.matched_a).to eq(correct_lcs)
         | 
| 19 19 | 
             
                  end
         | 
| 20 20 |  | 
| 21 | 
            -
                  it  | 
| 21 | 
            +
                  it 'has the correct LCS result on right-matches' do
         | 
| 22 22 | 
             
                    expect(@callback_s1_s2.matched_b).to eq(correct_lcs)
         | 
| 23 23 | 
             
                    expect(@callback_s2_s1.matched_b).to eq(correct_lcs)
         | 
| 24 24 | 
             
                  end
         | 
| 25 25 |  | 
| 26 | 
            -
                  it  | 
| 26 | 
            +
                  it 'has the correct skipped sequences with the left sequence' do
         | 
| 27 27 | 
             
                    expect(@callback_s1_s2.discards_a).to eq(skipped_seq1)
         | 
| 28 28 | 
             
                    expect(@callback_s2_s1.discards_a).to eq(skipped_seq2)
         | 
| 29 29 | 
             
                  end
         | 
| 30 30 |  | 
| 31 | 
            -
                  it  | 
| 31 | 
            +
                  it 'has the correct skipped sequences with the right sequence' do
         | 
| 32 32 | 
             
                    expect(@callback_s1_s2.discards_b).to eq(skipped_seq2)
         | 
| 33 33 | 
             
                    expect(@callback_s2_s1.discards_b).to eq(skipped_seq1)
         | 
| 34 34 | 
             
                  end
         | 
| 35 35 |  | 
| 36 | 
            -
                  it  | 
| 36 | 
            +
                  it 'does not have anything done markers from the left or right sequences' do
         | 
| 37 37 | 
             
                    expect(@callback_s1_s2.done_a).to be_empty
         | 
| 38 38 | 
             
                    expect(@callback_s1_s2.done_b).to be_empty
         | 
| 39 39 | 
             
                    expect(@callback_s2_s1.done_a).to be_empty
         | 
| @@ -41,64 +41,64 @@ describe "Diff::LCS.traverse_sequences" do | |
| 41 41 | 
             
                  end
         | 
| 42 42 | 
             
                end
         | 
| 43 43 |  | 
| 44 | 
            -
                describe  | 
| 44 | 
            +
                describe 'over (hello, hello)' do
         | 
| 45 45 | 
             
                  before(:each) do
         | 
| 46 46 | 
             
                    @callback = simple_callback_no_finishers
         | 
| 47 47 | 
             
                    Diff::LCS.traverse_sequences(hello, hello, @callback)
         | 
| 48 48 | 
             
                  end
         | 
| 49 49 |  | 
| 50 | 
            -
                  it  | 
| 50 | 
            +
                  it 'has the correct LCS result on left-matches' do
         | 
| 51 51 | 
             
                    expect(@callback.matched_a).to eq(hello.split(//))
         | 
| 52 52 | 
             
                  end
         | 
| 53 53 |  | 
| 54 | 
            -
                  it  | 
| 54 | 
            +
                  it 'has the correct LCS result on right-matches' do
         | 
| 55 55 | 
             
                    expect(@callback.matched_b).to eq(hello.split(//))
         | 
| 56 56 | 
             
                  end
         | 
| 57 57 |  | 
| 58 | 
            -
                  it  | 
| 58 | 
            +
                  it 'has the correct skipped sequences with the left sequence', :only => true do
         | 
| 59 59 | 
             
                    expect(@callback.discards_a).to be_empty
         | 
| 60 60 | 
             
                  end
         | 
| 61 61 |  | 
| 62 | 
            -
                  it  | 
| 62 | 
            +
                  it 'has the correct skipped sequences with the right sequence' do
         | 
| 63 63 | 
             
                    expect(@callback.discards_b).to be_empty
         | 
| 64 64 | 
             
                  end
         | 
| 65 65 |  | 
| 66 | 
            -
                  it  | 
| 66 | 
            +
                  it 'does not have anything done markers from the left or right sequences' do
         | 
| 67 67 | 
             
                    expect(@callback.done_a).to be_empty
         | 
| 68 68 | 
             
                    expect(@callback.done_b).to be_empty
         | 
| 69 69 | 
             
                  end
         | 
| 70 70 | 
             
                end
         | 
| 71 71 |  | 
| 72 | 
            -
                describe  | 
| 72 | 
            +
                describe 'over (hello_ary, hello_ary)' do
         | 
| 73 73 | 
             
                  before(:each) do
         | 
| 74 74 | 
             
                    @callback = simple_callback_no_finishers
         | 
| 75 75 | 
             
                    Diff::LCS.traverse_sequences(hello_ary, hello_ary, @callback)
         | 
| 76 76 | 
             
                  end
         | 
| 77 77 |  | 
| 78 | 
            -
                  it  | 
| 78 | 
            +
                  it 'has the correct LCS result on left-matches' do
         | 
| 79 79 | 
             
                    expect(@callback.matched_a).to eq(hello_ary)
         | 
| 80 80 | 
             
                  end
         | 
| 81 81 |  | 
| 82 | 
            -
                  it  | 
| 82 | 
            +
                  it 'has the correct LCS result on right-matches' do
         | 
| 83 83 | 
             
                    expect(@callback.matched_b).to eq(hello_ary)
         | 
| 84 84 | 
             
                  end
         | 
| 85 85 |  | 
| 86 | 
            -
                  it  | 
| 86 | 
            +
                  it 'has the correct skipped sequences with the left sequence' do
         | 
| 87 87 | 
             
                    expect(@callback.discards_a).to be_empty
         | 
| 88 88 | 
             
                  end
         | 
| 89 89 |  | 
| 90 | 
            -
                  it  | 
| 90 | 
            +
                  it 'has the correct skipped sequences with the right sequence' do
         | 
| 91 91 | 
             
                    expect(@callback.discards_b).to be_empty
         | 
| 92 92 | 
             
                  end
         | 
| 93 93 |  | 
| 94 | 
            -
                  it  | 
| 94 | 
            +
                  it 'does not have anything done markers from the left or right sequences' do
         | 
| 95 95 | 
             
                    expect(@callback.done_a).to be_empty
         | 
| 96 96 | 
             
                    expect(@callback.done_b).to be_empty
         | 
| 97 97 | 
             
                  end
         | 
| 98 98 | 
             
                end
         | 
| 99 99 | 
             
              end
         | 
| 100 100 |  | 
| 101 | 
            -
              describe  | 
| 101 | 
            +
              describe 'callback with finisher' do
         | 
| 102 102 | 
             
                before(:each) do
         | 
| 103 103 | 
             
                  @callback_s1_s2 = simple_callback
         | 
| 104 104 | 
             
                  Diff::LCS.traverse_sequences(seq1, seq2, @callback_s1_s2)
         | 
| @@ -106,28 +106,28 @@ describe "Diff::LCS.traverse_sequences" do | |
| 106 106 | 
             
                  Diff::LCS.traverse_sequences(seq2, seq1, @callback_s2_s1)
         | 
| 107 107 | 
             
                end
         | 
| 108 108 |  | 
| 109 | 
            -
                it  | 
| 109 | 
            +
                it 'has the correct LCS result on left-matches' do
         | 
| 110 110 | 
             
                  expect(@callback_s1_s2.matched_a).to eq(correct_lcs)
         | 
| 111 111 | 
             
                  expect(@callback_s2_s1.matched_a).to eq(correct_lcs)
         | 
| 112 112 | 
             
                end
         | 
| 113 113 |  | 
| 114 | 
            -
                it  | 
| 114 | 
            +
                it 'has the correct LCS result on right-matches' do
         | 
| 115 115 | 
             
                  expect(@callback_s1_s2.matched_b).to eq(correct_lcs)
         | 
| 116 116 | 
             
                  expect(@callback_s2_s1.matched_b).to eq(correct_lcs)
         | 
| 117 117 | 
             
                end
         | 
| 118 118 |  | 
| 119 | 
            -
                it  | 
| 119 | 
            +
                it 'has the correct skipped sequences for the left sequence' do
         | 
| 120 120 | 
             
                  expect(@callback_s1_s2.discards_a).to eq(skipped_seq1)
         | 
| 121 121 | 
             
                  expect(@callback_s2_s1.discards_a).to eq(skipped_seq2)
         | 
| 122 122 | 
             
                end
         | 
| 123 123 |  | 
| 124 | 
            -
                it  | 
| 124 | 
            +
                it 'has the correct skipped sequences for the right sequence' do
         | 
| 125 125 | 
             
                  expect(@callback_s1_s2.discards_b).to eq(skipped_seq2)
         | 
| 126 126 | 
             
                  expect(@callback_s2_s1.discards_b).to eq(skipped_seq1)
         | 
| 127 127 | 
             
                end
         | 
| 128 128 |  | 
| 129 | 
            -
                it  | 
| 130 | 
            -
                  expect(@callback_s1_s2.done_a).to eq([[ | 
| 129 | 
            +
                it 'has done markers differently-sized sequences' do
         | 
| 130 | 
            +
                  expect(@callback_s1_s2.done_a).to eq([['p', 9, 's', 10]])
         | 
| 131 131 | 
             
                  expect(@callback_s1_s2.done_b).to be_empty
         | 
| 132 132 |  | 
| 133 133 | 
             
                  # 20110731 I don't yet understand why this particular behaviour
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: diff-lcs
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version:  | 
| 4 | 
            +
              version: 1.4.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Austin Ziegler
         | 
| 8 | 
            -
            autorequire: | 
| 8 | 
            +
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2020-06-24 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: hoe-doofus
         | 
| @@ -66,20 +66,6 @@ dependencies: | |
| 66 66 | 
             
                - - "~>"
         | 
| 67 67 | 
             
                  - !ruby/object:Gem::Version
         | 
| 68 68 | 
             
                    version: '1.0'
         | 
| 69 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 70 | 
            -
              name: hoe-travis
         | 
| 71 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 72 | 
            -
                requirements:
         | 
| 73 | 
            -
                - - "~>"
         | 
| 74 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 75 | 
            -
                    version: '1.2'
         | 
| 76 | 
            -
              type: :development
         | 
| 77 | 
            -
              prerelease: false
         | 
| 78 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 79 | 
            -
                requirements:
         | 
| 80 | 
            -
                - - "~>"
         | 
| 81 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 82 | 
            -
                    version: '1.2'
         | 
| 83 69 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 84 70 | 
             
              name: rspec
         | 
| 85 71 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -109,7 +95,7 @@ dependencies: | |
| 109 95 | 
             
                    version: '10.0'
         | 
| 110 96 | 
             
                - - "<"
         | 
| 111 97 | 
             
                  - !ruby/object:Gem::Version
         | 
| 112 | 
            -
                    version: ' | 
| 98 | 
            +
                    version: '14'
         | 
| 113 99 | 
             
              type: :development
         | 
| 114 100 | 
             
              prerelease: false
         | 
| 115 101 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| @@ -119,7 +105,7 @@ dependencies: | |
| 119 105 | 
             
                    version: '10.0'
         | 
| 120 106 | 
             
                - - "<"
         | 
| 121 107 | 
             
                  - !ruby/object:Gem::Version
         | 
| 122 | 
            -
                    version: ' | 
| 108 | 
            +
                    version: '14'
         | 
| 123 109 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 124 110 | 
             
              name: rdoc
         | 
| 125 111 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -140,23 +126,27 @@ dependencies: | |
| 140 126 | 
             
                requirements:
         | 
| 141 127 | 
             
                - - "~>"
         | 
| 142 128 | 
             
                  - !ruby/object:Gem::Version
         | 
| 143 | 
            -
                    version: '3. | 
| 129 | 
            +
                    version: '3.22'
         | 
| 144 130 | 
             
              type: :development
         | 
| 145 131 | 
             
              prerelease: false
         | 
| 146 132 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 147 133 | 
             
                requirements:
         | 
| 148 134 | 
             
                - - "~>"
         | 
| 149 135 | 
             
                  - !ruby/object:Gem::Version
         | 
| 150 | 
            -
                    version: '3. | 
| 136 | 
            +
                    version: '3.22'
         | 
| 151 137 | 
             
            description: |-
         | 
| 152 138 | 
             
              Diff::LCS computes the difference between two Enumerable sequences using the
         | 
| 153 139 | 
             
              McIlroy-Hunt longest common subsequence (LCS) algorithm. It includes utilities
         | 
| 154 140 | 
             
              to create a simple HTML diff output format and a standard diff-like tool.
         | 
| 155 141 |  | 
| 156 | 
            -
              This is release 1. | 
| 157 | 
            -
              to  | 
| 158 | 
            -
               | 
| 159 | 
            -
             | 
| 142 | 
            +
              This is release 1.4, providing a simple extension that allows for
         | 
| 143 | 
            +
              Diff::LCS::Change objects to be treated implicitly as arrays. Ruby versions
         | 
| 144 | 
            +
              below 2.5 are soft-deprecated.
         | 
| 145 | 
            +
             | 
| 146 | 
            +
              This means that older versions are no longer part of the CI test suite. If any
         | 
| 147 | 
            +
              changes have been introduced that break those versions, bug reports and patches
         | 
| 148 | 
            +
              will be accepted, but it will be up to the reporter to verify any fixes prior
         | 
| 149 | 
            +
              to release. A future release will completely break compatibility.
         | 
| 160 150 | 
             
            email:
         | 
| 161 151 | 
             
            - halostatue@gmail.com
         | 
| 162 152 | 
             
            executables:
         | 
| @@ -189,6 +179,7 @@ files: | |
| 189 179 | 
             
            - lib/diff-lcs.rb
         | 
| 190 180 | 
             
            - lib/diff/lcs.rb
         | 
| 191 181 | 
             
            - lib/diff/lcs/array.rb
         | 
| 182 | 
            +
            - lib/diff/lcs/backports.rb
         | 
| 192 183 | 
             
            - lib/diff/lcs/block.rb
         | 
| 193 184 | 
             
            - lib/diff/lcs/callbacks.rb
         | 
| 194 185 | 
             
            - lib/diff/lcs/change.rb
         | 
| @@ -199,8 +190,15 @@ files: | |
| 199 190 | 
             
            - lib/diff/lcs/string.rb
         | 
| 200 191 | 
             
            - spec/change_spec.rb
         | 
| 201 192 | 
             
            - spec/diff_spec.rb
         | 
| 193 | 
            +
            - spec/fixtures/aX
         | 
| 194 | 
            +
            - spec/fixtures/bXaX
         | 
| 202 195 | 
             
            - spec/fixtures/ds1.csv
         | 
| 203 196 | 
             
            - spec/fixtures/ds2.csv
         | 
| 197 | 
            +
            - spec/fixtures/ldiff/output.diff
         | 
| 198 | 
            +
            - spec/fixtures/ldiff/output.diff-c
         | 
| 199 | 
            +
            - spec/fixtures/ldiff/output.diff-e
         | 
| 200 | 
            +
            - spec/fixtures/ldiff/output.diff-f
         | 
| 201 | 
            +
            - spec/fixtures/ldiff/output.diff-u
         | 
| 204 202 | 
             
            - spec/hunk_spec.rb
         | 
| 205 203 | 
             
            - spec/issues_spec.rb
         | 
| 206 204 | 
             
            - spec/lcs_spec.rb
         | 
| @@ -215,8 +213,11 @@ licenses: | |
| 215 213 | 
             
            - MIT
         | 
| 216 214 | 
             
            - Artistic-2.0
         | 
| 217 215 | 
             
            - GPL-2.0+
         | 
| 218 | 
            -
            metadata: | 
| 219 | 
            -
             | 
| 216 | 
            +
            metadata:
         | 
| 217 | 
            +
              homepage_uri: https://github.com/halostatue/diff-lcs
         | 
| 218 | 
            +
              source_code_uri: https://github.com/halostatue/diff-lcs
         | 
| 219 | 
            +
              bug_tracker_uri: https://github.com/halostatue/diff-lcs/issues
         | 
| 220 | 
            +
            post_install_message:
         | 
| 220 221 | 
             
            rdoc_options:
         | 
| 221 222 | 
             
            - "--main"
         | 
| 222 223 | 
             
            - README.rdoc
         | 
| @@ -233,9 +234,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 233 234 | 
             
                - !ruby/object:Gem::Version
         | 
| 234 235 | 
             
                  version: '0'
         | 
| 235 236 | 
             
            requirements: []
         | 
| 236 | 
            -
             | 
| 237 | 
            -
             | 
| 238 | 
            -
            signing_key: 
         | 
| 237 | 
            +
            rubygems_version: 3.0.3
         | 
| 238 | 
            +
            signing_key:
         | 
| 239 239 | 
             
            specification_version: 4
         | 
| 240 240 | 
             
            summary: Diff::LCS computes the difference between two Enumerable sequences using
         | 
| 241 241 | 
             
              the McIlroy-Hunt longest common subsequence (LCS) algorithm
         |