mirror of
https://github.com/Mercury-Language/mercury.git
synced 2025-12-14 05:12:33 +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.
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