sync: Fix bug in adjusted branch merging that could cause recently added 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.
This commit is contained in:
Joey Hess 2016-10-10 15:00:45 -04:00
parent d2527c421c
commit b82c3e0783
No known key found for this signature in database
GPG key ID: C910D9222512E3C7
3 changed files with 25 additions and 2 deletions

View file

@ -184,10 +184,11 @@ adjustTree adjusttreeitem addtreeitems removefiles r repo =
Just TreeObject -> do
(sl, modified, is') <- go h False [] (beneathSubTree i) is
sl' <- adjustlist h (inTree i) (beneathSubTree i) sl
subtree <- if modified || sl' /= sl
let slmodified = sl' /= sl
subtree <- if modified || slmodified
then liftIO $ recordSubTree h $ NewSubTree (LsTree.file i) sl'
else return $ RecordedSubTree (LsTree.file i) (LsTree.sha i) []
let !modified' = modified || wasmodified
let !modified' = modified || slmodified || wasmodified
go h modified' (subtree : c) intree is'
_ -> error ("unexpected object type \"" ++ LsTree.typeobj i ++ "\"")
| otherwise = return (c, wasmodified, i:is)