mercurial/tags.py
changeset 25381 47edeff19139
parent 25380 eaa456c5e699
child 25660 328739ea70c3
--- a/mercurial/tags.py	Mon May 25 16:24:23 2015 -0700
+++ b/mercurial/tags.py	Mon May 25 16:48:55 2015 -0700
@@ -484,14 +484,27 @@
             # No .hgtags file on this revision.
             fnode = nullid
 
+        self._writeentry(offset, properprefix, fnode)
+        return fnode
+
+    def setfnode(self, node, fnode):
+        """Set the .hgtags filenode for a given changeset."""
+        assert len(fnode) == 20
+        ctx = self._repo[node]
+
+        # Do a lookup first to avoid writing if nothing has changed.
+        if self.getfnode(ctx.node(), computemissing=False) == fnode:
+            return
+
+        self._writeentry(ctx.rev() * _fnodesrecsize, node[0:4], fnode)
+
+    def _writeentry(self, offset, prefix, fnode):
         # Slices on array instances only accept other array.
-        entry = array('c', properprefix + fnode)
+        entry = array('c', prefix + fnode)
         self._raw[offset:offset + _fnodesrecsize] = entry
         # self._dirtyoffset could be None.
         self._dirtyoffset = min(self._dirtyoffset, offset) or 0
 
-        return fnode
-
     def write(self):
         """Perform all necessary writes to cache file.