Skip to content

Commit df3c401

Browse files
gavinmakLUCI
authored andcommitted
sync: Share manifest list update logic between sync modes
Extract the manifest update loop from _SyncPhased into a new _UpdateManifestLists method and use it in both sync types. Bug: 421935613 Change-Id: If499a3ce4a0bbb3c4641dba52ca5c1c82b11f16f Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/484341 Reviewed-by: Scott Lee <ddoman@google.com> Commit-Queue: Gavin Mak <gavinmak@google.com> Tested-by: Gavin Mak <gavinmak@google.com>
1 parent f7a3f99 commit df3c401

File tree

1 file changed

+55
-30
lines changed

1 file changed

+55
-30
lines changed

subcmds/sync.py

Lines changed: 55 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
import sys
2727
import tempfile
2828
import time
29-
from typing import List, NamedTuple, Optional, Set, Union
29+
from typing import List, NamedTuple, Optional, Set, Tuple, Union
3030
import urllib.error
3131
import urllib.parse
3232
import urllib.request
@@ -2006,6 +2006,54 @@ def _monitor_loop():
20062006

20072007
return _threading.Thread(target=_monitor_loop, daemon=True)
20082008

2009+
def _UpdateManifestLists(
2010+
self,
2011+
opt: optparse.Values,
2012+
err_event: multiprocessing.Event,
2013+
errors: List[Exception],
2014+
) -> Tuple[bool, bool]:
2015+
"""Updates project lists and copy/link files for all manifests.
2016+
2017+
Args:
2018+
opt: Program options from optparse.
2019+
err_event: An event to set if any error occurs.
2020+
errors: A list to append any encountered exceptions to.
2021+
2022+
Returns:
2023+
A tuple (err_update_projects, err_update_linkfiles) indicating
2024+
an error for each task.
2025+
"""
2026+
err_update_projects = False
2027+
err_update_linkfiles = False
2028+
for m in self.ManifestList(opt):
2029+
if m.IsMirror or m.IsArchive:
2030+
continue
2031+
2032+
try:
2033+
self.UpdateProjectList(opt, m)
2034+
except Exception as e:
2035+
err_event.set()
2036+
err_update_projects = True
2037+
errors.append(e)
2038+
if isinstance(e, DeleteWorktreeError):
2039+
errors.extend(e.aggregate_errors)
2040+
if opt.fail_fast:
2041+
logger.error("error: Local checkouts *not* updated.")
2042+
raise SyncFailFastError(aggregate_errors=errors)
2043+
2044+
try:
2045+
self.UpdateCopyLinkfileList(m)
2046+
except Exception as e:
2047+
err_event.set()
2048+
err_update_linkfiles = True
2049+
errors.append(e)
2050+
if opt.fail_fast:
2051+
logger.error(
2052+
"error: Local update copyfile or linkfile failed."
2053+
)
2054+
raise SyncFailFastError(aggregate_errors=errors)
2055+
return err_update_projects, err_update_linkfiles
2056+
20092057
def _SyncPhased(
20102058
self,
20112059
opt,
@@ -2064,34 +2112,11 @@ def _SyncPhased(
20642112
)
20652113
raise SyncFailFastError(aggregate_errors=errors)
20662114

2067-
for m in self.ManifestList(opt):
2068-
if m.IsMirror or m.IsArchive:
2069-
# Bail out now, we have no working tree.
2070-
continue
2071-
2072-
try:
2073-
self.UpdateProjectList(opt, m)
2074-
except Exception as e:
2075-
err_event.set()
2076-
err_update_projects = True
2077-
errors.append(e)
2078-
if isinstance(e, DeleteWorktreeError):
2079-
errors.extend(e.aggregate_errors)
2080-
if opt.fail_fast:
2081-
logger.error("error: Local checkouts *not* updated.")
2082-
raise SyncFailFastError(aggregate_errors=errors)
2083-
2084-
try:
2085-
self.UpdateCopyLinkfileList(m)
2086-
except Exception as e:
2087-
err_update_linkfiles = True
2088-
errors.append(e)
2089-
err_event.set()
2090-
if opt.fail_fast:
2091-
logger.error(
2092-
"error: Local update copyfile or linkfile failed."
2093-
)
2094-
raise SyncFailFastError(aggregate_errors=errors)
2115+
err_update_projects, err_update_linkfiles = self._UpdateManifestLists(
2116+
opt,
2117+
err_event,
2118+
errors,
2119+
)
20952120

20962121
err_results = []
20972122
# NB: We don't exit here because this is the last step.
@@ -2495,7 +2520,7 @@ def _SyncInterleaved(
24952520

24962521
pm.end()
24972522

2498-
# TODO(b/421935613): Add the manifest loop block from PhasedSync.
2523+
self._UpdateManifestLists(opt, err_event, errors)
24992524
if not self.outer_client.manifest.IsArchive:
25002525
self._GCProjects(project_list, opt, err_event)
25012526

0 commit comments

Comments
 (0)