Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  test_get_remote_url.py

  Sprache: Python
 

# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

import subprocess
from pathlib import Path

import mozunit
import pytest

from mozversioncontrol import get_repository_object


def setup_hg_test_paths(working_dir):
    """Set up hg paths for testing."""
    hgrc_path = Path(working_dir) / ".hg" / "hgrc"
    with open(hgrc_path, "w"as f:
        f.write("[paths]\n")
        f.write("default = https://example.com/fake-repo\n")
        f.write("default-push = ssh://example.com/fake-repo\n")
        f.write("try = https://example.com/fake-try-repo\n")
        f.write("try-push = ssh://example.com/fake-try-repo\n")


STEPS = {
    "hg": [setup_hg_test_paths],
    "git": [
        """
        git checkout -b feature-branch
        git remote add origin https://example.com/fake-repo.git
        git remote set-url --push origin git@example.com:fake-repo.git
        git config remote.pushDefault origin
        git fetch origin || true
        git branch --set-upstream-to=upstream/master feature-branch
        """,
        """
        git remote add fork https://example.com/fake-fork-repo.git
        git remote set-url --push fork git@example.com:fake-fork-repo.git
        """,
    ],
    "jj": [
        r"""
        jj config set --repo git.fetch "[\"origin\"]"
        jj config set --repo git.push fork
        jj git remote add origin https://example.com/fake-repo.git
        jj git remote add fork git@example.com:fake-fork-repo.git
        """,
    ],
    "src": [],
}


def test_get_remote_url_default(repo):
    vcs = get_repository_object(repo.dir)

    if vcs.name == "src":
        assert vcs.get_remote_url() is None
        return

    repo.execute_next_step()

    url = vcs.get_remote_url()
    expected_urls = {
        "hg""https://example.com/fake-repo",
        "git""../remoterepo",  # Git tracks upstream/master from conftest setup
        "jj""https://example.com/fake-repo.git",
    }
    assert url == expected_urls[vcs.name]


def test_get_remote_url_push(repo):
    vcs = get_repository_object(repo.dir)

    if vcs.name == "src":
        assert vcs.get_remote_url(push=Trueis None
        return

    # Execute setup step to configure remotes
    repo.execute_next_step()

    # Test getting push URL
    push_url = vcs.get_remote_url(push=True)

    expected_push_urls = {
        "hg""ssh://example.com/fake-repo",
        "git""git@example.com:fake-repo.git",
        "jj""git@example.com:fake-fork-repo.git",
    }
    assert push_url == expected_push_urls[vcs.name]


@pytest.mark.parametrize(
    "remote,push,vcs_expected",
    [
        # Test various remotes for each VCS with dummy URLs
        ("try"False, {"hg""https://example.com/fake-try-repo"}),
        ("try"True, {"hg""ssh://example.com/fake-try-repo"}),
        (
            "fork",
            False,
            {
                "git""https://example.com/fake-fork-repo.git",
                "jj""git@example.com:fake-fork-repo.git",
            },
        ),
        ("fork"True, {"git""git@example.com:fake-fork-repo.git"}),
        (
            "origin",
            False,
            {
                "git""https://example.com/fake-repo.git",
                "jj""https://example.com/fake-repo.git",
            },
        ),
        ("origin"True, {"git""git@example.com:fake-repo.git"}),
        ("nonexistent"False, {"hg"None"git"None"jj"None}),
    ],
)
def test_get_remote_url_specific(repo, remote, push, vcs_expected):
    vcs = get_repository_object(repo.dir)

    if vcs.name == "src":
        pytest.skip("src doesn't support remotes")

    if vcs.name not in vcs_expected:
        pytest.skip(f"Remote '{remote}' not tested for {vcs.name}")

    repo.execute_next_step()

    if vcs.name == "git" and "fork" in remote:
        repo.execute_next_step()

    url = vcs.get_remote_url(remote, push=push)
    assert url == vcs_expected[vcs.name]


def test_get_remote_url_unconfigured(repo):
    vcs = get_repository_object(repo.dir)

    if vcs.name == "src":
        assert vcs.get_remote_url() is None
        return

    url = vcs.get_remote_url()
    assert url is None or "remoterepo" in url


def test_get_remote_url_with_no_branch_tracking(repo):
    vcs = get_repository_object(repo.dir)

    if vcs.name != "git":
        pytest.skip("Test only relevant for git")

    repo.execute_next_step()
    subprocess.check_call(["git""checkout""-b""orphan-branch"], cwd=repo.dir)

    # Should return None when no remote is tracked
    url = vcs.get_remote_url()
    assert url is None

    # But specifying a remote explicitly should work
    url = vcs.get_remote_url("origin")
    assert url == "https://example.com/fake-repo.git"


if __name__ == "__main__":
    mozunit.main()

Messung V0.5 in Prozent
C=92 H=95 G=93

¤ Dauer der Verarbeitung: 0.29 Sekunden  (vorverarbeitet am  2026-08-25) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=277311
#Domains=752002