rustsec_admin/
lock.rs

1//! Utility functions for file locking
2
3use std::time::Duration;
4
5use tame_index::{index::FileLock, utils::flock::LockOptions};
6
7/// Acquires the Cargo package lock, or fails immediately
8pub fn acquire_cargo_package_lock() -> Result<FileLock, tame_index::Error> {
9    let lock_opts = LockOptions::cargo_package_lock(None)?.exclusive(false);
10    acquire_lock(lock_opts, Duration::from_secs(0))
11}
12
13/// Acquires the provided lock with a specified timeout
14pub fn acquire_lock(
15    lock_opts: LockOptions<'_>,
16    lock_timeout: Duration,
17) -> Result<FileLock, tame_index::Error> {
18    if lock_timeout == Duration::from_secs(0) {
19        lock_opts.try_lock()
20    } else {
21        lock_opts.lock(|_| Some(lock_timeout))
22    }
23}