summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Command/Add.hs37
-rw-r--r--Command/AddUnused.hs6
-rw-r--r--Command/AddUrl.hs28
-rw-r--r--Command/ReKey.hs5
-rw-r--r--debian/changelog1
-rw-r--r--doc/bugs/Addurl_downloads_but_does_not_checkout_files.mdwn3
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]]