##// END OF EJS Templates
packaging: split Inno installer building from Mercurial building...
packaging: split Inno installer building from Mercurial building We want to make the logic for producing the installer agnostic about how Mercurial is built to allow for alternate build methods (like PyOxidizer). Differential Revision: https://phab.mercurial-scm.org/D8472

File last commit:

r44899:5f9de600 default
r45269:eec66d9c stable
Show More
non_normal_entries.rs
76 lines | 2.3 KiB | application/rls-services+xml | RustLexer
/ rust / hg-cpython / src / dirstate / non_normal_entries.rs
Raphaël Gomès
rust-dirstatemap: add `NonNormalEntries` class...
r44779 // non_normal_other_parent_entries.rs
//
// Copyright 2020 Raphaël Gomès <rgomes@octobus.net>
//
// This software may be used and distributed according to the terms of the
// GNU General Public License version 2 or any later version.
use cpython::{
Raphaël Gomès
rust-cpython: make `NonNormalEntires` iterable to fix `fsmonitor` (issue6276)...
r44903 exc::NotImplementedError, CompareOp, ObjectProtocol, PyBytes, PyClone,
PyErr, PyList, PyObject, PyResult, PyString, Python, PythonObject,
ToPyObject, UnsafePyLeaked,
Raphaël Gomès
rust-dirstatemap: add `NonNormalEntries` class...
r44779 };
use crate::dirstate::DirstateMap;
Raphaël Gomès
rust-cpython: make `NonNormalEntires` iterable to fix `fsmonitor` (issue6276)...
r44903 use hg::utils::hg_path::HgPathBuf;
use std::cell::RefCell;
use std::collections::hash_set;
Raphaël Gomès
rust-dirstatemap: add `NonNormalEntries` class...
r44779
py_class!(pub class NonNormalEntries |py| {
data dmap: DirstateMap;
def __contains__(&self, key: PyObject) -> PyResult<bool> {
self.dmap(py).non_normal_entries_contains(py, key)
}
def remove(&self, key: PyObject) -> PyResult<PyObject> {
self.dmap(py).non_normal_entries_remove(py, key)
}
def union(&self, other: PyObject) -> PyResult<PyList> {
self.dmap(py).non_normal_entries_union(py, other)
}
def __richcmp__(&self, other: PyObject, op: CompareOp) -> PyResult<bool> {
match op {
CompareOp::Eq => self.is_equal_to(py, other),
CompareOp::Ne => Ok(!self.is_equal_to(py, other)?),
_ => Err(PyErr::new::<NotImplementedError, _>(py, ""))
}
}
def __repr__(&self) -> PyResult<PyString> {
self.dmap(py).non_normal_entries_display(py)
}
Raphaël Gomès
rust-cpython: make `NonNormalEntires` iterable to fix `fsmonitor` (issue6276)...
r44903
def __iter__(&self) -> PyResult<NonNormalEntriesIterator> {
self.dmap(py).non_normal_entries_iter(py)
}
Raphaël Gomès
rust-dirstatemap: add `NonNormalEntries` class...
r44779 });
impl NonNormalEntries {
pub fn from_inner(py: Python, dm: DirstateMap) -> PyResult<Self> {
Self::create_instance(py, dm)
}
fn is_equal_to(&self, py: Python, other: PyObject) -> PyResult<bool> {
for item in other.iter(py)? {
if !self.dmap(py).non_normal_entries_contains(py, item?)? {
return Ok(false);
}
}
Ok(true)
}
Raphaël Gomès
rust-cpython: make `NonNormalEntires` iterable to fix `fsmonitor` (issue6276)...
r44903
fn translate_key(
py: Python,
key: &HgPathBuf,
) -> PyResult<Option<PyBytes>> {
Ok(Some(PyBytes::new(py, key.as_ref())))
}
Raphaël Gomès
rust-dirstatemap: add `NonNormalEntries` class...
r44779 }
Raphaël Gomès
rust-cpython: make `NonNormalEntires` iterable to fix `fsmonitor` (issue6276)...
r44903
type NonNormalEntriesIter<'a> = hash_set::Iter<'a, HgPathBuf>;
py_shared_iterator!(
NonNormalEntriesIterator,
UnsafePyLeaked<NonNormalEntriesIter<'static>>,
NonNormalEntries::translate_key,
Option<PyBytes>
);