diff --git a/Command.hs b/Command.hs index 86da454195..d54a7052e9 100644 --- a/Command.hs +++ b/Command.hs @@ -10,7 +10,7 @@ module Command where import Control.Monad.State (liftIO) import System.Directory import System.Posix.Files -import Control.Monad (filterM, liftM) +import Control.Monad (filterM, liftM, when) import System.Path.WildMatch import Text.Regex.PCRE.Light.Char8 import Data.List @@ -104,6 +104,13 @@ isAnnexed file a = do Just v -> a v Nothing -> return Nothing +notBareRepo :: Annex a -> Annex a +notBareRepo a = do + g <- Annex.gitRepo + when (Git.repoIsLocalBare g) $ do + error "You cannot run this subcommand in a bare repository." + a + {- These functions find appropriate files or other things based on a user's parameters, and run a specified action on them. -} withFilesInGit :: CommandSeekStrings diff --git a/Command/Semitrust.hs b/Command/Semitrust.hs index a91d25359c..13c6847e17 100644 --- a/Command/Semitrust.hs +++ b/Command/Semitrust.hs @@ -22,7 +22,7 @@ seek :: [CommandSeek] seek = [withString start] start :: CommandStartString -start name = do +start name = notBareRepo $ do showStart "semitrust" name Remotes.readConfigs r <- Remotes.byName name diff --git a/Command/Trust.hs b/Command/Trust.hs index 3fbff68b89..ea661da2a6 100644 --- a/Command/Trust.hs +++ b/Command/Trust.hs @@ -22,7 +22,7 @@ seek :: [CommandSeek] seek = [withString start] start :: CommandStartString -start name = do +start name = notBareRepo $ do showStart "trust" name Remotes.readConfigs r <- Remotes.byName name diff --git a/Command/Untrust.hs b/Command/Untrust.hs index 69d0ab391a..fdf9a83dec 100644 --- a/Command/Untrust.hs +++ b/Command/Untrust.hs @@ -22,7 +22,7 @@ seek :: [CommandSeek] seek = [withString start] start :: CommandStartString -start name = do +start name = notBareRepo $ do showStart "untrust" name Remotes.readConfigs r <- Remotes.byName name diff --git a/doc/bare_repositories.mdwn b/doc/bare_repositories.mdwn index f08cf605d1..e3c82d0194 100644 --- a/doc/bare_repositories.mdwn +++ b/doc/bare_repositories.mdwn @@ -19,12 +19,9 @@ Known to work ok: There are a few caveats to keep in mind: -* Using non-local bare repositories is not tested and probably broken. * `git annex init` can be run in a bare repository, but it cannot store the name you gave the repository in .git-annex/uuid.log (because the bare repository has no such file to commit to). -* `git annex trust` cannot be used in a bare repository, and currently - does something pointless. Same for `untrust` and `semitrust`. * `git annex fromkey` does something pointless in a bare repository. * `git annex fsck` cannot detect any problems in a bare repository. * `git annex unused` will think everything stored in a bare repository