exports.computeReposFromFlag = function()

in src/flagutil.js [43:104]


exports.computeReposFromFlag = function (flagValue, opts) {
    opts = opts || {};
    const includeSvn = opts.includeSvn;
    const includeModules = opts.includeModules;

    if (!flagValue) {
        console.log('No repos specified - using repo in CWD');
        flagValue = '.';
    }
    const values = flagValue === true ? [] : Array.isArray(flagValue) ? flagValue : [flagValue];
    let ret = [];
    const addedIds = {};
    const addedRepos = {};
    function addRepo (repo) {
        if (!addedIds[repo.id]) {
            addedIds[repo.id] = true;

            // If we're not requesting modules be included, then we want to de-dup in the case where two repos have the
            // same repoName (because one or both is actually a sub-module). This probably means we're doing a repo level
            // operation, so it doesn't matter which we keep, but we'll prefer the one that represents the base repo.
            if (includeModules) {
                ret.push(repo);
            } else {
                const existingRepo = addedRepos[repo.repoName];
                if (!existingRepo || !repo.isModule) {
                    if (existingRepo) {
                        ret[ret.indexOf(existingRepo)] = repo;
                    } else {
                        ret.push(repo);
                    }
                    addedRepos[repo.repoName] = repo;
                }
            }
        }
    }
    values.forEach(function (value) {
        if (value === '.') {
            value = repoutil.resolveCwdRepo();
        }
        const repo = repoutil.getRepoById(value);
        const group = repoutil.repoGroups[value];
        if (repo) {
            addRepo(repo);
        } else if (group) {
            group.forEach(addRepo);
        } else {
            apputil.fatal('Invalid repo value: ' + value + '\nUse the list-repos command to see value values.');
        }
    });
    if (!includeSvn) {
        let hadSvn = false;
        ret = ret.filter(function (r) {
            hadSvn = hadSvn || !!r.svn;
            return !r.svn;
        });
        if (hadSvn && !(values.length === 1 && values[0] === 'auto')) {
            console.warn('Skipping one or more non-git repos');
        }
    }

    return ret;
};