123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- 'use strict';
- const fs = require('fs'),
- rp = require('request-promise-native');
- const sourceDir = process.argv[2],
- sourceRepo = process.argv[3],
- destUrl = process.argv[4],
- destRepo = process.argv[5],
- actions = process.argv[6];
- 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 createIssue (issue) {
- const user = userByUrl(issue.user),
- username = user && user.name || `${user ? user.login : "???"}@github`;
- return rp
- .post(`${destUrl}/api/v1/repos/${destRepo}/issues`, {
- json: true,
- resolveWithFullResponse: 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}`,
- // closed: !!issue.closed_at,
- labels: [] //issue.labels.map(each => each.split('/').pop())
- }
- })
- .catch(err => {
- console.error(err);
- })
- .then(res => {
- console.log(issue.title);
- if (res) console.log(res.statusCode);
- });
- }
- function setCloseIssue (issue) {
- const index = issue.url.split('/').pop();
- if (issue.closed_at) return rp
- .patch(`${destUrl}/api/v1/repos/${destRepo}/issues/${index}`, {
- json: true,
- resolveWithFullResponse: true,
- body: {
- state: "closed"
- }
- })
- .catch(err => {
- console.error(err);
- })
- .then(res => {
- console.log(issue.title);
- if (res) console.log(res.statusCode);
- });
- }
- function processIssue (issues) {
- const issue = issues.shift();
- if (!issue) return Promise.resolve();
- return Promise.resolve()
- .then(() => /\bcreate\b/.test(actions) && createIssue(issue))
- .then(() => /\bsetclose\b/.test(actions) && setCloseIssue(issue))
- .then(() => processIssue(issues));
- }
- processIssue(IssuesAndPRs.slice())
- .then(() => {
- console.log(`${IssuesAndPRs.length} issues processed.`);
- setTimeout(() => null, 600);
- });
- function userByUrl (url) {
- return Users.filter(each => each.url === url)[0];
- }
|