New --time-limit option, makes long git-annex commands stop after a specified amount of time.
This commit is contained in:
parent
995b04d36f
commit
f0e0d17440
6 changed files with 63 additions and 4 deletions
|
@ -141,9 +141,11 @@ options = Option.common ++
|
||||||
"skip files with fewer copies"
|
"skip files with fewer copies"
|
||||||
, Option ['B'] ["inbackend"] (ReqArg Limit.addInBackend paramName)
|
, Option ['B'] ["inbackend"] (ReqArg Limit.addInBackend paramName)
|
||||||
"skip files not using a key-value backend"
|
"skip files not using a key-value backend"
|
||||||
|
, Option ['T'] ["time-limit"] (ReqArg Limit.addTimeLimit paramTime)
|
||||||
|
"stop after the specified amount of time"
|
||||||
] ++ Option.matcher
|
] ++ Option.matcher
|
||||||
where
|
where
|
||||||
setnumcopies v = Annex.changeState $ \s -> s {Annex.forcenumcopies = readish v }
|
setnumcopies v = Annex.changeState $ \s -> s { Annex.forcenumcopies = readish v }
|
||||||
setgitconfig :: String -> Annex ()
|
setgitconfig :: String -> Annex ()
|
||||||
setgitconfig v = do
|
setgitconfig v = do
|
||||||
newg <- inRepo $ Git.Config.store v
|
newg <- inRepo $ Git.Config.store v
|
||||||
|
|
16
Limit.hs
16
Limit.hs
|
@ -9,6 +9,7 @@ module Limit where
|
||||||
|
|
||||||
import Text.Regex.PCRE.Light.Char8
|
import Text.Regex.PCRE.Light.Char8
|
||||||
import System.Path.WildMatch
|
import System.Path.WildMatch
|
||||||
|
import Data.Time.Clock.POSIX
|
||||||
|
|
||||||
import Common.Annex
|
import Common.Annex
|
||||||
import qualified Annex
|
import qualified Annex
|
||||||
|
@ -17,6 +18,7 @@ import qualified Remote
|
||||||
import qualified Backend
|
import qualified Backend
|
||||||
import Annex.Content
|
import Annex.Content
|
||||||
import Logs.Trust
|
import Logs.Trust
|
||||||
|
import Utility.HumanTime
|
||||||
|
|
||||||
type Limit = Utility.Matcher.Token (FilePath -> Annex Bool)
|
type Limit = Utility.Matcher.Token (FilePath -> Annex Bool)
|
||||||
|
|
||||||
|
@ -106,3 +108,17 @@ addInBackend name = addLimit $ Backend.lookupFile >=> check
|
||||||
where
|
where
|
||||||
wanted = Backend.lookupBackendName name
|
wanted = Backend.lookupBackendName name
|
||||||
check = return . maybe False ((==) wanted . snd)
|
check = return . maybe False ((==) wanted . snd)
|
||||||
|
|
||||||
|
addTimeLimit :: String -> Annex ()
|
||||||
|
addTimeLimit s = do
|
||||||
|
let seconds = fromMaybe (error "bad time-limit") $ parseDuration s
|
||||||
|
start <- liftIO getPOSIXTime
|
||||||
|
let cutoff = start + seconds
|
||||||
|
addLimit $ const $ do
|
||||||
|
now <- liftIO getPOSIXTime
|
||||||
|
if now > cutoff
|
||||||
|
then do
|
||||||
|
warning $ "Time limit (" ++ s ++ ") reached!"
|
||||||
|
liftIO $ exitWith $ ExitFailure 101
|
||||||
|
else return True
|
||||||
|
|
||||||
|
|
2
Usage.hs
2
Usage.hs
|
@ -77,6 +77,8 @@ paramType :: String
|
||||||
paramType = "TYPE"
|
paramType = "TYPE"
|
||||||
paramDate :: String
|
paramDate :: String
|
||||||
paramDate = "DATE"
|
paramDate = "DATE"
|
||||||
|
paramTime :: String
|
||||||
|
paramTime = "TIME"
|
||||||
paramFormat :: String
|
paramFormat :: String
|
||||||
paramFormat = "FORMAT"
|
paramFormat = "FORMAT"
|
||||||
paramFile :: String
|
paramFile :: String
|
||||||
|
|
26
Utility/HumanTime.hs
Normal file
26
Utility/HumanTime.hs
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
{- Time for humans.
|
||||||
|
-
|
||||||
|
- Copyright 2012 Joey Hess <joey@kitenet.net>
|
||||||
|
-
|
||||||
|
- Licensed under the GNU GPL version 3 or higher.
|
||||||
|
-}
|
||||||
|
|
||||||
|
module Utility.HumanTime where
|
||||||
|
|
||||||
|
import Utility.PartialPrelude
|
||||||
|
|
||||||
|
import Data.Time.Clock.POSIX (POSIXTime)
|
||||||
|
|
||||||
|
{- Parses a human-input time duration, of the form "5h" or "1m". -}
|
||||||
|
parseDuration :: String -> Maybe POSIXTime
|
||||||
|
parseDuration s = do
|
||||||
|
num <- readish s :: Maybe Integer
|
||||||
|
units <- findUnits =<< lastMaybe s
|
||||||
|
return $ fromIntegral num * units
|
||||||
|
where
|
||||||
|
findUnits 's' = Just 1
|
||||||
|
findUnits 'm' = Just 60
|
||||||
|
findUnits 'h' = Just $ 60 * 60
|
||||||
|
findUnits 'd' = Just $ 60 * 60 * 24
|
||||||
|
findUnits 'y' = Just $ 60 * 60 * 24 * 365
|
||||||
|
findUnits _ = Nothing
|
2
debian/changelog
vendored
2
debian/changelog
vendored
|
@ -6,6 +6,8 @@ git-annex (3.20120925) UNRELEASED; urgency=low
|
||||||
with git annex fsck --incremental. Now the fsck can be interrupted
|
with git annex fsck --incremental. Now the fsck can be interrupted
|
||||||
as desired, and resumed with git annex fsck --more.
|
as desired, and resumed with git annex fsck --more.
|
||||||
Thanks, Justin Azoff
|
Thanks, Justin Azoff
|
||||||
|
* New --time-limit option, makes long git-annex commands stop after
|
||||||
|
a specified amount of time.
|
||||||
|
|
||||||
-- Joey Hess <joeyh@debian.org> Mon, 24 Sep 2012 19:58:07 -0400
|
-- Joey Hess <joeyh@debian.org> Mon, 24 Sep 2012 19:58:07 -0400
|
||||||
|
|
||||||
|
|
|
@ -259,13 +259,13 @@ subdirectories).
|
||||||
|
|
||||||
To check a remote to fsck, specify --from.
|
To check a remote to fsck, specify --from.
|
||||||
|
|
||||||
|
To avoid expensive checksum calculations (and expensive transfers when
|
||||||
|
fscking a remote), specify --fast.
|
||||||
|
|
||||||
To start a new incremental fsck, specify --incremental. Then
|
To start a new incremental fsck, specify --incremental. Then
|
||||||
the next time you fsck, you can specify --more to skip over
|
the next time you fsck, you can specify --more to skip over
|
||||||
files that have already been checked, and continue where it left off.
|
files that have already been checked, and continue where it left off.
|
||||||
|
|
||||||
To avoid expensive checksum calculations (and expensive transfers when
|
|
||||||
fscking a remote), specify --fast.
|
|
||||||
|
|
||||||
* unused
|
* unused
|
||||||
|
|
||||||
Checks the annex for data that does not correspond to any files present
|
Checks the annex for data that does not correspond to any files present
|
||||||
|
@ -514,6 +514,17 @@ subdirectories).
|
||||||
Overrides the `annex.numcopies` setting, forcing git-annex to ensure the
|
Overrides the `annex.numcopies` setting, forcing git-annex to ensure the
|
||||||
specified number of copies exist.
|
specified number of copies exist.
|
||||||
|
|
||||||
|
* --time-limit=time
|
||||||
|
|
||||||
|
Limits how long a git-annex command runs. The time can be something
|
||||||
|
like "5h", or "30m" or even "45s" or "10d".
|
||||||
|
|
||||||
|
Note that git-annex may continue running a little past the specified
|
||||||
|
time limit, in order to finish processing a file.
|
||||||
|
|
||||||
|
Also, note that if the time limit prevents git-annex from doing all it
|
||||||
|
was asked to, it will exit with a special code, 101.
|
||||||
|
|
||||||
* --trust=repository
|
* --trust=repository
|
||||||
* --semitrust=repository
|
* --semitrust=repository
|
||||||
* --untrust=repository
|
* --untrust=repository
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue