##// END OF EJS Templates
configitems: enable changegroup3 by default (unless using infinitepush)...
configitems: enable changegroup3 by default (unless using infinitepush) The LFS extension requires this, and if it isn't enabled on the client (or the LFS extension isn't loaded), a web client gets a 500 instead of a sensible error message. Now it gets a different (client) error, but maybe it can be handled more gracefully. c0f11347b107 indicates that treemanifest repos have this issue too. 29cfc474c5fd mentions gating this behind `experimental` so that the format could change, but that was 7 years ago and we now have an experimental `changegroup4` as well. We can keep this as a config for the next cycle in case someone runs into an unexpected problem, and then jettison it if the infinitepush bundle name changes are either acceptable as-is or can be created differently.

File last commit:

r51147:a6b8b1ab merge default
r51176:2cf264e9 default
Show More
owning.rs
104 lines | 2.5 KiB | application/rls-services+xml | RustLexer
Raphaël Gomès
rust: fix unsound `OwningDirstateMap`...
r49864 use crate::{DirstateError, DirstateParents};
Simon Sapin
rust: Make OwningDirstateMap generic and move it into hg-core...
r48766 use super::dirstate_map::DirstateMap;
use std::ops::Deref;
Raphaël Gomès
rust: fix unsound `OwningDirstateMap`...
r49864 use ouroboros::self_referencing;
Raphaël Gomès
rust: explain why the current `OwningDirstateMap` is unsound...
r49863
Simon Sapin
rust: Make OwningDirstateMap generic and move it into hg-core...
r48766 /// Keep a `DirstateMap<'on_disk>` next to the `on_disk` buffer that it
/// borrows.
Raphaël Gomès
rust: fix unsound `OwningDirstateMap`...
r49864 #[self_referencing]
Simon Sapin
rust: Make OwningDirstateMap generic and move it into hg-core...
r48766 pub struct OwningDirstateMap {
on_disk: Box<dyn Deref<Target = [u8]> + Send>,
Raphaël Gomès
rust: fix unsound `OwningDirstateMap`...
r49864 #[borrows(on_disk)]
#[covariant]
map: DirstateMap<'this>,
Simon Sapin
rust: Make OwningDirstateMap generic and move it into hg-core...
r48766 }
impl OwningDirstateMap {
pub fn new_empty<OnDisk>(on_disk: OnDisk) -> Self
where
Raphaël Gomès
rust: fix unsound `OwningDirstateMap`...
r49864 OnDisk: Deref<Target = [u8]> + Send + 'static,
Simon Sapin
rust: Make OwningDirstateMap generic and move it into hg-core...
r48766 {
let on_disk = Box::new(on_disk);
Raphaël Gomès
rust: fix unsound `OwningDirstateMap`...
r49864 OwningDirstateMapBuilder {
on_disk,
Raphaël Gomès
rust-clippy: fix most warnings in `hg-core`...
r50825 map_builder: |bytes| DirstateMap::empty(bytes),
Raphaël Gomès
rust: fix unsound `OwningDirstateMap`...
r49864 }
.build()
Simon Sapin
rust: Make OwningDirstateMap generic and move it into hg-core...
r48766 }
Raphaël Gomès
rust: fix unsound `OwningDirstateMap`...
r49864 pub fn new_v1<OnDisk>(
on_disk: OnDisk,
Raphaël Gomès
rhg: remember the inode of .hg/dirstate...
r51140 identity: Option<u64>,
Raphaël Gomès
rust: fix unsound `OwningDirstateMap`...
r49864 ) -> Result<(Self, DirstateParents), DirstateError>
where
OnDisk: Deref<Target = [u8]> + Send + 'static,
{
let on_disk = Box::new(on_disk);
let mut parents = DirstateParents::NULL;
Simon Sapin
rust: Make OwningDirstateMap generic and move it into hg-core...
r48766
Raphaël Gomès
rust: fix unsound `OwningDirstateMap`...
r49864 Ok((
OwningDirstateMapTryBuilder {
on_disk,
map_builder: |bytes| {
branching: merge stable into default...
r51147 DirstateMap::new_v1(bytes, identity).map(|(dmap, p)| {
Raphaël Gomès
rust: fix unsound `OwningDirstateMap`...
r49864 parents = p.unwrap_or(DirstateParents::NULL);
dmap
})
},
}
.try_build()?,
parents,
))
Simon Sapin
rust: Make OwningDirstateMap generic and move it into hg-core...
r48766 }
Raphaël Gomès
rust: fix unsound `OwningDirstateMap`...
r49864 pub fn new_v2<OnDisk>(
on_disk: OnDisk,
data_size: usize,
metadata: &[u8],
Raphaël Gomès
rust-dirstate: remember the data file uuid dirstate was loaded with...
r51138 uuid: Vec<u8>,
Raphaël Gomès
rhg: remember the inode of .hg/dirstate...
r51140 identity: Option<u64>,
Raphaël Gomès
rust: fix unsound `OwningDirstateMap`...
r49864 ) -> Result<Self, DirstateError>
where
OnDisk: Deref<Target = [u8]> + Send + 'static,
{
let on_disk = Box::new(on_disk);
OwningDirstateMapTryBuilder {
on_disk,
map_builder: |bytes| {
branching: merge stable into default...
r51147 DirstateMap::new_v2(bytes, data_size, metadata, uuid, identity)
Raphaël Gomès
rust: fix unsound `OwningDirstateMap`...
r49864 },
}
.try_build()
Simon Sapin
rust: Make OwningDirstateMap generic and move it into hg-core...
r48766 }
Raphaël Gomès
rust: fix unsound `OwningDirstateMap`...
r49864 pub fn with_dmap_mut<R>(
&mut self,
f: impl FnOnce(&mut DirstateMap) -> R,
) -> R {
self.with_map_mut(f)
}
pub fn get_map(&self) -> &DirstateMap {
self.borrow_map()
}
pub fn on_disk(&self) -> &[u8] {
self.borrow_on_disk()
Simon Sapin
rust: Make OwningDirstateMap generic and move it into hg-core...
r48766 }
Raphaël Gomès
rust-dirstate: remember the data file uuid dirstate was loaded with...
r51138
pub fn old_uuid(&self) -> Option<&[u8]> {
self.get_map().old_uuid.as_deref()
}
Raphaël Gomès
rhg: remember the inode of .hg/dirstate...
r51140 pub fn old_identity(&self) -> Option<u64> {
self.get_map().identity
}
Raphaël Gomès
rust-dirstate: remember the data file uuid dirstate was loaded with...
r51138 pub fn old_data_size(&self) -> usize {
self.get_map().old_data_size
}
Simon Sapin
rust: Make OwningDirstateMap generic and move it into hg-core...
r48766 }