findcompute --inputs
Useful for eg, generating dependency graphs.
This commit is contained in:
parent
a669b7f3ec
commit
74457b6b93
3 changed files with 80 additions and 16 deletions
|
@ -17,6 +17,10 @@ import Command.Find (showFormatted, formatVars)
|
|||
import Remote.Compute (isComputeRemote, getComputeState, ComputeState(..))
|
||||
import qualified Remote
|
||||
import qualified Types.Remote as Remote
|
||||
import Database.Keys
|
||||
import Annex.CatFile
|
||||
|
||||
import qualified Data.Map as M
|
||||
|
||||
cmd :: Command
|
||||
cmd = withAnnexOptions [annexedMatchingOptions] $ noCommit $ noMessages $
|
||||
|
@ -28,6 +32,7 @@ data FindComputedOptions = FindComputedOptions
|
|||
{ findThese :: CmdParams
|
||||
, formatOption :: Maybe Utility.Format.Format
|
||||
, keyOptions :: Maybe KeyOptions
|
||||
, inputsOption :: Bool
|
||||
}
|
||||
|
||||
optParser :: CmdParamsDesc -> Parser FindComputedOptions
|
||||
|
@ -35,6 +40,10 @@ optParser desc = FindComputedOptions
|
|||
<$> cmdParams desc
|
||||
<*> optional parseFormatOption
|
||||
<*> optional parseBranchKeysOption
|
||||
<*> switch
|
||||
( long "inputs"
|
||||
<> help "display input files"
|
||||
)
|
||||
|
||||
parseFormatOption :: Parser Utility.Format.Format
|
||||
parseFormatOption =
|
||||
|
@ -69,22 +78,51 @@ start o isterminal computeremotes _ file key = do
|
|||
if null rcs
|
||||
then stop
|
||||
else startingCustomOutput key $ do
|
||||
forM_ rcs $ \(r, c) -> do
|
||||
let computation = unwords (computeParams c)
|
||||
let unformatted = fromOsPath file
|
||||
<> " (" <> encodeBS (Remote.name r)
|
||||
<> ") -- "
|
||||
<> encodeBS computation
|
||||
let formatvars =
|
||||
[ ("remote", Remote.name r)
|
||||
, ("computation", computation)
|
||||
] ++ formatVars key (AssociatedFile (Just file))
|
||||
showFormatted isterminal (formatOption o)
|
||||
unformatted formatvars
|
||||
forM_ rcs display
|
||||
next $ return True
|
||||
where
|
||||
get r = fmap (r, )
|
||||
<$> getComputeState (Remote.remoteStateHandle r) key
|
||||
|
||||
showformatted = showFormatted isterminal (formatOption o)
|
||||
|
||||
unformatted r computation = fromOsPath file
|
||||
<> " (" <> encodeBS (Remote.name r)
|
||||
<> ") -- "
|
||||
<> encodeBS computation
|
||||
|
||||
unformattedinputs (Right inputfile) = fromOsPath file
|
||||
<> " " <> fromOsPath inputfile
|
||||
unformattedinputs (Left inputkey) = fromOsPath file
|
||||
<> " " <> serializeKey' inputkey
|
||||
|
||||
display (r, c) = do
|
||||
let computation = unwords (computeParams c)
|
||||
let formatvars =
|
||||
[ ("remote", Remote.name r)
|
||||
, ("computation", computation)
|
||||
] ++ formatVars key (AssociatedFile (Just file))
|
||||
if inputsOption o
|
||||
then forM_ (M.elems $ computeInputs c) $ \inputkey -> do
|
||||
input <- maybe (Left inputkey) Right
|
||||
<$> getassociated inputkey
|
||||
showformatted (unformattedinputs input) $
|
||||
[ ("input", either serializeKey fromOsPath input)
|
||||
, ("inputkey", serializeKey inputkey)
|
||||
, ("inputfile", either (const "") fromOsPath input)
|
||||
] ++ formatvars
|
||||
else showformatted (unformatted r computation) formatvars
|
||||
|
||||
getassociated inputkey =
|
||||
getAssociatedFiles inputkey
|
||||
>>= mapM (fromRepo . fromTopFilePath)
|
||||
>>= firstM (stillassociated inputkey)
|
||||
|
||||
-- Some associated files that are in the keys database may no
|
||||
-- longer correspond to files in the repository.
|
||||
stillassociated k f = catKeyFile f >>= return . \case
|
||||
Just k' | k' == k -> True
|
||||
_ -> False
|
||||
|
||||
startKeys :: FindComputedOptions -> IsTerminal -> [Remote] -> (SeekInput, Key, ActionItem) -> CommandStart
|
||||
startKeys o isterminal computeremotes (si, key, ActionItemBranchFilePath (BranchFilePath _ topf) _) =
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue