Git Product home page Git Product logo

recursive-version-control-system's Issues

Support age encryption during export and import

The export and import commands allow you to write/read a subset of the versioned files to/from a zip file.

That, in turn, is used by the push and pull helper for local files.

We should integrate with the age encryption tool to allow those zip files to be encrypted, and correspondingly update the rvcs-push-file and rvcs-pull-file extensions to support this new encryption feature.

Create sign/verify helpers for sigstore

We should create sign/verify helpers that integrate with Sigstore.

At a minimum I would like to have some support for keyless signing similar to what https://github.com/wlynch/smimecosign provides for git.

Additionally, it might be good to have any other sign/verify helpers (such as the ones for SSH keys) write entries to the Rekor transparency log that can be later verified.

Add a command to cleanup the `.rvcs/archive` directory

Expected Behavior

The user's ~/.rvcs/archive directory only maintains the history that the user still cares about, and does not require an excessive amount of additional storage versus the user's actual file contents.

Actual Behavior

The user's ~/.rvcs/archive directory grows without bounds and contains full copies of every version of every file tracked.

Steps to Reproduce the Problem

To reproduce the issue of the directory growing without bound:

  1. Create a temporary directory
  2. Create a file within that directory
  3. Snapshot that file (but not the containing directory)
  4. Delete that file
  5. Snapshot the (now empty) temporary directory
  6. The snapshot of the now-deleted file will not be reachable from the snapshot of the directory, but it will also never be garbage collected.

To reproduce the issue of a full copy of every version of every file being retained:

  1. Create a temporary file
  2. Add some text to it
  3. Snapshot the file
  4. Add a single character to the end of the file
  5. Snapshot the file again
  6. There will be two separate entries under ~/.rvcs/archive/objects/ for the contents of the two different versions of the file which differ by only one character.

One way that we could fix both issues would be to add something like a rvcs cleanup command that would do the following:

  1. Traverse all of the paths under ~/.rvcs/archive/paths/, and find all of the objects reachable from those paths
  2. Add all of those reachable objects to a zip file stored under the ~/.rvcs/archive/ directory
  3. Remove the now-zipped objects from the ~/.rvcs/archive/objects/ directory
  4. Remove any objects from ~/.rvcs/archive/objects/ that were not reachable from any of the paths
  5. Similarly remove any entries from ~/.rvcs/archive/paths/ and ~/.rvcs/archive/cache that do not correspond to any currently mapped paths

For the last two steps, we would need to take extra care to make sure that we do not have any race conditions with simultaneous runs of the rvcs snapshot or rvcs merge commands.

Additionally, we would need to extend the tool to be able to read objects from the zip file under the ~/.rvcs/archive/ directory if they are not in the ~/.rvcs/archive/objects/ directory.

Contributing

Hello!
This is very interesting project. Can you create some easy issues and labels like 'good first issue' etc.?
I will be glad to contribute.

Support age encryption for the large-files portion of the archive

The rvcs local file storage uses two separate subdirectories for storing data:

  1. objects for objects less than 1MB in size.
  2. largeObjects for all objects larger than 1MB.

This is so that the largeObjects subdirectory can be made into a symlink pointing to an external storage service (such as an external drive or network-attached-storage), and prevent the rvcs archive from taking up all of the space on your local disk.

However, you probably want files to be encrypted before being written to an external storage system, so we should support that.

Add the ability to configure settings

We should add some sort of support for configuration settings.

Things that I can think of that would make for good options to have settings for:

  1. Paths to exclude from snapshotting. For example, you probably don't want to snapshot your ~/.Trash directory
  2. A block list of objects to always exclude from bundle exporting/importing
  3. A default hash function (when we eventually support more than just sha256)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.