Augie Fackler avatar Augie Fackler committed d85c98f

remotebranches: avoid infinite recursion if a remote branch hash is missing

Includes a test.

Comments (0)

Files changed (3)

hg_remotebranches.py

                         line = line.strip()
                         if line:
                             hash, name = line.split(' ', 1)
-                            remotebranches[name] = olookup(hash)
+                            # look up the hash in the changelog directly
+                            # to avoid infinite recursion if the hash is bogus
+                            n = self.changelog._match(hash)
+                            if n:
+                                remotebranches[name] = n
                 return remotebranches
 
             def lookup(self, key):

tests/test-remotebranches

 echo
 echo % graph shows tags for the branch heads of each path
 hg log --graph
+
+echo
+echo % make sure bogus revisions in .hg/remotebranches do not break hg
+echo deadbeefdeadbeefdeadbeefdeadbeefdeadbeef default/default > .hg/remotebranches
+hg parents

tests/test-remotebranches.out

    date:        Thu Jan 01 00:00:00 1970 +0000
    summary:     add a
 
+
+% make sure bogus revisions in .hg/remotebranches do not break hg
+changeset:   6:ce61ec32ee23
+tag:         tip
+parent:      5:6d6442577283
+parent:      4:8948da77173b
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+summary:     merging stable
+
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.