better handling of overwriting an existing file/directory/broken link when importing

Previous test did not notice if there is a dangling symlink.

Also, if a directory exists with the same name as the imported file, that
cannot work, so don't let --force have an effect.
This commit is contained in:
Joey Hess 2013-12-09 13:37:18 -04:00
parent c668ed35be
commit 9f68bb546c
2 changed files with 11 additions and 5 deletions

View file

@ -88,16 +88,20 @@ start mode (srcfile, destfile) =
liftIO $ removeFile srcfile
next $ return True
importfile = do
whenM (liftIO $ doesFileExist destfile) $
unlessM (Annex.getState Annex.force) $
error $ "not overwriting existing " ++ destfile ++
" (use --force to override)"
handleexisting =<< liftIO (catchMaybeIO $ getSymbolicLinkStatus destfile)
liftIO $ createDirectoryIfMissing True (parentDir destfile)
liftIO $ if mode == Duplicate || mode == SkipDuplicates
then void $ copyFileExternal srcfile destfile
else moveFile srcfile destfile
Command.Add.perform destfile
handleexisting Nothing = noop
handleexisting (Just s)
| isDirectory s = notoverwriting "(is a directory)"
| otherwise = ifM (Annex.getState Annex.force) $
( liftIO $ nukeFile destfile
, notoverwriting "(use --force to override)"
)
notoverwriting why = error $ "not overwriting existing " ++ destfile ++ " " ++ why
pickaction isdup = case mode of
DeDuplicate
| isdup -> Just deletedup

2
debian/changelog vendored
View file

@ -17,6 +17,8 @@ git-annex (5.20131131) UNRELEASED; urgency=low
* import: Add --skip-duplicates option.
* Windows: watch and assistant work! (very experimental)
* lock: Require --force. Closes: #731606
* import: better handling of overwriting an existing file/directory/broken
link when importing
-- Joey Hess <joeyh@debian.org> Sun, 01 Dec 2013 13:57:58 -0400