summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Command/Add.hs7
-rw-r--r--Git/LsFiles.hs8
-rw-r--r--Seek.hs5
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