mirror of
https://github.com/Mercury-Language/mercury.git
synced 2025-12-16 22:35:41 +00:00
Estimated hours taken: 30 Modified files -------------- samples/diff/Mmakefile: Minor documentation update. samples/diff/README: samples/diff/TODO: Update stuff that's now done, do a couple of minor wording changes. samples/diff/diff.m: Fix case of identical filenames (which implicitly assumed no_diff_implies_no_output). Add new match pass, call the new diff algorithm. samples/diff/diff_out.m: Add --cvs-merge-conflict output style. Slight reorganisation of top-level predicate. Lots of small fixes to use better syntax (e.g. functional style for integer maths operations). samples/diff/difftype.m: Added first_mentioned_positions/3, last_mentioned_positions/3, add_edit/4. samples/diff/file.m: Use io__read_line_as_string. samples/diff/filter.m: Minor syntax/wording changes. samples/diff/options.m: Update all the newly handled options. New files --------- samples/diff/myers.m: New diff algorithm. samples/diff/match.m: New pass to match common lines in the files to be diffed. Removed file ------------ samples/diff/lcss.m: Functionality replaced by myers.m.
119 lines
3.7 KiB
Plaintext
119 lines
3.7 KiB
Plaintext
|
|
This is now looking a LOT more like the standard "diff" utility. There
|
|
are a few features missing (e.g. we can't do directory diffs), but apart
|
|
from that, it seems to work.
|
|
|
|
The major changes in this version are:
|
|
|
|
- We now accept command-line options. In particular, we
|
|
recognise all options that are accepted by GNU diff,
|
|
though some of them result in error reports and a few
|
|
which have do nothing to do with the output format or
|
|
semantics, but are merely for efficiency, are accepted
|
|
and ignored.
|
|
|
|
- We support different output formats, in particular all
|
|
of the output formats supported by GNU diff. There are
|
|
a number of modifiers to the output formats (for example,
|
|
--show-function-line) which we don't yet support.
|
|
|
|
- We have a new diff algorithm, based on the one by Eugene
|
|
Myers. See myers.m for details.
|
|
|
|
- Just about everything has been modified to support the
|
|
above changes.
|
|
|
|
- Lots of cleanups, lots more documentation.
|
|
|
|
Examine the file TODO to see what's still missing.
|
|
|
|
Andrew Bromage 13 September 1998
|
|
|
|
===========================================================================
|
|
|
|
The version which appears here is a re-hacked version of Marnix Klooster's
|
|
hacked version of my original. Special thanks to him for making my code
|
|
a lot more maintainable than it originally was. :-)
|
|
|
|
The changes from the previous version:
|
|
|
|
- Bug fix for a problem which was causing it to bomb out if
|
|
the two files were identical.
|
|
|
|
- Changed indenting so it more closely matches the Mercury
|
|
compiler coding standard.
|
|
|
|
- Update to use unique arrays (now called array.m).
|
|
|
|
- Various minor documentation tweaks.
|
|
|
|
Oh, and it still runs in nowhere near the speed of GNU diff.
|
|
|
|
Andrew Bromage 28 Jul 1997
|
|
|
|
===========================================================================
|
|
|
|
The Mercury modules in this directory have been derived from the
|
|
'diff' sample distributed with Mercury 0.6. That sample carries the
|
|
following copyright information, description and to-do list (in
|
|
diff.m):
|
|
|
|
|
|
%-----------------------------------------------------------------------------%
|
|
% Copyright (C) 1995 The University of Melbourne.
|
|
% This file may only be copied under the terms of the GNU General
|
|
% Public License - see the file COPYING in the Mercury distribution.
|
|
%-----------------------------------------------------------------------------%
|
|
|
|
% File: diff.m
|
|
% Main author: bromage
|
|
|
|
% Something very similar to the standard diff utility. Sort of. :-)
|
|
|
|
% On the still-to-do list:
|
|
% - Add command-line options. Probably:
|
|
% --ignore-all-space
|
|
% --ignore-blank-lines
|
|
% --ignore-case
|
|
% --rcs
|
|
% What others are easy and don't break up the code?
|
|
|
|
|
|
The major changes I made were
|
|
|
|
* Moved code for manipulating and displaying diffs to a separate
|
|
module called diffs.m (and changed their calls in diff.m). The type
|
|
'lcss,' needed both by the rest of lcss.m and by diffs.m, was moved
|
|
to a new module lcsstype.m.
|
|
|
|
* Made lcss.m independent of files, and allowed it to process any kind
|
|
of list by adding polymorphism. (The file processing calls have
|
|
been moved to diff.m.)
|
|
|
|
* Added type synonyms 'pos' and 'segment' in diffs.m to clarify the
|
|
types. Renamed 'single_diff' to 'edit'.
|
|
|
|
* Added end-of-file match to the generated lcss, thereby allowing the
|
|
to_diff predicate to be simplified considerably.
|
|
|
|
* Numbered lists from 0 internally in the lcss-algorithm. This made
|
|
to_diff simpler still, but also forced changes in the diff-printing
|
|
part.
|
|
|
|
* Removed the swapping in find_lcss, because it doesn't seem to help.
|
|
|
|
* The array(string) representing a file in file.m was also renumbered
|
|
to begin with 0.
|
|
|
|
* Added and corrected comments.
|
|
|
|
Have fun,
|
|
|
|
<><
|
|
|
|
Marnix
|
|
--
|
|
Marnix Klooster
|
|
marnix@worldonline.nl
|
|
|