2011
2009
Bugs Everywhere
by Spone & 1 otherBugs Everywhere is a “distributed bugtracker”, designed to complement distributed revision control systems. By using distributed revision control as a backend for bug state, we gain several convenient features:
* Bugs and code that live on branches are tracked together—when a branch is merged, both the code changes and bug changes that the branch contains are merged alongside each other. We no longer have to be confused about whether a fix that is applied to the development branch but not yet present in the production branch means that our bug is “fixed”.
* Users can fully modify bug state while offline, unlike with many centralized bugtrackers.
* When a user checks out your source code, she gets the current bug state for free.
* We can still provide access to a friendly web interface for users—in this model, a web interface becomes just another client that merges with the main repository.
2008
TortoiseHg - Mercurial
by parmentierf (via)TortoiseHg is an all-inclusive Mercurial binary installer package for Windows, which provides a windows explorer extension (shell extension), so that Mercurial commands can be executed from the context menu of the explorer.
Command line "hg" is included as well. No other packages are needed (for example, Python is already included as a dll).
Includes several dialogs, for example for committing and history viewing/diffing. Also includes a MergeProgram and software for ssh server access.
Tailor - DarcsWiki
by Xavier Lacot (via)Tailor is a tool to migrate or replicate changesets between ArX, Bazaar, Bazaar-NG, CVS, Codeville, Darcs, Git, Mercurial, Monotone, Subversion and Tla repositories.
2007
programmation-python.org
by pvergain & 1 otherMercurial est un système distribué de gestion de sources écrit en Python. Il permet à des développeurs de travailler avec leur code et de le versionner comme avec Subversion, mais sans avoir à dépendre d'un serveur centralisé: chaque modification est conservée localement, et le développeur peut à tout moment se synchroniser avec un autre repository, qu'il soit sur un serveur ou sur un autre poste de développement.
Un repository Mercurial est accessible entres autres en SSH, et peut être recopié localement pour être modifié (commande clone), puis mis à jour avec la commande push. L'utilisation de Mercurial est très similaire à celle de Subversion:
dabox:~ tarek$ hg
Mercurial Distributed SCM
basic commands (use "hg help" for the full list or option "-v" for details):
add add the specified files on the next commit
annotate show changeset information per file line
clone make a copy of an existing repository
commit commit the specified files or all outstanding changes
diff diff repository (or selected files)
export dump the header and diffs for one or more changesets
init create a new repository in the given directory
log show revision history of entire repository or files
parents show the parents of the working dir or revision
pull pull changes from the specified source
push push changes to the specified destination
remove remove the specified files on the next commit
revert revert files or dirs to their states as of some revision
serve export the repository via HTTP
status show changed files in the working directory
update update or merge working directory
Mettre en place un projet basé sur Mercurial consiste donc à mettre à disposition des développeurs un repository via un utilisateur SSH. Cette mise en place est expliquée sur cette page : http://www.selenic.com/mercurial/wiki/index.cgi/MultipleCommitters.
Mercurial propose, comme Subversion un système de hook pour effectuer des opérations lorsqu'un développeur "push" des modifications sur le serveur désigné comme "central". Un script pour envoyer des mails à chaque push est fourni sur le site, mais n'est pas très souple (script shell basic).
Voici un script Python qui offre un peu plus de souplesse:
#!/usr/bin/python
import sys
import os
import smtplib
from email.MIMEText import MIMEText
from ConfigParser import ConfigParser
from email.Utils import formatdate
conffile = os.path.join(os.path.dirname(__file__), 'commithook.conf')
config = ConfigParser()
config.read(conffile)
def command(cmd):
return os.popen(cmd, 'r').read()
def send_mail(log, email, subject):
msg = MIMEText(log, 'plain', 'UTF-8')
sender = config.get('configuration', 'sender')
prefix = config.get('configuration', 'prefix')
msg['From'] = sender
msg['To'] = email
msg['Date'] = formatdate(localtime=True)
msg['Subject'] = '%s %s' % (prefix, subject)
server = smtplib.SMTP('localhost')
try:
server.sendmail(sender, [email], msg.as_string())
finally:
server.quit()
if __name__ == '__main__':
hg_node = os.getenv('HG_NODE')
subject = command('hg log -r %s | grep "^summary:" | cut -b 14-' % hg_node)
emails = config.get('configuration', 'emails').split(',')
for email in emails:
log = command('hg log -vpr %s' % hg_node)
send_mail(log, email, subject)
Il est associé à un fichier de configuration qui permet d'indiquer:
* le nom de l'expéditeur
* le préfix des mails
* la liste des emails
1
(7 marks)