[PATCH v3] remote-hg: support for notes

2013-08-29 Thread Felipe Contreras
Keep track of Mercurial revisions as Git notes under the 'refs/notes/hg'
ref, this way, the user can easily see which Mercurial revision
correspond to certain Git commit.

Unfortunately, there's no way to efficiently update the notes after
doing an export (push), so they'll have to be updated when importing
(fetching).

Signed-off-by: Felipe Contreras felipe.contre...@gmail.com
---
 contrib/remote-helpers/git-remote-hg | 35 ++-
 1 file changed, 34 insertions(+), 1 deletion(-)

diff --git a/contrib/remote-helpers/git-remote-hg 
b/contrib/remote-helpers/git-remote-hg
index 307d82c..7f50b40 100755
--- a/contrib/remote-helpers/git-remote-hg
+++ b/contrib/remote-helpers/git-remote-hg
@@ -23,8 +23,12 @@ import subprocess
 import urllib
 import atexit
 import urlparse, hashlib
+import time as ptime
 
 #
+# If you want to see Mercurial revisions as Git commit notes:
+# git config core.notesRef refs/notes/hg
+#
 # If you are not in hg-git-compat mode and want to disable the tracking of
 # named branches:
 # git config --global remote-hg.track-branches false
@@ -126,6 +130,7 @@ class Marks:
 self.rev_marks = {}
 self.last_mark = 0
 self.version = 0
+self.last_note = 0
 
 def load(self):
 if not os.path.exists(self.path):
@@ -137,6 +142,7 @@ class Marks:
 self.marks = tmp['marks']
 self.last_mark = tmp['last-mark']
 self.version = tmp.get('version', 1)
+self.last_note = tmp.get('last-note', 0)
 
 for rev, mark in self.marks.iteritems():
 self.rev_marks[mark] = rev
@@ -150,7 +156,7 @@ class Marks:
 self.version = 2
 
 def dict(self):
-return { 'tips': self.tips, 'marks': self.marks, 'last-mark' : 
self.last_mark, 'version' : self.version }
+return { 'tips': self.tips, 'marks': self.marks, 'last-mark' : 
self.last_mark, 'version' : self.version, 'last-note' : self.last_note }
 
 def store(self):
 json.dump(self.dict(), open(self.path, 'w'))
@@ -525,6 +531,31 @@ def export_ref(repo, name, kind, head):
 print from :%u % rev_to_mark(head)
 print
 
+pending_revs = set(revs) - notes
+if pending_revs:
+note_mark = marks.next_mark()
+ref = refs/notes/hg
+
+print commit %s % ref
+print mark :%d % (note_mark)
+print committer remote-hg  %s % (ptime.strftime('%s %z'))
+desc = Notes for %s\n % (name)
+print data %d % (len(desc))
+print desc
+if marks.last_note:
+print from :%u % marks.last_note
+
+for rev in pending_revs:
+notes.add(rev)
+c = repo[rev]
+print N inline :%u % rev_to_mark(c)
+msg = c.hex()
+print data %d % (len(msg))
+print msg
+print
+
+marks.last_note = note_mark
+
 marks.set_tip(ename, head.hex())
 
 def export_tag(repo, tag):
@@ -1126,6 +1157,7 @@ def main(args):
 global filenodes
 global fake_bmark, hg_version
 global dry_run
+global notes, alias
 
 alias = args[1]
 url = args[2]
@@ -1165,6 +1197,7 @@ def main(args):
 except:
 hg_version = None
 dry_run = False
+notes = set()
 
 repo = get_repo(url, alias)
 prefix = 'refs/hg/%s' % alias
-- 
1.8.4-fc

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3] remote-hg: support for notes

2013-08-29 Thread Junio C Hamano
Felipe Contreras felipe.contre...@gmail.com writes:

 Keep track of Mercurial revisions as Git notes under the 'refs/notes/hg'
 ref, this way, the user can easily see which Mercurial revision
 correspond to certain Git commit.

 Unfortunately, there's no way to efficiently update the notes after
 doing an export (push), so they'll have to be updated when importing
 (fetching).

 Signed-off-by: Felipe Contreras felipe.contre...@gmail.com
 ---
  contrib/remote-helpers/git-remote-hg | 35 ++-
  1 file changed, 34 insertions(+), 1 deletion(-)

 diff --git a/contrib/remote-helpers/git-remote-hg 
 b/contrib/remote-helpers/git-remote-hg
 index 307d82c..7f50b40 100755
 --- a/contrib/remote-helpers/git-remote-hg
 +++ b/contrib/remote-helpers/git-remote-hg
 @@ -23,8 +23,12 @@ import subprocess
  import urllib
  import atexit
  import urlparse, hashlib
 +import time as ptime
  
  #
 +# If you want to see Mercurial revisions as Git commit notes:
 +# git config core.notesRef refs/notes/hg
 +#

Yup.  This is better.  Will queue.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html