diff options
-rw-r--r-- | Command/Add.hs | 37 | ||||
-rw-r--r-- | Command/AddUnused.hs | 6 | ||||
-rw-r--r-- | Command/AddUrl.hs | 28 | ||||
-rw-r--r-- | Command/ReKey.hs | 5 | ||||
-rw-r--r-- | debian/changelog | 1 | ||||
-rw-r--r-- | doc/bugs/Addurl_downloads_but_does_not_checkout_files.mdwn | 3 |
6 files changed, 49 insertions, 31 deletions
diff --git a/Command/Add.hs b/Command/Add.hs index a5dfc1d1c..2453e6842 100644 --- a/Command/Add.hs +++ b/Command/Add.hs @@ -188,19 +188,29 @@ link file key hascontent = handle (undo file key) $ do return l -{- Note: Several other commands call this, and expect it to - - create the link and add it. - - - - In direct mode, when we have the content of the file, it's left as-is, - - and we just stage a symlink to git. - - - - Otherwise, as long as the filesystem supports symlinks, we use +{- Creates the symlink to the annexed content, and stages it in git. + - + - As long as the filesystem supports symlinks, we use - git add, rather than directly staging the symlink to git. - Using git add is best because it allows the queuing to work - and is faster (staging the symlink runs hash-object commands each time). - Also, using git add allows it to skip gitignored files, unless forced - to include them. -} +addLink :: FilePath -> Key -> Bool -> Annex () +addLink file key hascontent = ifM (coreSymlinks <$> Annex.getGitConfig) + ( do + _ <- link file key hascontent + params <- ifM (Annex.getState Annex.force) + ( return [Param "-f"] + , return [] + ) + Annex.Queue.addCommand "add" (params++[Param "--"]) [file] + , do + l <- link file key hascontent + addAnnexLink l file + ) + cleanup :: FilePath -> Key -> Bool -> CommandCleanup cleanup file key hascontent = do when hascontent $ @@ -209,17 +219,6 @@ cleanup file key hascontent = do ( do l <- inRepo $ gitAnnexLink file key stageSymlink file =<< hashSymlink l - , ifM (coreSymlinks <$> Annex.getGitConfig) - ( do - _ <- link file key hascontent - params <- ifM (Annex.getState Annex.force) - ( return [Param "-f"] - , return [] - ) - Annex.Queue.addCommand "add" (params++[Param "--"]) [file] - , do - l <- link file key hascontent - addAnnexLink l file - ) + , addLink file key hascontent ) return True diff --git a/Command/AddUnused.hs b/Command/AddUnused.hs index c352d87d0..33acc4487 100644 --- a/Command/AddUnused.hs +++ b/Command/AddUnused.hs @@ -9,6 +9,7 @@ module Command.AddUnused where import Common.Annex import Logs.Unused +import Logs.Location import Command import qualified Command.Add import Types.Key @@ -26,7 +27,10 @@ start = startUnused "addunused" perform (performOther "tmp") perform :: Key -> CommandPerform -perform key = next $ Command.Add.cleanup file key True +perform key = next $ do + logStatus key InfoPresent + Command.Add.addLink file key False + return True where file = "unused." ++ key2file key diff --git a/Command/AddUrl.hs b/Command/AddUrl.hs index 7c235922d..a8e3588d8 100644 --- a/Command/AddUrl.hs +++ b/Command/AddUrl.hs @@ -14,6 +14,7 @@ import Command import Backend import qualified Command.Add import qualified Annex +import qualified Annex.Queue import qualified Backend.URL import qualified Utility.Url as Url import Annex.Content @@ -23,6 +24,7 @@ import Types.Key import Types.KeySource import Config import Annex.Content.Direct +import Logs.Location def :: [Command] def = [notBareRepo $ withOptions [fileOption, pathdepthOption, relaxedOption] $ @@ -92,12 +94,21 @@ download url file = do k <- genKey source backend case k of Nothing -> stop - Just (key, _) -> do - whenM isDirect $ - void $ addAssociatedFile key file - moveAnnex key tmp - setUrlPresent key url - next $ Command.Add.cleanup file key True + Just (key, _) -> next $ cleanup url file key (Just tmp) + +cleanup :: String -> FilePath -> Key -> Maybe FilePath -> CommandCleanup +cleanup url file key mtmp = do + when (isJust mtmp) $ + logStatus key InfoPresent + setUrlPresent key url + Command.Add.addLink file key False + 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 + return True nodownload :: Bool -> String -> FilePath -> CommandPerform nodownload relaxed url file = do @@ -108,10 +119,7 @@ nodownload relaxed url file = do if exists then do let key = Backend.URL.fromUrl url size - whenM isDirect $ - void $ addAssociatedFile key file - setUrlPresent key url - next $ Command.Add.cleanup file key False + next $ cleanup url file key Nothing else do warning $ "unable to access url: " ++ url stop diff --git a/Command/ReKey.hs b/Command/ReKey.hs index d14edb06d..bc4a9fac9 100644 --- a/Command/ReKey.hs +++ b/Command/ReKey.hs @@ -14,6 +14,7 @@ import Types.Key import Annex.Content import qualified Command.Add import Logs.Web +import Logs.Location import Config import Utility.CopyFile @@ -70,4 +71,6 @@ cleanup file oldkey newkey = do -- Update symlink to use the new key. liftIO $ removeFile file - Command.Add.cleanup file newkey True + Command.Add.addLink file newkey True + logStatus newkey InfoPresent + return True diff --git a/debian/changelog b/debian/changelog index 35a77be7f..4eba8011d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -6,6 +6,7 @@ git-annex (4.20130406) UNRELEASED; urgency=low remotes, to avoid delays. Thanks, guilhem for the patch. * Bugfix: Direct mode no longer repeatedly checksums duplicated files. + * addurl: Bugfix: Did not properly add file in direct mode. * Adjust preferred content expressions so that content in archive directories is preferred until it has reached an archive or smallarchive repository. diff --git a/doc/bugs/Addurl_downloads_but_does_not_checkout_files.mdwn b/doc/bugs/Addurl_downloads_but_does_not_checkout_files.mdwn index 77e24cd2a..7038fe2e6 100644 --- a/doc/bugs/Addurl_downloads_but_does_not_checkout_files.mdwn +++ b/doc/bugs/Addurl_downloads_but_does_not_checkout_files.mdwn @@ -69,3 +69,6 @@ Please provide any additional information below. The repository in question was created by the assistant and I tried the above with the assistant both running and not running, with no difference. I have also tried downloading other files. EDIT: formatting + +> Bug only affected direct mode. I think it used to work but I broke +> it when fixing another bug in direct mode. [[fixed|done]] --[[Joey]] |