.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;
var gitLab = {};
var promise = getConfig()
.then(readMantisIssues)
+ .then((JSON.stringify(gitLab.mantisIssues)))
.then(getGitLabProject)
.then(getGitLabProjectMembers)
.then(mapGitLabUserIds)
*/
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",
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);
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) {
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;
});
}
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));
}
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
};
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;
}
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;
}
});
}
-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) {
}
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,
function log_progress(message) {
console.log(message.grey);
-}
\ No newline at end of file
+}