UNPKG

2.81 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const logger_1 = require("../../internal/util/logger");
4const NodeFsLocalProject_1 = require("../../project/local/NodeFsLocalProject");
5const tmpDirectoryManager_1 = require("../../spi/clone/tmpDirectoryManager");
6const projectEditor_1 = require("../edit/projectEditor");
7/**
8 * Generate a new project given the starting point project.
9 * Do not change the starting point. May perform additional
10 * action after persisting the project.
11 * @param {Promise<Project>} startingPoint
12 * @param {HandlerContext} ctx
13 * @param {ProjectOperationCredentials} credentials
14 * @param {ProjectEditor} editor editor that does the actual transformation
15 * @param persist persist function to persist the new project:
16 * for example, to GitHub
17 * @param targetId id of target repo for persistence
18 * @param params optional parameters to be passed to persister
19 * @param afterAction action to perform after project persistence.
20 * @param directoryManager finds a directory for the new project; defaults to tmp
21 */
22function generate(startingPoint, ctx, credentials, editor, persist, targetId, params, afterAction, directoryManager = tmpDirectoryManager_1.TmpDirectoryManager) {
23 return directoryManager.directoryFor(targetId.owner, targetId.repo, "master", {})
24 .then(newRepoDirectoryInfo => {
25 return Promise.resolve(startingPoint) // it might be a promise
26 .then(seed =>
27 // Make a copy that we can work on
28 NodeFsLocalProject_1.NodeFsLocalProject.copy(seed, newRepoDirectoryInfo.path, newRepoDirectoryInfo.release)
29 .then(independentCopy => release(seed).then(() => independentCopy)))
30 // Let's be sure we didn't inherit any old git stuff
31 .then(independentCopy => independentCopy.deleteDirectory(".git"))
32 .then(independentCopy => projectEditor_1.toEditor(editor)(independentCopy, ctx, params))
33 .then(r => r.target)
34 .then(populated => {
35 logger_1.logger.debug("Persisting repo at [%s]: owner/repo=%s/%s", populated.baseDir, targetId.owner, targetId.repo);
36 return persist(populated, credentials, targetId, params);
37 })
38 .then(persistenceResult => {
39 return afterAction ?
40 afterAction(persistenceResult.target, params)
41 .then(r => {
42 // Preserve any extra returned values from persister
43 return Object.assign({}, persistenceResult, r);
44 }) :
45 persistenceResult;
46 });
47 });
48}
49exports.generate = generate;
50function release(project) {
51 if (project.release) {
52 return project.release();
53 }
54 return Promise.resolve();
55}
56//# sourceMappingURL=generatorUtils.js.map
\No newline at end of file