Journal scm.py : gérer simplement plusieurs dépôts Mercurial et Git

Posté par (page perso) .
Tags :
13
4
fév.
2012

J'ai écrit un petit script Python pour gérer une dizaine de dépôts Mercurial et Git : scm.py. Vous pouvez en télécharger la dernière version depuis mon dépôt bitbucket.org (code mise en forme). Il nécessite d'activer l'extension rebase de Mercurial. Ajoutez les lignes suivantes à ~/.hgrc au besoin:

[extensions]
rebase=

Pour la configuration, lancez "scm.py scan > scm_config" dans le dossier où vous avez déjà des dépôts HG ou GIT, ils seront détectés automatiquement, et c'est parti !

scm.py fournit de nombreuses commandes qui affectent un ou plusieurs dépôts selon le dossier courant :

  • diff [FILES], info, status or st, branches, tags, grep PATTERN, out
  • add, commit|ci [files], histedit REVISION, revert [FILES], stash, unstash
  • pull, push
  • clone, scan, clean

Les commandes stash, unstash, push, add, histedit et revert ne fonctionnent (pour le moment) que sur un seul dépôt. Toutes les autres commandes peuvent être utilisées sur plusieurs dépôts en même temps. Exemples :

  • "scm.py status" liste les fichiers modifiés de tous les dépôts. La commande modifie la sortie de "hg status" et "git status" pour indiquer le chemin relatif depuis le dossier courant.
  • "scm.py out" liste les commits "sortants" (qui vont être envoyés par "scm.py push")

"scm.py stash" et "scm.py unstash" permet de mettre de côté puis restaurer des modifications locales à la manière de git stash, mais plus simplement. Ces commandes sont utilisées en interne par "scm.py pull" et "scm.py push" pour éviter des conflits lors de la mise à jour du dépôt.

"scm.py push" met à jour le dépôt avec l'option rebase qui évite des merge inutiles (la majorité du temps) avant de pousser les commits.

"scm.py revert" demande confirmation en listant les fichiers modifiés.

Exemple de fichier de configuration (scm_config) si vous voulez l'écrire à la main :

# Format: "directory: scm=url"
GIT/faulthandler: git=git@github.com:haypo/faulthandler.git
GIT/pysandbox: git=git@github.com:haypo/pysandbox.git
GIT/python-ipy: git=git@github.com:haypo/python-ipy.git
GIT/unicode_book: git=git@github.com:haypo/unicode_book.git    
HG/fusil: hg=ssh://hg@bitbucket.org/haypo/fusil
HG/hasard: hg=ssh://hg@bitbucket.org/haypo/hasard
HG/misc: hg=ssh://hg@bitbucket.org/haypo/misc
python/default: hg=ssh://hg@hg.python.org/cpython

Bien sûr, vous pouvez continuer à utiliser les commandes hg et git dans un dépôt, c'est d'ailleurs ce que je fais pour les commandes plus avancées.

scm.py est encore jeune, sûrement bogué et je ne garantis pas qu'il ne vous fera pas perdre de données :-)

  • # Mr ?

    Posté par . Évalué à 1.

    N'est-ce pas déjà ce que fait l'outil mr développé par le valeureux Joey Hess ? Mais je me trompe peut-être, c'est un outil que je n'ai jamais utilisé...

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.