diff --git a/BuildServer/lib/builder.js b/BuildServer/lib/builder.js index 5f3b9b4..14e37f4 100644 --- a/BuildServer/lib/builder.js +++ b/BuildServer/lib/builder.js @@ -3,7 +3,7 @@ var fs = require('fs'); var fse = require('fs-extra'); var async = require('async'); -var gitLoader = require('./git-loader'); +var gitLoader = require('./git/loader'); var processor = require('./task-processor'); var mailSender = require('./mail-sender'); var settings = require('../settings'); diff --git a/BuildServer/lib/git/copy.js b/BuildServer/lib/git/copy.js new file mode 100644 index 0000000..7093787 --- /dev/null +++ b/BuildServer/lib/git/copy.js @@ -0,0 +1,54 @@ +"use strict"; + +var nodegit = require('nodegit'), + async = require('async'), + fs = require('fs'), + fse = require('fs-extra'), + mkdirs = function (path) { + /*jslint stupid: true */ + fse.mkdirsSync(path); + }, + removedirs = function (path) { + /*jslint stupid: true */ + fse.removeSync(path); + }; + +exports.gitToFs = function (commit, exportDir, globalCallback) { + var q = async.queue(function (task, callback) { + //console.log("Going to write file " + task.path + " (" + task.buffer.length + " bytes)"); + task.entry.getBlob(function (err, blob) { + if (err) { + return callback(err); + } + + fs.writeFile(exportDir + "/" + task.path, blob.content(), function (err, result) { + //console.log("Done writing file " + task.path); + callback(err, result); + }); + }); + }, 10); + + commit.getTree(function (err, tree) { + if (err) { + return globalCallback(err); + } + + tree.walk(false) + .on('entry', function (entry) { + if (entry.isTree()) { + mkdirs(exportDir + "/" + entry.path()); + } else if (entry.isFile()) { + q.push({path: entry.path(), entry: entry }); + } + }) + .on('end', function () { + if (q.length() === 0) { + process.nextTick(globalCallback); + } else { + q.drain = globalCallback; + } + return; + }) + .start(); + }); +}; diff --git a/BuildServer/lib/git-loader.js b/BuildServer/lib/git/loader.js similarity index 51% rename from BuildServer/lib/git-loader.js rename to BuildServer/lib/git/loader.js index 06c0947..c97ddb0 100644 --- a/BuildServer/lib/git-loader.js +++ b/BuildServer/lib/git/loader.js @@ -1,10 +1,8 @@ "use strict"; var nodegit = require('nodegit'), - async = require('async'), - fs = require('fs'), fse = require('fs-extra'), - basename = require('path').basename, + gitToFs = require('./copy').gitToFs, mkdirs = function (path) { /*jslint stupid: true */ fse.mkdirsSync(path); @@ -27,10 +25,7 @@ options = { module.exports = function (options, globalCallback) { var url = options.remote, path = options.local + "/" + options.hash, - exported = options.exported, - done = function () { - globalCallback(); - }; + exported = options.exported; removedirs(path); mkdirs(path); @@ -46,20 +41,6 @@ module.exports = function (options, globalCallback) { return globalCallback(err); } - var q = async.queue(function (task, callback) { - //console.log("Going to write file " + task.path + " (" + task.buffer.length + " bytes)"); - task.entry.getBlob(function (err, blob) { - if (err) { - return callback(err); - } - - fs.writeFile(exported + "/" + task.path, blob.content(), function (err, result) { - //console.log("Done writing file " + task.path); - callback(err, result); - }); - }); - }, 10); - repo.getCommit(options.hash, function (err, commit) { if (err) { return globalCallback(err); @@ -68,29 +49,7 @@ module.exports = function (options, globalCallback) { removedirs(exported); mkdirs(exported); - commit.getTree(function (err, tree) { - if (err) { - return globalCallback(err); - } - - tree.walk(false) - .on('entry', function (entry) { - if (entry.isTree()) { - mkdirs(exported + "/" + entry.path()); - } else if (entry.isFile()) { - q.push({path: entry.path(), entry: entry }); - } - }) - .on('end', function () { - if (q.length() === 0) { - process.nextTick(done); - } else { - q.drain = done; - } - return; - }) - .start(); - }); + gitToFs(commit, exported, globalCallback); }); }); };