addurl: Bugfix: Did not properly add file in direct mode.

This commit is contained in:
Joey Hess 2013-04-11 13:35:52 -04:00
parent 36913bc042
commit 7b4733f0e8
6 changed files with 49 additions and 31 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

1
debian/changelog vendored
View file

@ -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.

View file

@ -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]]