bookmarks: hoist getbkfile out of bmstore class

It's totally fine that this hook exists, but I don't see a need for it
to live inside the bmstore class.
This commit is contained in:
Augie Fackler 2015-11-11 20:45:38 -05:00
parent 1495625440
commit c6a7c82c31
2 changed files with 23 additions and 22 deletions

View File

@ -121,7 +121,7 @@ def clone(orig, ui, source, *args, **opts):
return orig(ui, source, *args, **opts) return orig(ui, source, *args, **opts)
def extsetup(ui): def extsetup(ui):
extensions.wrapfunction(bookmarks.bmstore, 'getbkfile', getbkfile) extensions.wrapfunction(bookmarks, '_getbkfile', getbkfile)
extensions.wrapfunction(bookmarks.bmstore, 'recordchange', recordchange) extensions.wrapfunction(bookmarks.bmstore, 'recordchange', recordchange)
extensions.wrapfunction(bookmarks.bmstore, '_writerepo', writerepo) extensions.wrapfunction(bookmarks.bmstore, '_writerepo', writerepo)
extensions.wrapcommand(commands.table, 'clone', clone) extensions.wrapcommand(commands.table, 'clone', clone)
@ -149,12 +149,12 @@ def _getsrcrepo(repo):
srcurl, branches = parseurl(source) srcurl, branches = parseurl(source)
return repository(repo.ui, srcurl) return repository(repo.ui, srcurl)
def getbkfile(orig, self, repo): def getbkfile(orig, repo):
if _hassharedbookmarks(repo): if _hassharedbookmarks(repo):
srcrepo = _getsrcrepo(repo) srcrepo = _getsrcrepo(repo)
if srcrepo is not None: if srcrepo is not None:
repo = srcrepo repo = srcrepo
return orig(self, repo) return orig(repo)
def recordchange(orig, self, tr): def recordchange(orig, self, tr):
# Continue with write to local bookmarks file as usual # Continue with write to local bookmarks file as usual

View File

@ -22,6 +22,25 @@ from . import (
util, util,
) )
def _getbkfile(repo):
"""Hook so that extensions that mess with the store can hook bm storage.
For core, this just handles wether we should see pending
bookmarks or the committed ones. Other extensions (like share)
may need to tweak this behavior further.
"""
bkfile = None
if 'HG_PENDING' in os.environ:
try:
bkfile = repo.vfs('bookmarks.pending')
except IOError as inst:
if inst.errno != errno.ENOENT:
raise
if bkfile is None:
bkfile = repo.vfs('bookmarks')
return bkfile
class bmstore(dict): class bmstore(dict):
"""Storage for bookmarks. """Storage for bookmarks.
@ -41,7 +60,7 @@ class bmstore(dict):
dict.__init__(self) dict.__init__(self)
self._repo = repo self._repo = repo
try: try:
bkfile = self.getbkfile(repo) bkfile = _getbkfile(repo)
for line in bkfile: for line in bkfile:
line = line.strip() line = line.strip()
if not line: if not line:
@ -60,24 +79,6 @@ class bmstore(dict):
if inst.errno != errno.ENOENT: if inst.errno != errno.ENOENT:
raise raise
def getbkfile(self, repo):
"""Hook so that extensions that mess with the store can hook bm storage.
For core, this just handles wether we should see pending
bookmarks or the committed ones. Other extensions (like share)
may need to tweak this behavior further.
"""
bkfile = None
if 'HG_PENDING' in os.environ:
try:
bkfile = repo.vfs('bookmarks.pending')
except IOError as inst:
if inst.errno != errno.ENOENT:
raise
if bkfile is None:
bkfile = repo.vfs('bookmarks')
return bkfile
def recordchange(self, tr): def recordchange(self, tr):
"""record that bookmarks have been changed in a transaction """record that bookmarks have been changed in a transaction