summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Checks.hs13
-rw-r--r--Command/Direct.hs2
-rw-r--r--Command/Indirect.hs5
-rw-r--r--debian/changelog2
-rw-r--r--doc/bugs/Weird_behaviour_of_direct_and_indirect_annexes.mdwn5
5 files changed, 21 insertions, 6 deletions
diff --git a/Checks.hs b/Checks.hs
index 92e9f7e38..67aa51a2a 100644
--- a/Checks.hs
+++ b/Checks.hs
@@ -3,7 +3,7 @@
- Common sanity checks for commands, and an interface to selectively
- remove them, or add others.
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2013 Joey Hess <joey@kitenet.net>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -14,6 +14,7 @@ import Common.Annex
import Types.Command
import Init
import Config
+import Utility.Daemon
import qualified Git
commonChecks :: [CommandCheck]
@@ -24,11 +25,17 @@ repoExists = CommandCheck 0 ensureInitialized
notDirect :: Command -> Command
notDirect = addCheck $ whenM isDirect $
- error "You cannot run this subcommand in a direct mode repository."
+ error "You cannot run this command in a direct mode repository."
notBareRepo :: Command -> Command
notBareRepo = addCheck $ whenM (fromRepo Git.repoIsLocalBare) $
- error "You cannot run this subcommand in a bare repository."
+ error "You cannot run this command in a bare repository."
+
+noDaemonRunning :: Command -> Command
+noDaemonRunning = addCheck $ whenM (isJust <$> daemonpid) $
+ error "You cannot run this command while git-annex watch or git-annex assistant is running."
+ where
+ daemonpid = liftIO . checkDaemon =<< fromRepo gitAnnexPidFile
dontCheck :: CommandCheck -> Command -> Command
dontCheck check cmd = mutateCheck cmd $ \c -> filter (/= check) c
diff --git a/Command/Direct.hs b/Command/Direct.hs
index 7ded712ae..7835988b4 100644
--- a/Command/Direct.hs
+++ b/Command/Direct.hs
@@ -17,7 +17,7 @@ import Annex.Direct
import Annex.Version
def :: [Command]
-def = [notBareRepo $
+def = [notBareRepo $ noDaemonRunning $
command "direct" paramNothing seek
SectionSetup "switch repository to direct mode"]
diff --git a/Command/Indirect.hs b/Command/Indirect.hs
index 9ce2751be..59972a66b 100644
--- a/Command/Indirect.hs
+++ b/Command/Indirect.hs
@@ -21,8 +21,9 @@ import Annex.Version
import Init
def :: [Command]
-def = [notBareRepo $ command "indirect" paramNothing seek
- SectionSetup "switch repository to indirect mode"]
+def = [notBareRepo $ noDaemonRunning $
+ command "indirect" paramNothing seek
+ SectionSetup "switch repository to indirect mode"]
seek :: [CommandSeek]
seek = [withNothing start]
diff --git a/debian/changelog b/debian/changelog
index 8a5053167..e249cad87 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -16,6 +16,8 @@ git-annex (4.20130418) UNRELEASED; urgency=low
* webapp: When told to add a git repository on a remote server, and
the repository already exists as a non-bare repository, use it,
rather than initializing a bare repository in the same directory.
+ * direct, indirect: Refuse to do anything when the assistant
+ or git-annex watch daemon is running.
-- Joey Hess <joeyh@debian.org> Thu, 18 Apr 2013 16:22:48 -0400
diff --git a/doc/bugs/Weird_behaviour_of_direct_and_indirect_annexes.mdwn b/doc/bugs/Weird_behaviour_of_direct_and_indirect_annexes.mdwn
index f8d0155f6..b3b0eea64 100644
--- a/doc/bugs/Weird_behaviour_of_direct_and_indirect_annexes.mdwn
+++ b/doc/bugs/Weird_behaviour_of_direct_and_indirect_annexes.mdwn
@@ -50,3 +50,8 @@ that all three copies are stored in ~/Indirect, so the functionality I'm after s
**Edit: Doing a git annex sync in ~/Indirect results in the continuing behaviour to be correct, so there's some issue telling Direct that Indirect is no longer in direct-mode?**
This appears to fix it, but I guess shouldn't be necessary.
+
+> AFAICS, the entire problem is that the assistant does not notice when the
+> repository it's running in is changed from direct to indirect mode. Since this
+> has also been reported to cause problems with the assistant, I have added
+> a check to prevent it from being done. [[done]] --[[Joey]]