diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -1978,7 +1978,10 @@ def parents(ui, repo, file_=None, **opts """ rev = opts.get('rev') if file_: - ctx = repo.filectx(file_, changeid=rev) + files, match, anypats = cmdutil.matchpats(repo, (file_,), opts) + if anypats or len(files) != 1: + raise util.Abort(_('can only specify an explicit file name')) + ctx = repo.filectx(files[0], changeid=rev) elif rev: ctx = repo.changectx(rev) else: diff --git a/tests/test-parents b/tests/test-parents --- a/tests/test-parents +++ b/tests/test-parents @@ -1,8 +1,8 @@ #!/bin/sh # test parents command -hg init a -cd a +hg init repo +cd repo echo % no working directory hg parents @@ -25,3 +25,20 @@ hg parents -r 2 echo % hg parents -r 2 a hg parents -r 2 a + +echo % hg parents -r 2 ../a +hg parents -r 2 ../a + +echo '% cd dir; hg parents -r 2 ../a' +mkdir dir +cd dir +hg parents -r 2 ../a + +echo '% hg parents -r 2 path:a' +hg parents -r 2 path:a + +echo '% hg parents -r 2 glob:a' +cd .. +hg parents -r 2 glob:a + +true diff --git a/tests/test-parents.out b/tests/test-parents.out --- a/tests/test-parents.out +++ b/tests/test-parents.out @@ -26,3 +26,19 @@ user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: ab +% hg parents -r 2 ../a +abort: ../a not under root +% cd dir; hg parents -r 2 ../a +changeset: 0:b6a1406d8886 +user: test +date: Thu Jan 01 00:00:00 1970 +0000 +summary: ab + +% hg parents -r 2 path:a +changeset: 0:b6a1406d8886 +user: test +date: Thu Jan 01 00:00:00 1970 +0000 +summary: ab + +% hg parents -r 2 glob:a +abort: can only specify an explicit file name