PHP WebShell

Текущая директория: /opt/BitGoJS/node_modules/@lerna/describe-ref/lib

Просмотр файла: describe-ref.js

"use strict";

const log = require("npmlog");
const childProcess = require("@lerna/child-process");

module.exports.describeRef = describeRef;
module.exports.describeRefSync = describeRefSync;

/**
 * @typedef {object} DescribeRefOptions
 * @property {string} [cwd] Defaults to `process.cwd()`
 * @property {string} [match] Glob passed to `--match` flag
 */

/**
 * @typedef {object} DescribeRefFallbackResult When annotated release tags are missing
 * @property {boolean} isDirty
 * @property {string} refCount
 * @property {string} sha
 */

/**
 * @typedef {object} DescribeRefDetailedResult When annotated release tags are present
 * @property {string} lastTagName
 * @property {string} lastVersion
 * @property {boolean} isDirty
 * @property {string} refCount
 * @property {string} sha
 */

/**
 * Build `git describe` args.
 * @param {DescribeRefOptions} options
 * @param {boolean} [includeMergedTags]
 */
function getArgs(options, includeMergedTags) {
  let args = [
    "describe",
    // fallback to short sha if no tags located
    "--always",
    // always return full result, helps identify existing release
    "--long",
    // annotate if uncommitted changes present
    "--dirty",
    // prefer tags originating on upstream branch
    "--first-parent",
  ];

  if (options.match) {
    args.push("--match", options.match);
  }

  if (includeMergedTags) {
    // we want to consider all tags, also from merged branches
    args = args.filter((arg) => arg !== "--first-parent");
  }

  return args;
}

/**
 * @param {DescribeRefOptions} [options]
 * @param {boolean} [includeMergedTags]
 * @returns {Promise<DescribeRefFallbackResult|DescribeRefDetailedResult>}
 */
function describeRef(options = {}, includeMergedTags) {
  const promise = childProcess.exec("git", getArgs(options, includeMergedTags), options);

  return promise.then(({ stdout }) => {
    const result = parse(stdout, options.cwd);

    log.verbose("git-describe", "%j => %j", options && options.match, stdout);
    log.silly("git-describe", "parsed => %j", result);

    return result;
  });
}

/**
 * @param {DescribeRefOptions} [options]
 * @param {boolean} [includeMergedTags]
 */
function describeRefSync(options = {}, includeMergedTags) {
  const stdout = childProcess.execSync("git", getArgs(options, includeMergedTags), options);
  const result = parse(stdout, options.cwd);

  // only called by collect-updates with no matcher
  log.silly("git-describe.sync", "%j => %j", stdout, result);

  return result;
}

/**
 * Parse git output and return relevant metadata.
 * @param {string} stdout Result of `git describe`
 * @param {string} [cwd] Defaults to `process.cwd()`
 * @returns {DescribeRefFallbackResult|DescribeRefDetailedResult}
 */
function parse(stdout, cwd) {
  const minimalShaRegex = /^([0-9a-f]{7,40})(-dirty)?$/;
  // when git describe fails to locate tags, it returns only the minimal sha
  if (minimalShaRegex.test(stdout)) {
    // repo might still be dirty
    const [, sha, isDirty] = minimalShaRegex.exec(stdout);

    // count number of commits since beginning of time
    const refCount = childProcess.execSync("git", ["rev-list", "--count", sha], { cwd });

    return { refCount, sha, isDirty: Boolean(isDirty) };
  }

  const [, lastTagName, lastVersion, refCount, sha, isDirty] =
    /^((?:.*@)?(.*))-(\d+)-g([0-9a-f]+)(-dirty)?$/.exec(stdout) || [];

  return { lastTagName, lastVersion, refCount, sha, isDirty: Boolean(isDirty) };
}

Выполнить команду


Для локальной разработки. Не используйте в интернете!