summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Command/Import.hs14
-rw-r--r--debian/changelog2
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