diff-lcs 1.5.0 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
data/History.md DELETED
@@ -1,400 +0,0 @@
1
- # History
2
-
3
- ## 1.5.0 / 2021-12-23
4
-
5
- - Updated the CI configuration and monkey-patch Hoe.
6
-
7
- - Kenichi Kamiya fixed a test configuration deprecation in SimpleCov. [#69]
8
-
9
- - Tien introduced several corrections and code improvements:
10
-
11
- - Removed an off-by-one error when calculating an index value by embracing
12
- Ruby iteration properly. This had a side-effect of fixing a long-standing
13
- bug in `#traverse_sequences` where the traversal would not be transitive.
14
- That is, `LCS(s2, s1)` should produce a sequence that is transitive with
15
- `LCS(s1, s2)` on traversal, and applying the diff computed from those
16
- results would result in equivalent changes that could be played forward or
17
- backward as appropriate. [#71], [#75]
18
-
19
- - The above fix resulted in a changed order of the longest common subsequence
20
- when callbacks were applied. After analysis, it was determined that the
21
- computed subsequence was _equivalent_ to the prior version, so the test was
22
- updated. This also resulted in the clarification of documentation when
23
- traversing the subsequences. [#79]
24
-
25
- - An infinite loop case in the case where Diff::LCS would be included into an
26
- enumerable class has been fixed. [#73]
27
-
28
- - Clarified the purpose of a threshold test in calculation of LCS. [#72],
29
- [#80]
30
-
31
- - Removed autotest directory
32
-
33
- ## 1.4.4 / 2020-07-01
34
-
35
- - Fixed an issue reported by Jun Aruga in the Diff::LCS::Ldiff binary text
36
- detection. [#44]
37
-
38
- - Fixed a theoretical issue reported by Jun Aruga in Diff::LCS::Hunk to raise
39
- a more useful exception. [#43]
40
-
41
- - Added documentation that should address custom object issues as reported in
42
- [#35].
43
-
44
- - Fixed more diff errors, in part reported in [#65].
45
-
46
- - The use of `Numeric#abs` is incorrect in `Diff::LCS::Block#diff_size`. The
47
- diff size _must_ be accurate for correct change placement.
48
-
49
- - When selecting @max_diff_size in Diff::LCS::Hunk, choose it based on
50
- `block.diff_size.abs`.
51
-
52
- - Made a number of changes that will, unfortunately, increase allocations at
53
- the cost of being safe with frozen strings.
54
-
55
- - Add some knowledge that when `Diff::LCS::Hunk#diff` is called, that we are
56
- processing the _last_ hunk, so some changes will be made to how the output
57
- is generated.
58
-
59
- - `old`, `ed`, and `reverse_ed` formats have no differences.
60
-
61
- - `unified` format will report `` given the
62
- correct conditions, at most once. Unified range reporting also differs for
63
- the last hunk such that the `length` of the range is reduced by one.
64
-
65
- - `context` format will report `\No newline at end of file` given the
66
- correct conditions, up to once per "file". Context range reporting also
67
- differs for the last hunk such that the `end` part of the range is reduced
68
- by one to a minimum of one.
69
-
70
- - Added a bunch more tests for the cases above, and fixed `hunk_spec.rb` so that
71
- the phrase being compared isn't nonsense French.
72
-
73
- - Updated formatting.
74
-
75
- - Added a Rake task to assist with manual testing on Ruby 1.8.
76
-
77
- ## 1.4.3 / 2020-06-29
78
-
79
- - Fixed several issues with the 1.4 on Rubies older than 2.0. Some of this was
80
- providing useful shim functions to Hoe 3.x (which dropped these older Rubies
81
- a while ago). Specifically:
82
-
83
- - Removed Array#lazy from a method in Diff::LCS::Hunk.
84
-
85
- - Changed some unit tests to use old-style Symbol-keyed hashes.
86
-
87
- - Changed some unit test helper functions to no longer use keyword parameters,
88
- but only a trailing options hash.
89
-
90
- - Made the use of `psych` dependent on `RUBY_VERSION >= 1.9`.
91
-
92
- Resolves [#63].
93
-
94
- ## 1.4.2 / 2020-06-23
95
-
96
- - Camille Drapier fixed a small issue with RuboCop configuration. [#59]
97
-
98
- - Applied another fix (and unit test) to fix an issue for the Chef team.
99
- [#60], [#61]
100
-
101
- ## 1.4.1 / 2020-06-23
102
-
103
- - Fix an issue where diff sizes could be negative, and they should be. [#57],
104
- [#58]
105
-
106
- ## 1.4 / 2020-06-23
107
-
108
- - Ruby versions lower than 2.4 are soft-deprecated and will not be run as part
109
- of the CI process any longer.
110
-
111
- - Akinora MUSHA (knu) added the ability for Diff::LCS::Change objects to be
112
- implicitly treated arrays. Originally provided as pull request [#47], but it
113
- introduced a number of test failures as documented in [#48], and remediation
114
- of Diff::LCS itself was introduced in [#49].
115
-
116
- - Resolved [#5] with some tests comparing output from `system` calls to
117
- `bin/ldiff` with some pre-generated output. Resolved [#6] with these tests.
118
-
119
- - Resolved a previously undetected `bin/ldiff` issue with `--context` output not
120
- matching `diff --context` output.
121
-
122
- - Resolved an issue with later versions of Ruby not working with an `OptParse`
123
- specification of `Numeric`; this has been changed to `Integer`.
124
-
125
- - Brandon Fish added truffleruby in [#52].
126
-
127
- - Fixed two missing classes as reported in [#53].
128
-
129
- ## 1.3 / 2017-01-18
130
-
131
- - Bugs fixed:
132
-
133
- - Fixed an error for bin/ldiff --version. Fixes issue [#21].
134
-
135
- - Force Diff::LCS::Change and Diff::LCS::ContextChange to only perform
136
- equality comparisons against themselves. Provided by Kevin Mook in pull
137
- request [#29].
138
-
139
- - Fix tab expansion in htmldiff, provided by Mark Friedgan in pull request
140
- [#25].
141
-
142
- - Silence Ruby 2.4 Fixnum deprecation warnings. Fixes issue [#38] and pull
143
- request [#36].
144
-
145
- - Ensure that test dependencies are loaded properly. Fixes issue [#33] and
146
- pull request [#34].
147
-
148
- - Fix issue [#1] with incorrect intuition of patch direction. Tentative fix,
149
- but the previous failure cases pass now.
150
-
151
- - Tooling changes:
152
-
153
- - Added SimpleCov and Coveralls support.
154
-
155
- - Change the homepage (temporarily) to the GitHub repo.
156
-
157
- - Updated testing and gem infrastructure.
158
-
159
- - Modernized the specs.
160
-
161
- - Cleaned up documentation.
162
-
163
- - Added a Code of Conduct.
164
-
165
- ## 1.2.5 / 2013-11-08
166
-
167
- - Bugs fixed:
168
-
169
- - Comparing arrays flattened them too far, especially with Diff::LCS.sdiff.
170
- Fixed by Josh Bronson in pull request [#23].
171
-
172
- ## 1.2.4 / 2013-04-20
173
-
174
- - Bugs fixed:
175
-
176
- - A bug was introduced after 1.1.3 when pruning common sequences at the start
177
- of comparison. Paul Kunysch (@pck) fixed this in pull request [#18]. Thanks!
178
-
179
- - The Rubinius (1.9 mode) bug in [rubinius/rubinius#2268] has been fixed by
180
- the Rubinius team two days after it was filed. Thanks for fixing this so
181
- quickly!
182
-
183
- - Switching to Raggi's hoe-gemspec2 for gemspec generation.
184
-
185
- ## 1.2.3 / 2013-04-11
186
-
187
- - Bugs Fixed:
188
-
189
- - The new encoding detection for diff output generation (added in 1.2.2)
190
- introduced a bug if the left side of the comparison was the empty set.
191
- Originally found in [rspec/rspec-expectations#238] and
192
- [rspec/rspec-expectations#239]. Jon Rowe developed a reasonable heuristic
193
- (left side, right side, empty string literal) to avoid this bug.
194
-
195
- - There is a known issue with Rubinius in 1.9 mode reported in
196
- [rubinius/rubinius#2268] and demonstrated in the Travis CI builds. For all
197
- other tested platforms, diff-lcs is considered stable. As soon as a suitably
198
- small test-case can be created for the Rubinius team to examine, this will
199
- be added to the Rubinius issue around this.
200
-
201
- ## 1.2.2 / 2013-03-30
202
-
203
- - Bugs Fixed:
204
-
205
- - Diff::LCS::Hunk could not properly generate a difference for comparison sets
206
- that are not US-ASCII-compatible because of the use of literal regular
207
- expressions and strings. Jon Rowe found this in
208
- [rspec/rspec-expectations#219] and provided a first pass implementation in
209
- pull request [#15]. I've reworked it because of test failures in Rubinius
210
- when running in Ruby 1.9 mode. This coerces the added values to the encoding
211
- of the old dataset (as determined by the first piece of the old dataset).
212
-
213
- - Adding Travis CI testing for Ruby 2.0.
214
-
215
- ## 1.2.1 / 2013-02-09
216
-
217
- - Bugs Fixed:
218
-
219
- - As seen in [rspec/rspec-expectations#200], the release of Diff::LCS 1.2
220
- introduced an unnecessary public API change to Diff::LCS::Hunk (see the
221
- change at [rspec/rspec-expectations@3d6fc82c] for details). The new method
222
- name (and behaviour) is more correct, but I should not have renamed the
223
- function or should have at least provided an alias. This release restores
224
- Diff::LCS::Hunk#unshift as an alias to #merge. Note that the old #unshift
225
- behaviour was incorrect and will not be restored.
226
-
227
- ## 1.2.0 / 2013-01-21
228
-
229
- - Minor Enhancements:
230
-
231
- - Added special case handling for Diff::LCS.patch so that it handles patches
232
- that are empty or contain no changes.
233
-
234
- - Added two new methods (#patch_me and #unpatch_me) to the includable module.
235
-
236
- - Bugs Fixed:
237
-
238
- - Fixed issue [#1] patch direction detection.
239
-
240
- - Resolved issue [#2] by handling `string[string.size, 1]` properly (it
241
- returns `""` not `nil`).
242
-
243
- - Michael Granger (ged) fixed an implementation error in Diff::LCS::Change and
244
- added specs in pull request [#8]. Thanks!
245
-
246
- - Made the code auto-testable.
247
-
248
- - Vít Ondruch (voxik) provided the latest version of the GPL2 license file in
249
- pull request [#10]. Thanks!
250
-
251
- - Fixed a documentation issue with the includable versions of #patch! and
252
- #unpatch! where they implied that they would replace the original value.
253
- Given that Diff::LCS.patch always returns a copy, the documentation was
254
- incorrect and has been corrected. To provide the behaviour that was
255
- originally documented, two new methods were added to provide this behaviour.
256
- Found by scooter-dangle in issue [#12]. Thanks!
257
-
258
- - Code Style Changes:
259
-
260
- - Removed trailing spaces.
261
-
262
- - Calling class methods using `.` instead of `::`.
263
-
264
- - Vít Ondruch (voxik) removed unnecessary shebangs in pull request [#9].
265
- Thanks!
266
-
267
- - Kenichi Kamiya (kachick) removed some warnings of an unused variable in
268
- lucky pull request [#13]. Thanks!
269
-
270
- - Embarked on a major refactoring to make the files a little more manageable
271
- and understand the code on a deeper level.
272
-
273
- - Adding to http://travis-ci.org.
274
-
275
- ## 1.1.3 / 2011-08-27
276
-
277
- - Converted to 'hoe' for release.
278
-
279
- - Converted tests to RSpec 2.
280
-
281
- - Extracted the body of htmldiff into a class available from diff/lcs/htmldiff.
282
-
283
- - Migrated development and issue tracking to GitHub.
284
-
285
- - Bugs fixed:
286
-
287
- - Eliminated the explicit use of RubyGems in both bin/htmldiff and bin/ldiff.
288
- Resolves issue [#4].
289
-
290
- - Eliminated Ruby warnings. Resolves issue [#3].
291
-
292
- ## 1.1.2 / 2004-10-20
293
-
294
- - Fixed a problem reported by Mauricio Fernandez in htmldiff.
295
-
296
- ## 1.1.1 / 2004-09-25
297
-
298
- - Fixed bug #891 (Set returned from patch command does not contain last equal
299
- part).
300
-
301
- - Fixed a problem with callback initialisation code (it assumed that all
302
- callbacks passed as classes can be initialised; now, it rescues NoMethodError
303
- in the event of private :new being called).
304
-
305
- - Modified the non-initialisable callbacks to have a private #new method.
306
-
307
- - Moved ldiff core code to Diff::LCS::Ldiff (diff/lcs/ldiff.rb).
308
-
309
- ## 1.1.0
310
-
311
- - Eliminated the need for Diff::LCS::Event and removed it.
312
-
313
- - Added a contextual diff callback, Diff::LCS::ContextDiffCallback.
314
-
315
- - Implemented patching/unpatching for standard Diff callback output formats with
316
- both #diff and #sdiff.
317
-
318
- - Extensive documentation changes.
319
-
320
- ## 1.0.4
321
-
322
- - Fixed a problem with bin/ldiff output, especially for unified format. Newlines
323
- that should have been present weren't.
324
-
325
- - Changed the .tar.gz installer to generate Windows batch files if ones do not
326
- exist already. Removed the existing batch files as they didn't work.
327
-
328
- ## 1.0.3
329
-
330
- - Fixed a problem with #traverse_sequences where the first difference from the
331
- left sequence might not be appropriately captured.
332
-
333
- ## 1.0.2
334
-
335
- - Fixed an issue with ldiff not working because actions were changed from
336
- symbols to strings.
337
-
338
- ## 1.0.1
339
-
340
- - Minor modifications to the gemspec, the README.
341
-
342
- - Renamed the diff program to ldiff (as well as the companion batch file) so as
343
- to not collide with the standard diff program.
344
-
345
- - Fixed issues with RubyGems. Requires RubyGems > 0.6.1 or >= 0.6.1 with the
346
- latest CVS version.
347
-
348
- ## 1.0
349
-
350
- - Initial release based mostly on Perl's Algorithm::Diff.
351
-
352
- [rubinius/rubinius#2268]: https://github.com/rubinius/rubinius/issues/2268
353
- [rspec/rspec-expectations#239]: https://github.com/rspec/rspec-expectations/issues/239
354
- [rspec/rspec-expectations#238]: https://github.com/rspec/rspec-expectations/issues/238
355
- [rspec/rspec-expectations#219]: https://github.com/rspec/rspec-expectations/issues/219
356
- [rspec/rspec-expectations@3d6fc82c]: https://github.com/rspec/rspec-expectations/commit/3d6fc82c
357
- [rspec/rspec-expectations#200]: https://github.com/rspec/rspec-expectations/pull/200
358
- [#1]: https://github.com/halostatue/diff-lcs/issues/1
359
- [#2]: https://github.com/halostatue/diff-lcs/issues/2
360
- [#3]: https://github.com/halostatue/diff-lcs/issues/3
361
- [#4]: https://github.com/halostatue/diff-lcs/issues/4
362
- [#5]: https://github.com/halostatue/diff-lcs/issues/5
363
- [#6]: https://github.com/halostatue/diff-lcs/issues/6
364
- [#8]: https://github.com/halostatue/diff-lcs/pull/8
365
- [#9]: https://github.com/halostatue/diff-lcs/pull/9
366
- [#10]: https://github.com/halostatue/diff-lcs/pull/10
367
- [#12]: https://github.com/halostatue/diff-lcs/issues/12
368
- [#13]: https://github.com/halostatue/diff-lcs/pull/13
369
- [#15]: https://github.com/halostatue/diff-lcs/pull/15
370
- [#18]: https://github.com/halostatue/diff-lcs/pull/18
371
- [#21]: https://github.com/halostatue/diff-lcs/issues/21
372
- [#23]: https://github.com/halostatue/diff-lcs/pull/23
373
- [#25]: https://github.com/halostatue/diff-lcs/pull/25
374
- [#29]: https://github.com/halostatue/diff-lcs/pull/29
375
- [#33]: https://github.com/halostatue/diff-lcs/issues/33
376
- [#34]: https://github.com/halostatue/diff-lcs/pull/34
377
- [#35]: https://github.com/halostatue/diff-lcs/issues/35
378
- [#36]: https://github.com/halostatue/diff-lcs/pull/36
379
- [#38]: https://github.com/halostatue/diff-lcs/issues/38
380
- [#43]: https://github.com/halostatue/diff-lcs/issues/43
381
- [#44]: https://github.com/halostatue/diff-lcs/issues/44
382
- [#47]: https://github.com/halostatue/diff-lcs/pull/47
383
- [#48]: https://github.com/halostatue/diff-lcs/issues/48
384
- [#49]: https://github.com/halostatue/diff-lcs/pull/49
385
- [#52]: https://github.com/halostatue/diff-lcs/pull/52
386
- [#53]: https://github.com/halostatue/diff-lcs/issues/53
387
- [#57]: https://github.com/halostatue/diff-lcs/issues/57
388
- [#58]: https://github.com/halostatue/diff-lcs/pull/58
389
- [#59]: https://github.com/halostatue/diff-lcs/pull/59
390
- [#60]: https://github.com/halostatue/diff-lcs/issues/60
391
- [#61]: https://github.com/halostatue/diff-lcs/pull/61
392
- [#63]: https://github.com/halostatue/diff-lcs/issues/63
393
- [#65]: https://github.com/halostatue/diff-lcs/issues/65
394
- [#69]: https://github.com/halostatue/diff-lcs/issues/69
395
- [#71]: https://github.com/halostatue/diff-lcs/issues/71
396
- [#72]: https://github.com/halostatue/diff-lcs/issues/72
397
- [#73]: https://github.com/halostatue/diff-lcs/issues/73
398
- [#75]: https://github.com/halostatue/diff-lcs/issues/75
399
- [#79]: https://github.com/halostatue/diff-lcs/issues/79
400
- [#80]: https://github.com/halostatue/diff-lcs/issues/80
data/README.rdoc DELETED
@@ -1,84 +0,0 @@
1
- = Diff::LCS
2
-
3
- home :: https://github.com/halostatue/diff-lcs
4
- code :: https://github.com/halostatue/diff-lcs
5
- bugs :: https://github.com/halostatue/diff-lcs/issues
6
- rdoc :: http://rubydoc.info/github/halostatue/diff-lcs
7
- continuous integration :: {<img src="https://github.com/halostatue/diff-lcs/workflows/CI/badge.svg" />}[https://github.com/halostatue/diff-lcs/actions]
8
-
9
- == Description
10
-
11
- Diff::LCS computes the difference between two Enumerable sequences using the
12
- McIlroy-Hunt longest common subsequence (LCS) algorithm. It includes utilities
13
- to create a simple HTML diff output format and a standard diff-like tool.
14
-
15
- This is release 1.4.3, providing a simple extension that allows for
16
- Diff::LCS::Change objects to be treated implicitly as arrays and fixes a
17
- number of formatting issues.
18
-
19
- Ruby versions below 2.5 are soft-deprecated, which means that older versions
20
- are no longer part of the CI test suite. If any changes have been introduced
21
- that break those versions, bug reports and patches will be accepted, but it
22
- will be up to the reporter to verify any fixes prior to release. The next
23
- major release will completely break compatibility.
24
-
25
- == Synopsis
26
-
27
- Using this module is quite simple. By default, Diff::LCS does not extend
28
- objects with the Diff::LCS interface, but will be called as if it were a
29
- function:
30
-
31
- require 'diff/lcs'
32
-
33
- seq1 = %w(a b c e h j l m n p)
34
- seq2 = %w(b c d e f j k l m r s t)
35
-
36
- lcs = Diff::LCS.LCS(seq1, seq2)
37
- diffs = Diff::LCS.diff(seq1, seq2)
38
- sdiff = Diff::LCS.sdiff(seq1, seq2)
39
- seq = Diff::LCS.traverse_sequences(seq1, seq2, callback_obj)
40
- bal = Diff::LCS.traverse_balanced(seq1, seq2, callback_obj)
41
- seq2 == Diff::LCS.patch!(seq1, diffs)
42
- seq1 == Diff::LCS.unpatch!(seq2, diffs)
43
- seq2 == Diff::LCS.patch!(seq1, sdiff)
44
- seq1 == Diff::LCS.unpatch!(seq2, sdiff)
45
-
46
- Objects can be extended with Diff::LCS:
47
-
48
- seq1.extend(Diff::LCS)
49
- lcs = seq1.lcs(seq2)
50
- diffs = seq1.diff(seq2)
51
- sdiff = seq1.sdiff(seq2)
52
- seq = seq1.traverse_sequences(seq2, callback_obj)
53
- bal = seq1.traverse_balanced(seq2, callback_obj)
54
- seq2 == seq1.patch!(diffs)
55
- seq1 == seq2.unpatch!(diffs)
56
- seq2 == seq1.patch!(sdiff)
57
- seq1 == seq2.unpatch!(sdiff)
58
-
59
- By requiring 'diff/lcs/array' or 'diff/lcs/string', Array or String will be
60
- extended for use this way.
61
-
62
- Note that Diff::LCS requires a sequenced enumerable container, which means that
63
- the order of enumeration is both predictable and consistent for the same set of
64
- data. While it is theoretically possible to generate a diff for an unordered
65
- hash, it will only be meaningful if the enumeration of the hashes is
66
- consistent. In general, this will mean that containers that behave like String
67
- or Array will perform best.
68
-
69
- == History
70
-
71
- Diff::LCS is a port of Perl's Algorithm::Diff that uses the McIlroy-Hunt
72
- longest common subsequence (LCS) algorithm to compute intelligent differences
73
- between two sequenced enumerable containers. The implementation is based on
74
- Mario I. Wolczko's
75
- {Smalltalk version 1.2}[ftp://st.cs.uiuc.edu/pub/Smalltalk/MANCHESTER/manchester/4.0/diff.st]
76
- (1993) and Ned Konz's Perl version
77
- {Algorithm::Diff 1.15}[http://search.cpan.org/~nedkonz/Algorithm-Diff-1.15/].
78
- Diff::LCS#sdiff and Diff::LCS#traverse_balanced were originally written for the
79
- Perl version by Mike Schilli.
80
-
81
- The algorithm is described in <em>A Fast Algorithm for Computing Longest Common
82
- Subsequences</em>, CACM, vol.20, no.5, pp.350-353, May 1977, with a few minor
83
- improvements to improve the speed. A simplified description of the algorithm,
84
- originally written for the Perl version, was written by Mark-Jason Dominus.