diff --git a/.git-annex/uuid.log b/.git-annex/uuid.log deleted file mode 100644 index 8cd9452b64..0000000000 --- a/.git-annex/uuid.log +++ /dev/null @@ -1 +0,0 @@ -1ac368a4-19e2-11e0-8c0f-8fcd42cf5a8d test repo diff --git a/Command.hs b/Command.hs index 0bbc6088c5..601b584642 100644 --- a/Command.hs +++ b/Command.hs @@ -147,7 +147,7 @@ withStrings a params = return $ map a params withFilesToBeCommitted :: CommandSeekStrings withFilesToBeCommitted a params = do repo <- Annex.gitRepo - tocommit <- liftIO $ runPreserveOrder (Git.stagedFiles repo) params + tocommit <- liftIO $ runPreserveOrder (Git.stagedFilesNotDeleted repo) params tocommit' <- filterFiles tocommit return $ map a tocommit' withFilesUnlocked :: CommandSeekBackendFiles diff --git a/Command/Unannex.hs b/Command/Unannex.hs index 3810cca1c2..c663b29ab0 100644 --- a/Command/Unannex.hs +++ b/Command/Unannex.hs @@ -8,6 +8,7 @@ module Command.Unannex where import Control.Monad.State (liftIO) +import Control.Monad (unless) import System.Directory import Command @@ -32,6 +33,11 @@ start file = isAnnexed file $ \(key, backend) -> do ishere <- inAnnex key if ishere then do + g <- Annex.gitRepo + staged <- liftIO $ Git.stagedFiles g [Git.workTree g] + unless (null staged) $ + error "This command cannot be run when there are already files staged for commit." + showStart "unannex" file return $ Just $ perform file key backend else return Nothing diff --git a/GitRepo.hs b/GitRepo.hs index 4e69544d43..031a9cbe21 100644 --- a/GitRepo.hs +++ b/GitRepo.hs @@ -38,6 +38,7 @@ module GitRepo ( inRepo, notInRepo, stagedFiles, + stagedFilesNotDeleted, changedUnstagedFiles, checkAttr, decodeGitFile, @@ -243,12 +244,20 @@ notInRepo :: Repo -> [FilePath] -> IO [FilePath] notInRepo repo l = pipeNullSplit repo $ ["ls-files", "--others", "--exclude-standard", "-z", "--"] ++ l +{- Returns a list of all files that are staged for commit. -} +stagedFiles :: Repo -> [FilePath] -> IO [FilePath] +stagedFiles repo l = stagedFiles' repo l [] + {- Returns a list of the files, staged for commit, that are being added, - moved, or changed (but not deleted), from the specified locations. -} -stagedFiles :: Repo -> [FilePath] -> IO [FilePath] -stagedFiles repo l = pipeNullSplit repo $ - ["diff", "--cached", "--name-only", "--diff-filter=ACMRT", "-z", - "--"] ++ l +stagedFilesNotDeleted :: Repo -> [FilePath] -> IO [FilePath] +stagedFilesNotDeleted repo l = stagedFiles' repo l ["--diff-filter=ACMRT"] + +stagedFiles' :: Repo -> [FilePath] -> [String] -> IO [FilePath] +stagedFiles' repo l middle = pipeNullSplit repo $ start ++ middle ++ end + where + start = ["diff", "--cached", "--name-only", "-z"] + end = ["--"] ++ l {- Returns a list of files that have unstaged changes. -} changedUnstagedFiles :: Repo -> [FilePath] -> IO [FilePath]