diff options
author | 2013-12-09 13:37:18 -0400 | |
---|---|---|
committer | 2013-12-09 13:43:47 -0400 | |
commit | 1c806a0a6c593cc6b4fc82ce3ca709ffd495fa86 (patch) | |
tree | 72e68ec88100c795fb74491b3ace77c98810b40d | |
parent | a3bf2712c63958fee1e696bc256900763137ed0f (diff) |
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.
-rw-r--r-- | Command/Import.hs | 14 | ||||
-rw-r--r-- | debian/changelog | 2 |
2 files changed, 11 insertions, 5 deletions
diff --git a/Command/Import.hs b/Command/Import.hs index 08960f25a..dcf2b0fa0 100644 --- a/Command/Import.hs +++ b/Command/Import.hs @@ -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 diff --git a/debian/changelog b/debian/changelog index c4ca8d2be..79235342c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -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 |