# HG changeset patch # User Pierre-Yves David # Date 1358851154 -3600 # Node ID a2e9fe93d9eaba4ad2727d6bcde3afe3985ac00b # Parent 07771e233cf15724e8fc2112a4f23f5737bc5eed changectx: fix the handling of `tip` We can not use `len(repo,changelog)`, it may be a filtered revision. We now use `repo,changelog.tip()` to fetch this information. The `tip` command is also fixed and tested Thanks goes to Idan Kamara for the initial report. diff -r 07771e233cf1 -r a2e9fe93d9ea mercurial/commands.py --- a/mercurial/commands.py Tue Jan 22 03:23:02 2013 +0100 +++ b/mercurial/commands.py Tue Jan 22 11:39:14 2013 +0100 @@ -5866,7 +5866,7 @@ Returns 0 on success. """ displayer = cmdutil.show_changeset(ui, repo, opts) - displayer.show(repo[len(repo) - 1]) + displayer.show(repo['tip']) displayer.close() @command('unbundle', diff -r 07771e233cf1 -r a2e9fe93d9ea mercurial/context.py --- a/mercurial/context.py Tue Jan 22 03:23:02 2013 +0100 +++ b/mercurial/context.py Tue Jan 22 11:39:14 2013 +0100 @@ -44,8 +44,8 @@ self._rev = nullrev return if changeid == 'tip': - self._rev = len(repo.changelog) - 1 - self._node = repo.changelog.node(self._rev) + self._node = repo.changelog.tip() + self._rev = repo.changelog.rev(self._node) return if len(changeid) == 20: try: diff -r 07771e233cf1 -r a2e9fe93d9ea tests/test-obsolete.t --- a/tests/test-obsolete.t Tue Jan 22 03:23:02 2013 +0100 +++ b/tests/test-obsolete.t Tue Jan 22 11:39:14 2013 +0100 @@ -55,6 +55,17 @@ $ hg debugobsolete -d '0 0' `getid kill_me` -u babar $ hg debugobsolete 97b7c2d76b1845ed3eb988cd612611e72406cef0 0 {'date': '0 0', 'user': 'babar'} + +(test that mercurial is not confused) + + $ hg up null --quiet # having 0 as parent prevents it to be hidden + $ hg tip + changeset: -1:000000000000 + tag: tip + user: + date: Thu Jan 01 00:00:00 1970 +0000 + + $ hg up --hidden tip --quiet $ cd .. Killing a single changeset with replacement