Mercurial > hg
view hgext/infinitepush/indexapi.py @ 45945:50c5ee3bdf9a
copies: introduce the hg-cpython wrapper for `combine_changeset_copies`
This patch focus on the `hg-cpython` part of this work. Bridging the python code
with the new rust code in `hg-core`. The next patch will actually plug this in
the python code.
The rust code use multiple Python callback, python related error within this
callback are not expected unless they are a programming error or a data
corruption. In addition, these callback will slowly be replaced by native Rust
code. For these reasons, we use will deal with unexpected error within this
callback using rust Panic and let the `rust-cpython` layer deal with raising a
Python exception.
The code dealing with the ChangedFile instance is repeating itself a lot. I did
not factor these duplication out because that whole code will get replaced by
entirely different one in a handful of changesets.
Differential Revision: https://phab.mercurial-scm.org/D9298
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Thu, 01 Oct 2020 18:51:40 +0200 |
parents | 89a2afe31e82 |
children | 6000f5b25c9b |
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