implement import --deduplicate and import --clean-duplicates
Note that --deduplicate currently checksums each file twice, once to see if it's a known key, and once when importing it. Perhaps this could be revisited and the extra checksum gotten rid of, at the cost of not locking down the file when adding it.
This commit is contained in:
parent
e240cb99f7
commit
b46afa29ac
1 changed files with 37 additions and 11 deletions
|
@ -15,6 +15,9 @@ import qualified Annex
|
||||||
import qualified Command.Add
|
import qualified Command.Add
|
||||||
import qualified Option
|
import qualified Option
|
||||||
import Utility.CopyFile
|
import Utility.CopyFile
|
||||||
|
import Backend
|
||||||
|
import Remote
|
||||||
|
import Types.KeySource
|
||||||
|
|
||||||
def :: [Command]
|
def :: [Command]
|
||||||
def = [withOptions opts $ notBareRepo $ command "import" paramPaths seek
|
def = [withOptions opts $ notBareRepo $ command "import" paramPaths seek
|
||||||
|
@ -65,14 +68,37 @@ start mode (srcfile, destfile) =
|
||||||
)
|
)
|
||||||
|
|
||||||
perform :: DuplicateMode -> FilePath -> FilePath -> CommandPerform
|
perform :: DuplicateMode -> FilePath -> FilePath -> CommandPerform
|
||||||
perform mode srcfile destfile = do
|
perform mode srcfile destfile =
|
||||||
whenM (liftIO $ doesFileExist destfile) $
|
case mode of
|
||||||
unlessM (Annex.getState Annex.force) $
|
DeDuplicate -> ifM isdup
|
||||||
error $ "not overwriting existing " ++ destfile ++
|
( deletedup
|
||||||
" (use --force to override)"
|
, go
|
||||||
|
)
|
||||||
liftIO $ createDirectoryIfMissing True (parentDir destfile)
|
CleanDuplicates -> ifM isdup
|
||||||
liftIO $ if mode == Duplicate
|
( deletedup
|
||||||
then void $ copyFileExternal srcfile destfile
|
, next $ return True
|
||||||
else moveFile srcfile destfile
|
)
|
||||||
Command.Add.perform destfile
|
_ -> go
|
||||||
|
where
|
||||||
|
isdup = do
|
||||||
|
backend <- chooseBackend destfile
|
||||||
|
let ks = KeySource srcfile srcfile Nothing
|
||||||
|
v <- genKey ks backend
|
||||||
|
case v of
|
||||||
|
Just (k, _) -> not . null <$> keyLocations k
|
||||||
|
_ -> return False
|
||||||
|
deletedup = do
|
||||||
|
showNote "duplicate"
|
||||||
|
liftIO $ removeFile srcfile
|
||||||
|
next $ return True
|
||||||
|
go = do
|
||||||
|
whenM (liftIO $ doesFileExist destfile) $
|
||||||
|
unlessM (Annex.getState Annex.force) $
|
||||||
|
error $ "not overwriting existing " ++ destfile ++
|
||||||
|
" (use --force to override)"
|
||||||
|
|
||||||
|
liftIO $ createDirectoryIfMissing True (parentDir destfile)
|
||||||
|
liftIO $ if mode == Duplicate
|
||||||
|
then void $ copyFileExternal srcfile destfile
|
||||||
|
else moveFile srcfile destfile
|
||||||
|
Command.Add.perform destfile
|
||||||
|
|
Loading…
Add table
Reference in a new issue