Mwalker has uploaded a new change for review.
https://gerrit.wikimedia.org/r/134523
Change subject: Updating submodule pointers and unifying the makefile
......................................................................
Updating submodule pointers and unifying the makefile
Change-Id: Iadc058fbee6d3fbb92d8647a82339b005feab035
---
M .gitignore
A Makefile
D make.sh
M mw-ocg-bundler
M mw-ocg-latexer
M mw-ocg-service
M mw-ocg-texter
A unify-package-json.js
8 files changed, 171 insertions(+), 24 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/services/ocg-collection
refs/changes/23/134523/1
diff --git a/.gitignore b/.gitignore
index 1bc63e8..fe26abb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,5 @@
node_modules/*
LocalSettings.js
+
+.idea
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..56be9fd
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,20 @@
+all: debug
+
+core:
+ rm ./package.json
+ npm cache clear
+ npm install when
+ ./unify-package-json.js
+ npm install
+ npm update
+ npm dedupe
+
+production: core
+ npm prune --production
+ rm -rf ./node_modules/icu-bidi/build
+
+debug: core
+ npm prune
+
+clean:
+ rm -rf ./node_modules
diff --git a/make.sh b/make.sh
deleted file mode 100755
index 5462176..0000000
--- a/make.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/bash
-# Make the node_modules folder
-
-SCRIPTPATH=`dirname $(readlink -f ./make.sh)`
-mkdir -p node_modules
-
-for f in ./mw-ocg*/
-do
- ln -s $SCRIPTPATH/node_modules $f/node_modules
- cd $f
- npm install
- NPMEXIT=$?
-
- cd ..
- #rm $f/node_modules
-
- if [ $NPMEXIT != 0 ]; then
- echo "npm install for $f exited with failure"
- exit $?
- fi
-done
-
-echo "Done! Apparent success"
-
diff --git a/mw-ocg-bundler b/mw-ocg-bundler
index b44b3b5..085d024 160000
--- a/mw-ocg-bundler
+++ b/mw-ocg-bundler
-Subproject commit b44b3b51fc8b4862b5a2e6486967548920f9ad26
+Subproject commit 085d024cdc33d82fb2cc4b9d7a1560a24dd6910c
diff --git a/mw-ocg-latexer b/mw-ocg-latexer
index fcbe016..9bff3d6 160000
--- a/mw-ocg-latexer
+++ b/mw-ocg-latexer
-Subproject commit fcbe016e0ed942552a9b464e329d0fb0698768bd
+Subproject commit 9bff3d6da3ad1255f5c9d5f8d8a190756545acfe
diff --git a/mw-ocg-service b/mw-ocg-service
index 1262422..91eaf0c 160000
--- a/mw-ocg-service
+++ b/mw-ocg-service
-Subproject commit 1262422a81eb193247ff828090df8a0d71343e63
+Subproject commit 91eaf0cbda583e299084cc5cf5ec372c452b98fb
diff --git a/mw-ocg-texter b/mw-ocg-texter
index 291563f..de48026 160000
--- a/mw-ocg-texter
+++ b/mw-ocg-texter
-Subproject commit 291563f95694b60a01ba571945516b58e439c0f3
+Subproject commit de48026939d70695867aa6cd2b44b692ac590ee2
diff --git a/unify-package-json.js b/unify-package-json.js
new file mode 100755
index 0000000..2234c6a
--- /dev/null
+++ b/unify-package-json.js
@@ -0,0 +1,149 @@
+#!/usr/bin/env nodejs
+
+/**
+ * Make script to composite dependencies of node modules into one big file.
+ *
+ * This will find all package.json files recursively and merge them into one.
+ * It will throw errors if multiple files reference different versions of the
+ * same upstream package.
+ *
+ * Ironically; this script itself has dependencies in the form of the when
library
+ * (because node.js for some stupid reason doesn't include promises anymore)
+ */
+
+var child_process = require( 'child_process' ),
+ semver = require( 'semver' ),
+ fs = require( 'fs' ),
+ util = require( 'util' );
+
+try {
+ var when = require('when');
+} catch ( err ) {
+ console.err( "The 'when' library could not be loaded. Please `npm
install when`")
+}
+
+function findPackageJson() {
+ return when.promise( function( resolve, reject, notify ) {
+ child_process.exec(
+ 'find . -path ./node_modules -prune -o -name
package.json -print',
+ function( error, stdout, stderr ) {
+ files = stdout.trim().split( '\n' );
+ resolve( files );
+ }
+ )
+ } );
+}
+
+function readPackageJson( files ) {
+ return when.map(
+ files,
+ function( file ) {
+ return require( file );
+ }
+ );
+}
+
+function buildDependencies( packageObjs ) {
+ var glodeps, optdeps, glodevdeps;
+ var iterate = function iterate( key, arrayObj ) {
+ var unifiedDeps = {};
+
+ arrayObj.forEach( function( el ) {
+ var name = el.name,
+ packdeps = el[key],
+ pkg, glover, pkgver;
+
+ for ( pkg in packdeps ) {
+ if ( !packdeps.hasOwnProperty( pkg ) ) {
+ continue;
+ }
+
+ if ( pkg in unifiedDeps ) {
+ // Check to see if the versions are
compatible
+ glover = unifiedDeps[pkg][0];
+ pkgver = packdeps[pkg];
+
+ // Strict equality is nice; they need
the same thing
+ if ( glover === pkgver ) {
+ continue;
+ }
+
+ // If either is an approximate version
(major / minor match) strip
+ // the tidle so semver can process and
then see if the other requirement matches
+ if ( glover[0] === '~' &&
semver.satisfies( glover.substr( 1 ), pkgver ) ) {
+ continue;
+ }
+ if ( pkgver[0] === '~' &&
semver.satisfies( pkgver.substr( 1 ), glover ) ) {
+ continue;
+ }
+
+ // TODO: Handle greater than / less
than.
+
+ console.error(
+ util.format(
+ 'Could not reconcile
common dependency on %s. %s requires %s where %s requires %s.',
+ pkg,
+ unifiedDeps[pkg][1],
glover,
+ name, pkgver
+ )
+ );
+
+ } else {
+ // Not already used, just add it
+ unifiedDeps[pkg] = [packdeps[pkg],
name];
+ }
+ }
+ } );
+
+ // Clean the metadata we left
+ for ( dep in unifiedDeps ) {
+ if ( !unifiedDeps.hasOwnProperty( dep ) ) {
+ continue;
+ }
+ unifiedDeps[dep] = unifiedDeps[dep][0];
+ }
+
+ return unifiedDeps;
+ };
+
+ console.info( 'Unifying runtime dependencies' );
+ glodeps = iterate( 'dependencies', packageObjs );
+ console.info( 'Unifying optional dependencies' );
+ optdeps = iterate( 'optionalDependencies', packageObjs );
+ console.info( 'Unifying unified development dependencies' );
+ glodevdeps = iterate( 'devDependencies', packageObjs );
+
+ return {
+ 'dependencies': glodeps,
+ 'optionalDependencies': optdeps,
+ 'devDependencies': glodevdeps
+ };
+}
+
+function writePackageJson( deps ) {
+ var packageObj = {
+ name: "mw-ocg-service-bundle",
+ description: "Common build dependency bundle for the MediaWiki
Offline Content Generator",
+ repository: {
+ type: "git",
+ url:
"gerrit.wikimedia.org/r/mediawiki/services/ocg-collection"
+ },
+
+ dependencies: deps.dependencies,
+ optionalDependencies: deps.optionalDependencies,
+ devDependencies: deps.devDependencies
+ };
+
+ fs.writeFile( 'package.json', JSON.stringify( packageObj, null, 2 ),
function( err ) {
+ console.log('wrote file');
+ } );
+}
+
+/* === Glue logic === */
+findPackageJson()
+ .then( readPackageJson )
+ .then( when.lift( buildDependencies ) )
+ .then( writePackageJson )
+ .catch( function( err ) { console.error( err ) });
+
+
--
To view, visit https://gerrit.wikimedia.org/r/134523
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Iadc058fbee6d3fbb92d8647a82339b005feab035
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/services/ocg-collection
Gerrit-Branch: master
Gerrit-Owner: Mwalker <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits