2011-01-06 20:26:57 -04:00
|
|
|
{- git-annex main program
|
|
|
|
-
|
|
|
|
- Copyright 2010 Joey Hess <joey@kitenet.net>
|
|
|
|
-
|
|
|
|
- Licensed under the GNU GPL version 3 or higher.
|
|
|
|
-}
|
|
|
|
|
|
|
|
module GitAnnex where
|
|
|
|
|
|
|
|
import System.Console.GetOpt
|
|
|
|
|
2011-10-05 16:02:51 -04:00
|
|
|
import Common.Annex
|
2011-12-13 15:05:07 -04:00
|
|
|
import qualified Git.Config
|
|
|
|
import qualified Git.Construct
|
2011-01-07 02:15:10 -04:00
|
|
|
import CmdLine
|
2011-01-06 20:26:57 -04:00
|
|
|
import Command
|
2011-06-23 21:25:39 -04:00
|
|
|
import Types.TrustLevel
|
2011-01-26 00:17:38 -04:00
|
|
|
import qualified Annex
|
2011-06-01 19:10:38 -04:00
|
|
|
import qualified Remote
|
2011-09-18 17:47:49 -04:00
|
|
|
import qualified Limit
|
2011-12-22 18:31:44 -04:00
|
|
|
import qualified Utility.Format
|
2011-01-06 20:26:57 -04:00
|
|
|
|
|
|
|
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.FromKey
|
|
|
|
import qualified Command.DropKey
|
2011-10-31 15:18:41 -04:00
|
|
|
import qualified Command.Reinject
|
2011-01-06 20:26:57 -04:00
|
|
|
import qualified Command.Fix
|
|
|
|
import qualified Command.Init
|
2011-03-03 17:21:00 -04:00
|
|
|
import qualified Command.Describe
|
2011-03-28 23:22:31 -04:00
|
|
|
import qualified Command.InitRemote
|
2011-01-06 20:26:57 -04:00
|
|
|
import qualified Command.Fsck
|
|
|
|
import qualified Command.Unused
|
|
|
|
import qualified Command.DropUnused
|
|
|
|
import qualified Command.Unlock
|
|
|
|
import qualified Command.Lock
|
|
|
|
import qualified Command.PreCommit
|
|
|
|
import qualified Command.Find
|
2011-03-05 17:23:55 -04:00
|
|
|
import qualified Command.Whereis
|
2011-06-22 18:46:45 -04:00
|
|
|
import qualified Command.Merge
|
2011-05-16 21:18:34 -04:00
|
|
|
import qualified Command.Status
|
2011-01-08 15:54:14 -04:00
|
|
|
import qualified Command.Migrate
|
2011-01-06 20:26:57 -04:00
|
|
|
import qualified Command.Uninit
|
|
|
|
import qualified Command.Trust
|
|
|
|
import qualified Command.Untrust
|
2011-01-26 15:37:16 -04:00
|
|
|
import qualified Command.Semitrust
|
2011-12-02 16:59:55 -04:00
|
|
|
import qualified Command.Dead
|
2011-12-09 20:27:22 -04:00
|
|
|
import qualified Command.Sync
|
2011-07-01 17:15:46 -04:00
|
|
|
import qualified Command.AddUrl
|
2011-02-03 18:55:12 -04:00
|
|
|
import qualified Command.Map
|
2011-03-16 15:48:26 -04:00
|
|
|
import qualified Command.Upgrade
|
2011-03-19 14:33:24 -04:00
|
|
|
import qualified Command.Version
|
2011-01-06 20:26:57 -04:00
|
|
|
|
|
|
|
cmds :: [Command]
|
|
|
|
cmds = concat
|
2011-10-29 15:19:05 -04:00
|
|
|
[ Command.Add.def
|
|
|
|
, Command.Get.def
|
|
|
|
, Command.Drop.def
|
|
|
|
, Command.Move.def
|
|
|
|
, Command.Copy.def
|
|
|
|
, Command.Unlock.def
|
|
|
|
, Command.Lock.def
|
2011-12-09 20:27:22 -04:00
|
|
|
, Command.Sync.def
|
|
|
|
, Command.AddUrl.def
|
2011-10-29 15:19:05 -04:00
|
|
|
, Command.Init.def
|
|
|
|
, Command.Describe.def
|
|
|
|
, Command.InitRemote.def
|
2011-10-31 15:18:41 -04:00
|
|
|
, Command.Reinject.def
|
2011-10-29 15:19:05 -04:00
|
|
|
, Command.Unannex.def
|
|
|
|
, Command.Uninit.def
|
|
|
|
, Command.PreCommit.def
|
|
|
|
, Command.Trust.def
|
|
|
|
, Command.Untrust.def
|
|
|
|
, Command.Semitrust.def
|
2011-12-02 16:59:55 -04:00
|
|
|
, Command.Dead.def
|
2011-10-29 15:19:05 -04:00
|
|
|
, Command.FromKey.def
|
|
|
|
, Command.DropKey.def
|
|
|
|
, Command.Fix.def
|
|
|
|
, Command.Fsck.def
|
|
|
|
, Command.Unused.def
|
|
|
|
, Command.DropUnused.def
|
|
|
|
, Command.Find.def
|
|
|
|
, Command.Whereis.def
|
|
|
|
, Command.Merge.def
|
|
|
|
, Command.Status.def
|
|
|
|
, Command.Migrate.def
|
|
|
|
, Command.Map.def
|
|
|
|
, Command.Upgrade.def
|
|
|
|
, Command.Version.def
|
2011-01-06 20:26:57 -04:00
|
|
|
]
|
|
|
|
|
|
|
|
options :: [Option]
|
|
|
|
options = commonOptions ++
|
2011-10-31 12:33:41 -04:00
|
|
|
[ Option ['t'] ["to"] (ReqArg setto paramRemote)
|
2011-01-06 20:26:57 -04:00
|
|
|
"specify to where to transfer content"
|
2011-01-26 00:17:38 -04:00
|
|
|
, Option ['f'] ["from"] (ReqArg setfrom paramRemote)
|
2011-01-06 20:26:57 -04:00
|
|
|
"specify from where to transfer content"
|
2011-06-01 16:49:17 -04:00
|
|
|
, Option ['N'] ["numcopies"] (ReqArg setnumcopies paramNumber)
|
|
|
|
"override default number of copies"
|
2011-06-02 02:33:31 -04:00
|
|
|
, Option [] ["trust"] (ReqArg (Remote.forceTrust Trusted) paramRemote)
|
2011-06-01 17:49:37 -04:00
|
|
|
"override trust setting"
|
2011-06-02 02:33:31 -04:00
|
|
|
, Option [] ["semitrust"] (ReqArg (Remote.forceTrust SemiTrusted) paramRemote)
|
2011-07-14 16:44:23 -04:00
|
|
|
"override trust setting back to default"
|
2011-06-02 02:33:31 -04:00
|
|
|
, Option [] ["untrust"] (ReqArg (Remote.forceTrust UnTrusted) paramRemote)
|
2011-06-01 17:49:37 -04:00
|
|
|
"override trust setting to untrusted"
|
2011-07-14 16:44:23 -04:00
|
|
|
, Option ['c'] ["config"] (ReqArg setgitconfig "NAME=VALUE")
|
|
|
|
"override git configuration setting"
|
2011-12-22 18:31:44 -04:00
|
|
|
, Option [] ["print0"] (NoArg setprint0)
|
|
|
|
"terminate output with null"
|
|
|
|
, Option [] ["format"] (ReqArg setformat paramFormat)
|
|
|
|
"control format of output"
|
2011-09-20 23:24:48 -04:00
|
|
|
, Option ['x'] ["exclude"] (ReqArg Limit.addExclude paramGlob)
|
2011-09-18 18:21:42 -04:00
|
|
|
"skip files matching the glob pattern"
|
2011-12-22 13:53:06 -04:00
|
|
|
, Option ['I'] ["include"] (ReqArg Limit.addInclude paramGlob)
|
|
|
|
"don't skip files matching the glob pattern"
|
2011-09-20 23:24:48 -04:00
|
|
|
, Option ['i'] ["in"] (ReqArg Limit.addIn paramRemote)
|
2011-09-18 20:14:18 -04:00
|
|
|
"skip files not present in a remote"
|
2011-09-20 23:24:48 -04:00
|
|
|
, Option ['C'] ["copies"] (ReqArg Limit.addCopies paramNumber)
|
2011-09-18 20:23:08 -04:00
|
|
|
"skip files with fewer copies"
|
2011-11-28 17:37:15 -04:00
|
|
|
, Option ['B'] ["inbackend"] (ReqArg Limit.addInBackend paramName)
|
|
|
|
"skip files not using a key-value backend"
|
2011-09-18 18:21:42 -04:00
|
|
|
] ++ matcherOptions
|
2011-01-26 00:17:38 -04:00
|
|
|
where
|
|
|
|
setto v = Annex.changeState $ \s -> s { Annex.toremote = Just v }
|
|
|
|
setfrom v = Annex.changeState $ \s -> s { Annex.fromremote = Just v }
|
2011-06-01 16:49:17 -04:00
|
|
|
setnumcopies v = Annex.changeState $ \s -> s {Annex.forcenumcopies = readMaybe v }
|
2011-12-22 18:31:44 -04:00
|
|
|
setformat v = Annex.changeState $ \s -> s { Annex.format = Just $ Utility.Format.gen v }
|
|
|
|
setprint0 = setformat "${file}\0"
|
2011-07-14 16:44:23 -04:00
|
|
|
setgitconfig :: String -> Annex ()
|
|
|
|
setgitconfig v = do
|
2011-12-13 15:05:07 -04:00
|
|
|
newg <- inRepo $ Git.Config.store v
|
2011-11-08 15:34:10 -04:00
|
|
|
Annex.changeState $ \s -> s { Annex.repo = newg }
|
2011-01-06 20:26:57 -04:00
|
|
|
|
|
|
|
header :: String
|
|
|
|
header = "Usage: git-annex command [option ..]"
|
2011-01-07 02:15:10 -04:00
|
|
|
|
|
|
|
run :: [String] -> IO ()
|
2011-12-13 15:05:07 -04:00
|
|
|
run args = dispatch args cmds options header Git.Construct.fromCwd
|