elfshaker
gitoxide
Our great sponsors
elfshaker | gitoxide | |
---|---|---|
12 | 84 | |
2,286 | 7,810 | |
0.4% | - | |
7.9 | 9.9 | |
2 months ago | 5 days ago | |
Rust | Rust | |
Apache License 2.0 | Apache License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
elfshaker
-
FOSS News International #4: November 22-28, 2021
elfshaker v0.9.0
- elfshaker: a low-footprint, high-performance version control system fine-tuned for binaries
-
Elfshaker: GiB – 100 MiB, with 1s access time
Author here. No architecture specific processing currently. Most of the magic happens in zstandard (hat tip to this amazing project).
Please see our new applicability section which explains the result in a bit more detail:
https://github.com/elfshaker/elfshaker/blob/1bedd4eacd3ddd83...
In manyclangs (which uses elfshaker for storage) we arrange that the object code has stable addresses when you do insertions/deletions, which means you don't need such a filter. But today I learned about such filters, so thanks for sharing your question!
One of the authors here, thanks for the feedback. We've tried to improve it here: https://github.com/elfshaker/elfshaker/pull/59
Same here. There is a usage guide, which helped a tiny bit: https://github.com/elfshaker/elfshaker/blob/main/docs/users/...
Honestly, I sort of looked at it for conventional backup strategy...as in, i wonder if it could work as a replacement for tar-zipping up a directory, etc. But, not sure if the use cases is appropriate.
We've just added an applicability section, which explains a bit more what we do. We don't have any ELF specific heuristics.
https://github.com/elfshaker/elfshaker#applicability
In summary, for manyclangs, we compile with -ffunction-sections and -fdata-sections, and store the resulting object files. These are fairly robust to insertions and deletions, since the addresses are section relative, so the damage of any addresses changing is contained within the sections. A somewhat surprising thing is that this works well enough when building many revisions of clang/llvm -- as you go from commit to commit, many commits have bit identical object files, even though the build system often wants to rebuild them because some input has changed.
elfshaker packs use a heuristic of sorting all unique objects by size, before concatenating them and storing them with zstandard. This gives us an amortized cost-per-commit of something like 40kiB after compression with zstandard.
gitoxide
-
What are you rewriting in rust?
But I'd suggest joining an existing project instead. This week in Rust has a call for participation section each week. There are also some exciting rewrites like arti, gitoxide, fish, and a steady stream of projects announced in this sub.
- [Gitoxide in April] A first step towards `gix status` and `.gitattributes` matching
- [Gitoxide in March]: `cargo` shallow clones PR and `gitoxide` in `cargo` nightly
-
What’s an actual use case for Rust
There's a re-implementation of git called gitoxide
- [Gitoxide in February]: `git-repository` is now `gix`, and statically known git-config keys
-
The Git source code audit, viewed as a Rust programmer
Gitoxide is useful in other Rust programs that need git integration, e.g. Cargo[1] or Helix[2].
I don't know how far he intends to take it, but the author of gitoxide (which is just a library, like libgit2) uses it to power a git CLI called gix. As of October it looks like it can do fetches and clones: https://github.com/Byron/gitoxide/discussions/623 .
Since the git CLI is subcommand-based, it wouldn't be too hard to provide replacements for individual git subcommands one at a time.
It'll be interesting to see where the gitoxide[1] project goes, being a rust implementation of git
-
The most creative, funny, clever, ridiculous, ... library names!
gitoxide, because, well, everything around rust is kind-of low-hanging fruit of puns to make
-
What’s everyone working on this week (1/2023)?
After having used the gitoxide lib in bacon last week so that ignored files don't trigger jobs on change, I'll try to see whether I can replace git2 with gitoxide in a few other applications. Gitoxide lib is still a little rough in parts but I really like when I can replace a native lib with a pure Rust one.
What are some alternatives?
EdenSCM - A Scalable, User-Friendly Source Control System. [Moved to: https://github.com/facebook/sapling]
ht - Friendly and fast tool for sending HTTP requests
libgit2 - A cross-platform, linkable library implementation of Git that you can use in your application.
Symphonia - Pure Rust multimedia format demuxing, tag reading, and audio decoding library
freenet-core - Declare your digital independence
delta - A syntax-highlighting pager for git, diff, and grep output
CompactGUI - Transparently compress active games and programs using Windows 10/11 APIs [Moved to: https://github.com/IridiumIO/CompactGUI]
cloneit - A cli tool to download specific GitHub directories or files
volta - Volta: JS Toolchains as Code. ⚡
awesome-rewrite-it-in-rust - A curated list of replacements for existing software written in Rust [Moved to: https://github.com/TaKO8Ki/awesome-alternatives-in-rust]
rust-0bsd-riscv-kernel - A RISC-V kernel written in Rust, placed in the public domain.
wasm-bindgen - Facilitating high-level interactions between Wasm modules and JavaScript