// (C) Copyright 2015 Moodle Pty Ltd. // // 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. const DevConfig = require('./dev-config'); const DEFAULT_ISSUE_REGEX = '(MOBILE)[-_]([0-9]+)'; /** * Class with some utility functions. */ class Utils { /** * Concatenate several paths, adding a slash between them if needed. * * @param paths List of paths. * @return Concatenated path. */ static concatenatePaths(paths) { if (!paths.length) { return ''; } // Remove all slashes between paths. for (let i = 0; i < paths.length; i++) { if (!paths[i]) { continue; } if (i === 0) { paths[i] = String(paths[i]).replace(/\/+$/g, ''); } else if (i === paths.length - 1) { paths[i] = String(paths[i]).replace(/^\/+/g, ''); } else { paths[i] = String(paths[i]).replace(/^\/+|\/+$/g, ''); } } // Remove empty paths. paths = paths.filter(path => !!path); return paths.join('/'); } /** * Get command line arguments. * * @return Object with command line arguments. */ static getCommandLineArguments() { let args = {}, opt, thisOpt, curOpt; for (let a = 0; a < process.argv.length; a++) { thisOpt = process.argv[a].trim(); opt = thisOpt.replace(/^\-+/, ''); if (opt === thisOpt) { // argument value if (curOpt) { args[curOpt] = opt; } curOpt = null; } else { // Argument name. curOpt = opt; args[curOpt] = true; } } return args; } /** * Given a commit message, return the issue name (e.g. MOBILE-1234). * * @param commit Commit message. * @return Issue name. */ static getIssueFromCommitMessage(commit) { const regex = new RegExp(DevConfig.get('wording.branchRegex', DEFAULT_ISSUE_REGEX), 'i'); const matches = commit.match(regex); return matches && matches[0]; } /** * Parse a branch name to extract some data. * * @param branch Branch name to parse. * @return Data. */ static parseBranch(branch) { const regex = new RegExp(DevConfig.get('wording.branchRegex', DEFAULT_ISSUE_REGEX), 'i'); const matches = branch.match(regex); if (!matches || matches.length < 3) { throw new Error(`Error parsing branch ${branch}`); } return { issue: matches[0], project: matches[1], issueNumber: matches[2], }; } } module.exports = Utils;