UNPKG

@atomist/org-visualizer

Version:

Organization Visualizer using Atomist project scanning

122 lines 5.5 kB
"use strict"; /* * Copyright © 2019 Atomist, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const automation_client_1 = require("@atomist/automation-client"); const InMemoryProject_1 = require("@atomist/automation-client/lib/project/mem/InMemoryProject"); const path = require("path"); const subprojectFinder_1 = require("../../subprojectFinder"); function keepExistingPersisted(opts, repoId) { return __awaiter(this, void 0, void 0, function* () { const found = yield opts.persister.loadByRepoRef(repoId); if (!found) { return false; } return opts.keepExistingPersisted(found); }); } exports.keepExistingPersisted = keepExistingPersisted; /** * Find project or subprojects */ function analyze(project, analyzer, criteria) { return __awaiter(this, void 0, void 0, function* () { const subprojectResults = criteria.subprojectFinder ? yield criteria.subprojectFinder.findSubprojects(project) : { status: subprojectFinder_1.SubprojectStatus.Unknown }; if (!!subprojectResults.subprojects && subprojectResults.subprojects.length > 0) { const repoInfos = yield Promise.all(subprojectResults.subprojects.map(subproject => { return projectUnder(project, subproject.path).then(p => analyzeProject(p, analyzer, Object.assign({}, subproject, { parentRepoRef: project.id }))); })).then(results => results.filter(x => !!x)); return { projectsDetected: subprojectResults.subprojects.length, repoInfos, }; } return { projectsDetected: 1, repoInfos: [yield analyzeProject(project, analyzer, undefined)] }; }); } exports.analyze = analyze; /** * Analyze a project. May be a virtual project, within a bigger project. */ function analyzeProject(project, analyzer, subproject) { return __awaiter(this, void 0, void 0, function* () { const readmeFile = yield project.getFile("README.md"); const readme = !!readmeFile ? yield readmeFile.getContent() : undefined; const totalFileCount = yield project.totalFileCount(); const analysis = yield analyzer.analyze(project, undefined, { full: true }); const interpretation = yield analyzer.interpret(analysis, undefined); return { readme, totalFileCount, interpretation, analysis, subproject, }; }); } function projectUnder(p, pathWithin) { return __awaiter(this, void 0, void 0, function* () { if (InMemoryProject_1.isInMemoryProject(p)) { // TODO we need latest automation-client but this isn't available // return p.toSubproject(pathWithin); } if (!automation_client_1.isLocalProject(p)) { throw new Error(`Cannot descend into path '${pathWithin}' of non local project`); } const rid = p.id; const newId = Object.assign({}, rid, { path: pathWithin }); return automation_client_1.GitCommandGitProject.fromBaseDir(newId, path.join(p.baseDir, pathWithin), p.credentials, p.release); }); } function persistRepoInfo(opts, repoInfo, moreInfo) { return __awaiter(this, void 0, void 0, function* () { // Use a spread as url has a getter and otherwise disappears const repoRef = Object.assign({}, repoInfo.analysis.id, { url: moreInfo.url }); const toPersist = { workspaceId: opts.workspaceId, repoRef, analysis: Object.assign({}, repoInfo.analysis, { id: repoRef }), topics: [], sourceData: moreInfo.sourceData, timestamp: moreInfo.timestamp, query: moreInfo.query, readme: repoInfo.readme, subproject: repoInfo.subproject, }; const persistResult = yield opts.persister.persist(toPersist); if (opts.onPersisted) { try { yield opts.onPersisted(toPersist); } catch (err) { automation_client_1.logger.warn("Failed to action after persist repo %j: %s", toPersist.analysis.id, err.message); } } return persistResult; }); } exports.persistRepoInfo = persistRepoInfo; //# sourceMappingURL=common.js.map