Skip to main content

LockFile

Struct LockFile 

Source
pub struct LockFile {
    pub dependencies: BTreeMap<String, LockFileDep>,
    pub packages: BTreeMap<EntryName, LockFileEntry>,
}
Expand description

A lock file, specifying versions and names for all recursive dependencies.

This defines the on-disk format for lock files.

§Open question

There’s one big open question about the lock file: should it contain information about path dependencies (and their recursive dependencies)? If it does, you can immediately derive the PackageMap from the lock file, meaning that if the interpreter gets the lock file then it can do everything else from there, without doing any package resolution. So that’s nice.

The problem with putting information about path dependencies in the lock file is that path dependencies can change without notice, making the lock file stale. So the interpreter didn’t have to do much work, but it ended up running on old information.

I think the decision here basically comes down to what we want from the CLI interface. If we require a separate update-the-lock-file step (a la npm or poetry), it makes sense to put the path dependency info here. But if we want an auto-refresh step (a la cargo), we want to leave it out.

Fields§

§dependencies: BTreeMap<String, LockFileDep>

The dependencies of the current (top-level) package.

These should be sorted so that the serialization doesn’t change all the time.

§packages: BTreeMap<EntryName, LockFileEntry>

All packages that we know about, and the dependencies of each one.

Note that the package list is not guaranteed to be closed: path dependencies cannot have their dependencies resolved in the on-disk lockfile because they can change at any time. Some path dependencies (for example, path dependencies that are local to a git dependency repo) may have resolved dependencies.

Implementations§

Source§

impl LockFile

Source

pub fn empty() -> Self

Source

pub fn new( manifest: &ManifestFile, resolution: &Resolution, ) -> Result<Self, Error>

Source

pub fn from_path(path: impl AsRef<Path>) -> Result<Self, Error>

Read a lock file from disk.

Source

pub fn write(&self, path: &Path) -> Result<(), Error>

Write out this lock file to the filesystem.

Source

pub fn dependency<'a>( &'a self, entry: Option<&'a LockFileEntry>, name: &str, ) -> Option<&'a LockFileDep>

Trait Implementations§

Source§

impl Clone for LockFile

Source§

fn clone(&self) -> LockFile

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for LockFile

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for LockFile

Source§

fn default() -> LockFile

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for LockFile

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Eq for LockFile

Source§

impl PartialEq for LockFile

Source§

fn eq(&self, other: &LockFile) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for LockFile

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for LockFile

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T, U> ExactFrom<T> for U
where U: TryFrom<T>,

Source§

fn exact_from(value: T) -> U

Source§

impl<T, U> ExactInto<U> for T
where U: ExactFrom<T>,

Source§

fn exact_into(self) -> U

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T, U> OverflowingInto<U> for T
where U: OverflowingFrom<T>,

Source§

impl<T, U> RoundingInto<U> for T
where U: RoundingFrom<T>,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> SaturatingInto<U> for T
where U: SaturatingFrom<T>,

Source§

impl<'ast, S, T> ToAst<'ast, T> for S
where T: FromMainline<'ast, S>,

Source§

fn to_ast(&self, alloc: &'ast AstAlloc, pos_table: &PosTable) -> T

Source§

impl<T> ToDebugString for T
where T: Debug,

Source§

fn to_debug_string(&self) -> String

Returns the String produced by Ts Debug implementation.

§Examples
use malachite_base::strings::ToDebugString;

assert_eq!([1, 2, 3].to_debug_string(), "[1, 2, 3]");
assert_eq!(
    [vec![2, 3], vec![], vec![4]].to_debug_string(),
    "[[2, 3], [], [4]]"
);
assert_eq!(Some(5).to_debug_string(), "Some(5)");
Source§

impl<S, T> ToMainline<T> for S
where T: FromAst<S>,

Source§

fn to_mainline(&self, pos_table: &mut PosTable) -> T

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryConvert<'_, T> for U
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

Source§

fn try_convert( _: &AstAlloc, from: T, ) -> Result<U, <U as TryConvert<'_, T>>::Error>

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T, U> WrappingInto<U> for T
where U: WrappingFrom<T>,

Source§

fn wrapping_into(self) -> U