def myparse( root, describe_command=DEFAULT_DESCRIBE, config=None): """ rewriting of setuptools_scm.git.parse method to remove -branch string from any tags. This library is clearly not designed for people to adjust its function so I had to lift entire function from Aug 8 master with SHA a91b40c99ea9bfc4289272285f17e1d43c243b76 """ if not config: config = Configuration(root=root) if not has_command("git"): return wd = GitWorkdir.from_potential_worktree(config.absolute_root) if wd is None: return out, unused_err, ret = wd.do_ex(describe_command) if ret: # If 'git describe' failed, try to get the information otherwise. rev_node = wd.node() dirty = wd.is_dirty() if rev_node is None: return meta("0.0", distance=0, dirty=dirty, config=config) return meta( "0.0", distance=wd.count_all_nodes(), node="g" + rev_node, dirty=dirty, branch=wd.get_branch(), config=config, ) else: tag, number, node, dirty = _git_parse_describe(out) branch = wd.get_branch() if number: return meta( tag.replace('-branch',''), config=config, distance=number, node=node, dirty=dirty, branch=branch, ) else: return meta(tag.replace('-branch', ''), config=config, node=node, dirty=dirty, branch=branch)
def parse(root, *, config): """ Based on https://github.com/pypa/setuptools_scm/blob/master/src/setuptools_scm/git.py#parse This is almost a verbatim copy, except that we tell setuptools_scm that the tag is preformatted to prevent them from applying Python's version normalisation. """ if not has_command("git"): return wd = GitWorkdir.from_potential_worktree(config.absolute_root) if wd is None: return warn_on_shallow(wd) describe_command = config.git_describe_command or DEFAULT_DESCRIBE out, unused_err, ret = wd.do_ex(describe_command) if ret: # If 'git git_describe_command' failed, try to get the information otherwise. tag = '0.1.0' distance = wd.count_all_nodes() dirty = wd.is_dirty() node = None branch = None rev_node = wd.node() if rev_node is not None: node = f'g{rev_node}' branch = wd.get_branch() else: tag, distance, node, dirty = _git_parse_describe(out) branch = wd.get_branch() version = meta( semver.parse_version_info(tag), distance=distance, dirty=dirty, node=node, preformatted=True, config=config, branch=branch ) version.preformatted = False return version
def parse_git_describe_string(_root, config=None): """ Return a setuptools_scm parsed version from a Git describe string found in the environment variable GIT_DESCRIBE_STRING. :param str _root: Relative path to cwd, used for finding the scm root. :param setuptools_scm.config.Configuration config: Configuration instance. :return: Parsed version or ``None``. :rtype: setuptools_scm.version.ScmVersion """ # pylint: disable=import-error # Those imports are only available at install time from setuptools_scm.git import _git_parse_describe from setuptools_scm.version import meta git_describe = os.environ.get('GIT_DESCRIBE_STRING') if not git_describe: return None tag, number, node, dirty = _git_parse_describe(git_describe) kwargs = {'distance': number} if number else {} return meta(tag, dirty=dirty, node=node, config=config, **kwargs)
def test_parse_describe_output(given, tag, number, node, dirty): parsed = git._git_parse_describe(given) assert parsed == (tag, number, node, dirty)
def parse(root, describe_command=DEFAULT_DESCRIBE, pre_parse=warn_on_shallow, config=None): """ :param pre_parse: experimental pre_parse action, may change at any time """ if not config: config = Configuration(root=root) if not has_command("git"): return wd = GitWorkdir.from_potential_worktree(config.absolute_root) if wd is None: return if pre_parse: pre_parse(wd) if config.git_describe_command: describe_command = config.git_describe_command out, unused_err, ret = wd.do_ex(describe_command) if ret: # If 'git git_describe_command' failed, try to get the information otherwise. branch, err, ret = wd.do_ex("git symbolic-ref --short HEAD") rev_node = wd.node() dirty = wd.is_dirty() if rev_node is None: return meta("0.0", distance=0, dirty=dirty, branch=branch, config=config) return meta( "0.0", distance=wd.count_all_nodes(), node="g" + rev_node, dirty=dirty, branch=wd.get_branch(), config=config, ) else: tag, number, node, dirty = _git_parse_describe(out) branch = wd.get_branch() if number: return meta( tag, config=config, distance=number, node=node, dirty=dirty, branch=branch, ) else: return meta(tag, config=config, node=node, dirty=dirty, branch=branch)