From 82d500eb7aa93f9bff66a4358a08d2ba2d599550 Mon Sep 17 00:00:00 2001 From: Kenny Cheng Date: Mon, 2 Jun 2025 21:55:04 +0800 Subject: sync: support post-sync hook in Add support for a new hook type "post-sync" declared in the manifest using . This allows executing a script automatically after a successful `repo sync`. This is useful for initializing developer environments, installing project-wide Git hooks, generating configs, and other post-sync automation tasks. Example manifest usage: The hook script must be named `post-sync.py` and located at the root of the hook project. The post-sync hook does not block `repo sync`; if the script fails, the sync still completes successfully with a warning. Test: Added `post-sync.py` in hook project and verified it runs after `repo sync` Bug: b/421694721 Change-Id: I69f3158f0fc319d73a85028d6e90fea02c1dc8c8 Signed-off-by: Kenny Cheng Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/480581 Reviewed-by: Scott Lee Reviewed-by: Gavin Mak --- subcmds/sync.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'subcmds') diff --git a/subcmds/sync.py b/subcmds/sync.py index 20d75dc8..250925f4 100644 --- a/subcmds/sync.py +++ b/subcmds/sync.py @@ -68,6 +68,7 @@ from git_config import GetUrlCookieFile from git_refs import HEAD from git_refs import R_HEADS import git_superproject +from hooks import RepoHook import platform_utils from progress import elapsed_str from progress import jobs_str @@ -623,6 +624,7 @@ later is required to fix a server side protocol bug. action="store_true", help=optparse.SUPPRESS_HELP, ) + RepoHook.AddOptionGroup(p, "post-sync") def _GetBranch(self, manifest_project): """Returns the branch name for getting the approved smartsync manifest. @@ -1847,6 +1849,21 @@ later is required to fix a server side protocol bug. except (KeyboardInterrupt, Exception) as e: raise RepoUnhandledExceptionError(e, aggregate_errors=errors) + # Run post-sync hook only after successful sync + self._RunPostSyncHook(opt) + + def _RunPostSyncHook(self, opt): + """Run post-sync hook if configured in manifest .""" + hook = RepoHook.FromSubcmd( + hook_type="post-sync", + manifest=self.manifest, + opt=opt, + abort_if_user_denies=False, + ) + success = hook.Run(repo_topdir=self.client.topdir) + if not success: + print("Warning: post-sync hook reported failure.") + def _ExecuteHelper(self, opt, args, errors): manifest = self.outer_manifest if not opt.outer_manifest: -- cgit v1.2.3-54-g00ecf