aboutsummaryrefslogtreecommitdiff
path: root/CmdLine.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2010-11-11 18:21:54 -0400
committerGravatar Joey Hess <joey@kitenet.net>2010-11-11 18:21:54 -0400
commitf2c7a6e73d342f4f82be4e2839a2022f97539c65 (patch)
tree4a950305a09c6c324ab22be8be2a18aed31e2a76 /CmdLine.hs
parentce62f5abf16e578f9f4b86cd140ea2ddfb1e4217 (diff)
got rid of several more calls to git when finding unlocked files
Diffstat (limited to 'CmdLine.hs')
-rw-r--r--CmdLine.hs22
1 files changed, 15 insertions, 7 deletions
diff --git a/CmdLine.hs b/CmdLine.hs
index 7c9d75c18..5c25b41c3 100644
--- a/CmdLine.hs
+++ b/CmdLine.hs
@@ -10,6 +10,7 @@ module CmdLine (parseCmd) where
import System.Console.GetOpt
import Control.Monad.State (liftIO)
import System.Directory
+import System.Posix.Files
import Control.Monad (filterM, when)
import qualified GitRepo as Git
@@ -17,7 +18,6 @@ import qualified Annex
import Locations
import qualified Backend
import Types
-import Core
import Command
import qualified Command.Add
@@ -138,8 +138,11 @@ withFilesNotInGit a params = do
backendPairs a $ foldl (++) [] newfiles
withFilesUnlocked :: SubCmdSeekBackendFiles
withFilesUnlocked a params = do
- unlocked <- mapM unlockedFiles params
- backendPairs a $ foldl (++) [] unlocked
+ -- unlocked files have changed type from a symlink to a regular file
+ repo <- Annex.gitRepo
+ typechangedfiles <- liftIO $ mapM (Git.typeChangedFiles repo) params
+ unlockedfiles <- liftIO $ filterM notSymlink $ foldl (++) [] typechangedfiles
+ backendPairs a $ filter notState unlockedfiles
backendPairs :: SubCmdSeekBackendFiles
backendPairs a files = do
pairs <- Backend.chooseBackends files
@@ -154,10 +157,9 @@ withFilesToBeCommitted a params = do
withUnlockedFilesToBeCommitted :: SubCmdSeekStrings
withUnlockedFilesToBeCommitted a params = do
repo <- Annex.gitRepo
- unlocked <- mapM unlockedFiles params
- tocommit <- liftIO $ mapM (Git.stagedFiles repo) $
- filter notState $ foldl (++) [] unlocked
- return $ map a $ foldl (++) [] tocommit
+ typechangedfiles <- liftIO $ mapM (Git.typeChangedStagedFiles repo) params
+ unlockedfiles <- liftIO $ filterM notSymlink $ foldl (++) [] typechangedfiles
+ return $ map a $ filter notState unlockedfiles
withKeys :: SubCmdSeekStrings
withKeys a params = return $ map a params
withTempFile :: SubCmdSeekStrings
@@ -168,6 +170,12 @@ withNothing a _ = return [a]
{- filter out files from the state directory -}
notState :: FilePath -> Bool
notState f = stateLoc /= take (length stateLoc) f
+
+{- filter out symlinks -}
+notSymlink :: FilePath -> IO Bool
+notSymlink f = do
+ s <- liftIO $ getSymbolicLinkStatus f
+ return $ not $ isSymbolicLink s
{- Parses command line and returns two lists of actions to be
- run in the Annex monad. The first actions configure it