Replies: 1 comment 2 replies
-
Yep, that's how it currently works. I plan to add some delta encoding later, but it's not been much of a problem for me in my tiny repo. My repo currently has 11,700 operations. It takes 700 ms to list them, despite the simple format. There are only 43 heads, 1 local branch, one remote branch, and one git ref at the current operation head. That makes recent view objects about 1.2 KiB in size. However, there are many much larger view objects (up to 184 KiB) from before I removed evolution (because then all the old heads were also tracked in each view object). The total size is 725 MiB. By the way, regarding GC of the operation log, there's also no way of removing old operations yet (
I considered the revlog for a very short amount of time before I dismissed it :) The issue is that they can't be written to by concurrent processes (and are thus not And no, jj doesn't use revlogs for commits; it uses a very naive format similar to Git's loose object store. The nodes are not stored in the same format, but it's very similar (i.e. a naive content-addressed format with loose objects). |
Beta Was this translation helpful? Give feedback.
-
Re the tech docs here, good exposition! 94fda79
git-branchless also has an operation log, but it's only linear. I've been wondering how to implement syncing across multiple clients, and the outlined approach seems pretty good.
Is each node in the operation log represented as a snapshot on disk? If so, doesn't that mean there's relatively little sharing between each node (i.e. the node is copied entirely if a single branch is changed)?
Did you consider a revlog approach at all? (Does jj use a revlog for commits?) Are the nodes stored in the regular jj object storage?
Beta Was this translation helpful? Give feedback.
All reactions