summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2015-03-20 14:52:58 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2015-03-20 14:52:58 -0400
commit9cd0833c28e4e8f9d4f45b3913e7540bdbeacb91 (patch)
tree7bd7442a613311a0b442b06208912d10fcc5f4e4
parent6d9ef07751656dfd996ff283570054586469bc99 (diff)
Added a post-update-annex hook, which is run after the git-annex branch is updated. Needed for git update-server-info.
-rw-r--r--Annex/Branch.hs19
-rw-r--r--Annex/Hook.hs3
-rw-r--r--debian/changelog2
-rw-r--r--doc/git-annex.mdwn8
4 files changed, 23 insertions, 9 deletions
diff --git a/Annex/Branch.hs b/Annex/Branch.hs
index 6ce711996..7cd86c581 100644
--- a/Annex/Branch.hs
+++ b/Annex/Branch.hs
@@ -55,6 +55,7 @@ import Annex.ReplaceFile
import qualified Annex.Queue
import Annex.Branch.Transitions
import qualified Annex
+import Annex.Hook
{- Name of the branch that is used to store git-annex's information. -}
name :: Git.Ref
@@ -166,13 +167,16 @@ updateTo pairs = do
mapM_ checkBranchDifferences refs
mergeIndex jl refs
let commitrefs = nub $ fullname:refs
- unlessM (handleTransitions jl localtransitions commitrefs) $ do
- ff <- if dirty
- then return False
- else inRepo $ Git.Branch.fastForward fullname refs
- if ff
- then updateIndex jl branchref
- else commitIndex jl branchref merge_desc commitrefs
+ ifM (handleTransitions jl localtransitions commitrefs)
+ ( runAnnexHook postUpdateAnnexHook
+ , do
+ ff <- if dirty
+ then return False
+ else inRepo $ Git.Branch.fastForward fullname refs
+ if ff
+ then updateIndex jl branchref
+ else commitIndex jl branchref merge_desc commitrefs
+ )
liftIO cleanjournal
{- Gets the content of a file, which may be in the journal, or in the index
@@ -384,6 +388,7 @@ setIndexSha ref = do
f <- fromRepo gitAnnexIndexStatus
liftIO $ writeFile f $ fromRef ref ++ "\n"
setAnnexFilePerm f
+ runAnnexHook postUpdateAnnexHook
{- Stages the journal into the index and returns an action that will
- clean up the staged journal files, which should only be run once
diff --git a/Annex/Hook.hs b/Annex/Hook.hs
index 253c77a60..1c17e03b4 100644
--- a/Annex/Hook.hs
+++ b/Annex/Hook.hs
@@ -25,6 +25,9 @@ preCommitHook = Git.Hook "pre-commit" (mkHookScript "git annex pre-commit .")
preCommitAnnexHook :: Git.Hook
preCommitAnnexHook = Git.Hook "pre-commit-annex" ""
+postUpdateAnnexHook :: Git.Hook
+postUpdateAnnexHook = Git.Hook "post-update-annex" ""
+
mkHookScript :: String -> String
mkHookScript s = unlines
[ shebang_local
diff --git a/debian/changelog b/debian/changelog
index 0578cb2a5..2cd3cdb70 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -3,6 +3,8 @@ git-annex (5.20150318) UNRELEASED; urgency=medium
* readpresentkey: New plumbing command for checking location log.
* checkpresentkey: New plumbing command to check if a key can be verified
to be present on a remote.
+ * Added a post-update-annex hook, which is run after the git-annex branch
+ is updated. Needed for git update-server-info.
-- Joey Hess <id@joeyh.name> Thu, 19 Mar 2015 17:05:32 -0400
diff --git a/doc/git-annex.mdwn b/doc/git-annex.mdwn
index 7cd02fb63..8e56f42b5 100644
--- a/doc/git-annex.mdwn
+++ b/doc/git-annex.mdwn
@@ -1953,8 +1953,12 @@ used by git-annex.
to start the git-annex assistant in.
`.git/hooks/pre-commit-annex` in your git repository will be run whenever
-a commit is made, either by git commit, git-annex sync, or the git-annex
-assistant.
+a commit is made to the HEAD branch, either by git commit, git-annex
+sync, or the git-annex assistant.
+
+`.git/hooks/post-update-annex` in your git repository will be run
+whenever the git-annex branch is updated. You can make this hook run
+`git update-server-info` when publishing a git-annex repository by http.
# SEE ALSO