X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;ds=inline;f=m2gl.js;h=53d9b5ba07d9174766c3656e4329344ec60b5abb;hb=ec691e6d72c4d518ff2c1c9f5d0bda377746a00a;hp=67c0a3b465f50e6cfbd61877d9e3ad38940957e2;hpb=888bbeb227287f0ce532bc3ace102d69624c5d44;p=mantis2gitlab diff --git a/m2gl.js b/m2gl.js old mode 100755 new mode 100644 index 67c0a3b..53d9b5b --- a/m2gl.js +++ b/m2gl.js @@ -26,10 +26,10 @@ var argv = require('optimist') .describe('f', 'The first issue # to import (Example: 123)') .argv; -var inputFile = __dirname + '/' + argv.input; -var configFile = __dirname + '/' + argv.config; +var inputFile = argv.input; +var configFile = argv.config; var fromIssueId = Number(argv.from||0); -var gitlabAPIURLBase = argv.gitlaburl + '/api/v3'; +var gitlabAPIURLBase = argv.gitlaburl + '/api/v4'; var gitlabProjectName = argv.project; var gitlabAdminPrivateToken = argv.token; var gitlabSudo = argv.sudo; @@ -38,6 +38,7 @@ var config = {}; var gitLab = {}; var promise = getConfig() .then(readMantisIssues) + .then((JSON.stringify(gitLab.mantisIssues))) .then(getGitLabProject) .then(getGitLabProjectMembers) .then(mapGitLabUserIds) @@ -57,9 +58,10 @@ promise.then(function() { */ function getConfig() { log_progress("Reading configuration..."); - return FS.read(configFile, {encoding: 'utf8'}) + return FS.read(configFile) .then(function(data) { var config = JSON.parse(data); + config.users = _.extend({ "": { name: "Unknown", @@ -83,7 +85,7 @@ function readMantisIssues() { var rows = []; var dfd = Q.defer(); - csv().from(data, {delimiter: ',', escape: '"', columns: true}) + csv().from(data, {delimiter: '\t', quote: '~', escape: '~', columns: true}) .on('record', function(row, index) { rows.push(row) }) .on('end', function(error, data) { dfd.resolve(rows); @@ -116,8 +118,11 @@ function getGitLabProject() { var url = gitlabAPIURLBase + '/projects'; var data = { per_page: 100, private_token: gitlabAdminPrivateToken, sudo: gitlabSudo }; - return rest.get(url, {data: data}).then(function(result) { - + return rest.get(url, {data: data}) + .fail(function(err) { + console.log(err); + }) + .then(function(result) { gitLab.project = _.find(result, { path_with_namespace : gitlabProjectName }) || null; if (!gitLab.project) { @@ -152,7 +157,7 @@ function mapGitLabUserIds() { var users = config.users, gitlabUsers = gitLab.gitlabUsers; _.forEach(users, function(user) { - user.gl_id = (_.find(gitlabUsers, { id: user.gl_username }) || {}).id; + user.gl_id = (_.find(gitlabUsers, { username: user.gl_username }) || {}).id; }); } @@ -227,13 +232,15 @@ function importIssue(mantisIssue) { return getIssue(gitLab.project.id, issueId) .then(function(gitLabIssue) { if (gitLabIssue) { - return updateIssue(gitLab.project.id, gitLabIssue.id, _.extend({ + return updateIssue(gitLab.project.id, gitLabIssue.iid, _.extend({ state_event: isClosed(mantisIssue) ? 'close' : 'reopen' }, data)) .then(function() { - console.log(("#" + issueId + ": Updated successfully.").green); + console.log(("#" + gitLabIssue.iid + ": Updated successfully.").green); }); } else { + console.log(data.title); + //return true; // FIXME return insertSkippedIssues(issueId-1) .then(function() { return insertAndCloseIssue(issueId, data, isClosed(mantisIssue)); @@ -243,14 +250,16 @@ function importIssue(mantisIssue) { } function insertSkippedIssues(issueId) { - if (gitLab.gitlabIssues[issueId]) { + if (issueId < 1 || gitLab.gitlabIssues[issueId]) { return Q(); } - console.warn(("Skipping Missing Mantis Issue (<= #" + issueId + ") ...").yellow); + //FIXME console.warn(("Skipping Missing Mantis Issue (<= #" + issueId + ") ...").yellow); + console.log(("Adding" + issueId + ") ...").blue); var data = { - title: "Skipped Mantis Issue", + title: "--Platzhalter--", + description: "Fehlende Bugnummer in Mantis. Wird hier ausgelassen, damit die Bugnummern in Mantis mit denen in Gitlab uebereinstimmen.", sudo: gitlabSudo, private_token: gitlabAdminPrivateToken }; @@ -318,10 +327,16 @@ function getRemainingGitLabProjectIssues(page, per_page) { var data = { page: page, per_page: per_page, - order_by: 'id', + // FIXME: schnalke + //order_by: 'id', private_token: gitlabAdminPrivateToken, sudo: gitlabSudo }; - return rest.get(url, {data: data}).then(function(issues) { + return rest.get(url, {data: data}) + return rest.get(url, {data: data}) + .fail(function(err) { + console.log(err); + }) + .then(function(issues) { if(issues.length < per_page) { return issues; } @@ -376,6 +391,20 @@ function getDescription(row) { description += "\n\n" + value.split("$$$$").join("\n\n") } + description = description.replace(/\\n/g, "\n"); + + description = description.replace(/\n *----/g, "\n>>>"); + + //description = description.replace(/schnalke/g, "@MSchnalke"); + + Object.keys(config.users).forEach(function(muser) { + if (muser != "") { + var gluser = config.users[muser].gl_username; + var re = new RegExp(muser, "g"); + description = description.replace(re, "@" + gluser); + } + }); + return description; } @@ -427,8 +456,8 @@ function insertIssue(projectId, data) { }); } -function updateIssue(projectId, issueId, data) { - var url = gitlabAPIURLBase + '/projects/' + projectId + '/issues/' + issueId; +function updateIssue(projectId, issueIId, data) { + var url = gitlabAPIURLBase + '/projects/' + projectId + '/issues/' + issueIId; return rest.put(url, {data: data}) .then(null, function(error) { @@ -437,7 +466,7 @@ function updateIssue(projectId, issueId, data) { } function closeIssue(issue, custom) { - var url = gitlabAPIURLBase + '/projects/' + issue.project_id + '/issues/' + issue.id; + var url = gitlabAPIURLBase + '/projects/' + issue.project_id + '/issues/' + issue.iid; var data = _.extend({ state_event: 'close', private_token: gitlabAdminPrivateToken, @@ -453,4 +482,4 @@ function closeIssue(issue, custom) { function log_progress(message) { console.log(message.grey); -} \ No newline at end of file +}