D6023: branchcache: move loading of branch names and nodes into it's own function

Yuya Nishihara yuya at tcha.org
Mon Feb 25 17:56:59 EST 2019


>              if not bcache.validfor(repo):
>                  # invalidate the cache
>                  raise ValueError(r'tip differs')
> -            cl = repo.changelog
> -            for line in lineiter:
> -                line = line.rstrip('\n')
> -                if not line:
> -                    continue
> -                node, state, label = line.split(" ", 2)
> -                if state not in 'oc':
> -                    raise ValueError(r'invalid branch state')
> -                label = encoding.tolocal(label.strip())
> -                node = bin(node)
> -                if not cl.hasnode(node):
> -                    raise ValueError(
> -                        r'node %s does not exist' % pycompat.sysstr(hex(node)))
> -                bcache.setdefault(label, []).append(node)
> -                if state == 'c':
> -                    bcache._closednodes.add(node)
> -
> +            bcache.load(repo, f)
>          except (IOError, OSError):
>              return None
>  
> @@ -214,6 +198,26 @@
>  
>          return bcache
>  
> +    def load(self, repo, f):
> +        """ fully loads the branchcache by reading from the file f """
> +        cl = repo.changelog
> +        lineiter = iter(f)

Breaks test-static-http.t probably because `f` is read twice through
different iterators.


More information about the Mercurial-devel mailing list