annex.jobs

Added annex.jobs setting, which is like using the -J option.

Of course, -J overrides annex.jobs.

This commit was sponsored by Trenton Cronholm on Patreon.
This commit is contained in:
Joey Hess 2018-10-04 12:47:27 -04:00
parent 585e6b39aa
commit 6ba3dea566
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
6 changed files with 46 additions and 17 deletions

View file

@ -3,6 +3,7 @@ git-annex (6.20180927) UNRELEASED; urgency=medium
* sync: Warn when a remote's export is not updated to the current
tree because export tracking is not configured.
* Improve display when git config download from a http remote fails.
* Added annex.jobs setting, which is like using the -J option.
-- Joey Hess <id@joeyh.name> Thu, 27 Sep 2018 15:27:20 -0400

View file

@ -170,20 +170,32 @@ callCommandActionQuiet = start
{- Do concurrent output when that has been requested. -}
allowConcurrentOutput :: Annex a -> Annex a
#ifdef WITH_CONCURRENTOUTPUT
allowConcurrentOutput a = go =<< Annex.getState Annex.concurrency
allowConcurrentOutput a = do
fromcmdline <- Annex.getState Annex.concurrency
fromgitcfg <- annexJobs <$> Annex.getGitConfig
case (fromcmdline, fromgitcfg) of
(NonConcurrent, NonConcurrent) -> a
(Concurrent n, _) -> goconcurrent n
(NonConcurrent, Concurrent n) -> do
Annex.changeState $
\c -> c { Annex.concurrency = fromgitcfg }
goconcurrent n
where
go NonConcurrent = a
go (Concurrent _) = ifM (liftIO concurrentOutputSupported)
( Regions.displayConsoleRegions $
goconcurrent True
, goconcurrent False
)
goconcurrent b = bracket_ (setup b) cleanup a
setup = setconcurrentenabled
goconcurrent n = do
c <- liftIO getNumCapabilities
when (n > c) $
liftIO $ setNumCapabilities n
ifM (liftIO concurrentOutputSupported)
( Regions.displayConsoleRegions $
goconcurrent' True
, goconcurrent' False
)
goconcurrent' b = bracket_ (setup b) cleanup a
setup = setconcurrentoutputenabled
cleanup = do
finishCommandActions
setconcurrentenabled False
setconcurrentenabled b = Annex.changeState $ \s ->
setconcurrentoutputenabled False
setconcurrentoutputenabled b = Annex.changeState $ \s ->
s { Annex.output = (Annex.output s) { concurrentOutputEnabled = b } }
#else
allowConcurrentOutput = id

View file

@ -13,7 +13,6 @@ import Options.Applicative
#if ! MIN_VERSION_optparse_applicative(0,14,1)
import Options.Applicative.Builder.Internal
#endif
import Control.Concurrent
import qualified Data.Map as M
import Annex.Common
@ -370,11 +369,7 @@ jobsOption =
)
]
where
set n = do
Annex.changeState $ \s -> s { Annex.concurrency = Concurrent n }
c <- liftIO getNumCapabilities
when (n > c) $
liftIO $ setNumCapabilities n
set n = Annex.changeState $ \s -> s { Annex.concurrency = Concurrent n }
timeLimitOption :: [GlobalOption]
timeLimitOption =

View file

@ -26,6 +26,7 @@ import Config.Cost
import Types.UUID
import Types.Distribution
import Types.Availability
import Types.Concurrency
import Types.NumCopies
import Types.Difference
import Types.RefSpec
@ -99,6 +100,7 @@ data GitConfig = GitConfig
, annexAllowedHttpAddresses :: String
, annexAllowUnverifiedDownloads :: Bool
, annexMaxExtensionLength :: Maybe Int
, annexJobs :: Concurrency
, coreSymlinks :: Bool
, coreSharedRepository :: SharedRepository
, receiveDenyCurrentBranch :: DenyCurrentBranch
@ -173,6 +175,7 @@ extractGitConfig r = GitConfig
, annexAllowUnverifiedDownloads = (== Just "ACKTHPPT") $
getmaybe (annex "security.allow-unverified-downloads")
, annexMaxExtensionLength = getmayberead (annex "maxextensionlength")
, annexJobs = maybe NonConcurrent Concurrent $ getmayberead (annex "jobs")
, coreSymlinks = getbool "core.symlinks" True
, coreSharedRepository = getSharedRepository r
, receiveDenyCurrentBranch = getDenyCurrentBranch r

View file

@ -935,6 +935,13 @@ Here are all the supported configuration settings.
This controls which refs `git-annex unused` considers to be used.
See REFSPEC FORMAT in [[git-annex-unused]](1) for details.
* `annex.jobs
Configure the number of concurrent jobs to run. Default is 1.
Only git-annex commands that support the --jobs option will
use this.
* `annex.queuesize`
git-annex builds a queue of git commands, in order to combine similar

View file

@ -0,0 +1,11 @@
[[!comment format=mdwn
username="joey"
subject="""comment 1"""
date="2018-10-04T16:04:57Z"
content="""
git-annex is rarely cpu-bound so I don't know how useful that would really
be in practice.
A git config to set the concurrency level is certianly a good idea,
implemented as annex.jobs.
"""]]