--- a/hgext/convert/git.py Thu Mar 24 15:12:51 2011 -0500
+++ b/hgext/convert/git.py Fri Mar 25 01:38:43 2011 +0100
@@ -17,19 +17,27 @@
# cannot remove environment variable. Just assume none have
# both issues.
if hasattr(os, 'unsetenv'):
- def gitopen(self, s):
+ def gitopen(self, s, noerr=False):
prevgitdir = os.environ.get('GIT_DIR')
os.environ['GIT_DIR'] = self.path
try:
- return util.popen(s, 'rb')
+ if noerr:
+ (stdin, stdout, stderr) = util.popen3(s)
+ return stdout
+ else:
+ return util.popen(s, 'rb')
finally:
if prevgitdir is None:
del os.environ['GIT_DIR']
else:
os.environ['GIT_DIR'] = prevgitdir
else:
- def gitopen(self, s):
- return util.popen('GIT_DIR=%s %s' % (self.path, s), 'rb')
+ def gitopen(self, s, noerr=False):
+ if noerr:
+ (sin, so, se) = util.popen3('GIT_DIR=%s %s' % (self.path, s))
+ return stdout
+ else:
+ util.popen('GIT_DIR=%s %s' % (self.path, s), 'rb')
def gitread(self, s):
fh = self.gitopen(s)
@@ -168,3 +176,30 @@
raise util.Abort(_('cannot read changes in %s') % version)
return changes
+
+ def getbookmarks(self):
+ bookmarks = {}
+
+ # Interesting references in git are prefixed
+ prefix = 'refs/heads/'
+ prefixlen = len(prefix)
+
+ # factor two commands
+ gitcmd = { 'remote/': 'git ls-remote --heads origin',
+ '': 'git show-ref'}
+
+ # Origin heads
+ for reftype in gitcmd:
+ try:
+ fh = self.gitopen(gitcmd[reftype], noerr=True)
+ for line in fh:
+ line = line.strip()
+ rev, name = line.split(None, 1)
+ if not name.startswith(prefix):
+ continue
+ name = '%s%s' % (reftype, name[prefixlen:])
+ bookmarks[name] = rev
+ except:
+ pass
+
+ return bookmarks
--- a/tests/test-convert-git.t Thu Mar 24 15:12:51 2011 -0500
+++ b/tests/test-convert-git.t Fri Mar 25 01:38:43 2011 +0100
@@ -57,9 +57,11 @@
2 t4.1
1 t4.2
0 Merge branch other
+ updating bookmarks
$ hg up -q -R git-repo-hg
$ hg -R git-repo-hg tip -v
changeset: 5:c78094926be2
+ bookmark: master
tag: tip
parent: 3:f5f5cb45432b
parent: 4:4e174f80c67c
@@ -217,6 +219,7 @@
sorting...
converting...
0 addbinary
+ updating bookmarks
$ cd git-repo3-hg
$ hg up -C
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
@@ -248,8 +251,10 @@
converting...
1 addfoo
0 addfoo2
+ updating bookmarks
$ hg -R git-repo4-hg log -v
changeset: 1:d63e967f93da
+ bookmark: master
tag: tip
user: nottest <test@example.org>
date: Mon Jan 01 00:00:21 2007 +0000
--- a/tests/test-convert-tagsbranch-topology.t Thu Mar 24 15:12:51 2011 -0500
+++ b/tests/test-convert-tagsbranch-topology.t Fri Mar 25 01:38:43 2011 +0100
@@ -49,6 +49,7 @@
converting...
0 rev1
updating tags
+ updating bookmarks
Simulate upstream updates after first conversion
@@ -67,6 +68,7 @@
converting...
0 rev2
updating tags
+ updating bookmarks
Print the log