Browse Source

First version of issue import.

Herbert Vojčík 8 years ago
parent
commit
b3b6604834
1 changed files with 59 additions and 0 deletions
  1. 59 0
      gh2gogs.js

+ 59 - 0
gh2gogs.js

@@ -0,0 +1,59 @@
+'use strict';
+
+const fs = require('fs'),
+    request = require('request');
+
+const sourceDir = process.argv[2],
+    sourceRepo = process.argv[3],
+    destUrl = process.argv[4],
+    destRepo = process.argv[5];
+
+process.chdir(sourceDir);
+
+let Users = [], IssuesAndPRs = [];
+
+fs.readdirSync('.').forEach(filename => {
+    if (/^issues_\d*\.json$/.test(filename)) readIssues(filename);
+    else if (/^pull_requests_\d*\.json$/.test(filename)) readIssues(filename);
+    if (/^users_\d*\.json$/.test(filename)) readUsers(filename);
+});
+
+function readIssues (filename) {
+    IssuesAndPRs.push.apply(IssuesAndPRs, JSON.parse(fs.readFileSync(filename, 'utf8')));
+}
+
+function readUsers (filename) {
+    Users.push.apply(Users, JSON.parse(fs.readFileSync(filename, 'utf8')));
+}
+
+IssuesAndPRs = IssuesAndPRs
+    .filter(each => each.repository.slice(-sourceRepo.length) === sourceRepo)
+    .sort((a, b) => +a.url.split('/').pop() - +b.url.split('/').pop());
+
+function postIssue (issues) {
+    const issue = issues.shift();
+    if (!issue) return;
+
+    const user = userByUrl(issue.user),
+        username = user && user.name || `${user ? user.login : "???"}@github`;
+
+    request.post(`${destUrl}/api/v1/repos/${destRepo}/issues`, {
+        json: true,
+        body: {
+            title: issue.title,
+            body: `Originally at ${issue.created_at} by ${username}${issue.closed_at ? ` closed at ${issue.closed_at}` : ""}${issue.type === "pull_request" ? " (pull request)" : ""}\r\n\r\n${issue.body}`,
+            labels: [] //issue.labels.map(each => each.split('/').pop())
+        }
+    }, (err, res, body) => {
+        if (err) console.error(err);
+        console.log(issue.title);
+        console.log(res.statusCode);
+        postIssue(issues);
+    });
+}
+
+postIssue(IssuesAndPRs.slice());
+
+function userByUrl (url) {
+    return Users.filter(each => each.url === url)[0];
+}