# HG changeset patch
# User Josef 'Jeff' Sipek <jef...@josefsipek.net>
# Date 1585259370 14400
#      Thu Mar 26 17:49:30 2020 -0400
# Node ID 5a77ab1704526629c316ebd93ca355d3439eb0b7
# Parent  917cd2c4073cf69b2c366dccbfccc3b28ff4fca2
git: implement basic bookmark activation

This is very limited, but it allows 'hg update foo' when already on foo.

The caching is based on bmstore's caching.

diff --git a/hgext/git/__init__.py b/hgext/git/__init__.py
--- a/hgext/git/__init__.py
+++ b/hgext/git/__init__.py
@@ -143,6 +143,8 @@ def _setupdothg(ui, path):
 class gitbmstore(object):
     def __init__(self, gitrepo):
         self.gitrepo = gitrepo
+        self._aclean = True
+        self._active = gitrepo.references['HEAD'] # git head, not mark
 
     def __contains__(self, name):
         return (
@@ -180,7 +182,18 @@ class gitbmstore(object):
 
     @active.setter
     def active(self, mark):
-        raise NotImplementedError
+        githead = mark is not None and (_BMS_PREFIX + mark) or None
+        if githead is not None and githead not in self.gitrepo.references:
+            raise AssertionError(b'bookmark %s does not exist!' % mark)
+
+        self._active = githead
+        self._aclean = False
+
+    def _writeactive(self):
+        if self._aclean:
+            return
+        self.gitrepo.references.create('HEAD', self._active, True)
+        self._aclean = True
 
     def names(self, node):
         r = []
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to