2023-10-09 17:27:11 +00:00
|
|
|
// Copyright 2023 The Jujutsu Authors
|
|
|
|
//
|
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
// you may not use this file except in compliance with the License.
|
|
|
|
// You may obtain a copy of the License at
|
|
|
|
//
|
|
|
|
// https://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
//
|
|
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
// See the License for the specific language governing permissions and
|
|
|
|
// limitations under the License.
|
|
|
|
|
|
|
|
//! Defines the interface for the working copy. See `LocalWorkingCopy` for the
|
|
|
|
//! default local-disk implementation.
|
|
|
|
|
|
|
|
use std::any::Any;
|
|
|
|
use std::path::Path;
|
|
|
|
|
|
|
|
use crate::op_store::{OperationId, WorkspaceId};
|
|
|
|
|
|
|
|
/// The trait all working-copy implementations must implement.
|
|
|
|
pub trait WorkingCopy {
|
|
|
|
/// Should return `self`. For down-casting purposes.
|
|
|
|
fn as_any(&self) -> &dyn Any;
|
|
|
|
|
|
|
|
/// The name/id of the implementation. Used for choosing the right
|
|
|
|
/// implementation when loading a working copy.
|
|
|
|
fn name(&self) -> &str;
|
|
|
|
|
|
|
|
/// The working copy's root directory.
|
2023-10-12 21:36:16 +00:00
|
|
|
fn path(&self) -> &Path;
|
2023-10-09 17:27:11 +00:00
|
|
|
|
|
|
|
/// The working copy's workspace ID.
|
|
|
|
fn workspace_id(&self) -> &WorkspaceId;
|
|
|
|
|
|
|
|
/// The operation this working copy was most recently updated to.
|
|
|
|
fn operation_id(&self) -> &OperationId;
|
|
|
|
}
|