annex.autoupgrade setting

This commit is contained in:
Joey Hess 2013-11-22 16:04:20 -04:00
parent be069bd962
commit 31d43c63a4
4 changed files with 47 additions and 7 deletions

View file

@ -17,6 +17,7 @@ import Assistant.DaemonStatus
import Assistant.Alert
import Utility.NotificationBroadcaster
import Utility.Tmp
import qualified Annex
import qualified Build.SysConfig
import qualified Utility.Url as Url
import qualified Annex.Url as Url
@ -31,6 +32,7 @@ import qualified Data.Text as T
upgraderThread :: UrlRenderer -> NamedThread
upgraderThread urlrenderer = namedThread "Upgrader" $ do
checkUpgrade urlrenderer
when (isJust Build.SysConfig.upgradelocation) $ do
h <- liftIO . newNotificationHandle False . networkConnectedNotifier =<< getDaemonStatus
go h Nothing
@ -40,12 +42,16 @@ upgraderThread urlrenderer = namedThread "Upgrader" $ do
- check. -}
go h lastchecked = do
liftIO $ waitNotification h
now <- liftIO getCurrentTime
if maybe True (\t -> diffUTCTime now t > halfday) lastchecked
then do
checkUpgrade urlrenderer
go h =<< Just <$> liftIO getCurrentTime
else go h lastchecked
autoupgrade <- liftAnnex $ annexAutoUpgrade <$> Annex.getGitConfig
if autoupgrade == NoAutoUpgrade
then go h lastchecked
else do
now <- liftIO getCurrentTime
if maybe True (\t -> diffUTCTime now t > halfday) lastchecked
then do
checkUpgrade urlrenderer
go h =<< Just <$> liftIO getCurrentTime
else go h lastchecked
halfday = 12 * 60 * 60
checkUpgrade :: UrlRenderer -> Assistant ()

View file

@ -9,6 +9,7 @@ module Types.Distribution where
import Types.Key
import Data.Time.Clock
import Git.Config (isTrue, boolConfig)
data GitAnnexDistribution = GitAnnexDistribution
{ distributionUrl :: String
@ -20,3 +21,18 @@ data GitAnnexDistribution = GitAnnexDistribution
deriving (Read, Show, Eq)
type GitAnnexVersion = String
data AutoUpgrade = AskUpgrade | AutoUpgrade | NoAutoUpgrade
deriving (Eq)
toAutoUpgrade :: (Maybe String) -> AutoUpgrade
toAutoUpgrade Nothing = AskUpgrade
toAutoUpgrade (Just s)
| s == "ask" = AskUpgrade
| isTrue s == Just True = AutoUpgrade
| otherwise = NoAutoUpgrade
fromAutoUpgrade :: AutoUpgrade -> String
fromAutoUpgrade AskUpgrade = "ask"
fromAutoUpgrade AutoUpgrade = boolConfig True
fromAutoUpgrade NoAutoUpgrade = boolConfig False

View file

@ -17,6 +17,7 @@ import qualified Git
import qualified Git.Config
import Utility.DataUnits
import Config.Cost
import Types.Distribution
{- Main git-annex settings. Each setting corresponds to a git-config key
- such as annex.foo -}
@ -42,6 +43,7 @@ data GitConfig = GitConfig
, annexCrippledFileSystem :: Bool
, annexLargeFiles :: Maybe String
, annexFsckNudge :: Bool
, annexAutoUpgrade :: AutoUpgrade
, coreSymlinks :: Bool
, gcryptId :: Maybe String
}
@ -70,6 +72,7 @@ extractGitConfig r = GitConfig
, annexCrippledFileSystem = getbool (annex "crippledfilesystem") False
, annexLargeFiles = getmaybe (annex "largefiles")
, annexFsckNudge = getbool (annex "fscknudge") True
, annexAutoUpgrade = toAutoUpgrade $ getmaybe (annex "autoupgrade")
, coreSymlinks = getbool "core.symlinks" True
, gcryptId = getmaybe "core.gcrypt-id"
}

View file

@ -544,7 +544,7 @@ subdirectories).
to their local `git-annex` branches. So the forgetfulness will automatically
propigate out from its starting point until all repositories running
git-annex have forgotten their old history. (You may need to force
git to push the branch to any git repositories not running git-annex.
git to push the branch to any git repositories not running git-annex.)
* `repair`
@ -1147,6 +1147,21 @@ Here are all the supported configuration settings.
When set to false, prevents the webapp from reminding you when using
repositories that lack consistency checks.
* `annex.autoupgrade`
When set to ask (the default), the webapp will check for new versions
and prompt if they should be upgraded to. When set to true, automatically
upgrades without prompting (on some supported platforms). When set to
false, disables any upgrade checking.
Note that upgrade checking is only done when git-annex is installed
from one of the prebuilt images from its website. This does not
bypass eg, a Linux distribution's own upgrade handling code.
This setting also controls whether to restart the git-annex assistant
when the git-annex binary is detected to have changed. That is useful
no matter how you installed git-annex.
* `annex.autocommit`
Set to false to prevent the git-annex assistant from automatically