addurl, importfeed: Changed to honor annex.largefiles settings, when the content...
authorJoey Hess <joeyh@joeyh.name>
Wed, 2 Dec 2015 19:12:33 +0000 (15:12 -0400)
committerJoey Hess <joeyh@joeyh.name>
Wed, 2 Dec 2015 19:12:33 +0000 (15:12 -0400)
importfeed just calls addurl functions, so inherits this from it.

Note that addurl still generates a temp file, and uses that key to download
the file. It just adds it to the work tree at the end when the file is small.

Command/Add.hs
Command/AddUrl.hs
Command/Import.hs
debian/changelog
doc/git-annex.mdwn
doc/todo/make_addurl_respect_annex.largefiles_option.mdwn

index 4ae97b6e38fb0b91072f4123e89ce8764b6f5a11..27c11eab4350cd33aab3706366d0d8916ca65c87 100644 (file)
@@ -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
index 78313f538fcfb54a4ed4264c89cb092a36e59f48..af2e04a62590f02410a9a73e0a7cbce8aa194338 100644 (file)
@@ -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
index 3887ea57b5db9c8cc71d89a4b8910d3cca0cea6f..7e8ce3b7a2aa443e06f4bc6dd7b0c6d0476ba1db 100644 (file)
@@ -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
index 144e2c907cbdd38e92d5299493a46dd08ef87830..42295c91dcb0c8ee35b4279f6235d94913697cb1 100644 (file)
@@ -11,6 +11,9 @@ git-annex (5.20151117) UNRELEASED; urgency=medium
     them. Instead, a mode such as 664 is used in this case.
   * tahoe: Include tahoe capabilities in whereis display.
   * import: Changed to honor annex.largefiles settings.
+  * addurl, importfeed: Changed to honor annex.largefiles settings,
+    when the content of the url is downloaded. (Not when using --fast or
+    --relaxed.)
 
  -- Joey Hess <id@joeyh.name>  Mon, 16 Nov 2015 16:49:34 -0400
 
index e41f9d65541595de9e96d2617be444137e0f4be2..2020ccf3fd0977beb2d0df41b931639fa3815268 100644 (file)
@@ -801,7 +801,10 @@ Here are all the supported configuration settings.
 
        annex.largefiles = largerthan=100kb and not (include=*.c or include=*.h)
 
-  This setting is used by `git annex add`, `git annex import` and the assistant.
+  This setting is checked by `git annex add`, `git annex import` and the assistant.
+  It's also used by `git annex addurl` and `git annex importfeed` when
+  downloading files.
+
   It can be useful to temporarily override it via -c at the command line.
   For example:
 
index 3404649480d8c6c30b85469d93db237d74d21f04..b80349a760a71ccfb1cf87a80ff75e58401388dc 100644 (file)
@@ -2,3 +2,5 @@ ATM git annex addurl ignores  annex.largefiles option so to automate annexificat
 
 N.B. I do understand that use-case might be somewhat vague, let me know if I should expand reasoning
 [[!meta author=yoh]]
+
+> [[done]] --[[Joey]]