view hgext/infinitepush/indexapi.py @ 39483:1fc39367eafd

httppeer: calculate total expected bytes correctly User-facing error messages that handled httplib.IncompleteRead errors in Mercurial used to look like this: abort: HTTP request error (incomplete response; expected 3 bytes got 1) But the errors that are being handled underneath the UI look like this: IncompleteRead(1 bytes read, 3 more expected) I.e. the error actually counts total number of expected bytes minus bytes already received. Before, users could see weird messages like "expected 10 bytes got 10", while in reality httplib expected 10 _more_ bytes (20 in total).
author Anton Shestakov <av6@dwimlabs.net>
date Sat, 08 Sep 2018 23:57:07 +0800
parents 03ff17a4bf53
children 2372284d9457
line wrap: on
line source

# Infinite push
#
# Copyright 2016 Facebook, Inc.
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.

from __future__ import absolute_import

class indexapi(object):
    """Class that manages access to infinitepush index.

    This class is a context manager and all write operations (like
    deletebookmarks, addbookmark etc) should use `with` statement:

      with index:
          index.deletebookmarks(...)
          ...
    """

    def __init__(self):
        """Initializes the metadata store connection."""

    def close(self):
        """Cleans up the metadata store connection."""

    def __enter__(self):
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        pass

    def addbundle(self, bundleid, nodesctx):
        """Takes a bundleid and a list of node contexts for each node
        in that bundle and records that."""
        raise NotImplementedError()

    def addbookmark(self, bookmark, node):
        """Takes a bookmark name and hash, and records mapping in the metadata
        store."""
        raise NotImplementedError()

    def addmanybookmarks(self, bookmarks):
        """Takes a dict with mapping from bookmark to hash and records mapping
        in the metadata store."""
        raise NotImplementedError()

    def deletebookmarks(self, patterns):
        """Accepts list of bookmarks and deletes them.
        """
        raise NotImplementedError()

    def getbundle(self, node):
        """Returns the bundleid for the bundle that contains the given node."""
        raise NotImplementedError()

    def getnode(self, bookmark):
        """Returns the node for the given bookmark. None if it doesn't exist."""
        raise NotImplementedError()

    def getbookmarks(self, query):
        """Returns bookmarks that match the query"""
        raise NotImplementedError()

    def saveoptionaljsonmetadata(self, node, jsonmetadata):
        """Saves optional metadata for a given node"""
        raise NotImplementedError()

class indexexception(Exception):
    pass