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:
parent
585e6b39aa
commit
6ba3dea566
6 changed files with 46 additions and 17 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 =
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
"""]]
|
Loading…
Reference in a new issue