Version contrôlée configuration d'extension dans Mercurial
-
21-08-2019 - |
Question
Normalement, j'activer les extensions en ajoutant ce qui suit à .hg/hgrc
:
[extensions]
hgext.win32text=
[encode]
** = cleverencode:
[decode]
** = cleverdecode:
Cependant, je veux que cette configuration soit versionné, à savoir une partie du dépôt, de sorte qu'il est permis pour quelqu'un d'autre (collègues, construire des machines) cloner le dépôt. Notez que le dépôt des clones devrait quel que soit leur ne soit pas tenu de le faire quoi que ce soit pour activer ces extensions.
Il semble qu'il est impossible de la documentation , mais personne ne sait tout astuces intéressantes qui peuvent me aider?
La solution
Vous voulez mercurial faire quelque chose automatiquement lorsque vous clonez un repo (mise à jour des crochets ou config). Documentation indique qu'il est impossible et donne de très bonnes raisons:
Hooks do not propagate
In Mercurial, hooks are not revision controlled, and do not propagate when you clone,
or pull from, a repository. The reason for this is simple: a hook is a completely
arbitrary piece of executable code. It runs under your user identity, with your
privilege level, on your machine. No comments
It would be extremely reckless for any distributed revision control system to
implement revision-controlled hooks, as this would offer an easily exploitable way to
subvert the accounts of users of the revision control system. No comments
Il est donc clair, Mercurial se ne résoudra pas votre problème. Vous déclarez clairement que vous voulez, mais rien Mercurial pour résoudre votre problème, donc la réponse est: ce que vous demandez est impossible
.La seule façon de résoudre votre problème est que tous vos utilisateurs devront exécuter / installer au moins une fois un script donné qui exécutent les actions que vous voulez, quelque chose comme l'installation des crochets du droit.
Si vous voulez être intelligent à ce sujet:
- créer un script unique pour exécuter qui va installer un crochet pour copier la configuration à droite dans le .hg ou l'utilisateur
- Assurez-vous que le crochet, une fois installé, peut mettre à jour le script pour distribuer des mises à jour de configuration aux utilisateurs
- le crochet ajouter une marque spéciale pour commettre des messages
- refuser le dépôt central engager qui ne portent pas le message spécial
Un peu compliqué, mais qui est le plus proche, je peux imaginer à vos besoins:
- utilisateur exécuter une fois un script et ils oublient
- vous pouvez vous assurer que si le ne l'ont pas fait, ils ne peuvent pas engager à votre repo central
Autres conseils
La version actuelle du développement de Mercurial (à paraître comme Mercurial 1.3 le 1er Juillet) soutient une directive dans ses %include
fichiers de configuration.
Cela signifie que vous pouvez demander aux gens de mettre
%include ../common-hgrc
dans .hg/hgrc
. Après avoir fait cela, vous pouvez contrôler efficacement leurs paramètres Mercurial en engageant des changements à common-hgrc
. Quand ils tirent le changement, les nouveaux paramètres prennent effet.
Prenez note que ceci est dangereux: quelqu'un qui peut vous amener à tirer des changements dans votre référentiel peut maintenant insérer des crochets arbitraires dans hg status
et vous les exécuter sur la commande suivante Mercurial (même une ligne de commande « safe » < =>).
Vous pourriez être en mesure de résoudre ce problème via le ProjRC l'extension .
« Cette extension donne un look Mercurial et analyser .hg / projrc pour les paramètres de configuration supplémentaires. Le fichier est transféré sur le clone et tirer (mais jamais sur la poussée) »
Qu'en est-il de créer un lien de par exemple à .hg/hgrc
customhg/hgrc
afin qu'il soit versionné. Ensuite, vous devez créer un certain crochet qui copie de nouveau à <=> - par exemple après chaque mise à jour.