# HG changeset patch # User Steve Losh <steve@stevelosh.com> # Date 2010-04-12 23:33:25 # Node ID ca739acf1a98f8c9ce889f798d0cd26344c6c3dd # Parent d1f4657f55e4a649808212c762743e90f84445d1 commands: add more robust support for 'hg log -b' (issue2078) Fixes issue2078 and adds tests to cover various 'hg log -b' uses. This change adds a localrepo.lookupbranch(key, remote=None) function. This will look up the branch of the revision with the given key. The algorithm works like this: * If a remote repo is given and KEY is the name of a branch in that repo, return KEY. * If no remote repo is given and KEY is the name of a branch in the local repo object, return KEY. * Otherwise look up the revision with the identifier KEY in the local repo and return its branch. This change also makes 'hg log -b' use this new functionality and adds a few tests for it. diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -2160,6 +2160,7 @@ def log(ui, repo, *pats, **opts): df = util.matchdate(opts["date"]) opts['branch'] += opts.get('only_branch') + opts['branch'] = [repo.lookupbranch(b) for b in opts['branch']] displayer = cmdutil.show_changeset(ui, repo, opts, True, matchfn) def prep(ctx, fns): diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -455,6 +455,14 @@ class localrepository(repo.repository): pass raise error.RepoLookupError(_("unknown revision '%s'") % key) + def lookupbranch(self, key, remote=None): + repo = remote or self + if key in repo.branchmap(): + return key + + repo = (remote and remote.local()) and remote or self + return repo[key].branch() + def local(self): return True diff --git a/tests/test-log b/tests/test-log --- a/tests/test-log +++ b/tests/test-log @@ -162,7 +162,19 @@ hg log -b test echo '% log -b dummy' hg log -b dummy +echo '% log -b .' +hg log -b . + echo '% log -b default -b test' hg log -b default -b test +echo '% log -b default -b .' +hg log -b default -b . + +echo '% log -b . -b test' +hg log -b . -b test + +echo '% log -b 2' +hg log -b 2 + exit 0 diff --git a/tests/test-log.out b/tests/test-log.out --- a/tests/test-log.out +++ b/tests/test-log.out @@ -360,6 +360,22 @@ date: Thu Jan 01 00:00:00 1970 +0 summary: commit on test % log -b dummy +abort: unknown revision 'dummy'! +% log -b . +changeset: 3:f5d8de11c2e2 +branch: test +tag: tip +parent: 1:d32277701ccb +user: test +date: Thu Jan 01 00:00:00 1970 +0000 +summary: commit on test + +changeset: 1:d32277701ccb +branch: test +user: test +date: Thu Jan 01 00:00:00 1970 +0000 +summary: commit on test + % log -b default -b test changeset: 3:f5d8de11c2e2 branch: test @@ -386,3 +402,56 @@ user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: commit on default +% log -b default -b . +changeset: 3:f5d8de11c2e2 +branch: test +tag: tip +parent: 1:d32277701ccb +user: test +date: Thu Jan 01 00:00:00 1970 +0000 +summary: commit on test + +changeset: 2:c3a4f03cc9a7 +parent: 0:24427303d56f +user: test +date: Thu Jan 01 00:00:00 1970 +0000 +summary: commit on default + +changeset: 1:d32277701ccb +branch: test +user: test +date: Thu Jan 01 00:00:00 1970 +0000 +summary: commit on test + +changeset: 0:24427303d56f +user: test +date: Thu Jan 01 00:00:00 1970 +0000 +summary: commit on default + +% log -b . -b test +changeset: 3:f5d8de11c2e2 +branch: test +tag: tip +parent: 1:d32277701ccb +user: test +date: Thu Jan 01 00:00:00 1970 +0000 +summary: commit on test + +changeset: 1:d32277701ccb +branch: test +user: test +date: Thu Jan 01 00:00:00 1970 +0000 +summary: commit on test + +% log -b 2 +changeset: 2:c3a4f03cc9a7 +parent: 0:24427303d56f +user: test +date: Thu Jan 01 00:00:00 1970 +0000 +summary: commit on default + +changeset: 0:24427303d56f +user: test +date: Thu Jan 01 00:00:00 1970 +0000 +summary: commit on default +