aboutsummaryrefslogtreecommitdiff
path: root/Git/Tree.hs
Commit message (Collapse)AuthorAge
* graft exported tree into git-annex branchGravatar Joey Hess2017-08-31
| | | | | | | | | | | So it will be available later and elsewhere, even after GC. I first though to use git update-index to do this, but feeding it a line with a tree object seems to always cause it to generate a git subtree merge. So, fell back to using the Git.Tree interface to maniupulate the trees, and not involving the git-annex branch index file at all. This commit was sponsored by Andreas Karlsson.
* adjust: Fix behavior when used in a repository that contains submodules.Gravatar Joey Hess2017-02-20
| | | | | Also fixed the LsFiles parser to not assume its output has a fixed width type field.
* restart coprocess in raw modeGravatar Joey Hess2016-11-01
| | | | | | | | | | | Restarting a crashing git process could result in filename encoding issues when not in a unicode locale, as the restarted processes's handles were not read in raw mode. Since rawMode is always used when starting a coprocess, didn't bother to parameterise it and just always enable it for simplicity. This commit was sponsored by Jake Vosloo on Patreon.
* fix tree graft-in bugGravatar Joey Hess2016-10-11
| | | | | | | | | | | When adding a tree like a/b/c/d when a/b already exists, fixes the bug that the tree that got created was a/b/a/b/c/d Just need to flatten out the top N directories of the tree that's being grafted in, so we get the c/d part. This was complicated by the Tree data type being a rose tree rather than a regular tree. This commit was sponsored by Nick Daly on Patreon.
* sync: Fix bug in adjusted branch merging that could cause recently added ↵Gravatar Joey Hess2016-10-10
| | | | | | | | | | | files to be lost when updating the adjusted branch. The modification flag was not being set when making modifications deep in a tree, so parent trees were not updated to contain the modified tree. Seems to have exposed another bug where the wrong filename gets grafted in. This commit was sponsored by Brock Spratlen on Patreon.
* more windows path fixesGravatar Joey Hess2016-05-04
| | | | | Let git-style filepaths be looked up in the removeset, even though windows-style filepaths are probably being fed into it.
* more windows path fixesGravatar Joey Hess2016-05-04
| | | | | beneathSubTree can be called with both windows-style and git-style paths, so needs to normalize to windows-style.
* avoid hardcoded slashes; broke on windowsGravatar Joey Hess2016-05-03
|
* fix build with ghc 7.6.3Gravatar Joey Hess2016-04-08
|
* grafting new items into existing treeGravatar Joey Hess2016-03-11
|
* refactorGravatar Joey Hess2016-03-11
|
* fixmeGravatar Joey Hess2016-03-11
|
* fix deletion of files in adjustTreeGravatar Joey Hess2016-03-11
|
* improve propigation of commits from adjusted branchesGravatar Joey Hess2016-03-11
| | | | | | | | | | | Only reverse adjust the changes in the commit, which means that adjustments do not need to be generally cleanly reversable. For example, an adjustment can unlock all locked files, but does not need to worry about files that were originally unlocked when reversing, because it will only ever be run on files that have been changed. So, it's ok if it locks all files when reversed, or even leaves all files as-is when reversed.
* indentGravatar Joey Hess2016-03-11
|
* allow adding new items via adjustTreeGravatar Joey Hess2016-03-11
|
* better encapsulationGravatar Joey Hess2016-02-23
|
* few strictness improvemnetsGravatar Joey Hess2016-02-23
|
* refactorGravatar Joey Hess2016-02-23
|
* add adjustTree (low-level) interface that avoids buffering much in memoryGravatar Joey Hess2016-02-23
| | | | | Using getTree and recordTree in my big repo takes 594 mb ram. Using adjustTree takes 73 mb.
* no streamingGravatar Joey Hess2016-02-23
| | | | | | | | | | | | | | | | | | | | extractTree has to parse the whole input list in order to generate a tree, so convert interface to non-streaming. Some quick memory benchmarks in a repo with 60k files don't look too bad despite not streaming. To stream, without building up a whole tree object, one way would be a new interface: adjustTree :: MonadIO m :: (TreeItem -> m (Maybe TreeItem)) -> Ref -> Repo -> m Sha This would only need to buffer tree objects from the current one down to the root, in order to update trees when a TreeItem is changed. But, while it supports changing items in the tree, and removing items, it does not support adding new items, or moving items from one directory to another.
* use getShaGravatar Joey Hess2016-02-23
|
* minor improvementsGravatar Joey Hess2016-02-23
|
* add mktree interfaceGravatar Joey Hess2016-02-23