From aedfcde969a78f4e0b90bf781dcc12e54395469a Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 5 Jan 2013 16:07:27 -0400 Subject: [PATCH] guard readSymbolicLink throws an exception if the file is not a symlink --- Assistant/Threads/Watcher.hs | 11 ++++++----- Command/Fix.hs | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/Assistant/Threads/Watcher.hs b/Assistant/Threads/Watcher.hs index 18470bb8b2..316f1fbaf3 100644 --- a/Assistant/Threads/Watcher.hs +++ b/Assistant/Threads/Watcher.hs @@ -158,11 +158,11 @@ onAddSymlink file filestatus = go =<< liftAnnex (Backend.lookupFile file) where go (Just (key, _)) = do link <- liftAnnex $ calcGitLink file key - ifM ((==) link <$> liftIO (readSymbolicLink file)) + ifM ((==) (Just link) <$> liftIO (catchMaybeIO $ readSymbolicLink file)) ( do s <- getDaemonStatus checkcontent key s - ensurestaged link s + ensurestaged (Just link) s , do liftIO $ removeFile file liftIO $ createSymbolicLink link file @@ -170,8 +170,8 @@ onAddSymlink file filestatus = go =<< liftAnnex (Backend.lookupFile file) addlink link ) go Nothing = do -- other symlink - link <- liftIO (readSymbolicLink file) - ensurestaged link =<< getDaemonStatus + mlink <- liftIO (catchMaybeIO $ readSymbolicLink file) + ensurestaged mlink =<< getDaemonStatus {- This is often called on symlinks that are already - staged correctly. A symlink may have been deleted @@ -184,12 +184,13 @@ onAddSymlink file filestatus = go =<< liftAnnex (Backend.lookupFile file) - (If the daemon has never ran before, avoid staging - links too.) -} - ensurestaged link daemonstatus + ensurestaged (Just link) daemonstatus | scanComplete daemonstatus = addlink link | otherwise = case filestatus of Just s | not (afterLastDaemonRun (statusChangeTime s) daemonstatus) -> noChange _ -> addlink link + ensurestaged Nothing _ = noChange {- For speed, tries to reuse the existing blob for symlink target. -} addlink link = do diff --git a/Command/Fix.hs b/Command/Fix.hs index 4b01513423..e15951c213 100644 --- a/Command/Fix.hs +++ b/Command/Fix.hs @@ -23,7 +23,7 @@ seek = [withFilesInGit $ whenAnnexed start] start :: FilePath -> (Key, Backend) -> CommandStart start file (key, _) = do link <- calcGitLink file key - stopUnless ((/=) link <$> liftIO (readSymbolicLink file)) $ do + stopUnless ((/=) (Just link) <$> liftIO (catchMaybeIO $ readSymbolicLink file)) $ do showStart "fix" file next $ perform file link