summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2010-11-08 14:39:12 -0400
committerGravatar Joey Hess <joey@kitenet.net>2010-11-08 14:39:12 -0400
commitab4de454914954676aa1e05ef26dc8a85bd8f6f1 (patch)
tree17cd1334f17bb15df3d1a1d889e4f99887de9843
parentf03adec793d378cc4807392400d09e70e293a991 (diff)
Add annex.version, which will be used to automate upgrades.
-rw-r--r--Annex.hs12
-rw-r--r--Core.hs16
-rw-r--r--UUID.hs13
-rw-r--r--debian/changelog1
-rw-r--r--doc/git-annex.mdwn2
5 files changed, 32 insertions, 12 deletions
diff --git a/Annex.hs b/Annex.hs
index e86e1967e..7c046b141 100644
--- a/Annex.hs
+++ b/Annex.hs
@@ -19,7 +19,8 @@ module Annex (
flagGet,
Flag(..),
queue,
- queueGet
+ queueGet,
+ setConfig
) where
import Control.Monad.State
@@ -118,3 +119,12 @@ queueGet :: Annex GitQueue.Queue
queueGet = do
state <- get
return (Internals.repoqueue state)
+
+{- Changes a git config setting in both internal state and .git/config -}
+setConfig :: String -> String -> Annex ()
+setConfig key value = do
+ g <- Annex.gitRepo
+ liftIO $ Git.run g ["config", key, value]
+ -- re-read git config and update the repo's state
+ g' <- liftIO $ Git.configRead g Nothing
+ Annex.gitRepoChange g'
diff --git a/Core.hs b/Core.hs
index f34b2ebbe..347e63593 100644
--- a/Core.hs
+++ b/Core.hs
@@ -46,6 +46,7 @@ tryRun' _ errnum [] =
startup :: Annex Bool
startup = do
prepUUID
+ autoUpgrade
return True
{- When git-annex is done, it runs this. -}
@@ -151,6 +152,21 @@ getViaTmp key action = do
-- to resume its transfer
return False
+{- Uses the annex.version git config setting to automate upgrades. -}
+autoUpgrade :: Annex ()
+autoUpgrade = do
+ g <- Annex.gitRepo
+
+ case Git.configGet g field "0" of
+ "0" -> do -- before there was repo versioning
+ setVersion
+ v | v == currentVersion -> return ()
+ _ -> error "this version of git-annex is too old for this git repository!"
+ where
+ currentVersion = "1"
+ setVersion = Annex.setConfig field currentVersion
+ field = "annex.version"
+
{- Output logging -}
verbose :: Annex () -> Annex ()
verbose a = do
diff --git a/UUID.hs b/UUID.hs
index ffd2cd46d..0f8a2173e 100644
--- a/UUID.hs
+++ b/UUID.hs
@@ -65,7 +65,7 @@ getUUID r = do
where
uncached = Git.configGet r "annex.uuid" ""
cached g = Git.configGet g cachekey ""
- updatecache g u = when (g /= r) $ setConfig cachekey u
+ updatecache g u = when (g /= r) $ Annex.setConfig cachekey u
cachekey = "remote." ++ (Git.repoRemoteName r) ++ ".annex-uuid"
{- Make sure that the repo has an annex.uuid setting. -}
@@ -75,16 +75,7 @@ prepUUID = do
u <- getUUID g
when ("" == u) $ do
uuid <- liftIO $ genUUID
- setConfig configkey uuid
-
-{- Changes a git config setting in both internal state and .git/config -}
-setConfig :: String -> String -> Annex ()
-setConfig key value = do
- g <- Annex.gitRepo
- liftIO $ Git.run g ["config", key, value]
- -- re-read git config and update the repo's state
- g' <- liftIO $ Git.configRead g Nothing
- Annex.gitRepoChange g'
+ Annex.setConfig configkey uuid
{- Filters a list of repos to ones that have listed UUIDs. -}
reposByUUID :: [Git.Repo] -> [UUID] -> Annex [Git.Repo]
diff --git a/debian/changelog b/debian/changelog
index a363d442c..98b814eb9 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,6 +1,7 @@
git-annex (0.04) UNRELEASED; urgency=low
* Add build dep on libghc6-testpack-dev.
+ * Add annex.version, which will be used to automate upgrades.
-- Joey Hess <joeyh@debian.org> Mon, 08 Nov 2010 12:36:39 -0400
diff --git a/doc/git-annex.mdwn b/doc/git-annex.mdwn
index 856b474e0..6f2c85d57 100644
--- a/doc/git-annex.mdwn
+++ b/doc/git-annex.mdwn
@@ -207,6 +207,8 @@ Here are all the supported configuration settings.
to talk to this repository.
* `annex.scp-options` and `annex.ssh-options` -- Default scp and ssh
options to use if a remote does not have specific options.
+* `annex.version` -- Automatically maintained, and used to automate upgrades
+ between versions.
The backend used when adding a new file to the annex can be configured
on a per-file-type basis via the `.gitattributes` file. In the file,