diff -r 662ea52d5dca -r 663fbc336e22 mercurial/ui.py --- a/mercurial/ui.py Mon Sep 07 21:58:17 2015 +0900 +++ b/mercurial/ui.py Sun Sep 06 11:28:48 2015 -0700 @@ -550,9 +550,21 @@ def expandpath(self, loc, default=None): """Return repository location relative to cwd or from [paths]""" - p = self.paths.getpath(loc, default=default) - if p: - return p.rawloc + try: + p = self.paths.getpath(loc) + if p: + return p.rawloc + except error.RepoError: + pass + + if default: + try: + p = self.paths.getpath(default) + if p: + return p.rawloc + except error.RepoError: + pass + return loc @util.propertycache @@ -1014,9 +1026,24 @@ ``name`` can be a named path or locations. Locations are filesystem paths or URIs. - Returns the first of ``name`` or ``default`` that is present, or None - if neither is present. + Returns None if ``name`` is not a registered path, a URI, or a local + path to a repo. """ + # Only fall back to default if no path was requested. + if name is None: + if default: + try: + return self[default] + except KeyError: + return None + else: + return None + + # Most likely empty string. + # This may need to raise in the future. + if not name: + return None + try: return self[name] except KeyError: @@ -1024,15 +1051,10 @@ try: return path(None, rawloc=name) except ValueError: - pass + raise error.RepoError(_('repository %s does not exist') % + name) - if default is not None: - try: - return self[default] - except KeyError: - pass - - return None + assert False class path(object): """Represents an individual path and its configuration."""