repos: introduce a factory to abstract away from Repo implementation
The user just calls that factory and gets something that is a Repo, in fact just a GitRepo for now. Signed-off-by: Henning Schild <henning.schild@siemens.com>
This commit is contained in:
parent
b5b2766b24
commit
3594ad50a0
@ -199,16 +199,12 @@ class Config:
|
|||||||
name)
|
name)
|
||||||
|
|
||||||
url = path
|
url = path
|
||||||
rep = Repo(url=url,
|
rep = Repo.factory(url=url, path=path, layers=layers)
|
||||||
path=path,
|
|
||||||
layers=layers)
|
|
||||||
rep.disable_operations()
|
rep.disable_operations()
|
||||||
else:
|
else:
|
||||||
path = path or os.path.join(self.kas_work_dir, name)
|
path = path or os.path.join(self.kas_work_dir, name)
|
||||||
rep = Repo(url=url,
|
rep = Repo.factory(url=url, path=path, refspec=refspec,
|
||||||
path=path,
|
layers=layers)
|
||||||
refspec=refspec,
|
|
||||||
layers=layers)
|
|
||||||
repo_dict[repo] = rep
|
repo_dict[repo] = rep
|
||||||
return repo_dict
|
return repo_dict
|
||||||
|
|
||||||
|
49
kas/repos.py
49
kas/repos.py
@ -38,7 +38,7 @@ class Repo:
|
|||||||
Represents a repository in the kas configuration.
|
Represents a repository in the kas configuration.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, url, path, refspec=None, layers=None):
|
def __init__(self, url, path, refspec, layers):
|
||||||
self.url = url
|
self.url = url
|
||||||
self.path = path
|
self.path = path
|
||||||
self.refspec = refspec
|
self.refspec = refspec
|
||||||
@ -73,6 +73,36 @@ class Repo:
|
|||||||
return '%s:%s %s %s' % (self.url, self.refspec,
|
return '%s:%s %s %s' % (self.url, self.refspec,
|
||||||
self.path, self._layers)
|
self.path, self._layers)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def factory(url, path, refspec=None, layers=None):
|
||||||
|
"""
|
||||||
|
Return an instance Repo depending on params.
|
||||||
|
"""
|
||||||
|
return GitRepo(url, path, refspec, layers)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_root_path(path, environ):
|
||||||
|
"""
|
||||||
|
Check if path is a version control repo and return its root path.
|
||||||
|
"""
|
||||||
|
(ret, output) = run_cmd(['git',
|
||||||
|
'rev-parse',
|
||||||
|
'--show-toplevel'],
|
||||||
|
cwd=path,
|
||||||
|
env=environ,
|
||||||
|
fail=False,
|
||||||
|
liveupdate=False)
|
||||||
|
if ret == 0:
|
||||||
|
return output.strip()
|
||||||
|
|
||||||
|
return path
|
||||||
|
|
||||||
|
|
||||||
|
class GitRepo(Repo):
|
||||||
|
"""
|
||||||
|
Provides the git implementations for a Repo.
|
||||||
|
"""
|
||||||
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def fetch_async(self, config):
|
def fetch_async(self, config):
|
||||||
"""
|
"""
|
||||||
@ -155,20 +185,3 @@ class Repo:
|
|||||||
run_cmd(['git', 'checkout', '-q',
|
run_cmd(['git', 'checkout', '-q',
|
||||||
'{refspec}'.format(refspec=self.refspec)],
|
'{refspec}'.format(refspec=self.refspec)],
|
||||||
cwd=self.path)
|
cwd=self.path)
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def get_root_path(path, environ):
|
|
||||||
"""
|
|
||||||
Check if path is a version control repo and return its root path.
|
|
||||||
"""
|
|
||||||
(ret, output) = run_cmd(['git',
|
|
||||||
'rev-parse',
|
|
||||||
'--show-toplevel'],
|
|
||||||
cwd=path,
|
|
||||||
env=environ,
|
|
||||||
fail=False,
|
|
||||||
liveupdate=False)
|
|
||||||
if ret == 0:
|
|
||||||
return output.strip()
|
|
||||||
|
|
||||||
return path
|
|
||||||
|
Loading…
Reference in New Issue
Block a user