Skip to content

Commit

Permalink
fix(cli): resolve upstream/downstream correctly
Browse files Browse the repository at this point in the history
Fixes packit#2118

Signed-off-by: Matej Focko <mfocko@redhat.com>
  • Loading branch information
mfocko committed Oct 10, 2023
1 parent 025e441 commit a6a4cc2
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 26 deletions.
29 changes: 16 additions & 13 deletions packit/cli/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
from packit.config import Config, JobType, get_local_package_config
from packit.config.common_package_config import MultiplePackages
from packit.config.package_config import PackageConfig
from packit.constants import DISTGIT_HOSTNAME_CANDIDATES, DISTRO_DIR, SRC_GIT_CONFIG
from packit.constants import DISTRO_DIR, SRC_GIT_CONFIG
from packit.exceptions import PackitException, PackitNotAGitRepoException
from packit.local_project import LocalProject

Expand Down Expand Up @@ -312,26 +312,29 @@ def get_packit_api(
lp_downstream = None

for url in remote_urls:
remote_hostname = get_hostname_or_none(url=url)
if not remote_hostname:
parsed_url = parse_git_repo(url)
if not parsed_url.hostname:
continue

if upstream_hostname and remote_hostname == upstream_hostname:
lp_upstream = local_project
logger.debug("Input directory is an upstream repository.")
if package_config.dist_git_instance.has_repository(url):
lp_downstream = local_project
logger.debug(
"Input directory is a downstream repository. Deduced from package config.",
)
break

if package_config.dist_git_base_url and (
remote_hostname in package_config.dist_git_base_url
or remote_hostname in DISTGIT_HOSTNAME_CANDIDATES
):
lp_downstream = local_project
logger.debug("Input directory is a downstream repository.")
if upstream_hostname and parsed_url.hostname == upstream_hostname:
lp_upstream = local_project
logger.debug(
"Input directory is an upstream repository. Upstream hostname matches.",
)
break
else:
lp_upstream = local_project
# fallback, this is the past behavior
logger.debug("Input directory is an upstream repository.")
logger.debug(
"Input directory is an upstream repository. No suitable remote found.",
)

return PackitAPI(
config=config,
Expand Down
25 changes: 14 additions & 11 deletions tests/integration/test_get_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from packit.cli.utils import get_packit_api
from packit.config import CommonPackageConfig, JobConfig
from packit.config.job_config import JobConfigTriggerType, JobType
from packit.constants import DISTGIT_INSTANCES
from packit.local_project import CALCULATE, LocalProjectBuilder
from tests.spellbook import get_test_config, initiate_git_repo

Expand Down Expand Up @@ -76,7 +77,7 @@ def test_url_is_upstream():
[],
flexmock(
upstream_project_url=None,
dist_git_base_url=None,
dist_git_instance=DISTGIT_INSTANCES["fedpkg"],
synced_files=None,
),
True,
Expand All @@ -85,7 +86,7 @@ def test_url_is_upstream():
[],
flexmock(
upstream_project_url="some-url",
dist_git_base_url=None,
dist_git_instance=DISTGIT_INSTANCES["fedpkg"],
synced_files=None,
),
True,
Expand All @@ -94,7 +95,7 @@ def test_url_is_upstream():
[("origin", "https://github.com/packit/ogr.git")],
flexmock(
upstream_project_url="some-url",
dist_git_base_url=None,
dist_git_instance=DISTGIT_INSTANCES["fedpkg"],
synced_files=None,
),
True,
Expand All @@ -103,7 +104,7 @@ def test_url_is_upstream():
[("origin", "https://github.com/packit/ogr.git")],
flexmock(
upstream_project_url="https://github.com/packit/ogr",
dist_git_base_url=None,
dist_git_instance=DISTGIT_INSTANCES["fedpkg"],
synced_files=None,
),
True,
Expand All @@ -112,7 +113,7 @@ def test_url_is_upstream():
[("upstream", "https://github.com/packit/ogr.git")],
flexmock(
upstream_project_url="https://github.com/packit/ogr",
dist_git_base_url=None,
dist_git_instance=DISTGIT_INSTANCES["fedpkg"],
synced_files=None,
),
True,
Expand All @@ -121,7 +122,7 @@ def test_url_is_upstream():
[("origin", "https://src.fedoraproject.org/rpms/ogr.git")],
flexmock(
upstream_project_url="https://github.com/packit/ogr",
dist_git_base_url="https://src.fedoraproject.org",
dist_git_instance=DISTGIT_INSTANCES["fedpkg"],
synced_files=None,
downstream_package_name=None,
),
Expand All @@ -131,7 +132,7 @@ def test_url_is_upstream():
[("origin", "https://src.fedoraproject.org/rpms/python-ogr.git")],
flexmock(
upstream_project_url="https://github.com/packit/ogr",
dist_git_base_url="src.fedoraproject.org",
dist_git_instance=DISTGIT_INSTANCES["fedpkg"],
synced_files=None,
downstream_package_name=None,
),
Expand All @@ -141,7 +142,7 @@ def test_url_is_upstream():
[("origin", "https://src.fedoraproject.org/rpms/python-ogr.git")],
flexmock(
upstream_project_url=None,
dist_git_base_url="https://src.fedoraproject.org",
dist_git_instance=DISTGIT_INSTANCES["fedpkg"],
synced_files=None,
downstream_package_name=None,
),
Expand All @@ -151,7 +152,7 @@ def test_url_is_upstream():
[("origin", "https://src.fedoraproject.org/fork/user/rpms/python-ogr.git")],
flexmock(
upstream_project_url=None,
dist_git_base_url="https://src.fedoraproject.org",
dist_git_instance=DISTGIT_INSTANCES["fedpkg"],
synced_files=None,
downstream_package_name=None,
),
Expand All @@ -161,7 +162,7 @@ def test_url_is_upstream():
[("origin", "git@github.com:user/ogr.git")],
flexmock(
upstream_project_url="https://github.com/packit/ogr",
dist_git_base_url="https://src.fedoraproject.org",
dist_git_instance=DISTGIT_INSTANCES["fedpkg"],
synced_files=None,
),
True,
Expand All @@ -173,7 +174,7 @@ def test_url_is_upstream():
],
flexmock(
upstream_project_url="https://github.com/packit/ogr",
dist_git_base_url="https://src.fedoraproject.org",
dist_git_instance=DISTGIT_INSTANCES["fedpkg"],
synced_files=None,
),
True,
Expand All @@ -189,6 +190,8 @@ def test_url_is_upstream():
packages={
"package": CommonPackageConfig(
upstream_project_url="https://github.com/packit/ogr",
dist_git_base_url=DISTGIT_INSTANCES["fedpkg"].url,
dist_git_namespace=DISTGIT_INSTANCES["fedpkg"].namespace,
),
},
),
Expand Down
4 changes: 2 additions & 2 deletions tests/unit/config/test_package_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -2092,15 +2092,15 @@ def test_specfile_path_not_defined_in_test_only_jobs(raw):

@pytest.mark.parametrize(
"package_name,result",
((None, None), ("baz", "http://foo/bar/baz.git")),
((None, None), ("baz", "https://foo/bar/baz.git")),
)
def test_pc_dist_git_package_url_has_no_None(package_name, result):
assert (
PackageConfig(
packages={
"package": CommonPackageConfig(
downstream_package_name=package_name,
dist_git_base_url="http://foo/",
dist_git_base_url="https://foo/",
dist_git_namespace="bar",
),
},
Expand Down

0 comments on commit a6a4cc2

Please sign in to comment.