[ADD] script todo : poser merge.conflictStyle=zdiff3 depuis le menu Git
zdiff3 fait figurer la base commune dans les marqueurs de conflit et sort de la zone contestée les lignes que les deux côtés ont en commun : il reste moins à arbitrer à la main. Le style demande git 2.35, que toutes les plateformes supportées dépassent. La valeur est relue après écriture, « git config » ne rendant rien à l'écriture. L'entrée est déclarée dans TestGitMenuNumbering : le menu Git mêle entrées codées en dur et entrées de todo.json, qu'un rang de plus décale. Vérifié : 117 tests au vert. --- EN --- zdiff3 puts the merge base into the conflict markers and lifts out of the contested area the lines both sides share: less is left to arbitrate by hand. The style needs git 2.35, which every supported platform exceeds. The value is read back after writing, as « git config » returns nothing on write. The entry is declared in TestGitMenuNumbering: the Git menu mixes hard-coded entries with todo.json ones, which one more rank shifts. Checked: 117 tests green. Assisted-by: Claude Opus 5
This commit is contained in:
parent
3dcccf40d9
commit
93ffb3b7e9
3 changed files with 56 additions and 6 deletions
|
|
@ -2539,6 +2539,11 @@ class TODO(
|
|||
"Install git hooks (commit-msg, pre-commit)"
|
||||
)
|
||||
},
|
||||
{
|
||||
"prompt_description": t(
|
||||
"Set merge.conflictStyle to zdiff3 (global)"
|
||||
)
|
||||
},
|
||||
]
|
||||
|
||||
# Append config-driven entries
|
||||
|
|
@ -2559,6 +2564,8 @@ class TODO(
|
|||
self._git_add_remote()
|
||||
elif status == "3":
|
||||
self._git_install_hooks()
|
||||
elif status == "4":
|
||||
self._git_set_conflict_style()
|
||||
else:
|
||||
cmd_no_found = True
|
||||
try:
|
||||
|
|
@ -2636,6 +2643,38 @@ class TODO(
|
|||
marque = t("hook installed") if pose else t("hook not installed")
|
||||
print(f" {hook:<26} {marque}")
|
||||
|
||||
def _git_set_conflict_style(self):
|
||||
"""Poser merge.conflictStyle=zdiff3 dans la configuration globale.
|
||||
|
||||
zdiff3 ajoute la base commune aux marqueurs de conflit et sort de la
|
||||
zone contestée les lignes que les deux côtés ont en commun : il reste
|
||||
moins à arbitrer à la main. Le style demande git 2.35, que toutes les
|
||||
plateformes supportées dépassent.
|
||||
|
||||
La valeur est relue après écriture : « git config » ne rend rien à
|
||||
l'écriture, et une configuration globale en lecture seule échouerait
|
||||
sans que le menu le sache.
|
||||
"""
|
||||
status = self.execute.exec_command_live(
|
||||
"git config --global merge.conflictStyle zdiff3",
|
||||
source_erplibre=False,
|
||||
)
|
||||
if status:
|
||||
print(
|
||||
f"❌ {t('Failed to set merge.conflictStyle, see the output above.')}"
|
||||
)
|
||||
return
|
||||
result = self.execute.exec_command_live(
|
||||
"git config --global --get merge.conflictStyle",
|
||||
source_erplibre=False,
|
||||
quiet=True,
|
||||
return_status_and_output=True,
|
||||
)
|
||||
value = (
|
||||
" ".join(result[1]).strip() if isinstance(result, tuple) else ""
|
||||
)
|
||||
print(f"✅ merge.conflictStyle = {value}")
|
||||
|
||||
def prompt_execute_git_local_server(self):
|
||||
print(f"🤖 {t('Manage local git repository server!')}")
|
||||
choices = [
|
||||
|
|
|
|||
|
|
@ -903,6 +903,17 @@ TRANSLATIONS = {
|
|||
"en": "Error adding remote: ",
|
||||
},
|
||||
# Git hooks
|
||||
"Set merge.conflictStyle to zdiff3 (global)": {
|
||||
"fr": "Configurer merge.conflictStyle en zdiff3 (global)",
|
||||
"en": "Set merge.conflictStyle to zdiff3 (global)",
|
||||
},
|
||||
"Failed to set merge.conflictStyle, see the output above.": {
|
||||
"fr": (
|
||||
"Échec du réglage de merge.conflictStyle, voir la sortie"
|
||||
" ci-dessus."
|
||||
),
|
||||
"en": "Failed to set merge.conflictStyle, see the output above.",
|
||||
},
|
||||
"Install git hooks (commit-msg, pre-commit)": {
|
||||
"fr": "Installer les hooks git (commit-msg, pre-commit)",
|
||||
"en": "Install git hooks (commit-msg, pre-commit)",
|
||||
|
|
|
|||
|
|
@ -451,12 +451,11 @@ class TestProxmoxMenuNumbering(MenuCoherence, unittest.TestCase):
|
|||
class TestGitMenuNumbering(MenuCoherence, unittest.TestCase):
|
||||
"""Le menu Git, le seul dont todo.json suit des entrées codées en dur.
|
||||
|
||||
Ses trois premières entrées sont écrites à la main, les suivantes viennent
|
||||
de `git_from_makefile` et le repli générique les renumérote tout seul :
|
||||
ajouter « Installer les hooks git » en [3] a poussé les deux entrées de
|
||||
todo.json en [4] et [5] sans que rien ne le dise. Une quatrième entrée
|
||||
codée en dur, oubliée dans le dispatch, ferait lancer à [4] la commande
|
||||
du voisin sous le libellé attendu.
|
||||
Ses premières entrées sont écrites à la main, les suivantes viennent de
|
||||
`git_from_makefile` et le repli générique les renumérote tout seul :
|
||||
ajouter une entrée codée en dur pousse celles de todo.json d'un rang sans
|
||||
que rien ne le dise. Une entrée codée en dur oubliée dans le dispatch
|
||||
ferait lancer la commande du voisin sous le libellé attendu.
|
||||
"""
|
||||
|
||||
SOURCE = TODO_DIR / "todo.py"
|
||||
|
|
@ -468,6 +467,7 @@ class TestGitMenuNumbering(MenuCoherence, unittest.TestCase):
|
|||
"Local git server": "prompt_execute_git_local_server",
|
||||
"Add a remote to a local repository": "_git_add_remote",
|
||||
"Install git hooks": "_git_install_hooks",
|
||||
"Set merge.conflictStyle": "_git_set_conflict_style",
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue