diff --git a/Cargo.lock b/Cargo.lock index e58d642a..2a5a1cd5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -494,9 +494,9 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "subversion" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "983b4142950d7aebb44cc49386f1c1ae44d90ca6f966bd4963c9ab78b2797693" +checksum = "3b8f1b19f5ca2793d08ac42733be26164c11f4d496302a2c81c1613af0024c30" dependencies = [ "apr", "apr-sys", diff --git a/Cargo.toml b/Cargo.toml index ddafd3c6..6bc605d7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,5 +16,5 @@ edition = "2021" [workspace.dependencies] pyo3 = { version = "0.27" } #subversion = { version = ">=0.0.5" } -subversion = { version = "0.1.4" } +subversion = { version = "0.1.5" } pyo3-filelike = { version = "0.5" } diff --git a/wc/src/status.rs b/wc/src/status.rs index 127df90b..e6ec83ef 100644 --- a/wc/src/status.rs +++ b/wc/src/status.rs @@ -5,35 +5,95 @@ use pyo3::prelude::*; /// Working copy status for a node. #[pyclass(name = "Status", unsendable)] pub struct Status { - #[pyo3(get)] - pub kind: i32, - #[pyo3(get)] - pub depth: i32, - #[pyo3(get)] - pub filesize: i64, - #[pyo3(get)] - pub versioned: bool, - #[pyo3(get)] - pub repos_uuid: Option, - #[pyo3(get)] - pub repos_root_url: Option, - #[pyo3(get)] - pub repos_relpath: Option, + inner: subversion::wc::Status<'static>, } +#[pymethods] impl Status { - /// Create a Status from a subversion::wc::Status reference. - /// - /// Copies all fields since the SVN Status borrows from an APR pool. + #[getter] + fn node_status(&self) -> u32 { + self.inner.node_status() as u32 + } + + #[getter] + fn text_status(&self) -> u32 { + self.inner.text_status() as u32 + } + + #[getter] + fn prop_status(&self) -> u32 { + self.inner.prop_status() as u32 + } + + #[getter] + fn copied(&self) -> bool { + self.inner.copied() + } + + #[getter] + fn switched(&self) -> bool { + self.inner.switched() + } + + #[getter] + fn locked(&self) -> bool { + self.inner.locked() + } + + #[getter] + fn revision(&self) -> i64 { + self.inner.revision().as_i64() + } + + #[getter] + fn changed_rev(&self) -> i64 { + self.inner.changed_rev().as_i64() + } + + #[getter] + fn kind(&self) -> i32 { + self.inner.kind() + } + + #[getter] + fn depth(&self) -> i32 { + self.inner.depth() + } + + #[getter] + fn filesize(&self) -> i64 { + self.inner.filesize() + } + + #[getter] + fn versioned(&self) -> bool { + self.inner.versioned() + } + + #[getter] + fn repos_uuid(&self) -> Option { + self.inner.repos_uuid() + } + + #[getter] + fn repos_root_url(&self) -> Option { + self.inner.repos_root_url() + } + + #[getter] + fn repos_relpath(&self) -> Option { + self.inner.repos_relpath() + } +} + +impl Status { + /// Wrap an owned SVN Status. + pub fn from_owned(s: subversion::wc::Status<'static>) -> Self { + Self { inner: s } + } + + /// Dup a borrowed SVN Status into an owned copy. pub fn from_svn_status(s: &subversion::wc::Status<'_>) -> Self { - Self { - kind: s.kind(), - depth: s.depth(), - filesize: s.filesize(), - versioned: s.versioned(), - repos_uuid: s.repos_uuid(), - repos_root_url: s.repos_root_url(), - repos_relpath: s.repos_relpath(), - } + Self { inner: s.dup() } } }