diff options
author | Joey Hess <joey@kitenet.net> | 2013-09-25 15:29:56 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2013-09-25 15:29:56 -0400 |
commit | a286ee114b76db22054a71987508d7de834cba63 (patch) | |
tree | 0b28eda73e7df3958bfd2570a52bb255e25f7b7e /Command/Indirect.hs | |
parent | d2b503f7edb486f31545633fc7c7b4a9999a271e (diff) |
indirect: Better behavior when a file in direct mode is not owned by the user running the conversion.
Diffstat (limited to 'Command/Indirect.hs')
-rw-r--r-- | Command/Indirect.hs | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/Command/Indirect.hs b/Command/Indirect.hs index 22c8b2d62..a2512ea96 100644 --- a/Command/Indirect.hs +++ b/Command/Indirect.hs @@ -8,6 +8,7 @@ module Command.Indirect where import System.PosixCompat.Files +import Control.Exception.Extensible import Common.Annex import Command @@ -22,7 +23,9 @@ import Annex.Content import Annex.CatFile import Annex.Version import Annex.Perms +import Annex.Exception import Init +import qualified Command.Add def :: [Command] def = [notBareRepo $ noDaemonRunning $ @@ -87,15 +90,24 @@ perform = do thawContentDir =<< calcRepo (gitAnnexLocation k) cleandirect k -- clean before content directory gets frozen whenM (liftIO $ not . isSymbolicLink <$> getSymbolicLinkStatus f) $ do - moveAnnex k f - l <- inRepo $ gitAnnexLink f k - liftIO $ createSymbolicLink l f + v <-tryAnnexIO (moveAnnex k f) + case v of + Right _ -> do + l <- inRepo $ gitAnnexLink f k + liftIO $ createSymbolicLink l f + Left e -> catchAnnex (Command.Add.undo f k e) + warnlocked showEndOk + warnlocked :: SomeException -> Annex () + warnlocked e = do + warning $ show e + warning "leaving this file as-is; correct this problem and run git annex add on it" + cleandirect k = do liftIO . nukeFile =<< calcRepo (gitAnnexInodeCache k) liftIO . nukeFile =<< calcRepo (gitAnnexMapping k) - + cleanup :: CommandCleanup cleanup = do setVersion defaultVersion |