summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2011-03-03 16:22:53 -0400
committerGravatar Joey Hess <joey@kitenet.net>2011-03-03 16:22:53 -0400
commitb88637fff10d4d845404882e4ec95cfc071dcac0 (patch)
treec4e2067d6bbe2a8de44c2bc25212473409bb4802
parenta9d0538da559c29509c50b664e31ea3b23b7bc14 (diff)
prevent trust commands from trying to do things in a bare repo
Since they need to stage changes, they would actually, if allowed to run, succeed, but wipe out existing trust.log content.
-rw-r--r--Command.hs9
-rw-r--r--Command/Semitrust.hs2
-rw-r--r--Command/Trust.hs2
-rw-r--r--Command/Untrust.hs2
-rw-r--r--doc/bare_repositories.mdwn3
5 files changed, 11 insertions, 7 deletions
diff --git a/Command.hs b/Command.hs
index 86da45419..d54a7052e 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 a91d25359..13c6847e1 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 3fbff68b8..ea661da2a 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 69d0ab391..fdf9a83de 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 f08cf605d..e3c82d019 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