Skip to content

Commit d1a8a13

Browse files
committed
improving the way file diffs are detected and recorded
some bug fixes in the logic
1 parent 3dacf1f commit d1a8a13

File tree

1 file changed

+62
-8
lines changed

1 file changed

+62
-8
lines changed

tests/diff_hypermail_archives.pl

Lines changed: 62 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,28 @@ sub filter_text {
145145

146146
} # filter_text
147147

148+
sub store_diffs {
149+
150+
my ($header, $diff_file1, $diff_file2) = @_;
151+
my $diff = "";
152+
153+
# also compare files and regex text, add + 1 to error if added
154+
# do the same at the end of the while if not yet done
155+
if (defined $header && $header ne "") {
156+
157+
$diff = $diff . $header . "\n";
158+
if (defined $diff_file1 && $diff_file1 ne "") {
159+
$diff = $diff . $diff_file1;
160+
}
161+
if (defined $diff_file2 && $diff_file2 ne "") {
162+
$diff = $diff . "---\n" . $diff_file2;
163+
}
164+
}
165+
166+
return $diff;
167+
168+
} # store_diffs
169+
148170
# does a diff on existing directories, files, and file content
149171
sub diff_files_complete {
150172
my $file = $_;
@@ -179,8 +201,12 @@ sub diff_files_complete {
179201
my @diff_args = ($diff_cmd, $filename1, $filename2);
180202
open (my $fh, "-|", @diff_args) || die("cannot diff $filename1 $filename2\n");
181203

204+
my $header;
205+
my $diff_file1;
206+
my $diff_file2;
207+
my $skip = 1;
208+
182209
while (my $line = <$fh>) {
183-
184210
chomp $line;
185211

186212
if ($line eq "") {
@@ -193,6 +219,20 @@ sub diff_files_complete {
193219
# generation date. We ignore the rest of the diff output at
194220
# this point.
195221
if ($line =~ /^\d/) {
222+
223+
# store previous diff.
224+
# also compare files and regex text, add + 1 to error if added
225+
# do the same at the end of the while if not yet done
226+
227+
unless ($skip) {
228+
$diffs .= store_diffs ($header, $diff_file1, $diff_file2);
229+
$local_errors++;
230+
}
231+
232+
$skip = 0;
233+
$header = $line;
234+
$diff_file1 = $diff_file2 = "";
235+
196236
if ($line =~ /\d+c\d+/) {
197237
if (!$is_attachment_dir) {
198238
my ($ln_1, $ln_2) = split /c/, $line;
@@ -202,32 +242,46 @@ sub diff_files_complete {
202242
my ($ln_2_1, $ln_2_2) = split /,/, $ln_2;
203243

204244
if (%{ $generated_by_lines }
205-
&& (defined $ln_1_2 && defined $ln_2_2
206-
&& ($ln_1_2 - $ln_1_1) == ($ln_2_1 - $ln_1_1))
207-
|| (defined $ln_1_1 && defined $ln_2_1
208-
&& !defined $ln_1_2 && !defined $ln_2_2)) {
245+
&& (defined $ln_1_2 && defined $ln_2_2
246+
&& ($ln_1_2 - $ln_1_1) == ($ln_2_2 - $ln_2_1))
247+
|| (defined $ln_1_1 && !defined $ln_1_2
248+
&& defined $ln_2_1 && !defined $ln_2_2)) {
209249

210250
if ($ignore_footer) {
211251
if ($ln_1_1 >= $footer_line) {
252+
$skip = 1;
212253
last;
213254
}
214255
} elsif ((!defined $ln_1_2
215256
&& $$generated_by_lines{$ln_1_1})
216257
|| (defined $ln_1_2
217258
&& $$generated_by_lines{$ln_1_1}
218259
&& $$generated_by_lines{$ln_1_2})) {
260+
$skip = 1;
219261
last;
220262
}
221263
}
222264
}
223265
}
224-
$local_errors++;
266+
267+
} else {
268+
if ($line =~ /^</) {
269+
$diff_file1 = $line . "\n";
270+
} elsif ($line =~ /^>/) {
271+
$diff_file2 = $line . "\n";
272+
}
225273
}
226-
$diffs .= $line . "\n";
227274
}
275+
228276
close ($fh);
277+
278+
# store last diff.
279+
unless ($skip) {
280+
$diffs .= store_diffs ($header, $diff_file1, $diff_file2);
281+
$local_errors++;
282+
}
229283

230-
if ($diffs ne "" && !$quiet) {
284+
if ($local_errors > 0 && !$quiet) {
231285
$errors++;
232286
print "\n" if $show_progress;
233287
print "[$errors] $filename1\n[$errors] $filename2: found $local_errors difference" . ($local_errors == 1 ? "" : "s") . "\n";

0 commit comments

Comments
 (0)