UNPKG

@atomist/automation-client

Version:

Atomist API for software low-level client

75 lines 3.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const NodeFsLocalProject_1 = require("../../project/local/NodeFsLocalProject"); const tmpDirectoryManager_1 = require("../../spi/clone/tmpDirectoryManager"); const logger_1 = require("../../util/logger"); const projectEditor_1 = require("../edit/projectEditor"); /** * Generate a new project given the starting point project. * Do not change the starting point. May perform additional * action after persisting the project. * @param {Promise<Project>} startingPoint * @param {HandlerContext} ctx * @param {ProjectOperationCredentials} credentials * @param {ProjectEditor} editor editor that does the actual transformation * @param persist persist function to persist the new project: * for example, to GitHub * @param targetId id of target repo for persistence * @param params optional parameters to be passed to persister * @param afterAction action to perform after project persistence. * @param directoryManager finds a directory for the new project; defaults to tmp */ function generate(startingPoint, ctx, credentials, editor, persist, targetId, params, afterAction, directoryManager = tmpDirectoryManager_1.TmpDirectoryManager) { return directoryManager.directoryFor(targetId.owner, targetId.repo, "master", {}) .then(newRepoDirectoryInfo => { return Promise.resolve(startingPoint) // it might be a promise .then(seed => // Make a copy that we can work on NodeFsLocalProject_1.NodeFsLocalProject.copy(seed, newRepoDirectoryInfo.path, newRepoDirectoryInfo.release) .then(independentCopy => release(seed).then(() => independentCopy))) // Let's be sure we didn't inherit any old git stuff .then(independentCopy => independentCopy.deleteDirectory(".git")) .then(independentCopy => { // Overwrite the seed id before running the editor so that it sees the new repo details independentCopy.id = targetId; return projectEditor_1.toEditor(editor)(independentCopy, ctx, params); }) .then(r => { if (r.success) { return r.target; } else if (!!r.error) { throw r.error; } else { return Promise.reject(new Error("Failed to edit project")); } }) .then(populated => { logger_1.logger.debug("Persisting repo at [%s]: owner/repo=%s/%s", populated.baseDir, targetId.owner, targetId.repo); return persist(populated, credentials, targetId, params); }) .then(persistenceResult => { return afterAction ? afterAction(persistenceResult.target, params) .then(r => { // Preserve any extra returned values from persister return Object.assign(Object.assign({}, persistenceResult), r); }) : persistenceResult; }) .catch(err => { logger_1.logger.debug("Failed to generate %s/%s in %s, cleaning up: %s\n", targetId.owner, targetId.repo, newRepoDirectoryInfo.path, err.message); return newRepoDirectoryInfo.release() .then(() => Promise.reject(err), e => Promise.reject(err)); }); }); } exports.generate = generate; function release(project) { if (project.release) { return project.release(); } return Promise.resolve(); } //# sourceMappingURL=generatorUtils.js.map