Thanks for the code. Lacking some settings in .darcs/defaults, I had to
apply the patch at the bottom of this message to prevent darcs from
asking questions.
I tried it on this repo
http://patch-tag.com/r/steffen/stBaTe/
, and the results were:
steffen@gandalf deptest $ grep '^Failed$' deptest.out | wc -l
182
steffen@gandalf deptest $ grep '^Succeeded$' deptest.out | wc -l
70
Note that undefined references are /not/ an error, but only throw a
warning. Skimming through the output, the two main reasons for errors were:
* Undefined \newcommandS. This looks very similar to the
\label{...}/\ref{...} problem.
* Missing dependencies on the build system (which is a little bit
complex: A haskell program implementing my tiny templating language is
compiled, it creates a .tex document which is in turn processed by
LaTeX). "No Makefile found" appeared often.
I guess these errors could have been prevented by introducing a tag
build_system_works and letting all changes to the actual document depend
on it.
On 06/06/2011 10:48 PM, Miles Gould wrote:
[...]
By the way, I thought it might be fun to measure the extent of the
"underapproximated dependency" problem with my own thesis, to give
Steffen more of an idea how much he should be worrying. Unfortunately,
it turns out that most revisions of my thesis don't compile under
versions of TeXLive released since 2008! Anyone like to suggest
another repo I should try?
Here's my code, FWIW:
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use XML::XPath;
my $upstream = shift @ARGV;
my $make_command = join " ", @ARGV;
my $outfile_name = "deptest.out";
my $change_xml = `darcs changes --repo=$upstream --xml`;
my $xp = XML::XPath->new(xml => $change_xml);
my $change_hashes = $xp->find('changelog/patch/@hash');
my @changes;
foreach my $node ($change_hashes->get_nodelist) {
my $hash = $node->getData();
$hash =~ s/\.gz$//;
push @changes, $hash;
}
foreach my $change (reverse @changes) {
open my $outfile, ">>", $outfile_name;
say $outfile $change;
close $outfile;
system "darcs pull --match 'hash $change' $upstream";
system "time -o $outfile_name -a $make_command";
open $outfile, ">>", $outfile_name;
say $outfile (($?>> 8) == 0) ? "Succeeded" : "Failed";
say $outfile "";
close $outfile;
system "darcs unpull";
}
To use it with a repo $darcsrepo:
1) Save it somewhere in your PATH (I call it "deptest") and chmod +x it.
2) Install XML::XPath: `cpan XML::XPath`
3) Create a new darcs repository:
mkdir deptest; cd deptest; darcs init
4) Run deptest [path to repo to test] [build command]; in my case that's
deptest ../thesis "latexmk thesis"
5) Look through "deptest.out" for timing and success/failure info.
"Failed" in this context ought to mean "has unspecified dependencies",
assuming you haven't recorded any broken patches.
[Step 3 is not automated because of further stupidity specific to my
thesis repo.]
@@ -26,11 +26,11 @@
open my $outfile, ">>", $outfile_name;
say $outfile $change;
close $outfile;
- system "darcs pull --match 'hash $change' $upstream";
+ system "darcs pull --dont-prompt-for-dependencies --all --match
'hash $change' $upstream";
system "time -o $outfile_name -a $make_command";
open $outfile, ">>", $outfile_name;
say $outfile (($? >> 8) == 0) ? "Succeeded" : "Failed";
say $outfile "";
close $outfile;
- system "darcs unpull";
+ system "darcs unpull --all --dont-prompt-for-dependencies";
}
-- Steffen
_______________________________________________
darcs-users mailing list
[email protected]
http://lists.osuosl.org/mailman/listinfo/darcs-users