mirror of
https://github.com/facebook/sapling.git
synced 2024-10-06 23:07:18 +03:00
visibility: add shelve support
Summary: Shelve uses hidden commits to store shelved changes. These need to be made invisible, too. Differential Revision: D15079352 fbshipit-source-id: 6063270d18df81d9b4af7823542a38c5feb45e3a
This commit is contained in:
parent
984af7d7fe
commit
af2e53abb0
@ -50,6 +50,7 @@ from edenscm.mercurial import (
|
||||
templatefilters,
|
||||
util,
|
||||
vfs as vfsmod,
|
||||
visibility,
|
||||
)
|
||||
from edenscm.mercurial.i18n import _
|
||||
|
||||
@ -314,9 +315,7 @@ class shelvedstate(object):
|
||||
def removenodes(self, ui, repo):
|
||||
"""Cleanup temporary nodes from the repo"""
|
||||
if self.obsshelve:
|
||||
unfi = repo.unfiltered()
|
||||
relations = [(unfi[n], ()) for n in self.nodestoremove]
|
||||
obsolete.createmarkers(repo, relations)
|
||||
_hidenodes(repo, self.nodestoremove)
|
||||
else:
|
||||
repair.strip(ui, repo, self.nodestoremove, backup=False, topic="shelve")
|
||||
|
||||
@ -533,7 +532,7 @@ def _docreatecmd(ui, repo, pats, opts):
|
||||
_nothingtoshelvemessaging(ui, repo, pats, opts)
|
||||
return 1
|
||||
|
||||
obsolete.createmarkers(repo, [(repo.unfiltered()[node], ())])
|
||||
_hidenodes(repo, [node])
|
||||
except (KeyboardInterrupt, Exception):
|
||||
if activebookmark:
|
||||
bookmarks.activate(repo, activebookmark)
|
||||
@ -981,16 +980,21 @@ def _checkunshelveuntrackedproblems(ui, repo, shelvectx):
|
||||
def _obsoleteredundantnodes(repo, tr, pctx, shelvectx, tmpwctx):
|
||||
# order is important in the list of [shelvectx, tmpwctx] below
|
||||
# some nodes may already be obsolete
|
||||
toobsolete = []
|
||||
if shelvectx != pctx:
|
||||
toobsolete.append(shelvectx)
|
||||
if tmpwctx not in (pctx, shelvectx):
|
||||
toobsolete.append(tmpwctx)
|
||||
_hidenodes(repo, [ctx.node() for ctx in toobsolete])
|
||||
|
||||
|
||||
def _hidenodes(repo, nodes):
|
||||
unfi = repo.unfiltered()
|
||||
nodestoobsolete = filter(lambda x: x != pctx, [shelvectx, tmpwctx])
|
||||
seen = set()
|
||||
relations = []
|
||||
for nto in nodestoobsolete:
|
||||
if nto in seen:
|
||||
continue
|
||||
seen.add(nto)
|
||||
relations.append((unfi[nto.rev()], ()))
|
||||
obsolete.createmarkers(unfi, relations)
|
||||
if obsolete.isenabled(repo, obsolete.createmarkersopt):
|
||||
markers = [(unfi[n], ()) for n in nodes]
|
||||
obsolete.createmarkers(repo, markers)
|
||||
if visibility.tracking(repo):
|
||||
visibility.remove(repo, nodes)
|
||||
|
||||
|
||||
@command(
|
||||
|
@ -1,4 +1,4 @@
|
||||
$ enable amend rebase undo directaccess
|
||||
$ enable amend rebase undo directaccess shelve
|
||||
$ setconfig experimental.evolution=
|
||||
$ setconfig visibility.enabled=true
|
||||
$ setconfig mutation.record=true mutation.enabled=true mutation.date="0 0"
|
||||
@ -521,3 +521,58 @@ Test that hiddenoverride has no effect on pinning hidden revisions.
|
||||
|
|
||||
o 0: 48b9aae0607f 'Z'
|
||||
|
||||
Test that shelve and unshelve work
|
||||
$ echo more > file
|
||||
$ hg add file
|
||||
$ hg st
|
||||
A file
|
||||
$ hg shelve
|
||||
shelved as default
|
||||
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
||||
$ hg st
|
||||
$ tglogm
|
||||
@ 6: a77c932a84af 'F'
|
||||
|
|
||||
o 5: 05eb30556340 'E'
|
||||
|
|
||||
o 0: 48b9aae0607f 'Z'
|
||||
|
||||
$ hg prev
|
||||
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
||||
[05eb30] E
|
||||
$ hg unshelve --keep
|
||||
unshelving change 'default'
|
||||
rebasing shelved changes
|
||||
rebasing 7:f321a4a9343c "shelve changes to: F" (tip)
|
||||
$ hg st
|
||||
A file
|
||||
$ tglogm
|
||||
o 6: a77c932a84af 'F'
|
||||
|
|
||||
@ 5: 05eb30556340 'E'
|
||||
|
|
||||
o 0: 48b9aae0607f 'Z'
|
||||
|
||||
$ hg prev --clean
|
||||
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
||||
[48b9aa] Z
|
||||
$ echo data > other
|
||||
$ hg add other
|
||||
$ hg st
|
||||
A other
|
||||
? file
|
||||
$ hg unshelve
|
||||
unshelving change 'default'
|
||||
temporarily committing pending changes (restore with 'hg unshelve --abort')
|
||||
rebasing shelved changes
|
||||
rebasing 7:f321a4a9343c "shelve changes to: F"
|
||||
$ hg st
|
||||
A file
|
||||
A other
|
||||
$ tglogm
|
||||
o 6: a77c932a84af 'F'
|
||||
|
|
||||
o 5: 05eb30556340 'E'
|
||||
|
|
||||
@ 0: 48b9aae0607f 'Z'
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user