mirror of
https://gerrit.googlesource.com/git-repo
synced 2026-05-07 03:28:31 +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
|
||||
)
|
||||
try:
|
||||
self._Checkout(revid, quiet=True)
|
||||
self._Checkout(revid, force_checkout=force_checkout, quiet=True)
|
||||
if submodules:
|
||||
self._SyncSubmodules(quiet=True)
|
||||
except GitError as e:
|
||||
|
||||
@@ -663,6 +663,36 @@ class StatelessSyncTests(unittest.TestCase):
|
||||
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):
|
||||
"""Test stateless sync skips if stash exists."""
|
||||
with utils_for_test.TempGitTree() as tempdir:
|
||||
|
||||
Reference in New Issue
Block a user