Add a registry of loaded repositories (#516)
We want the UI to offer a list of available repositories, rather than using a text input box. To do this, we first need the backend to include a registry of all available repositories. Test plan: Sadly we don't have CLI testing, so I manually verified this by doing the following: ``` $ yarn backend $ rm -r $SOURCECRED_DIRECTORY $ node bin/sourcecred.js load sourcecred example-github $ cat $SOURCECRED_DIRECTORY/repositoryRegistry.json {"sourcecred/example-github":true} $ node bin/sourcecred.js load sourcecred example-github $ cat $SOURCECRED_DIRECTORY/repositoryRegistry.json {"sourcecred/example-github":true} $ node bin/sourcecred.js load sourcecred example-git $ cat $SOURCECRED_DIRECTORY/repositoryRegistry.json {"sourcecred/example-git":true,"sourcecred/example-github":true} ```
This commit is contained in:
parent
94a023ef6f
commit
cd6c869d84
|
@ -3,6 +3,8 @@
|
||||||
import {Command, flags} from "@oclif/command";
|
import {Command, flags} from "@oclif/command";
|
||||||
import mkdirp from "mkdirp";
|
import mkdirp from "mkdirp";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
|
import fs from "fs";
|
||||||
|
import stringify from "json-stable-stringify";
|
||||||
|
|
||||||
import {loadGithubData} from "../../plugins/github/loadGithubData";
|
import {loadGithubData} from "../../plugins/github/loadGithubData";
|
||||||
import {loadGitData} from "../../plugins/git/loadGitData";
|
import {loadGitData} from "../../plugins/git/loadGitData";
|
||||||
|
@ -72,7 +74,13 @@ export default class PluginGraphCommand extends Command {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadAllPlugins({repoOwner, repoName, githubToken, maxOldSpaceSize}) {
|
function loadAllPlugins({
|
||||||
|
basedir,
|
||||||
|
repoOwner,
|
||||||
|
repoName,
|
||||||
|
githubToken,
|
||||||
|
maxOldSpaceSize,
|
||||||
|
}) {
|
||||||
if (githubToken == null) {
|
if (githubToken == null) {
|
||||||
// TODO: This check should be abstracted so that plugins can
|
// TODO: This check should be abstracted so that plugins can
|
||||||
// specify their argument dependencies and get nicely
|
// specify their argument dependencies and get nicely
|
||||||
|
@ -100,6 +108,9 @@ function loadAllPlugins({repoOwner, repoName, githubToken, maxOldSpaceSize}) {
|
||||||
})),
|
})),
|
||||||
];
|
];
|
||||||
execDependencyGraph(tasks, {taskPassLabel: "DONE"}).then(({success}) => {
|
execDependencyGraph(tasks, {taskPassLabel: "DONE"}).then(({success}) => {
|
||||||
|
if (success) {
|
||||||
|
addToRepoRegistry({basedir, repoOwner, repoName});
|
||||||
|
}
|
||||||
process.exitCode = success ? 0 : 1;
|
process.exitCode = success ? 0 : 1;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -140,3 +151,22 @@ function loadPlugin({basedir, plugin, repoOwner, repoName, githubToken}) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const REPO_REGISTRY_FILE = "repositoryRegistry.json";
|
||||||
|
|
||||||
|
function addToRepoRegistry(options) {
|
||||||
|
// TODO: Make this function transactional before loading repositories in
|
||||||
|
// parallel.
|
||||||
|
const {basedir, repoOwner, repoName} = options;
|
||||||
|
const outputFile = path.join(basedir, REPO_REGISTRY_FILE);
|
||||||
|
let registry = null;
|
||||||
|
if (fs.existsSync(outputFile)) {
|
||||||
|
const contents = fs.readFileSync(outputFile);
|
||||||
|
registry = JSON.parse(contents.toString());
|
||||||
|
} else {
|
||||||
|
registry = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
registry[`${repoOwner}/${repoName}`] = true;
|
||||||
|
fs.writeFileSync(outputFile, stringify(registry));
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue