@atomist/automation-client
Version:
Atomist API for software low-level client
42 lines • 1.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const logger_1 = require("../../internal/util/logger");
const defaultRepoLoader_1 = require("./defaultRepoLoader");
const repoFilter_1 = require("./repoFilter");
/**
* Perform an action against all the given repos.
* Skip over repos that cannot be loaded, logging a warning.
* @param {HandlerContext} ctx
* @param credentials credentials for repo finding and loading
* @param action action parameter
* @param parameters optional parameters
* @param {RepoFinder} repoFinder
* @param {} repoFilter
* @param {RepoLoader} repoLoader
* @return {Promise<R[]>}
*/
function doWithAllRepos(ctx, credentials, action, parameters, repoFinder, repoFilter = repoFilter_1.AllRepos, repoLoader = defaultRepoLoader_1.defaultRepoLoader(credentials)) {
return relevantRepos(ctx, repoFinder, repoFilter)
.then(ids => {
return Promise.all(ids.map(id => repoLoader(id)
.catch(err => {
logger_1.logger.warn("Unable to load repo %s:%s: %s", id.owner, id.repo, err);
return undefined;
})
.then(p => {
if (p) {
return action(p, parameters);
}
})))
.then(proms => proms.filter(prom => prom));
});
}
exports.doWithAllRepos = doWithAllRepos;
function relevantRepos(ctx, repoFinder, repoFilter = repoFilter_1.AllRepos) {
return repoFinder(ctx)
.then(rids => Promise.all(rids.map(rid => Promise.resolve(repoFilter(rid))
.then(relevant => relevant ? rid : undefined))))
.then(many => many.filter(s => s !== undefined));
}
exports.relevantRepos = relevantRepos;
//# sourceMappingURL=repoUtils.js.map