workspace-mgr 0.8.4

Fixed-policy repository workspace manager for coding agents
use std::fs::{self, File};

use crate::error::{IoContext, Result};
use crate::git::GitRepo;
use crate::local_state;

pub struct RepositoryLock {
    _file: File,
    _legacy_files: Vec<File>,
}

impl RepositoryLock {
    pub fn acquire(repo: &GitRepo) -> Result<Self> {
        let directory = local_state::directory_unmigrated(repo)?;
        fs::create_dir_all(&directory).at(&directory)?;
        let file = local_state::open_lock(&directory.join("repository.lock"), true)?;
        let legacy_files = local_state::migrate(repo, &directory)?;
        Ok(Self {
            _file: file,
            _legacy_files: legacy_files,
        })
    }
}