From b2a46e18236e7cc8ff864bc4fed3b190efb161e5 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 20 Feb 2013 14:12:55 -0400 Subject: make adding modified files work on crippled filesystems --- Command/Add.hs | 7 +++++-- Git/LsFiles.hs | 8 ++++++++ Seek.hs | 5 +++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/Command/Add.hs b/Command/Add.hs index 33adc8efc..18dc65031 100644 --- a/Command/Add.hs +++ b/Command/Add.hs @@ -31,11 +31,14 @@ import Utility.InodeCache def :: [Command] def = [notBareRepo $ command "add" paramPaths seek "add files to annex"] -{- Add acts on both files not checked into git yet, and unlocked files. -} +{- Add acts on both files not checked into git yet, and unlocked files. + - + - In direct mode, it acts on any files that have changed. -} seek :: [CommandSeek] seek = [ withFilesNotInGit start - , withFilesUnlocked start + , whenNotDirect $ withFilesUnlocked start + , whenDirect $ withFilesMaybeModified start ] {- The add subcommand annexes a file, generating a key for it using a diff --git a/Git/LsFiles.hs b/Git/LsFiles.hs index 401ed5562..ca08fe261 100644 --- a/Git/LsFiles.hs +++ b/Git/LsFiles.hs @@ -9,6 +9,7 @@ module Git.LsFiles ( inRepo, notInRepo, deleted, + modified, staged, stagedNotDeleted, stagedDetails, @@ -46,6 +47,13 @@ deleted l repo = pipeNullSplit params repo where params = [Params "ls-files --deleted -z --"] ++ map File l +{- Returns a list of files in the specified locations that have been + - modified. -} +modified :: [FilePath] -> Repo -> IO ([FilePath], IO Bool) +modified l repo = pipeNullSplit params repo + where + params = [Params "ls-files --modified -z --"] ++ map File l + {- Returns a list of all files that are staged for commit. -} staged :: [FilePath] -> Repo -> IO ([FilePath], IO Bool) staged = staged' [] diff --git a/Seek.hs b/Seek.hs index a531d2247..6f87e8e6c 100644 --- a/Seek.hs +++ b/Seek.hs @@ -88,6 +88,11 @@ withFilesUnlocked' typechanged a params = do let unlockedfiles = liftIO $ filterM notSymlink typechangedfiles prepFiltered a unlockedfiles +{- Finds files that may be modified. -} +withFilesMaybeModified :: (FilePath -> CommandStart) -> CommandSeek +withFilesMaybeModified a params = + prepFiltered a $ seekHelper LsFiles.modified params + withKeys :: (Key -> CommandStart) -> CommandSeek withKeys a params = return $ map (a . parse) params where -- cgit v1.2.3