# SPDX-License-Identifier: Apache-2.0
# Copyright Contributors to the Rez Project
"""
Stub version control system, for testing purposes
"""
from __future__ import print_function
from rez.release_vcs import ReleaseVCS
from rez.utils.logging_ import print_warning
from rez.utils.yaml import dump_yaml
from rez.vendor import yaml
import os.path
import time
[docs]class StubReleaseVCS(ReleaseVCS):
"""A release VCS that doesn't really do anything. Used by unit tests.
A writable '.stub' file must be present in the project root. Any created
tags are written to this yaml file.
"""
def __init__(self, pkg_root, vcs_root=None):
super(StubReleaseVCS, self).__init__(pkg_root, vcs_root=vcs_root)
self.time = int(time.time())
[docs] @classmethod
def name(cls):
return "stub"
[docs] @classmethod
def is_valid_root(cls, path):
return os.path.exists(os.path.join(path, '.stub'))
[docs] @classmethod
def search_parents_for_root(cls):
return False
[docs] def validate_repostate(self):
pass
[docs] def get_current_revision(self):
return self.time
[docs] def get_changelog(self, previous_revision=None, max_revisions=None):
if previous_revision:
if isinstance(previous_revision, int):
seconds = self.time - previous_revision
return "This commit was %d seconds after the last" % seconds
else:
return "There is a previous commit from a different vcs"
else:
return "This is the first commit"
[docs] def tag_exists(self, tag_name):
data = self._read_stub()
return tag_name in data.get("tags", [])
[docs] def create_release_tag(self, tag_name, message=None):
data = self._read_stub()
if "tags" not in data:
data["tags"] = {}
elif tag_name in data["tags"]:
print_warning("Skipped tag creation, tag '%s' already exists" % tag_name)
return
print("Creating tag '%s'..." % tag_name)
data["tags"][tag_name] = message
self._write_stub(data)
def _read_stub(self):
with open(os.path.join(self.vcs_root, '.stub')) as f:
return yaml.load(f.read(), Loader=yaml.FullLoader) or {}
def _write_stub(self, data):
with open(os.path.join(self.vcs_root, '.stub'), 'w') as f:
f.write(dump_yaml(data))
[docs]def register_plugin():
return StubReleaseVCS