b932acf4ad
Have most of the sim command handler, but to keep it pure while implementing the rest will need some refactoring. It seems likely that running the simulation itself will not be able to be entirely pure. Preferred content evaluation runs in Annex after all. Note that the somewhat awkward randomWords is because the i386ancient build depends on a version of random too old to support generating a random ByteString on its own.
300 lines
8.3 KiB
Haskell
300 lines
8.3 KiB
Haskell
{- git-annex main program
|
|
-
|
|
- Copyright 2010-2024 Joey Hess <id@joeyh.name>
|
|
-
|
|
- Licensed under the GNU AGPL version 3 or higher.
|
|
-}
|
|
|
|
{-# LANGUAGE CPP, OverloadedStrings #-}
|
|
|
|
module CmdLine.GitAnnex where
|
|
|
|
import qualified Git.CurrentRepo
|
|
import CmdLine
|
|
import Command
|
|
import Utility.Env
|
|
import Annex.Ssh
|
|
import Annex.Multicast
|
|
import Types.Test
|
|
import Types.Benchmark
|
|
|
|
import qualified Command.Help
|
|
import qualified Command.Add
|
|
import qualified Command.Unannex
|
|
import qualified Command.Drop
|
|
import qualified Command.Move
|
|
import qualified Command.Copy
|
|
import qualified Command.Get
|
|
import qualified Command.Fsck
|
|
import qualified Command.LookupKey
|
|
import qualified Command.CalcKey
|
|
import qualified Command.ContentLocation
|
|
import qualified Command.ExamineKey
|
|
import qualified Command.MatchExpression
|
|
import qualified Command.FromKey
|
|
import qualified Command.RegisterUrl
|
|
import qualified Command.UnregisterUrl
|
|
import qualified Command.ReregisterUrl
|
|
import qualified Command.SetKey
|
|
import qualified Command.DropKey
|
|
import qualified Command.Transferrer
|
|
import qualified Command.TransferKey
|
|
import qualified Command.TransferKeys
|
|
import qualified Command.SetPresentKey
|
|
import qualified Command.ReadPresentKey
|
|
import qualified Command.CheckPresentKey
|
|
import qualified Command.ReKey
|
|
import qualified Command.Adjust
|
|
import qualified Command.MetaData
|
|
import qualified Command.View
|
|
import qualified Command.VAdd
|
|
import qualified Command.VFilter
|
|
import qualified Command.VPop
|
|
import qualified Command.VCycle
|
|
import qualified Command.Reinject
|
|
import qualified Command.Fix
|
|
import qualified Command.Init
|
|
import qualified Command.Describe
|
|
import qualified Command.InitRemote
|
|
import qualified Command.EnableRemote
|
|
import qualified Command.ConfigRemote
|
|
import qualified Command.RenameRemote
|
|
import qualified Command.EnableTor
|
|
import qualified Command.Multicast
|
|
import qualified Command.Expire
|
|
import qualified Command.Repair
|
|
import qualified Command.Unused
|
|
import qualified Command.DropUnused
|
|
import qualified Command.AddUnused
|
|
import qualified Command.Unlock
|
|
import qualified Command.Lock
|
|
import qualified Command.PreCommit
|
|
import qualified Command.PostReceive
|
|
import qualified Command.FilterBranch
|
|
import qualified Command.Find
|
|
import qualified Command.FindKeys
|
|
import qualified Command.FindRef
|
|
import qualified Command.Whereis
|
|
import qualified Command.WhereUsed
|
|
import qualified Command.List
|
|
import qualified Command.Log
|
|
import qualified Command.Merge
|
|
import qualified Command.ResolveMerge
|
|
import qualified Command.Info
|
|
import qualified Command.Status
|
|
import qualified Command.Inprogress
|
|
import qualified Command.Migrate
|
|
import qualified Command.Uninit
|
|
import qualified Command.Reinit
|
|
import qualified Command.NumCopies
|
|
import qualified Command.MinCopies
|
|
import qualified Command.Trust
|
|
import qualified Command.Untrust
|
|
import qualified Command.Semitrust
|
|
import qualified Command.Dead
|
|
import qualified Command.Group
|
|
import qualified Command.Wanted
|
|
import qualified Command.GroupWanted
|
|
import qualified Command.Required
|
|
import qualified Command.Schedule
|
|
import qualified Command.Ungroup
|
|
import qualified Command.Config
|
|
import qualified Command.Vicfg
|
|
import qualified Command.Sync
|
|
import qualified Command.Assist
|
|
import qualified Command.Pull
|
|
import qualified Command.Push
|
|
import qualified Command.Satisfy
|
|
import qualified Command.Mirror
|
|
import qualified Command.AddUrl
|
|
import qualified Command.ImportFeed
|
|
import qualified Command.RmUrl
|
|
import qualified Command.Import
|
|
import qualified Command.Export
|
|
import qualified Command.Map
|
|
import qualified Command.Direct
|
|
import qualified Command.Indirect
|
|
import qualified Command.Upgrade
|
|
import qualified Command.Forget
|
|
import qualified Command.OldKeys
|
|
import qualified Command.P2P
|
|
#ifdef WITH_SERVANT
|
|
import qualified Command.P2PHttp
|
|
#endif
|
|
import qualified Command.Proxy
|
|
import qualified Command.DiffDriver
|
|
import qualified Command.Smudge
|
|
import qualified Command.FilterProcess
|
|
import qualified Command.Restage
|
|
import qualified Command.Undo
|
|
import qualified Command.InitCluster
|
|
import qualified Command.UpdateCluster
|
|
import qualified Command.ExtendCluster
|
|
import qualified Command.UpdateProxy
|
|
import qualified Command.MaxSize
|
|
import qualified Command.Sim
|
|
import qualified Command.Version
|
|
import qualified Command.RemoteDaemon
|
|
#ifdef WITH_ASSISTANT
|
|
import qualified Command.Watch
|
|
import qualified Command.Assistant
|
|
#ifdef WITH_WEBAPP
|
|
import qualified Command.WebApp
|
|
#endif
|
|
#endif
|
|
import qualified Command.Test
|
|
import qualified Command.FuzzTest
|
|
import qualified Command.TestRemote
|
|
import qualified Command.Benchmark
|
|
|
|
cmds :: Parser TestOptions -> TestRunner -> MkBenchmarkGenerator -> [Command]
|
|
cmds testoptparser testrunner mkbenchmarkgenerator = map addGitAnnexCommonOptions $
|
|
[ Command.Help.cmd
|
|
, Command.Add.cmd
|
|
, Command.Get.cmd
|
|
, Command.Drop.cmd
|
|
, Command.Move.cmd
|
|
, Command.Copy.cmd
|
|
, Command.Fsck.cmd
|
|
, Command.Unlock.cmd
|
|
, Command.Unlock.editcmd
|
|
, Command.Lock.cmd
|
|
, Command.Sync.cmd
|
|
, Command.Assist.cmd
|
|
, Command.Pull.cmd
|
|
, Command.Push.cmd
|
|
, Command.Satisfy.cmd
|
|
, Command.Mirror.cmd
|
|
, Command.AddUrl.cmd
|
|
, Command.ImportFeed.cmd
|
|
, Command.RmUrl.cmd
|
|
, Command.Import.cmd
|
|
, Command.Export.cmd
|
|
, Command.Init.cmd
|
|
, Command.Describe.cmd
|
|
, Command.InitRemote.cmd
|
|
, Command.EnableRemote.cmd
|
|
, Command.ConfigRemote.cmd
|
|
, Command.RenameRemote.cmd
|
|
, Command.EnableTor.cmd
|
|
, Command.Multicast.cmd
|
|
, Command.Reinject.cmd
|
|
, Command.Unannex.cmd
|
|
, Command.Uninit.cmd
|
|
, Command.Reinit.cmd
|
|
, Command.PreCommit.cmd
|
|
, Command.PostReceive.cmd
|
|
, Command.NumCopies.cmd
|
|
, Command.MinCopies.cmd
|
|
, Command.Trust.cmd
|
|
, Command.Untrust.cmd
|
|
, Command.Semitrust.cmd
|
|
, Command.Dead.cmd
|
|
, Command.Group.cmd
|
|
, Command.Wanted.cmd
|
|
, Command.GroupWanted.cmd
|
|
, Command.Required.cmd
|
|
, Command.Schedule.cmd
|
|
, Command.Ungroup.cmd
|
|
, Command.Config.cmd
|
|
, Command.Vicfg.cmd
|
|
, Command.LookupKey.cmd
|
|
, Command.CalcKey.cmd
|
|
, Command.ContentLocation.cmd
|
|
, Command.ExamineKey.cmd
|
|
, Command.MatchExpression.cmd
|
|
, Command.FromKey.cmd
|
|
, Command.RegisterUrl.cmd
|
|
, Command.UnregisterUrl.cmd
|
|
, Command.ReregisterUrl.cmd
|
|
, Command.SetKey.cmd
|
|
, Command.DropKey.cmd
|
|
, Command.Transferrer.cmd
|
|
, Command.TransferKey.cmd
|
|
, Command.TransferKeys.cmd
|
|
, Command.SetPresentKey.cmd
|
|
, Command.ReadPresentKey.cmd
|
|
, Command.CheckPresentKey.cmd
|
|
, Command.ReKey.cmd
|
|
, Command.Adjust.cmd
|
|
, Command.MetaData.cmd
|
|
, Command.View.cmd
|
|
, Command.VAdd.cmd
|
|
, Command.VFilter.cmd
|
|
, Command.VPop.cmd
|
|
, Command.VCycle.cmd
|
|
, Command.Fix.cmd
|
|
, Command.Expire.cmd
|
|
, Command.Repair.cmd
|
|
, Command.Unused.cmd
|
|
, Command.DropUnused.cmd
|
|
, Command.AddUnused.cmd
|
|
, Command.FilterBranch.cmd
|
|
, Command.Find.cmd
|
|
, Command.FindKeys.cmd
|
|
, Command.FindRef.cmd
|
|
, Command.Whereis.cmd
|
|
, Command.WhereUsed.cmd
|
|
, Command.List.cmd
|
|
, Command.Log.cmd
|
|
, Command.Merge.cmd
|
|
, Command.ResolveMerge.cmd
|
|
, Command.Info.cmd
|
|
, Command.Status.cmd
|
|
, Command.Inprogress.cmd
|
|
, Command.Migrate.cmd
|
|
, Command.Map.cmd
|
|
, Command.Direct.cmd
|
|
, Command.Indirect.cmd
|
|
, Command.Upgrade.cmd
|
|
, Command.Forget.cmd
|
|
, Command.OldKeys.cmd
|
|
, Command.P2P.cmd
|
|
#ifdef WITH_SERVANT
|
|
, Command.P2PHttp.cmd
|
|
#endif
|
|
, Command.Proxy.cmd
|
|
, Command.DiffDriver.cmd
|
|
, Command.Smudge.cmd
|
|
, Command.FilterProcess.cmd
|
|
, Command.Restage.cmd
|
|
, Command.Undo.cmd
|
|
, Command.InitCluster.cmd
|
|
, Command.UpdateCluster.cmd
|
|
, Command.ExtendCluster.cmd
|
|
, Command.UpdateProxy.cmd
|
|
, Command.MaxSize.cmd
|
|
, Command.Sim.cmd
|
|
, Command.Version.cmd
|
|
, Command.RemoteDaemon.cmd
|
|
#ifdef WITH_ASSISTANT
|
|
, Command.Watch.cmd
|
|
, Command.Assistant.cmd
|
|
#ifdef WITH_WEBAPP
|
|
, Command.WebApp.cmd
|
|
#endif
|
|
#endif
|
|
, Command.Test.cmd testoptparser testrunner
|
|
, Command.FuzzTest.cmd
|
|
, Command.TestRemote.cmd
|
|
, Command.Benchmark.cmd $
|
|
mkbenchmarkgenerator $ cmds testoptparser testrunner (\_ _ -> return noop)
|
|
]
|
|
|
|
addGitAnnexCommonOptions :: Command -> Command
|
|
addGitAnnexCommonOptions c = c { cmdannexoptions = gitAnnexCommonOptions ++ cmdannexoptions c }
|
|
|
|
run :: Parser TestOptions -> TestRunner -> MkBenchmarkGenerator -> [String] -> IO ()
|
|
run testoptparser testrunner mkbenchmarkgenerator args = go envmodes
|
|
where
|
|
go [] = dispatch True True args
|
|
(cmds testoptparser testrunner mkbenchmarkgenerator)
|
|
[] Git.CurrentRepo.get
|
|
"git-annex"
|
|
"manage files with git, without checking their contents in"
|
|
go ((v, a):rest) = maybe (go rest) a =<< getEnv v
|
|
envmodes =
|
|
[ (sshOptionsEnv, runSshOptions args)
|
|
, (sshAskPassEnv, runSshAskPass)
|
|
, (multicastReceiveEnv, runMulticastReceive args)
|
|
]
|