mercurial/hg.py
changeset 11322 3d6915f5a2bb
parent 11312 3f1409082720
child 11544 be5e86c80628
--- a/mercurial/hg.py	Sun Jun 06 17:25:00 2010 +0900
+++ b/mercurial/hg.py	Thu Jun 10 12:46:09 2010 +0200
@@ -19,34 +19,45 @@
     return (os.path.isfile(path) and bundlerepo or localrepo)
 
 def addbranchrevs(lrepo, repo, branches, revs):
-    if not branches:
+    hashbranch, branches = branches
+    if not hashbranch and not branches:
         return revs or None, revs and revs[0] or None
     revs = revs and list(revs) or []
     if not repo.capable('branchmap'):
-        revs.extend(branches)
+        if branches:
+            raise util.Abort(_("remote branch lookup not supported"))
+        revs.append(hashbranch)
         return revs, revs[0]
     branchmap = repo.branchmap()
-    for branch in branches:
-        if branch == '.':
+
+    def primary(butf8):
+        if butf8 == '.':
             if not lrepo or not lrepo.local():
                 raise util.Abort(_("dirstate branch not accessible"))
             butf8 = lrepo.dirstate.branch()
-            branch = encoding.tolocal(butf8)
-        else:
-            butf8 = encoding.fromlocal(branch)
         if butf8 in branchmap:
             revs.extend(node.hex(r) for r in reversed(branchmap[butf8]))
+            return True
         else:
-            revs.append(branch)
+            return False
+
+    for branch in branches:
+        butf8 = encoding.fromlocal(branch)
+        if not primary(butf8):
+            raise error.RepoLookupError(_("unknown branch '%s'") % branch)
+    if hashbranch:
+        butf8 = encoding.fromlocal(hashbranch)
+        if not primary(butf8):
+            revs.append(hashbranch)
     return revs, revs[0]
 
 def parseurl(url, branches=None):
-    '''parse url#branch, returning url, branches+[branch]'''
+    '''parse url#branch, returning (url, (branch, branches))'''
 
     if '#' not in url:
-        return url, branches or []
+        return url, (None, branches or [])
     url, branch = url.split('#', 1)
-    return url, (branches or []) + [branch]
+    return url, (branch, branches or [])
 
 schemes = {
     'bundle': bundlerepo,