# HG changeset patch # User Valentin Gatien-Baron # Date 1538402322 14400 # Node ID c9026e9297e3d3110a30b975d2b6663f6f65a54d # Parent a8ec8bce14c679bedceab6cf41476ca0a362274f identify: only query remote bookmarks if needed Instead of all the time when operating on a remote repo. This perf regression was introduced in 15a79ac823e8, in 4.3. This datahint method returns nothing for -Tjson, -Tpickle, -Tdebug --config ui.formatdebug=true and --config ui.formatjson, so the bookmarks won't show up. I don't know what these formatters are for. plainformatter and templateformatter work properly, and the few other uses of datahint should have the same kind of problem. There is further weirdness where "--template '{node}'" is not enough to avoid querying the bookmarks, you also need to pass --id or -q. Differential Revision: https://phab.mercurial-scm.org/D4819 diff -r a8ec8bce14c6 -r c9026e9297e3 mercurial/commands.py --- a/mercurial/commands.py Wed Oct 03 13:59:19 2018 +0300 +++ b/mercurial/commands.py Mon Oct 01 09:58:42 2018 -0400 @@ -3023,6 +3023,7 @@ output = [hexrev] fm.data(id=hexrev) + @util.cachefunc def getbms(): bms = [] @@ -3033,17 +3034,17 @@ return sorted(bms) - bms = getbms() if bookmarks: - output.extend(bms) + output.extend(getbms()) elif default and not ui.quiet: # multiple bookmarks for a single parent separated by '/' - bm = '/'.join(bms) + bm = '/'.join(getbms()) if bm: output.append(bm) fm.data(node=hex(remoterev)) - fm.data(bookmarks=fm.formatlist(bms, name='bookmark')) + if 'bookmarks' in fm.datahint(): + fm.data(bookmarks=fm.formatlist(getbms(), name='bookmark')) else: if rev: repo = scmutil.unhidehashlikerevs(repo, [rev], 'nowarn')