view rust/hg-core/src/dirstate.rs @ 50216:02bf2f94a04c stable

dirstate: test a `hg status` raced by a `hg add` This shows that `rhg` is misbehaving here.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Fri, 24 Feb 2023 16:12:01 +0100
parents b07465adbcc8
children e98fd81bb151
line wrap: on
line source

// dirstate module
//
// Copyright 2019 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 crate::dirstate_tree::on_disk::DirstateV2ParseError;
use crate::revlog::node::NULL_NODE;
use crate::revlog::Node;
use crate::utils::hg_path::HgPath;
use bytes_cast::BytesCast;

pub mod dirs_multiset;
pub mod entry;
pub mod parsers;
pub mod status;

pub use self::entry::*;

#[derive(Debug, PartialEq, Copy, Clone, BytesCast)]
#[repr(C)]
pub struct DirstateParents {
    pub p1: Node,
    pub p2: Node,
}

impl DirstateParents {
    pub const NULL: Self = Self {
        p1: NULL_NODE,
        p2: NULL_NODE,
    };

    pub fn is_merge(&self) -> bool {
        return !(self.p2 == NULL_NODE);
    }
}

pub type StateMapIter<'a> = Box<
    dyn Iterator<
            Item = Result<(&'a HgPath, DirstateEntry), DirstateV2ParseError>,
        > + Send
        + 'a,
>;

pub type CopyMapIter<'a> = Box<
    dyn Iterator<Item = Result<(&'a HgPath, &'a HgPath), DirstateV2ParseError>>
        + Send
        + 'a,
>;