diff options
Diffstat (limited to 'addon-sdk/source/bin/node-scripts/apply-patch.js')
-rw-r--r-- | addon-sdk/source/bin/node-scripts/apply-patch.js | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/addon-sdk/source/bin/node-scripts/apply-patch.js b/addon-sdk/source/bin/node-scripts/apply-patch.js new file mode 100644 index 000000000..31fbf7d31 --- /dev/null +++ b/addon-sdk/source/bin/node-scripts/apply-patch.js @@ -0,0 +1,64 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +"use strict"; + +var path = require("path"); +var cp = require("child_process"); +var fs = require("fs"); +var Promise = require("promise"); +var patcher = require("patch-editor"); +var readParam = require("./utils").readParam; + +var isKeeper = /\/addon-sdk\/source/; + +function apply(options) { + return clean(options).then(function() { + return new Promise(function(resolve) { + var patch = path.resolve(readParam("patch")); + var proc = cp.spawn("git", ["apply", patch]); + proc.stdout.pipe(process.stdout); + proc.stderr.pipe(process.stderr); + proc.on("close", resolve); + }); + }); +} +exports.apply = apply; + +function clean(options) { + return new Promise(function(resolve) { + var patch = path.resolve(readParam("patch")); + if (!patch) { + throw new Error("no --patch was provided."); + } + console.log("Cleaning patch " + patch); + + patcher.getChunks({ patch: patch }).then(function(chunks) { + var keepers = []; + + for (var i = chunks.length - 1; i >= 0; i--) { + var chunk = chunks[i]; + var files = chunk.getFilesChanged(); + + // check if the file changed is related to the addon-sdk/source directory + var keepIt = files.map(function(file) { + return (isKeeper.test(file)); + }).reduce(function(prev, curr) { + return prev || curr; + }, false); + + if (keepIt) { + keepers.push(chunk); + } + } + + var contents = "\n" + keepers.join("\n") + "\n"; + contents = contents.replace(/\/addon-sdk\/source/g, ""); + + fs.writeFileSync(patch, contents, { encoding: "utf8" }); + + console.log("Done cleaning patch."); + }).then(resolve).catch(console.error); + }); +} +exports.clean = clean; |