radicle-surf

A code surfing library for VCS file systems 🏄‍♀️🏄‍♂️

Welcome to radicle-surf!

radicle-surf is a system to describe a file-system in a VCS world. We have the concept of files and directories, but these objects can change over time while people iterate on them. Thus, it is a file-system within history and we, the user, are viewing the file-system at a particular snapshot. Alongside this, we will wish to take two snapshots and view their differences.

Contributing

To get started on contributing you can check out our devloping guide, and also our LICENSE file.

The Community

Join our community disccussions at radicle.community!

Example

To a taste for the capabilities of radicle-surf we provide an example below, but we also keep our documentation and doc-tests up to date.

```rust use radiclesurf::vcs::git; use radiclesurf::filesystem::{Label, Path, SystemType}; use radiclesurf::filesystem::unsound; use prettyassertions::assert_eq; use std::str::FromStr;

// We're going to point to this repo. let repo = git::Repository::new("./data/git-platinum")?;

// Here we initialise a new Broswer for a the git repo. let mut browser = git::Browser::new(&repo, "master")?;

// Set the history to a particular commit let commit = git::Oid::from_str("80ded66281a4de2889cc07293a8f10947c6d57fe")?; browser.commit(commit)?;

// Get the snapshot of the directory for our current HEAD of history. let directory = browser.get_directory()?;

// Let's get a Path to the memory.rs file let memory = unsound::path::new("src/memory.rs");

// And assert that we can find it! assert!(directory.findfile(memory).issome());

let rootcontents = directory.listdirectory();

asserteq!(rootcontents, vec![ SystemType::file(unsound::label::new(".i-am-well-hidden")), SystemType::file(unsound::label::new(".i-too-am-hidden")), SystemType::file(unsound::label::new("README.md")), SystemType::directory(unsound::label::new("bin")), SystemType::directory(unsound::label::new("src")), SystemType::directory(unsound::label::new("text")), SystemType::directory(unsound::label::new("this")), ]);

let src = directory .finddirectory(Path::new(unsound::label::new("src"))) .expect("failed to find src"); let srccontents = src.list_directory();

asserteq!(srccontents, vec![ SystemType::file(unsound::label::new("Eval.hs")), SystemType::file(unsound::label::new("Folder.svelte")), SystemType::file(unsound::label::new("memory.rs")), ]); ```