aboutsummaryrefslogtreecommitdiff
path: root/git-annex.hs
blob: 31d90e4fc399b7b2f692b49ef8333ee4ebeb7cce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
{- git-annex main program
 -
 - Copyright 2010 Joey Hess <joey@kitenet.net>
 -
 - Licensed under the GNU GPL version 3 or higher.
 -}

import System.Environment
import System.Console.GetOpt

import qualified Annex
import Core
import Upgrade
import CmdLine
import qualified GitRepo as Git
import BackendList

import Command
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
import qualified Command.SetKey
import qualified Command.Fix
import qualified Command.Init
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
import qualified Command.Uninit
import qualified Command.Trust
import qualified Command.Untrust

cmds :: [Command]
cmds = concat
	[ Command.Add.command
	, Command.Get.command
	, Command.Drop.command
	, Command.Move.command
	, Command.Copy.command
	, Command.Unlock.command
	, Command.Lock.command
	, Command.Init.command
	, Command.Unannex.command
	, Command.Uninit.command
	, Command.PreCommit.command
	, Command.Trust.command
	, Command.Untrust.command
	, Command.FromKey.command
	, Command.DropKey.command
	, Command.SetKey.command
	, Command.Fix.command
	, Command.Fsck.command
	, Command.Unused.command
	, Command.DropUnused.command
	, Command.Find.command
	]

options :: [Option]
options = [
	    Option ['f'] ["force"] (NoArg (storeOptBool "force" True))
		"allow actions that may lose annexed data"
	  , Option ['q'] ["quiet"] (NoArg (storeOptBool "quiet" True))
		"avoid verbose output"
	  , Option ['v'] ["verbose"] (NoArg (storeOptBool "quiet" False))
		"allow verbose output"
	  , Option ['b'] ["backend"] (ReqArg (storeOptString "backend") paramName)
		"specify default key-value backend to use"
	  , Option ['k'] ["key"] (ReqArg (storeOptString "key") paramKey)
		"specify a key to use"
	  , Option ['t'] ["to"] (ReqArg (storeOptString "torepository") paramRemote)
		"specify to where to transfer content"
	  , Option ['f'] ["from"] (ReqArg (storeOptString "fromrepository") paramRemote)
		"specify from where to transfer content"
	  , Option ['x'] ["exclude"] (ReqArg (storeOptString "exclude") paramGlob)
		"skip files matching the glob pattern"
	  ]

header :: String
header = "Usage: git-annex subcommand [option ..]"

main :: IO ()
main = do
	args <- getArgs
	gitrepo <- Git.repoFromCwd
	state <- Annex.new gitrepo allBackends
	(actions, state') <- Annex.run state $ parseCmd args header cmds options
	tryRun state' $ [startup, upgrade] ++ actions