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