13 unstable releases (5 breaking)

new 0.5.3 Nov 26, 2020
0.5.2 Nov 24, 2020
0.5.0 Oct 19, 2020
0.4.1 Jul 15, 2020
0.0.1 Jan 13, 2020

#105 in Filesystem

Download history 51/week @ 2020-08-06 68/week @ 2020-08-13 70/week @ 2020-08-20 83/week @ 2020-08-27 68/week @ 2020-09-03 58/week @ 2020-09-10 84/week @ 2020-09-17 52/week @ 2020-09-24 50/week @ 2020-10-01 60/week @ 2020-10-08 110/week @ 2020-10-15 100/week @ 2020-10-22 42/week @ 2020-10-29 15/week @ 2020-11-05 43/week @ 2020-11-12 59/week @ 2020-11-19

270 downloads per month

GPL-3.0-or-later

245KB
4.5K SLoC

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.

use radicle_surf::vcs::git;
use radicle_surf::file_system::{Label, Path, SystemType};
use radicle_surf::file_system::unsound;
use pretty_assertions::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.find_file(memory).is_some());

let root_contents = directory.list_directory();

assert_eq!(root_contents, 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
    .find_directory(Path::new(unsound::label::new("src")))
    .expect("failed to find src");
let src_contents = src.list_directory();

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

Dependencies

~14MB
~342K SLoC