#!/usr/bin/env python
-# Copyright (c) 2007 Rocco Rutte <pdmef@gmx.net>
+# Copyright (c) 2007, 2008 Rocco Rutte <pdmef@gmx.net> and others.
# License: MIT <http://www.opensource.org/licenses/mit-license.php>
-from mercurial import repo,hg,cmdutil,util,ui,revlog,node
+from mercurial import repo,hg,cmdutil,util,ui,revlog,node,templatefilters
import re
import os
import sys
-# git branch for hg's default 'HEAD' branch
+# default git branch name
cfg_master='master'
+# default origin name
+origin_name=''
# silly regex to see if user field has email address
-user_re=re.compile('([^<]+) (<[^>]+>)$')
+user_re=re.compile('([^<]+) (<[^>]*>)$')
# silly regex to clean out user names
user_clean_re=re.compile('^["]([^"]+)["]$')
+def set_default_branch(name):
+ global cfg_master
+ cfg_master = name
+
+def set_origin_name(name):
+ global origin_name
+ origin_name = name
+
def setup_repo(url):
- myui=ui.ui(interactive=False)
+ try:
+ myui=ui.ui(interactive=False)
+ except TypeError:
+ myui=ui.ui()
+ myui.setconfig('ui', 'interactive', 'off')
return myui,hg.repository(myui,url)
def fixup_user(user,authors):
+ user=user.strip("\"")
if authors!=None:
# if we have an authors table, try to get mapping
# by defaulting to the current value of 'user'
user=authors.get(user,user)
name,mail,m='','',user_re.match(user)
if m==None:
- # if we don't have 'Name <mail>' syntax, use 'user
- # <devnull@localhost>' if use contains no at and
- # 'user <user>' otherwise
- name=user
- if '@' not in user:
- mail='<devnull@localhost>'
- else:
- mail='<%s>' % user
+ # if we don't have 'Name <mail>' syntax, extract name
+ # and mail from hg helpers. this seems to work pretty well.
+ # if email doesn't contain @, replace it with devnull@localhost
+ name=templatefilters.person(user)
+ mail='<%s>' % util.email(user)
+ if '@' not in mail:
+ mail = '<devnull@localhost>'
else:
# if we have 'Name <mail>' syntax, everything is fine :)
name,mail=m.group(1),m.group(2)
return '%s %s' % (name,mail)
def get_branch(name):
- # HEAD may be from CVS imports into hg
+ # 'HEAD' is the result of a bug in mutt's cvs->hg conversion,
+ # other CVS imports may need it, too
if name=='HEAD' or name=='default' or name=='':
name=cfg_master
+ if origin_name:
+ return origin_name + '/' + name
return name
def get_changeset(ui,repo,revision,authors={}):
def get_git_sha1(name,type='heads'):
try:
# use git-rev-parse to support packed refs
- cmd="GIT_DIR='%s' git-rev-parse --verify refs/%s/%s 2>/dev/null" % (os.getenv('GIT_DIR','/dev/null'),type,name)
+ cmd="GIT_DIR='%s' git rev-parse --verify refs/%s/%s 2>/dev/null" % (os.getenv('GIT_DIR','/dev/null'),type,name)
p=os.popen(cmd)
l=p.readline()
p.close()