Parsing/Visual Diff Testing/Debugging

From mediawiki.org

Some notes on debugging failures found using visual diff testing.

First: some failures may be transient. Use Parsing/Visual Diff Testing#Retesting a subset of titles to rerun the tests with a non-perfect visual diff to filter out transients. There may also be some cache issues, perhaps: check that the "Page on the target wikis" link actually shows the same result as the screenshots. If it doesn't, the screenshot may have been a transient or improperly cached result.

Second: the visual diff servers are multiwiki configs. You need to ssh into them, then ssh into the inner vagrant, *then* use mwscript to select a particular wiki:

$ ssh mw-expt.wikitextexp.eqiad.wmflab  # or mw-base.wikitextexp.eqiad.wmflabs, or mw-base.eqiad.wmflabs
mw-expt$ cd /srv/mediawiki-vagrant/  # code in mediawiki/ and config in settings.d/
mw-expt$ vagrant ssh
vagrant$ echo '[[Foo]]' | mwscript parse.php --wiki=zhwiki

You can also use mwscript eval.php --wiki=zhwiki to get an REPL with MW loaded.

emacs isn't installed inside vagrant. But chmod a+rw <some file>.php inside vagrant lets you edit it with emacs outside of vagrant.

Other notes: {{#coordinates}} is unexpanded, because Extension:GeoData is uninstalled

I got a step-by-step dump of templates as they were expanded with this patch, which just basically lets me watch the preprocessor expansion step by step, so i can see at what point weird stuff is introduced:

vagrant@mediawiki-vagrant:/vagrant/mediawiki$ git diff
diff --git a/includes/parser/Preprocessor_DOM.php b/includes/parser/Preprocessor
index 7539307..568198b 100644
--- a/includes/parser/Preprocessor_DOM.php
+++ b/includes/parser/Preprocessor_DOM.php
@@ -194,6 +194,9 @@ class Preprocessor_DOM extends Preprocessor {
         */
        public function preprocessToXml( $text, $flags = 0 ) {
                global $wgDisableLangConversion;
+echo("\npreprocess start------\n");
+echo($text);
+echo("\npreprocess end------\n");
 
                $forInclusion = $flags & Parser::PTD_FOR_INCLUSION;