diff options
-rw-r--r-- | Assistant/Threads/Watcher.hs | 15 | ||||
-rw-r--r-- | Git/LsFiles.hs | 16 |
2 files changed, 23 insertions, 8 deletions
diff --git a/Assistant/Threads/Watcher.hs b/Assistant/Threads/Watcher.hs index f8957d25e..c0a1ea0b9 100644 --- a/Assistant/Threads/Watcher.hs +++ b/Assistant/Threads/Watcher.hs @@ -27,9 +27,10 @@ import Utility.Types.DirWatcher import Utility.Lsof import qualified Annex import qualified Annex.Queue -import qualified Git.Command +import qualified Git import qualified Git.UpdateIndex import qualified Git.HashObject +import qualified Git.LsFiles as LsFiles import qualified Backend import Annex.Content import Annex.CatFile @@ -83,9 +84,15 @@ startupScan scanner = do -- Notice any files that were deleted before -- watching was started. - liftAnnex $ do - inRepo $ Git.Command.run "add" [Param "--update"] - showAction "started" + top <- liftAnnex $ fromRepo Git.repoPath + (fs, cleanup) <- liftAnnex $ inRepo $ LsFiles.deleted [top] + forM_ fs $ \f -> do + liftAnnex $ Annex.Queue.addUpdateIndex =<< + inRepo (Git.UpdateIndex.unstageFile f) + maybe noop recordChange =<< madeChange f RmChange + void $ liftIO $ cleanup + + liftAnnex $ showAction "started" modifyDaemonStatus_ $ \s -> s { scanComplete = True } diff --git a/Git/LsFiles.hs b/Git/LsFiles.hs index 45c830cd6..401ed5562 100644 --- a/Git/LsFiles.hs +++ b/Git/LsFiles.hs @@ -8,6 +8,7 @@ module Git.LsFiles ( inRepo, notInRepo, + deleted, staged, stagedNotDeleted, stagedDetails, @@ -38,6 +39,13 @@ notInRepo include_ignored l repo = pipeNullSplit params repo | include_ignored = [] | otherwise = [Param "--exclude-standard"] +{- Returns a list of files in the specified locations that have been + - deleted. -} +deleted :: [FilePath] -> Repo -> IO ([FilePath], IO Bool) +deleted l repo = pipeNullSplit params repo + where + params = [Params "ls-files --deleted -z --"] ++ map File l + {- Returns a list of all files that are staged for commit. -} staged :: [FilePath] -> Repo -> IO ([FilePath], IO Bool) staged = staged' [] @@ -112,7 +120,7 @@ data Unmerged = Unmerged - 1 = old version, can be ignored - 2 = us - 3 = them - - If a line is omitted, that side deleted the file. + - If a line is omitted, that side removed the file. -} unmerged :: [FilePath] -> Repo -> IO ([Unmerged], IO Bool) unmerged l repo = do @@ -157,11 +165,11 @@ reduceUnmerged c (i:is) = reduceUnmerged (new:c) rest , unmergedBlobType = Conflicting blobtypeA blobtypeB , unmergedSha = Conflicting shaA shaB } - findsib templatei [] = ([], deleted templatei) + findsib templatei [] = ([], removed templatei) findsib templatei (l:ls) | ifile l == ifile templatei = (ls, l) - | otherwise = (l:ls, deleted templatei) - deleted templatei = templatei + | otherwise = (l:ls, removed templatei) + removed templatei = templatei { isus = not (isus templatei) , iblobtype = Nothing , isha = Nothing |