mirror of
https://gerrit.googlesource.com/git-repo
synced 2026-05-07 11:29:27 +00:00
sync: Fix force_checkout propagation
The force_checkout parameter was not propagated in all calls to Checkout in Sync_LocalHalf. Without this, repo sync --force-checkout can still fail for projects currently on a local branch with no upstream/tracking configuration, because the detach-to-manifest checkout was executed without -f, leaving local modifications or untracked files able to block sync. Change-Id: I58551388e2f906c4db96e220707a369057a71c24 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/579181 Reviewed-by: Gavin Mak <gavinmak@google.com> Commit-Queue: Josef Malmstrom <Josef.Malmstrom@arm.com> Tested-by: Josef Malmstrom <Josef.Malmstrom@arm.com> Reviewed-by: Mike Frysinger <vapier@google.com>
This commit is contained in:
committed by
gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com
parent
12cfc6036a
commit
e3eadd3728
+1
-1
@@ -1767,7 +1767,7 @@ class Project:
|
|||||||
self, "leaving %s; does not track upstream", branch.name
|
self, "leaving %s; does not track upstream", branch.name
|
||||||
)
|
)
|
||||||
try:
|
try:
|
||||||
self._Checkout(revid, quiet=True)
|
self._Checkout(revid, force_checkout=force_checkout, quiet=True)
|
||||||
if submodules:
|
if submodules:
|
||||||
self._SyncSubmodules(quiet=True)
|
self._SyncSubmodules(quiet=True)
|
||||||
except GitError as e:
|
except GitError as e:
|
||||||
|
|||||||
@@ -663,6 +663,36 @@ class StatelessSyncTests(unittest.TestCase):
|
|||||||
capture_stderr=True,
|
capture_stderr=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_sync_local_half_no_upstream_propagates_force_checkout(self):
|
||||||
|
"""Test Sync_LocalHalf forwards force_checkout when detaching."""
|
||||||
|
with utils_for_test.TempGitTree() as tempdir:
|
||||||
|
proj = self._get_project(tempdir)
|
||||||
|
|
||||||
|
proj._InitWorkTree = mock.MagicMock()
|
||||||
|
proj.CleanPublishedCache = mock.MagicMock()
|
||||||
|
proj.GetRevisionId = mock.MagicMock(return_value="1234abcd")
|
||||||
|
proj._Checkout = mock.MagicMock()
|
||||||
|
proj._CopyAndLinkFiles = mock.MagicMock()
|
||||||
|
|
||||||
|
proj.work_git = mock.MagicMock()
|
||||||
|
proj.work_git.GetHead.return_value = "refs/heads/topic"
|
||||||
|
|
||||||
|
proj.bare_ref = mock.MagicMock()
|
||||||
|
proj.bare_ref.all = {"refs/heads/topic": "5678abcd"}
|
||||||
|
|
||||||
|
branch = mock.MagicMock()
|
||||||
|
branch.name = "topic"
|
||||||
|
branch.LocalMerge = False
|
||||||
|
proj.GetBranch = mock.MagicMock(return_value=branch)
|
||||||
|
|
||||||
|
syncbuf = project.SyncBuffer(proj.config)
|
||||||
|
proj.Sync_LocalHalf(syncbuf, force_checkout=True)
|
||||||
|
|
||||||
|
proj._Checkout.assert_called_once_with(
|
||||||
|
"1234abcd", force_checkout=True, quiet=True
|
||||||
|
)
|
||||||
|
proj._CopyAndLinkFiles.assert_called_once_with()
|
||||||
|
|
||||||
def test_sync_network_half_stateless_skips_if_stash(self):
|
def test_sync_network_half_stateless_skips_if_stash(self):
|
||||||
"""Test stateless sync skips if stash exists."""
|
"""Test stateless sync skips if stash exists."""
|
||||||
with utils_for_test.TempGitTree() as tempdir:
|
with utils_for_test.TempGitTree() as tempdir:
|
||||||
|
|||||||
Reference in New Issue
Block a user