-
-
Notifications
You must be signed in to change notification settings - Fork 313
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
octopus-merge (part 1: tree-editing) #1566
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
8 tasks
Otherwise, the `GIX_VERSION` environment variable is not available at build time, which can lead to runtime errors.
The buffer will now be previded from the free-list of the repository.
…st`. That way, one day we can turn this type into a compatible one which produce different kinds of hashes as well.
Byron
force-pushed
the
merge
branch
2 times, most recently
from
September 3, 2024 13:56
8e66591
to
2bfe350
Compare
Byron
commented
Sep 3, 2024
With it it's easy to alter existing trees or build entirely new ones, efficiently.
Byron
force-pushed
the
merge
branch
2 times, most recently
from
September 3, 2024 19:44
e1c4e66
to
6af2abc
Compare
Byron
force-pushed
the
merge
branch
6 times, most recently
from
September 4, 2024 20:55
cf15fd0
to
e8a9531
Compare
…y of entry names. Previously, it would allow null-bytes in the name which would corrupt the written tree. Now this is forbidden. For some reason, it disallowed newlines, but that is now allowed as validation is should be handled on a higher level.
It's faster throughout the board. ``` ❯ cargo bench -p [email protected] --bench edit-tree Compiling gix-object v0.44.0 (/Users/byron/dev/github.com/Byron/gitoxide/gix-object) Compiling gix-pack v0.53.0 (/Users/byron/dev/github.com/Byron/gitoxide/gix-pack) Compiling gix-odb v0.63.0 (/Users/byron/dev/github.com/Byron/gitoxide/gix-odb) Finished `bench` profile [optimized] target(s) in 5.97s Running benches/edit_tree.rs (target/release/deps/edit_tree-6af6651a1c453a05) Gnuplot not found, using plotters backend editor/small tree (empty -> full -> empty) time: [2.5972 µs 2.6019 µs 2.6075 µs] thrpt: [3.8351 Melem/s 3.8434 Melem/s 3.8503 Melem/s] change: time: [-32.618% -32.355% -32.038%] (p = 0.00 < 0.05) thrpt: [+47.142% +47.831% +48.409%] Performance has improved. Found 14 outliers among 100 measurements (14.00%) 13 (13.00%) high mild 1 (1.00%) high severe editor/deeply nested tree (empty -> full -> empty) time: [8.2019 µs 8.2079 µs 8.2145 µs] thrpt: [5.5998 Melem/s 5.6043 Melem/s 5.6084 Melem/s] change: time: [-33.517% -33.377% -33.246%] (p = 0.00 < 0.05) thrpt: [+49.804% +50.099% +50.415%] Performance has improved. Found 13 outliers among 100 measurements (13.00%) 8 (8.00%) high mild 5 (5.00%) high severe cursor/small tree (empty -> full -> empty) time: [2.6911 µs 2.6935 µs 2.6961 µs] thrpt: [3.7090 Melem/s 3.7127 Melem/s 3.7160 Melem/s] change: time: [-33.881% -33.546% -33.225%] (p = 0.00 < 0.05) thrpt: [+49.757% +50.480% +51.242%] Performance has improved. Found 14 outliers among 100 measurements (14.00%) 4 (4.00%) high mild 10 (10.00%) high severe cursor/deeply nested tree (empty -> full -> empty) time: [1.3616 µs 1.3631 µs 1.3649 µs] thrpt: [33.703 Melem/s 33.747 Melem/s 33.783 Melem/s] change: time: [-40.063% -39.675% -39.234%] (p = 0.00 < 0.05) thrpt: [+64.566% +65.769% +66.843%] Performance has improved. Found 20 outliers among 100 measurements (20.00%) 18 (18.00%) high mild 2 (2.00%) high severe ```
… way to get a fully-owned `Tree`
Create a tree editor using `Tree::edit()` or `Repository::edit_tree(id)`.
Byron
force-pushed
the
merge
branch
2 times, most recently
from
September 5, 2024 17:46
958edef
to
e738acc
Compare
An implementation of `Header`, `Write` and `Find`, that can optionally write everything to an in-memory store, and if enabled, also read objects back from there. That way it can present a consistent view to objects from two locations.
The default object database changed to a version that allows to keep objects in memory. This needs a mutable `Repository` instance to setup.
28 tasks
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Implement an octopus merge based on trees, and (mostly) equivalent to
merge-ORT
in Git.Related to gitbutlerapp/gitbutler#4793.
Tasks
gix
gix_validate::path::component()
Next PR
Research
Everything is about MergeORT.
git2::MergeOptions
.Handle Special Cases
Questions
Is
git2::merge_trees()
a trivial merge? Does it handle all the cases of MergeORT?How does rename-tracking affect a tree-merge?
How is an octopus merge implemented, particularly with Merge ORT?
References