remote-hg: custom method to write tags
The one from mercurial is meant for users, on top of the latest tip. Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Felipe Contreras committed
Apr 22, 2013 at 16:55 UTC
68d4f4f3e952f63d256dd11b1336a3782d8c1226
1 file changed
+32
-1
contrib/remote-helpers/git-remote-hg
+32
-1
@@ -724,6 +724,37 @@ def parse_tag(parser):
724
725
parsed_tags[name] = (tagger, data)
726
727
+def write_tag(repo, tag, node, msg, author):
728
+ tip = repo['tip']
729
+
730
+ def getfilectx(repo, memctx, f):
731
+ try:
732
+ fctx = tip.filectx(f)
733
+ data = fctx.data()
734
+ except error.ManifestLookupError:
735
+ data = ""
736
+ content = data + "%s %s\n" % (hghex(node), tag)
737
+ return context.memfilectx(f, content, False, False, None)
738
+
739
+ p1 = tip.hex()
740
+ p2 = '\0' * 20
741
+ if not author:
742
+ author = (None, 0, 0)
743
+ user, date, tz = author
744
+
745
+ ctx = context.memctx(repo, (p1, p2), msg,
746
+ ['.hgtags'], getfilectx,
747
+ user, (date, tz), {})
748
+
749
+ tmp = encoding.encoding
750
+ encoding.encoding = 'utf-8'
751
+
752
+ tagnode = repo.commitctx(ctx)
753
+
754
+ encoding.encoding = tmp
755
+
756
+ return tagnode
757
+
758
def do_export(parser):
759
global parsed_refs, bmarks, peer
760
@@ -762,7 +793,7 @@ def do_export(parser):
793
if mode == 'git':
794
if not msg:
795
msg = 'Added tag %s for changeset %s' % (tag, hghex(node[:6]));
765
- parser.repo.tag([tag], node, msg, False, author[0], {})
796
+ write_tag(parser.repo, tag, node, msg, author)
797
else:
798
parser.repo.tag([tag], node, None, True, None, {})
799
print "ok %s" % ref