99 lines
3.1 KiB
Python
99 lines
3.1 KiB
Python
"""Base class representation of a repository
|
|
"""
|
|
|
|
from .externals_description import ExternalsDescription
|
|
from .utils import fatal_error
|
|
from .global_constants import EMPTY_STR
|
|
|
|
|
|
class Repository(object):
|
|
"""
|
|
Class to represent and operate on a repository description.
|
|
"""
|
|
|
|
def __init__(self, component_name, repo):
|
|
"""
|
|
Parse repo externals description
|
|
"""
|
|
self._name = component_name
|
|
self._protocol = repo[ExternalsDescription.PROTOCOL]
|
|
self._tag = repo[ExternalsDescription.TAG]
|
|
self._branch = repo[ExternalsDescription.BRANCH]
|
|
self._hash = repo[ExternalsDescription.HASH]
|
|
self._url = repo[ExternalsDescription.REPO_URL]
|
|
self._sparse = repo[ExternalsDescription.SPARSE]
|
|
|
|
if self._url is EMPTY_STR:
|
|
fatal_error('repo must have a URL')
|
|
|
|
if ((self._tag is EMPTY_STR) and (self._branch is EMPTY_STR) and
|
|
(self._hash is EMPTY_STR)):
|
|
fatal_error('{0} repo must have a branch, tag or hash element')
|
|
|
|
ref_count = 0
|
|
if self._tag is not EMPTY_STR:
|
|
ref_count += 1
|
|
if self._branch is not EMPTY_STR:
|
|
ref_count += 1
|
|
if self._hash is not EMPTY_STR:
|
|
ref_count += 1
|
|
if ref_count != 1:
|
|
fatal_error('repo {0} must have exactly one of '
|
|
'tag, branch or hash.'.format(self._name))
|
|
|
|
def checkout(self, base_dir_path, repo_dir_name, verbosity, recursive): # pylint: disable=unused-argument
|
|
"""
|
|
If the repo destination directory exists, ensure it is correct (from
|
|
correct URL, correct branch or tag), and possibly update the source.
|
|
If the repo destination directory does not exist, checkout the correce
|
|
branch or tag.
|
|
NB: <recursive> is include as an argument for compatibility with
|
|
git functionality (repository_git.py)
|
|
"""
|
|
msg = ('DEV_ERROR: checkout method must be implemented in all '
|
|
'repository classes! {0}'.format(self.__class__.__name__))
|
|
fatal_error(msg)
|
|
|
|
def status(self, stat, repo_dir_path): # pylint: disable=unused-argument
|
|
"""Report the status of the repo
|
|
|
|
"""
|
|
msg = ('DEV_ERROR: status method must be implemented in all '
|
|
'repository classes! {0}'.format(self.__class__.__name__))
|
|
fatal_error(msg)
|
|
|
|
def submodules_file(self, repo_path=None):
|
|
# pylint: disable=no-self-use,unused-argument
|
|
"""Stub for use by non-git VC systems"""
|
|
return None
|
|
|
|
def url(self):
|
|
"""Public access of repo url.
|
|
"""
|
|
return self._url
|
|
|
|
def tag(self):
|
|
"""Public access of repo tag
|
|
"""
|
|
return self._tag
|
|
|
|
def branch(self):
|
|
"""Public access of repo branch.
|
|
"""
|
|
return self._branch
|
|
|
|
def hash(self):
|
|
"""Public access of repo hash.
|
|
"""
|
|
return self._hash
|
|
|
|
def name(self):
|
|
"""Public access of repo name.
|
|
"""
|
|
return self._name
|
|
|
|
def protocol(self):
|
|
"""Public access of repo protocol.
|
|
"""
|
|
return self._protocol
|