jenkins-bot has submitted this change and it was merged.
Change subject: Add --force option to fetch-parserTests.txt.js to update file
and hashes.
......................................................................
Add --force option to fetch-parserTests.txt.js to update file and hashes.
Change-Id: If4362711e4d17e9dad8b3fbc7ac3b17966fa5aa0
---
M js/tests/fetch-parserTests.txt.js
M js/tests/parserTests.js
2 files changed, 83 insertions(+), 17 deletions(-)
Approvals:
GWicke: Looks good to me, approved
jenkins-bot: Verified
diff --git a/js/tests/fetch-parserTests.txt.js
b/js/tests/fetch-parserTests.txt.js
old mode 100644
new mode 100755
index 8e98c72..251e42b
--- a/js/tests/fetch-parserTests.txt.js
+++ b/js/tests/fetch-parserTests.txt.js
@@ -1,9 +1,14 @@
+#!/usr/bin/env node
/**
* Fetch new parserTests.txt from upstream mediawiki/core.
*/
// UPDATE THESE when upstream mediawiki/core includes new parsoid-relevant
tests
// This ensures that our whitelist is in sync.
+//
+// ==> Use "./fetch-parserTests.txt.js --force" to download latest parserTests
+// and update these hashes automatically.
+//
// You can use 'sha1sum -b tests/parser/parserTests.txt' to compute this value:
var expectedSHA1 = "f1af8c010dd69906e27036d787fbdc36f1067c55";
// git log --pretty=oneline -1 tests/parser/parserTests.txt
@@ -14,24 +19,33 @@
https = require('https'),
crypto = require('crypto');
-var existsSync = fs.existsSync || path.existsSync; // node 0.6 compat
-
-var url = {
+var downloadUrl = {
host: 'gerrit.wikimedia.org',
path:
'/r/gitweb?p=mediawiki/core.git;a=blob_plain;hb=HEAD;f=tests/parser/parserTests.txt'
+};
+var historyUrl = {
+ host: downloadUrl.host,
+ path:
'/r/gitweb?p=mediawiki/core.git;a=history;hb=HEAD;f=tests/parser/parserTests.txt'
};
var target_name = __dirname+"/parserTests.txt";
var computeSHA1 = function(target_name) {
+ var existsSync = fs.existsSync || path.existsSync; // node 0.6 compat
+ if (!existsSync(target_name)) {
+ return "<file not present>";
+ }
var contents = fs.readFileSync(target_name);
return crypto.createHash('sha1').update(contents).digest('hex').
toLowerCase();
};
-var fetch = function(url, target_name, gitCommit) {
+var fetch = function(url, target_name, gitCommit, cb) {
console.log('Fetching parserTests.txt from mediawiki/core');
if (gitCommit) {
- url.path = url.path.replace(/;hb=[^;]+;/, ';hb='+gitCommit+';');
+ url = {
+ host: url.host,
+ path: url.path.replace(/;hb=[^;]+;/,
';hb='+gitCommit+';')
+ };
}
https.get(url, function(result) {
var out = fs.createWriteStream(target_name);
@@ -41,7 +55,9 @@
result.on('end', function() {
if (out) {
out.end();
- if (expectedSHA1 !== computeSHA1(target_name)) {
+ if (cb) {
+ return cb();
+ } else if (expectedSHA1 !==
computeSHA1(target_name)) {
console.warn('Parsoid expected
sha1sum', expectedSHA1,
'but got',
computeSHA1(target_name));
}
@@ -52,23 +68,73 @@
});
};
+var isUpToDate = function() {
+ return (expectedSHA1 === computeSHA1(target_name));
+};
+
var checkAndUpdate = function() {
- if (existsSync(target_name) &&
- expectedSHA1 === computeSHA1(target_name)) {
- return; // a-ok!
+ if (!isUpToDate()) {
+ fetch(downloadUrl, target_name, latestCommit);
}
- fetch(url, target_name, latestCommit);
+};
+
+var forceUpdate = function() {
+ console.log('Fetching parserTests.txt history from mediawiki/core');
+ var findMostRecentCommit, downloadCommit, updateHashes;
+
+ // fetch the history page
+ https.get(historyUrl, function(result) {
+ var html = '';
+ result.setEncoding('utf8');
+ result.on('data', function(data) { html += data; });
+ result.on('end', function() {
+ findMostRecentCommit(html);
+ });
+ }).on('error', function(err) {
+ console.error(err);
+ });
+
+ // now look for the most recent commit
+ findMostRecentCommit = function(html) {
+ // remove everything before <table class="history">
+ html = html.replace(/^[^]*<table\s[^>]*class="history"[^>]*>/,
'');
+ // now find the first link to this file with a specific hash
+ var m =
/[?;]a=blob;f=tests\/parser\/parserTests.txt;hb=([0-9a-f]+)/.
+ exec(html);
+ var gitCommit = m ? m[1] : "HEAD";
+ downloadCommit(gitCommit);
+ };
+
+ // download latest file
+ downloadCommit = function(gitCommit) {
+ fetch(downloadUrl, target_name, gitCommit, function() {
+ updateHashes(gitCommit, computeSHA1(target_name));
+ });
+ };
+
+ // now rewrite this file!
+ updateHashes = function(gitCommit, fileHash) {
+ var contents = fs.
+ readFileSync(__filename, 'utf8').
+ replace(/^var expectedSHA1 = "[0-9a-f]*";/m,
+ "var expectedSHA1 = \""+fileHash+"\";").
+ replace(/^var latestCommit = "[0-9a-f]*";/m,
+ "var latestCommit =
\""+gitCommit+"\";");
+ fs.writeFileSync(__filename, contents, 'utf8');
+ console.log('Updated fetch-parserTests.txt.js');
+ };
};
if (typeof module === 'object' && require.main !== module) {
module.exports = {
checkAndUpdate: checkAndUpdate,
- expectedSHA1: expectedSHA1,
- computeSHA1: function() {
- return existsSync(target_name) ?
computeSHA1(target_name) :
- "<file not present>";
- }
+ isUpToDate: isUpToDate
};
} else {
- checkAndUpdate();
+ var argv = require('optimist').argv;
+ if (argv.force) {
+ forceUpdate();
+ } else {
+ checkAndUpdate();
+ }
}
diff --git a/js/tests/parserTests.js b/js/tests/parserTests.js
index b893689..e1bfa3b 100755
--- a/js/tests/parserTests.js
+++ b/js/tests/parserTests.js
@@ -294,7 +294,7 @@
ParserTests.prototype.getTests = function ( argv ) {
// double check that test file is up-to-date with upstream
var fetcher = require(__dirname+"/fetch-parserTests.txt.js");
- if (fetcher.expectedSHA1 !== fetcher.computeSHA1()) {
+ if (!fetcher.isUpToDate()) {
console.warn("WARNING: parserTests.txt not up-to-date with
upstream.");
}
--
To view, visit https://gerrit.wikimedia.org/r/58442
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: If4362711e4d17e9dad8b3fbc7ac3b17966fa5aa0
Gerrit-PatchSet: 10
Gerrit-Project: mediawiki/extensions/Parsoid
Gerrit-Branch: master
Gerrit-Owner: Cscott <[email protected]>
Gerrit-Reviewer: Cscott <[email protected]>
Gerrit-Reviewer: GWicke <[email protected]>
Gerrit-Reviewer: Subramanya Sastry <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits