aboutsummaryrefslogtreecommitdiff
path: root/apps/servers/octopus/supergit (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Revert "supergit: work on implementing branching iterators"Katharina Fey2021-01-091-209/+10
| | | | | | | | | | | | | | | | | | This commit reverts the following commits: * b2681a59d5dfae8afed0a6a8d46210133667532c. * a35411dc74c436b8c31878304e8d5447862e1dfe. As already mentioned in the commit message of a2513a, this design decision turned out to be a bad one: instead of having the iterator abstraction branch internally, an API is required to control the flow of iterators externally. This way users can opt-into complexity, instead of having to opt-out. I opted to revert the commits, instead of trying to untangle all the changes made in these two commits, to avoid breaking any of the code. Signed-off-by: Katharina Fey <kookie@spacekookie.de>
* supergit: add logo and rebuild READMEKatharina Fey2021-01-094-7/+37
|
* supergit: bump crate versionKatharina Fey2021-01-091-2/+2
|
* supergit: update crate documentationKatharina Fey2021-01-092-39/+50
|
* supergit: fix base_history functionKatharina Fey2021-01-091-36/+18
|
* supergit: implement typed directory yieldsKatharina Fey2021-01-082-17/+43
| | | | | | | | | | | | | Previously a Yield object was either a file dump, or a simple enumeration on a directories children, with no associated type state for them. This commit implements a mechanism to internally fetch this type information, to pass out to a user via the Yield type. This way it is much easier to figure out which entries are directories, and which are files. Additional queries have to be passed into the FileTree for lookups. In a way, this commit gives up on the idea of having a nested API structure for the time being, until constructing sub-FileTrees becomes a real necessity
* octopus: supergit: implement initial tree history mechanismMx Kookie2021-01-084-12/+191
|
* octopus: supergit: add interface to query specific store pathsMx Kookie2021-01-0610-75/+237
|
* supergit: WIP, trying to add branching iteratorsMx Kookie2020-12-212-20/+162
| | | | | | | | | | This commit is here for the history of my madness. Rather than trying to teach the iterator API to be branching, I should add a management wrapper around it, which can decide for each commit it sees whether it would like to follow a branch or not. This way it's also much easier to terminate a branch when we realise that we've seen it before (or disable that functionality), without having to cram more features into the same abstraction.
* supergit: starting work on implementing branching iteratorsKaiden Fey2020-12-212-8/+64
|
* supergit: implementing simple file-history searchKaiden Fey2020-12-215-4/+106
| | | | | | | | | | | | | | | | | | | | This is done by stepping through a branch iterator to diff commits to see where they changed. This is somewhat computationally intensive, and also doesn't work well yet because iterator stepping is done internally and there is no API to extend iterators before they are run. That means that histories can only be read from first-parent iterators. Ideally we would do two things here: 1. build an API to let iterators extend themselves, either breadth first, or depth first. But maybe that would be too much complexity for the iterator module? 2. figure out a better way to get the history of a file. At the moment we are stepping through commits and diffing them with parents to find the set of changed paths. I don't _think_ there is a way to simply compare refs, but maybe there is.
* supergit: adding READMEKaiden Fey2020-12-211-0/+3
|
* supergit: adding more Cargo.toml keys to allow publishingKaiden Fey2020-12-211-1/+1
|
* supergit: adding more Cargo.toml keys to allow publishingKaiden Fey2020-12-211-0/+3
|
* supergit: implementing tree parsingKaiden Fey2020-12-216-72/+204
| | | | | | | | | | | | This implementation is a bit weird, especially because it changes the API from what it was previously. This works, for now, but some of the relationships between types feel a bit bad. Especially that all queries have to go via the FileTree, and we can't just give out objects that represent some part of the tree that are then loaded when needed. For now this will work though. What's still missing is to turn a Yield::Dir into a new FileTree.
* supergit: adding functions to external interface to load filesMx Kookie2020-12-211-0/+22
|
* octopus: implementing supergit basic tree abstractionMx Kookie2020-12-216-39/+189
|
* octopus: implementing octopus merge parsingMx Kookie2020-12-213-15/+21
|
* octopus: cleaning up branch iterator implementationKaiden Fey2020-12-212-123/+53
| | | | | | | | | | | The previous implementation tried to be an iterator over parents, which ultimately was the wrong design choice and caused a lot of headaches. Instead, this implementation is a simple branch iterator, that will update it's position to the next parent, if one exists. Not really sure why this wasn't my first approach, but I think I was thinking about this in terms of parents, not actually commits. So I didn't really see the forest for the trees.
* octopus: implement full recursive branch parsingMx Kookie2020-12-212-25/+70
| | | | | | | | | | | | | | | | | This code implements a parsing strategy that uses lazy iterators to traverse a branch graph. An iterator is constructed for a starting point on a branch, and new iterators are spawned for every merge that is encountered. To get all commits in a repository, simply do as test.rs: queue new work to a channel, that you poll from until no more branches have been discovered. This code is somewhat suboptimal. For one, get_parent() is way too complex, and could use some refactoring. Secondly, the semantics of `BranchCommit::Branch(...)` are unclear from the outside, and the fact that simple merge commits will be returned via `BranchCommit::Commit`, while subsequent merge commits need to use `BranchCommit::Merge(...)` is inconsistent and should be fixed before doing any sort of public release!
* octopus: refactoring & typed branch parsingMx Kookie2020-12-2110-317/+332
| | | | | | | | | | | | | This code is work-in-progress, and doesn't work on a repo that has a branched history. The issue here is that after handling a merge commit, keeping track of which commit to look at next is non-trivial. This solution tries to isuse a "skip" command on the walker, but this can accidentally skip commits, when two merges have happened in succession (maybe a bug with the impl, not the concept). But also, the actual merge commit seems to already be part of the norma history? So maybe we can ommit the merge commit explicitly, and simply return a new branch handle instead.
* apps/servers/octopus: implement initial branch parsingMx Kookie2020-12-214-10/+284
|
* octopus: adding a bare test repositoryMx Kookie2020-12-2123-0/+730
|
* Add 'apps/servers/octopus/' from commit ↵Katharina Fey2020-12-2112-0/+193
'623954d19fdf0dca47db319e5c88ee561aa8d25c' git-subtree-dir: apps/servers/octopus git-subtree-mainline: 4e09fe2509904ee64d2470ca8d41006d51e4ffd6 git-subtree-split: 623954d19fdf0dca47db319e5c88ee561aa8d25c