Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def _detect_vcs(expected_vcs: Vcs = None) -> Vcs:
checks = OrderedDict(
[
(Vcs.Git, "git status"),
(Vcs.Mercurial, "hg status"),
(Vcs.Darcs, "darcs log"),
(Vcs.Subversion, "svn log"),
(Vcs.Bazaar, "bzr status"),
(Vcs.Fossil, "fossil status"),
]
)
if expected_vcs:
command = checks[expected_vcs]
program = command.split()[0]
if not shutil.which(program):
raise RuntimeError("Unable to find '{}' program".format(program))
code, _ = _run_cmd(command, codes=[])
if code != 0:
raise RuntimeError(
"This does not appear to be a {} project".format(expected_vcs.value.title())
)
return expected_vcs
else:
def _detect_vcs(expected_vcs: Vcs = None) -> Vcs:
checks = OrderedDict(
[
(Vcs.Git, "git status"),
(Vcs.Mercurial, "hg status"),
(Vcs.Darcs, "darcs log"),
(Vcs.Subversion, "svn log"),
(Vcs.Bazaar, "bzr status"),
(Vcs.Fossil, "fossil status"),
]
)
if expected_vcs:
command = checks[expected_vcs]
program = command.split()[0]
if not shutil.which(program):
raise RuntimeError("Unable to find '{}' program".format(program))
code, _ = _run_cmd(command, codes=[])
if code != 0:
raise RuntimeError(
"This does not appear to be a {} project".format(expected_vcs.value.title())
)
def _detect_vcs(expected_vcs: Vcs = None) -> Vcs:
checks = OrderedDict(
[
(Vcs.Git, "git status"),
(Vcs.Mercurial, "hg status"),
(Vcs.Darcs, "darcs log"),
(Vcs.Subversion, "svn log"),
(Vcs.Bazaar, "bzr status"),
(Vcs.Fossil, "fossil status"),
]
)
if expected_vcs:
command = checks[expected_vcs]
program = command.split()[0]
if not shutil.which(program):
raise RuntimeError("Unable to find '{}' program".format(program))
code, _ = _run_cmd(command, codes=[])
if code != 0:
raise RuntimeError(
"This does not appear to be a {} project".format(expected_vcs.value.title())
def _detect_vcs(expected_vcs: Vcs = None) -> Vcs:
checks = OrderedDict(
[
(Vcs.Git, "git status"),
(Vcs.Mercurial, "hg status"),
(Vcs.Darcs, "darcs log"),
(Vcs.Subversion, "svn log"),
(Vcs.Bazaar, "bzr status"),
(Vcs.Fossil, "fossil status"),
]
)
if expected_vcs:
command = checks[expected_vcs]
program = command.split()[0]
if not shutil.which(program):
raise RuntimeError("Unable to find '{}' program".format(program))
code, _ = _run_cmd(command, codes=[])
if code != 0:
raise RuntimeError(
def _detect_vcs(expected_vcs: Vcs = None) -> Vcs:
checks = OrderedDict(
[
(Vcs.Git, "git status"),
(Vcs.Mercurial, "hg status"),
(Vcs.Darcs, "darcs log"),
(Vcs.Subversion, "svn log"),
(Vcs.Bazaar, "bzr status"),
(Vcs.Fossil, "fossil status"),
]
)
if expected_vcs:
command = checks[expected_vcs]
program = command.split()[0]
if not shutil.which(program):
raise RuntimeError("Unable to find '{}' program".format(program))
code, _ = _run_cmd(command, codes=[])
if code != 0:
raise RuntimeError(
"This does not appear to be a {} project".format(expected_vcs.value.title())
)
return expected_vcs
def from_fossil(cls, pattern: str = _VERSION_PATTERN, latest_tag: bool = False) -> "Version":
r"""
Determine a version based on Fossil tags.
:param pattern: Regular expression matched against the version source.
This should contain one capture group named `base` corresponding to
the release segment of the source, and optionally another two groups
named `stage` and `revision` corresponding to the type
(`alpha`, `rc`, etc) and number of prerelease. For example, with a
tag like v0.1.0, the pattern would be `^v(?P\d+\.\d+\.\d+)$`.
:param latest_tag: If true, only inspect the latest tag for a pattern
match. If false, keep looking at tags until there is a match.
"""
_detect_vcs(Vcs.Fossil)
code, msg = _run_cmd("fossil changes --differ")
dirty = bool(msg)
code, msg = _run_cmd(
"fossil sql \"SELECT value FROM vvar WHERE name = 'checkout-hash' LIMIT 1\""
)
commit = msg.strip("'")
code, msg = _run_cmd("fossil sql \"SELECT count() FROM event WHERE type = 'ci'\"")
# The repository creation itself counts as a commit.
total_commits = int(msg) - 1
if total_commits <= 0:
return cls("0.0.0", distance=0, commit=commit, dirty=dirty)
# Based on `compute_direct_ancestors` from descendants.c in the
def _do_vcs_callback(cls, vcs: Vcs, pattern: str, latest_tag: bool, tag_dir: str) -> "Version":
mapping = {
Vcs.Any: cls.from_any_vcs,
Vcs.Git: cls.from_git,
Vcs.Mercurial: cls.from_mercurial,
Vcs.Darcs: cls.from_darcs,
Vcs.Subversion: cls.from_subversion,
Vcs.Bazaar: cls.from_bazaar,
Vcs.Fossil: cls.from_fossil,
} # type: Mapping[Vcs, Callable[..., "Version"]]
kwargs = {"pattern": pattern, "latest_tag": latest_tag}
if vcs == Vcs.Subversion:
kwargs["tag_dir"] = tag_dir
return mapping[vcs](**kwargs)