--- a/hgext/rebase.py Wed Jan 28 02:28:39 2015 +0100
+++ b/hgext/rebase.py Tue Jan 27 12:33:56 2015 +0000
@@ -16,7 +16,7 @@
from mercurial import hg, util, repair, merge, cmdutil, commands, bookmarks
from mercurial import extensions, patch, scmutil, phases, obsolete, error
-from mercurial import copies
+from mercurial import copies, repoview
from mercurial.commands import templateopts
from mercurial.node import nullrev, nullid, hex, short
from mercurial.lock import release
@@ -778,6 +778,7 @@
def clearstatus(repo):
'Remove the status files'
+ _clearrebasesetvisibiliy(repo)
util.unlinkpath(repo.join("rebasestate"), ignoremissing=True)
def restorestatus(repo):
@@ -831,6 +832,7 @@
repo.ui.debug('computed skipped revs: %s\n' %
(' '.join(str(r) for r in sorted(skipped)) or None))
repo.ui.debug('rebase status resumed\n')
+ _setrebasesetvisibility(repo, state.keys())
return (originalwd, target, state, skipped,
collapse, keep, keepbranches, external, activebookmark)
except IOError, err:
@@ -892,6 +894,7 @@
dest: context
rebaseset: set of rev
'''
+ _setrebasesetvisibility(repo, rebaseset)
# This check isn't strictly necessary, since mq detects commits over an
# applied patch. But it prevents messing up the working directory when
@@ -1044,6 +1047,31 @@
raise util.Abort(_('--tool can only be used with --rebase'))
orig(ui, repo, *args, **opts)
+def _setrebasesetvisibility(repo, revs):
+ """store the currently rebased set on the repo object
+
+ This is used by another function to prevent rebased revision to because
+ hidden (see issue4505)"""
+ repo = repo.unfiltered()
+ revs = set(revs)
+ repo._rebaseset = revs
+ # invalidate cache if visibility changes
+ hiddens = repo.filteredrevcache.get('visible', set())
+ if revs & hiddens:
+ repo.invalidatevolatilesets()
+
+def _clearrebasesetvisibiliy(repo):
+ """remove rebaseset data from the repo"""
+ repo = repo.unfiltered()
+ if '_rebaseset' in vars(repo):
+ del repo._rebaseset
+
+def _rebasedvisible(orig, repo):
+ """ensure rebased revs stay visible (see issue4505)"""
+ blockers = orig(repo)
+ blockers.update(getattr(repo, '_rebaseset', ()))
+ return blockers
+
def summaryhook(ui, repo):
if not os.path.exists(repo.join('rebasestate')):
return
@@ -1062,7 +1090,7 @@
(len(state) - numrebased)))
def uisetup(ui):
- 'Replace pull with a decorator to provide --rebase option'
+ #Replace pull with a decorator to provide --rebase option
entry = extensions.wrapcommand(commands.table, 'pull', pullrebase)
entry[1].append(('', 'rebase', None,
_("rebase working directory to branch head")))
@@ -1072,3 +1100,6 @@
cmdutil.unfinishedstates.append(
['rebasestate', False, False, _('rebase in progress'),
_("use 'hg rebase --continue' or 'hg rebase --abort'")])
+ # ensure rebased rev are not hidden
+ extensions.wrapfunction(repoview, '_getdynamicblockers', _rebasedvisible)
+