1
0
mirror of https://github.com/openSUSE/osc.git synced 2025-01-13 09:16:14 +01:00

Fix GitStore to error out properly if there is no 'origin' remote in the git repo

This commit is contained in:
Daniel Mach 2023-08-28 09:54:38 +02:00
parent 6eb9c4b186
commit 5a67bd3376
6 changed files with 32 additions and 20 deletions

View File

@ -13,5 +13,5 @@ Scenario: Run `osc addcontainers`
Then the exit code is 1 Then the exit code is 1
And stderr is And stderr is
""" """
Directory '{context.osc.temp}/test:factory' is not a working copy of a package Directory '{context.osc.temp}/test:factory' is not an OBS SCM working copy of a package
""" """

View File

@ -13,5 +13,5 @@ Scenario: Run `osc develproject`
Then the exit code is 1 Then the exit code is 1
And stderr is And stderr is
""" """
Directory '{context.osc.temp}/test:factory' is not a working copy of a package Directory '{context.osc.temp}/test:factory' is not an OBS SCM working copy of a package
""" """

View File

@ -13,5 +13,5 @@ Scenario: Run `osc setdevelproject <devel_project>`
Then the exit code is 1 Then the exit code is 1
And stderr is And stderr is
""" """
Directory '{context.osc.temp}/test:factory' is not a working copy of a package Directory '{context.osc.temp}/test:factory' is not an OBS SCM working copy of a package
""" """

View File

@ -13,5 +13,5 @@ Scenario: Run `osc showlinked`
Then the exit code is 1 Then the exit code is 1
And stderr is And stderr is
""" """
Directory '{context.osc.temp}/test:factory' is not a working copy of a package Directory '{context.osc.temp}/test:factory' is not an OBS SCM working copy of a package
""" """

View File

@ -38,7 +38,11 @@ class GitStore:
self._project = None self._project = None
if check and not any([self.is_project, self.is_package]): if check and not any([self.is_project, self.is_package]):
msg = f"Directory '{self.path}' is not a GIT working copy" msg = f"Directory '{self.path}' is not a Git SCM working copy"
raise oscerr.NoWorkingCopy(msg)
if check and not self.scmurl:
msg = f"Directory '{self.path}' is a Git SCM repo that lacks the 'origin' remote"
raise oscerr.NoWorkingCopy(msg) raise oscerr.NoWorkingCopy(msg)
# TODO: decide if we need explicit 'git lfs pull' or not # TODO: decide if we need explicit 'git lfs pull' or not
@ -46,12 +50,12 @@ class GitStore:
def assert_is_project(self): def assert_is_project(self):
if not self.is_project: if not self.is_project:
msg = f"Directory '{self.path}' is not a GIT working copy of a project" msg = f"Directory '{self.path}' is not a Git SCM working copy of a project"
raise oscerr.NoWorkingCopy(msg) raise oscerr.NoWorkingCopy(msg)
def assert_is_package(self): def assert_is_package(self):
if not self.is_package: if not self.is_package:
msg = f"Directory '{self.path}' is not a GIT working copy of a package" msg = f"Directory '{self.path}' is not a Git SCM working copy of a package"
raise oscerr.NoWorkingCopy(msg) raise oscerr.NoWorkingCopy(msg)
def _run_git(self, args): def _run_git(self, args):
@ -148,4 +152,7 @@ class GitStore:
@property @property
def scmurl(self): def scmurl(self):
return self._run_git(["remote", "get-url", "origin"]) try:
return self._run_git(["remote", "get-url", "origin"])
except subprocess.CalledProcessError:
return None

View File

@ -40,7 +40,7 @@ class Store:
self.is_package = self.exists("_project") and self.exists("_package") self.is_package = self.exists("_project") and self.exists("_package")
if check and not any([self.is_project, self.is_package]): if check and not any([self.is_project, self.is_package]):
msg = f"Directory '{self.path}' is not a working copy" msg = f"Directory '{self.path}' is not an OBS SCM working copy"
raise oscerr.NoWorkingCopy(msg) raise oscerr.NoWorkingCopy(msg)
def __contains__(self, fn): def __contains__(self, fn):
@ -52,12 +52,12 @@ class Store:
def assert_is_project(self): def assert_is_project(self):
if not self.is_project: if not self.is_project:
msg = f"Directory '{self.path}' is not a working copy of a project" msg = f"Directory '{self.path}' is not an OBS SCM working copy of a project"
raise oscerr.NoWorkingCopy(msg) raise oscerr.NoWorkingCopy(msg)
def assert_is_package(self): def assert_is_package(self):
if not self.is_package: if not self.is_package:
msg = f"Directory '{self.path}' is not a working copy of a package" msg = f"Directory '{self.path}' is not an OBS SCM working copy of a package"
raise oscerr.NoWorkingCopy(msg) raise oscerr.NoWorkingCopy(msg)
def get_path(self, fn, subdir=None): def get_path(self, fn, subdir=None):
@ -317,14 +317,19 @@ def get_store(path, check=True, print_warnings=False):
- Store for OBS SCM - Store for OBS SCM
- GitStore for Git SCM - GitStore for Git SCM
""" """
try:
# if there are '.osc' and '.git' directories next to each other, '.osc' takes preference
if os.path.exists(os.path.join(path, ".osc")):
store = Store(path, check) store = Store(path, check)
except oscerr.NoWorkingCopy as ex: elif os.path.exists(os.path.join(path, ".git")):
try: store = git_scm.GitStore(path, check)
store = git_scm.GitStore(path, check) if print_warnings:
if print_warnings: git_scm.warn_experimental()
git_scm.warn_experimental() else:
except oscerr.NoWorkingCopy as ex_git: store = None
# raise the original exception, do not inform that we've tried git working copy
raise ex from None if not store:
msg = f"Directory '{path}' is not a working copy"
raise oscerr.NoWorkingCopy(msg)
return store return store