From fb4be5f9b2d5794cb45f8c335ae8de5700947241 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 19 Dec 2015 13:36:40 -0400 Subject: status: On crippled filesystems, was displaying M for all annexed files that were present. Probably caused by a change to what git status displays in this situation. Fixed by treating files git thinks are modified the same as typechanged files. --- Command/Status.hs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'Command') diff --git a/Command/Status.hs b/Command/Status.hs index 35195fec6..3feea7cb4 100644 --- a/Command/Status.hs +++ b/Command/Status.hs @@ -46,10 +46,19 @@ displayStatus s = do unlessM (showFullJSON [("status", [c]), ("file", f)]) $ liftIO $ putStrLn $ [c] ++ " " ++ f --- Git thinks that present direct mode files are typechanged; --- check their content to see if they are modified or not. +-- Git thinks that present direct mode files are typechanged. +-- (On crippled filesystems, git instead thinks they're modified.) +-- Check their content to see if they are modified or not. statusDirect :: Status -> Annex (Maybe Status) -statusDirect (TypeChanged t) = do +statusDirect (TypeChanged t) = statusDirect' t +statusDirect s@(Modified t) = ifM crippledFileSystem + ( statusDirect' t + , pure (Just s) + ) +statusDirect s = pure (Just s) + +statusDirect' :: TopFilePath -> Annex (Maybe Status) +statusDirect' t = do absf <- fromRepo $ fromTopFilePath t f <- liftIO $ relPathCwdToFile absf v <- liftIO (catchMaybeIO $ getFileStatus f) @@ -65,7 +74,6 @@ statusDirect (TypeChanged t) = do , return $ Just $ Modified t ) checkkey f _ Nothing = Just <$> checkNew f t -statusDirect s = pure (Just s) checkNew :: FilePath -> TopFilePath -> Annex Status checkNew f t = ifM (isJust <$> catObjectDetails (Git.Ref.fileRef f)) -- cgit v1.2.3 From 98194e4c61466ec9175e65af557b6130be81617d Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Mon, 21 Dec 2015 12:57:13 -0400 Subject: addurl: Added --batch option. --- CmdLine/Batch.hs | 20 ++++++++++++++------ Command/AddUrl.hs | 12 ++++++++++-- debian/changelog | 1 + doc/git-annex-addurl.mdwn | 5 +++++ 4 files changed, 30 insertions(+), 8 deletions(-) (limited to 'Command') diff --git a/CmdLine/Batch.hs b/CmdLine/Batch.hs index 57823b67b..ce9127975 100644 --- a/CmdLine/Batch.hs +++ b/CmdLine/Batch.hs @@ -12,15 +12,13 @@ import Command data BatchMode = Batch | NoBatch -batchOption :: Parser BatchMode -batchOption = flag NoBatch Batch +parseBatchOption :: Parser BatchMode +parseBatchOption = flag NoBatch Batch ( long "batch" <> help "enable batch mode" ) -type Batchable t = BatchMode -> t -> CommandStart - --- A Batchable command can run in batch mode, or not. +-- A batchable command can run in batch mode, or not. -- In batch mode, one line at a time is read, parsed, and a reply output to -- stdout. In non batch mode, the command's parameters are parsed and -- a reply output for each. @@ -29,7 +27,7 @@ batchable handler parser paramdesc = batchseeker <$> batchparser where batchparser = (,,) <$> parser - <*> batchOption + <*> parseBatchOption <*> cmdParams paramdesc batchseeker (opts, NoBatch, params) = mapM_ (go NoBatch opts) params @@ -52,3 +50,13 @@ batchable handler parser paramdesc = batchseeker <$> batchparser batchBadInput :: BatchMode -> Annex () batchBadInput NoBatch = liftIO exitFailure batchBadInput Batch = liftIO $ putStrLn "" + +-- Reads lines of batch mode input and passes to the action to handle. +batchSeek :: (String -> Annex ()) -> Annex () +batchSeek a = do + mp <- liftIO $ catchMaybeIO getLine + case mp of + Nothing -> return () + Just p -> do + a p + batchSeek a diff --git a/Command/AddUrl.hs b/Command/AddUrl.hs index af2e04a62..de83d8c9b 100644 --- a/Command/AddUrl.hs +++ b/Command/AddUrl.hs @@ -32,6 +32,7 @@ import Annex.Content.Direct import Annex.FileMatcher import Logs.Location import Utility.Metered +import CmdLine.Batch import qualified Annex.Transfer as Transfer #ifdef WITH_QUVI import Annex.Quvi @@ -51,6 +52,7 @@ data AddUrlOptions = AddUrlOptions , suffixOption :: Maybe String , relaxedOption :: Bool , rawOption :: Bool + , batchOption :: BatchMode } optParser :: CmdParamsDesc -> Parser AddUrlOptions @@ -74,6 +76,7 @@ optParser desc = AddUrlOptions )) <*> parseRelaxedOption <*> parseRawOption + <*> parseBatchOption parseRelaxedOption :: Parser Bool parseRelaxedOption = switch @@ -88,8 +91,13 @@ parseRawOption = switch ) seek :: AddUrlOptions -> CommandSeek -seek o = allowConcurrentOutput $ - forM_ (addUrls o) $ \u -> do +seek o = allowConcurrentOutput $ do + forM_ (addUrls o) go + case batchOption o of + Batch -> batchSeek go + NoBatch -> noop + where + go u = do r <- Remote.claimingUrl u if Remote.uuid r == webUUID || rawOption o then void $ commandAction $ startWeb o u diff --git a/debian/changelog b/debian/changelog index 99837e864..34e106d39 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,6 +4,7 @@ git-annex (5.20151219) UNRELEASED; urgency=medium that were present. Probably caused by a change to what git status displays in this situation. Fixed by treating files git thinks are modified the same as typechanged files. + * addurl: Added --batch option. -- Joey Hess Sat, 19 Dec 2015 13:31:17 -0400 diff --git a/doc/git-annex-addurl.mdwn b/doc/git-annex-addurl.mdwn index 0f5a763bc..eecc2c2bd 100644 --- a/doc/git-annex-addurl.mdwn +++ b/doc/git-annex-addurl.mdwn @@ -70,6 +70,11 @@ be used to get better filenames. Enables parallel downloads when multiple urls are being added. For example: `-J4` +* `--batch` + + Enables batch mode, in which lines containing urls to add are read from + stdin. + # SEE ALSO [[git-annex]](1) -- cgit v1.2.3