diff options
Diffstat (limited to 'Command')
-rw-r--r-- | Command/Add.hs | 16 | ||||
-rw-r--r-- | Command/AddUrl.hs | 34 | ||||
-rw-r--r-- | Command/Import.hs | 2 |
3 files changed, 32 insertions, 20 deletions
diff --git a/Command/Add.hs b/Command/Add.hs index 4ae97b6e3..27c11eab4 100644 --- a/Command/Add.hs +++ b/Command/Add.hs @@ -73,18 +73,18 @@ seek o = allowConcurrentOutput $ do startSmall :: FilePath -> CommandStart startSmall file = do showStart "add" file - next $ performSmall file + next $ next $ addSmall file -performSmall :: FilePath -> CommandPerform -performSmall file = do +addSmall :: FilePath -> Annex Bool +addSmall file = do showNote "non-large file; adding content to git repository" - performAdd file + addFile file -performAdd :: FilePath -> CommandPerform -performAdd file = do +addFile :: FilePath -> Annex Bool +addFile file = do ps <- forceParams Annex.Queue.addCommand "add" (ps++[Param "--"]) [file] - next $ return True + return True {- The add subcommand annexes a file, generating a key for it using a - backend, and then moving it into the annex directory and setting up @@ -101,7 +101,7 @@ start file = ifAnnexed file addpresent add | otherwise -> do showStart "add" file next $ if isSymbolicLink s - then performAdd file + then next $ addFile file else perform file addpresent key = ifM isDirect ( do diff --git a/Command/AddUrl.hs b/Command/AddUrl.hs index 78313f538..af2e04a62 100644 --- a/Command/AddUrl.hs +++ b/Command/AddUrl.hs @@ -29,6 +29,7 @@ import Types.KeySource import Types.UrlContents import Config import Annex.Content.Direct +import Annex.FileMatcher import Logs.Location import Utility.Metered import qualified Annex.Transfer as Transfer @@ -335,17 +336,28 @@ addSizeUrlKey :: Url.UrlInfo -> Key -> Key addSizeUrlKey urlinfo key = key { keySize = Url.urlSize urlinfo } cleanup :: UUID -> URLString -> FilePath -> Key -> Maybe FilePath -> Annex () -cleanup u url file key mtmp = do - when (isJust mtmp) $ - logStatus key InfoPresent - setUrlPresent u key url - Command.Add.addLink file key Nothing - whenM isDirect $ do - void $ addAssociatedFile key file - {- For moveAnnex to work in direct mode, the symlink - - must already exist, so flush the queue. -} - Annex.Queue.flush - maybe noop (moveAnnex key) mtmp +cleanup u url file key mtmp = case mtmp of + Nothing -> go + Just tmp -> do + largematcher <- largeFilesMatcher + ifM (checkFileMatcher largematcher file) + ( go + , do + liftIO $ renameFile tmp file + void $ Command.Add.addSmall file + ) + where + go = do + when (isJust mtmp) $ + logStatus key InfoPresent + setUrlPresent u key url + Command.Add.addLink file key Nothing + whenM isDirect $ do + void $ addAssociatedFile key file + {- For moveAnnex to work in direct mode, the symlink + - must already exist, so flush the queue. -} + Annex.Queue.flush + maybe noop (moveAnnex key) mtmp nodownload :: URLString -> Url.UrlInfo -> FilePath -> Annex (Maybe Key) nodownload url urlinfo file diff --git a/Command/Import.hs b/Command/Import.hs index 3887ea57b..7e8ce3b7a 100644 --- a/Command/Import.hs +++ b/Command/Import.hs @@ -129,7 +129,7 @@ start largematcher mode (srcfile, destfile) = else moveFile srcfile destfile ifM (checkFileMatcher largematcher destfile) ( Command.Add.perform destfile - , Command.Add.performSmall destfile + , next $ Command.Add.addSmall destfile ) notoverwriting why = do warning $ "not overwriting existing " ++ destfile ++ " " ++ why |