diff --git a/eden/scm/edenscm/hgext/amend/__init__.py b/eden/scm/edenscm/hgext/amend/__init__.py index 2992351449..fdf66a96de 100644 --- a/eden/scm/edenscm/hgext/amend/__init__.py +++ b/eden/scm/edenscm/hgext/amend/__init__.py @@ -71,7 +71,6 @@ from .. import histedit, rebase as rebasemod from . import ( common, fold, - hiddenoverride, hide, metaedit, movement, @@ -182,7 +181,6 @@ def hintsplitphabricator(advice): def uisetup(ui): - hiddenoverride.uisetup(ui) entry = extensions.wrapcommand(commands.table, "commit", commit) for opt in amendopts: opt = (opt[0], opt[1], opt[2], "(with --amend) " + opt[3]) diff --git a/eden/scm/edenscm/hgext/amend/hiddenoverride.py b/eden/scm/edenscm/hgext/amend/hiddenoverride.py deleted file mode 100644 index 5f6631de6d..0000000000 --- a/eden/scm/edenscm/hgext/amend/hiddenoverride.py +++ /dev/null @@ -1,146 +0,0 @@ -# Copyright (c) Facebook, Inc. and its affiliates. -# -# This software may be used and distributed according to the terms of the -# GNU General Public License version 2. - -# hiddenoverride.py - lightweight hidden-ness override - -from __future__ import absolute_import - -from edenscm.hgext import extutil -from edenscm.mercurial import ( - dispatch, - error, - extensions, - obsolete, - repoview, - scmutil, - util, - visibility, -) -from edenscm.mercurial.node import short - - -def uisetup(ui): - extensions.wrapfunction(repoview, "pinnedrevs", pinnedrevs) - extensions.wrapfunction(dispatch, "runcommand", runcommand) - extensions.wrapfunction(obsolete, "createmarkers", createmarkers) - extensions.wrapfunction(scmutil, "cleanupnodes", cleanupnodes) - - -def pinnedrevs(orig, repo): - revs = orig(repo) - if "visibleheads" not in repo.storerequirements and not visibility.enabled(repo): - nodemap = repo.changelog.nodemap - pinnednodes = set(loadpinnednodes(repo)) - tounpin = getattr(repo, "_tounpinnodes", set()) - pinnednodes -= tounpin - revs.update(nodemap[n] for n in pinnednodes) - return revs - - -def loadpinnednodes(repo): - """yield pinned nodes that are obsoleted and should be visible""" - if repo is None or not repo.local(): - return - # the "pinned nodes" file name is "obsinhibit" for compatibility reason - content = repo.svfs.tryread("obsinhibit") or "" - unfi = repo.unfiltered() - nodemap = unfi.changelog.nodemap - offset = 0 - result = [] - while True: - node = content[offset : offset + 20] - if not node: - break - if node in nodemap: - result.append(node) - offset += 20 - return result - - -def shouldpinnodes(repo): - """get nodes that should be pinned: working parent + bookmarks for now""" - result = set() - if repo and repo.local(): - # working copy parent - try: - wnode = repo.localvfs("dirstate").read(20) - result.add(wnode) - except Exception: - pass - # bookmarks - result.update(repo.unfiltered()._bookmarks.values()) - return result - - -def savepinnednodes(repo, newpin, newunpin, fullargs): - # take a narrowed lock so it does not affect repo lock - with extutil.flock(repo.svfs.join("obsinhibit.lock"), "save pinned nodes"): - orignodes = loadpinnednodes(repo) - nodes = set(orignodes) - nodes |= set(newpin) - nodes -= set(newunpin) - with util.atomictempfile(repo.svfs.join("obsinhibit")) as f: - f.write(b"".join(nodes)) - - desc = lambda s: [short(n) for n in s] - repo.ui.log( - "pinnednodes", - "pinnednodes: %r newpin=%r newunpin=%r " "before=%r after=%r\n", - fullargs, - desc(newpin), - desc(newunpin), - desc(orignodes), - desc(nodes), - ) - - -def runcommand(orig, lui, repo, cmd, fullargs, *args): - # return directly for non-repo command - if not repo or "visibleheads" in repo.storerequirements: - return orig(lui, repo, cmd, fullargs, *args) - - shouldpinbefore = shouldpinnodes(repo) | set(loadpinnednodes(repo)) - result = orig(lui, repo, cmd, fullargs, *args) - # after a command completes, make sure working copy parent and all - # bookmarks get "pinned". - newpin = shouldpinnodes(repo) - shouldpinbefore - newunpin = getattr(repo.unfiltered(), "_tounpinnodes", set()) - # filter newpin by obsolte - ex. if newpin is on a non-obsoleted commit, - # ignore it. - if newpin: - unfi = repo.unfiltered() - obsoleted = unfi.revs("obsolete()") - nodemap = unfi.changelog.nodemap - newpin = set(n for n in newpin if n in nodemap and nodemap[n] in obsoleted) - # only do a write if something has changed - if newpin or newunpin: - savepinnednodes(repo, newpin, newunpin, fullargs) - return result - - -def createmarkers(orig, repo, rels, *args, **kwargs): - # this is a way to unpin revs - precursors are unpinned - # note: hg debugobsolete does not call this function - if "visibleheads" not in repo.storerequirements: - unfi = repo.unfiltered() - tounpin = getattr(unfi, "_tounpinnodes", set()) - for r in rels: - try: - tounpin.add(r[0].node()) - except error.RepoLookupError: - pass - unfi._tounpinnodes = tounpin - return orig(repo, rels, *args, **kwargs) - - -def cleanupnodes(orig, repo, mapping, *args, **kwargs): - # this catches cases where cleanupnodes is called but createmarkers is not - # called. unpin nodes from mapping - if "visibleheads" not in repo.storerequirements: - unfi = repo.unfiltered() - tounpin = getattr(unfi, "_tounpinnodes", set()) - tounpin.update(mapping) - unfi._tounpinnodes = tounpin - return orig(repo, mapping, *args, **kwargs) diff --git a/eden/scm/tests/test-commitcloud-backup-bundlestore-short-hash.t b/eden/scm/tests/test-commitcloud-backup-bundlestore-short-hash.t index f126e086d6..7795a49ab5 100644 --- a/eden/scm/tests/test-commitcloud-backup-bundlestore-short-hash.t +++ b/eden/scm/tests/test-commitcloud-backup-bundlestore-short-hash.t @@ -83,7 +83,7 @@ Test that updating to new head after hiding current head works as expected. 1 changeset hidden $ hg up -qr "heads(.::)" $ hg log -r "." -T "{node|short}\n" - c1b6fe8fce73 + f8b49bf62d4d Check hg up on another client. Commit should be pulled from backup storage. diff --git a/eden/scm/tests/test-commitcloud-sync-omission.t b/eden/scm/tests/test-commitcloud-sync-omission.t index 740df0ac3d..93e748820d 100644 --- a/eden/scm/tests/test-commitcloud-sync-omission.t +++ b/eden/scm/tests/test-commitcloud-sync-omission.t @@ -808,8 +808,6 @@ Sync in client 2. It doesn't have the new destination of midbook, so should omi $ tglogp o 10: 2ace67ee4791 draft 'oldstack-mar4 amended' | - | x 9: 2b8dce7bd745 draft 'oldstack-mar4' - |/ o 8: d16408588b2d draft 'oldstack-feb4' | o 7: 1f9ebd6d1390 draft 'oldstack-feb1' @@ -823,8 +821,6 @@ Sync in client 2. It doesn't have the new destination of midbook, so should omi | | @ 10: 2ace67ee4791 draft 'oldstack-mar4 amended' | | - | | x 9: 2b8dce7bd745 draft 'oldstack-mar4' - | |/ | o 2: d16408588b2d draft 'oldstack-feb4' | | | o 1: 1f9ebd6d1390 draft 'oldstack-feb1' diff --git a/eden/scm/tests/test-commitcloud-sync-oscillation.t b/eden/scm/tests/test-commitcloud-sync-oscillation.t index be78c4004b..fdd2fd636f 100644 --- a/eden/scm/tests/test-commitcloud-sync-oscillation.t +++ b/eden/scm/tests/test-commitcloud-sync-oscillation.t @@ -443,10 +443,11 @@ hiddenoverride, but commit cloud ignores it). $ cd ../client2 $ hg cloud sync commitcloud: synchronizing 'server' with 'user/test/default' + detected obsmarker inconsistency (fixing by obsoleting [] and reviving [878302dcadc7]) commitcloud: commits synchronized finished in * (glob) $ tglogp -r $F:: - x 7: 878302dcadc7 draft 'G' + o 7: 878302dcadc7 draft 'G' | o 6: 64b4d9634423 draft 'F' | @@ -457,10 +458,11 @@ In client 1 the obsmarker inconsistency is finally detected and fixed. $ cd ../client1 $ hg cloud sync commitcloud: synchronizing 'server' with 'user/test/default' - detected obsmarker inconsistency (fixing by obsoleting [878302dcadc7] and reviving []) commitcloud: commits synchronized finished in * (glob) $ tglogp -r $F:: + o 7: 878302dcadc7 draft 'G' + | o 4: 64b4d9634423 draft 'F' | ~ @@ -474,19 +476,19 @@ Everything is stable now. $ cd ../client2 $ hg cloud sync -q $ tglogp -r $F:: - x 7: 878302dcadc7 draft 'G' + o 7: 878302dcadc7 draft 'G' | o 6: 64b4d9634423 draft 'F' | ~ $ python $TESTTMP/dumpcommitcloudmetadata.py - version: 6 + version: 5 bookmarks: foo => 5817a557f93f46ab290e8571c89624ff856130c0 heads: 65299708466caa8f13c05d82e76d611c183defee 27ad028060800678c2de95fea2e826bbd4bf2c21 - 64b4d963442377cb7aa4b0997eeca249ac8643c9 + 878302dcadc7a800f326d8e06a5e9beec77e5a1c Make a new commit. Copy it to the other client via a bundle, and then hide it with commit cloud inactive. diff --git a/eden/scm/tests/test-commitcloud-sync.t b/eden/scm/tests/test-commitcloud-sync.t index 378ffac14c..b3489a0fa5 100644 --- a/eden/scm/tests/test-commitcloud-sync.t +++ b/eden/scm/tests/test-commitcloud-sync.t @@ -615,8 +615,6 @@ Expected result: client2 should be moved to 68e035cc1996 |/ | o 6: 8134e74ecdc8 'commit2 amended amended' bookmark1 |/ - | x 5: 41f3b9359864 'commit2 amended' - |/ o 3: a7bb357e7299 'commit1 amended' bookmark1-testhost | o 0: d20a80d4def3 'base' @@ -632,11 +630,10 @@ Clean up by hiding some commits, and create a new stack $ hg update d20a80d4def3 -q $ hg hide a7bb357e7299 hiding commit a7bb357e7299 "commit1 amended" - hiding commit 41f3b9359864 "commit2 amended" hiding commit 8134e74ecdc8 "commit2 amended amended" hiding commit fada67350ab0 "commit2 amended amended amended amended amended" hiding commit 68e035cc1996 "commit2 amended amended rebased amended rebased am" - 5 changesets hidden + 4 changesets hidden removing bookmark "bookmark1 (was at: 8134e74ecdc8)" removing bookmark "bookmark1-testhost (was at: a7bb357e7299)" 2 bookmarks removed diff --git a/eden/scm/tests/test-fb-hgext-smartlog-obsolete.t b/eden/scm/tests/test-fb-hgext-smartlog-obsolete.t index da8ce147b7..09519651c9 100644 --- a/eden/scm/tests/test-fb-hgext-smartlog-obsolete.t +++ b/eden/scm/tests/test-fb-hgext-smartlog-obsolete.t @@ -180,7 +180,5 @@ Hidden changesets are not considered as successors hint[strip-hide]: 'hg strip' may be deprecated in the future - use 'hg hide' instead hint[hint-ack]: use 'hg hint --ack strip-hide' to silence these hints $ hg log -T "{rev} {node|short} {amendsuccessors % '(amend as {short(amendsuccessor)}) '}\n" -G -r 'all()' - x 1 66f7d451a68b - | @ 0 1ea73414a91b