diff options
author | Ben Elliston <bje@gnu.org> | 2016-03-16 17:51:26 +1100 |
---|---|---|
committer | Ben Elliston <bje@gnu.org> | 2016-03-16 17:51:50 +1100 |
commit | cef9e5b99eb29a942ecd6493fa3008d0f6afb9df (patch) | |
tree | 518d9fb20d21afcb488db66ec157ae51d2c76879 | |
parent | d2eada87b597e90e74fd836c2e27abf9594a9126 (diff) |
This reverts commit 4d344f712298364c836038b641625b3407db2fc3. The GCC
testsuite still uses diff.
2016-03-15 Ben Elliston <bje@gnu.org>
* lib/utils.exp (diff): Remove proc.
* doc/ref.xml: Update documentation.
* doc/dejagnu.texi: Regenerate.
* NEWS: Update.
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | doc/dejagnu.texi | 28 | ||||
-rw-r--r-- | doc/ref.xml | 27 | ||||
-rw-r--r-- | lib/utils.exp | 69 |
5 files changed, 135 insertions, 4 deletions
@@ -1,3 +1,14 @@ +2016-03-16 Ben Elliston <bje@gnu.org> + + Revert this change (the GCC testsuite uses diff): + + 2016-03-15 Ben Elliston <bje@gnu.org> + + * lib/utils.exp (diff): Remove proc. + * doc/ref.xml: Update documentation. + * doc/dejagnu.texi: Regenerate. + * NEWS: Update. + 2016-03-15 Ben Elliston <bje@gnu.org> * testsuite/runtest.all/options.exp: Properly clean up log files @@ -10,8 +10,8 @@ Changes since 1.5.3: 2 if an exception is raised by the Tcl interpreter. 3. runtest now exits with the standard exit codes of programs that are terminated by the SIGINT, SIGTERM and SIGQUIT signals. -4. The user-visible utility procedures `absolute', `psource', `slay' - and `diff' have been removed. If a testsuite uses any of these +4. The user-visible utility procedures `absolute', `psource' and + `slay' have been removed. If a testsuite uses any of these procedures, a copy of the procedure should be made and placed in the lib directory of the testsuite. 5. Support was added for testing the D compiler. diff --git a/doc/dejagnu.texi b/doc/dejagnu.texi index c0c80ba..99dd8f1 100644 --- a/doc/dejagnu.texi +++ b/doc/dejagnu.texi @@ -5414,6 +5414,7 @@ tool, and its version number. * Grep Procedure: grep procedure. * Prune Procedure: prune procedure. * Runtest_file_p Procedure: runtest_file_p procedure. +* Diff Procedure: diff procedure. * Setenv Procedure: setenv procedure. * unsetenv Procedure: unsetenv procedure. * Getenv Procedure: getenv procedure. @@ -5543,7 +5544,7 @@ the next release of DejaGnu. If a testsuite uses this procedure, a copy of the procedure should be made and placed in the lib directory of the testsuite. -@node runtest_file_p procedure, setenv procedure, prune procedure, Utility Procedures +@node runtest_file_p procedure, diff procedure, prune procedure, Utility Procedures @subsubsection Runtest_file_p Procedure Search @emph{runtest}s for @@ -5576,7 +5577,30 @@ The list of patterns to compare against. The test case filename. @end table -@node setenv procedure, unsetenv procedure, runtest_file_p procedure, Utility Procedures +@node diff procedure, setenv procedure, runtest_file_p procedure, Utility Procedures +@subsubsection Diff Procedure + +Compares the two files and returns a @emph{1} if +they match, or a @emph{0} if they don't. If +@code{verbose} is set, then it'll print the differences to +the screen. + +@quotation + +@t{@b{diff}(@i{file_1} +@i{file_2});} +@end quotation + +@table @asis + +@item @code{file_1} +The first file to compare. + +@item @code{file_2} +The second file to compare. +@end table + +@node setenv procedure, unsetenv procedure, diff procedure, Utility Procedures @subsubsection Setenv Procedure Sets the environment variable @emph{var} to the diff --git a/doc/ref.xml b/doc/ref.xml index 0276334..05013ae 100644 --- a/doc/ref.xml +++ b/doc/ref.xml @@ -3620,6 +3620,33 @@ </variablelist> </sect4> + <sect4 id="diff" xreflabel="diff procedure"> + <title>Diff Procedure</title> + + <para>Compares the two files and returns a <emphasis>1</emphasis> if + they match, or a <emphasis>0</emphasis> if they don't. If + <symbol>verbose</symbol> is set, then it'll print the differences to + the screen.</para> + + <funcsynopsis role="tcl"> + <funcprototype> + <funcdef><function>diff</function></funcdef> + <paramdef><parameter>file_1</parameter> + <parameter>file_2</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <variablelist> + <varlistentry> + <term><parameter>file_1</parameter></term> + <listitem><para>The first file to compare.</para></listitem> + </varlistentry> + <varlistentry> + <term><parameter>file_2</parameter></term> + <listitem><para>The second file to compare.</para></listitem> + </varlistentry> + </variablelist> + </sect4> + <sect4 id="setenv" xreflabel="setenv procedure"> <title>Setenv Procedure</title> diff --git a/lib/utils.exp b/lib/utils.exp index 8db12b8..505ad18 100644 --- a/lib/utils.exp +++ b/lib/utils.exp @@ -250,6 +250,75 @@ proc runtest_file_p { runtests testcase } { } +# Compares two files line-by-line +# returns 1 it the files match, +# returns 0 if there was a file error, +# returns -1 if they didn't match. +# +proc diff { file_1 file_2 } { + set eof -1 + set differences 0 + + if {[file exists ${file_1}]} { + set file_a [open ${file_1} r] + fconfigure $file_a -encoding binary + } else { + warning "${file_1} doesn't exist" + return 0 + } + + if {[file exists ${file_2}]} { + set file_b [open ${file_2} r] + fconfigure $file_b -encoding binary + } else { + warning "${file_2} doesn't exist" + return 0 + } + + verbose "# Diff'ing: ${file_1} ${file_2}" 1 + + set list_a "" + while { [gets ${file_a} line] != ${eof} } { + if {[regexp "^#.*$" ${line}]} { + continue + } else { + lappend list_a ${line} + } + } + close ${file_a} + + set list_b "" + while { [gets ${file_b} line] != ${eof} } { + if {[regexp "^#.*$" ${line}]} { + continue + } else { + lappend list_b ${line} + } + } + close ${file_b} + for { set i 0 } { $i < [llength $list_a] } { incr i } { + set line_a [lindex ${list_a} ${i}] + set line_b [lindex ${list_b} ${i}] + + if {[string compare ${line_a} ${line_b}]} { + verbose -log "line #${i}" 2 + verbose -log "\< ${line_a}" 2 + verbose -log "\> ${line_b}" 2 + set differences -1 + } + } + + if { $differences == -1 || [llength ${list_a}] != [llength ${list_b}] } { + verbose "Files not the same" 2 + set differences -1 + } else { + verbose "Files are the same" 2 + set differences 1 + } + return ${differences} +} + +# # Set an environment variable # proc setenv { var val } { |