From f33aa8a64f11f80cba54e1c744d8eeee4985caed Mon Sep 17 00:00:00 2001 From: Mathieu Benoit Date: Thu, 24 Sep 2026 13:32:41 -0400 Subject: [PATCH] [FIX] format : rendre repo facultatif, et montrer ce qu'il a dit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Un échec de « repo forall » arrêtait tout : la liste des fichiers locaux, déjà obtenue, était jetée, et « make format » rendait 0 sans avoir formaté une ligne. Sa sortie d'erreur, capturée puis jetée, emportait la seule explication, et seule l'exception Python restait à l'écran. Google Repo n'ajoute pourtant que les dépôts rapatriés : il est joué sans check, ce qu'il a écrit est relayé, et les fichiers locaux sont formatés quand même. « Rien à formater » se dit au lieu d'une sortie muette, et un échec du dépôt lui-même rend non nul. Vérifié : avec un repo bouchonné qui échoue, son message s'affiche et le fichier local est formaté. --- EN --- A failing "repo forall" stopped everything: the local file list, already gathered, was dropped, and "make format" returned 0 without formatting a line. Its error output, captured then thrown away, carried the only explanation, and only the Python exception stayed on screen. Google Repo only adds the checked out repositories: it runs without check, whatever it wrote is relayed, and local files are formatted anyway. "Nothing to format" is said instead of a silent exit, and a failure of the repository itself returns non-zero. Checked: with a stub repo that fails, its message shows and the local file is formatted. Assisted-by: Claude Opus 5 --- script/maintenance/format_file_to_commit.py | 29 ++++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/script/maintenance/format_file_to_commit.py b/script/maintenance/format_file_to_commit.py index 0e23409..309c112 100755 --- a/script/maintenance/format_file_to_commit.py +++ b/script/maintenance/format_file_to_commit.py @@ -46,18 +46,33 @@ def get_modified_files(): lst_lines = [(".", lines_local)] + lines_project = [] if lst_cmd_git_status_repo: print(" ".join(lst_cmd_git_status_repo)) + # Google Repo est FACULTATIF ici : il n'ajoute que les dépôts + # rapatriés. Son échec laissait pourtant tomber la liste locale + # déjà obtenue, et « make format » rendait 0 sans avoir formaté + # une ligne. Il est donc joué sans check, et ce qu'il a écrit est + # RELAYÉ : capturée puis jetée, sa sortie d'erreur emportait la + # seule explication — le hashbang de bin/repo est relatif, si bien + # qu'un lancement hors de la racine échoue sans dire pourquoi. result = subprocess.run( lst_cmd_git_status_repo, capture_output=True, text=True, - check=True, ) - lines_project = result.stdout.strip().split("\n\n") - else: - lines_project = [] + if result.returncode: + print( + f"repo forall a rendu {result.returncode} : les depots" + " rapatries sont ignores, les fichiers locaux sont" + " formates quand meme." + ) + for flux in (result.stderr, result.stdout): + if flux and flux.strip(): + print(f" {flux.strip()}") + else: + lines_project = result.stdout.strip().split("\n\n") if os.path.isfile(".odoo-version"): with open(".odoo-version") as txt: @@ -163,3 +178,9 @@ if __name__ == "__main__": if status != 0: print(output) sys.exit(status) + elif files is None: + # get_modified_files a échoué sur le dépôt lui-même : rendre 0 + # laisserait croire que tout est formaté. + sys.exit(1) + else: + print("Aucun fichier modifie a formater.")