fixes
[mantis2gitlab] / m2gl.js
diff --git a/m2gl.js b/m2gl.js
old mode 100755 (executable)
new mode 100644 (file)
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
+}