2011-01-07 00:26:57 +00:00
|
|
|
{- git-annex main program
|
|
|
|
-
|
2014-04-12 19:59:34 +00:00
|
|
|
- Copyright 2010-2014 Joey Hess <joey@kitenet.net>
|
2011-01-07 00:26:57 +00:00
|
|
|
-
|
|
|
|
- Licensed under the GNU GPL version 3 or higher.
|
|
|
|
-}
|
|
|
|
|
2013-11-06 20:33:45 +00:00
|
|
|
{-# LANGUAGE CPP, OverloadedStrings #-}
|
2012-06-26 13:15:47 +00:00
|
|
|
|
2014-01-26 20:25:55 +00:00
|
|
|
module CmdLine.GitAnnex where
|
2011-01-07 00:26:57 +00:00
|
|
|
|
2012-05-18 22:20:53 +00:00
|
|
|
import qualified Git.CurrentRepo
|
2011-01-07 06:15:10 +00:00
|
|
|
import CmdLine
|
2011-01-07 00:26:57 +00:00
|
|
|
import Command
|
2014-04-12 19:59:34 +00:00
|
|
|
import Utility.Env
|
|
|
|
import Annex.Ssh
|
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
|
2013-12-15 18:02:23 +00:00
|
|
|
import qualified Command.LookupKey
|
2013-12-15 18:46:29 +00:00
|
|
|
import qualified Command.ExamineKey
|
2011-01-07 00:26:57 +00:00
|
|
|
import qualified Command.FromKey
|
|
|
|
import qualified Command.DropKey
|
2012-08-24 21:23:58 +00:00
|
|
|
import qualified Command.TransferKey
|
2013-03-19 20:58:36 +00:00
|
|
|
import qualified Command.TransferKeys
|
2014-12-29 19:16:40 +00:00
|
|
|
import qualified Command.SetPresentKey
|
2012-02-16 20:36:35 +00:00
|
|
|
import qualified Command.ReKey
|
2014-02-13 01:12:22 +00:00
|
|
|
import qualified Command.MetaData
|
2014-02-18 21:38:23 +00:00
|
|
|
import qualified Command.View
|
2014-02-19 00:01:56 +00:00
|
|
|
import qualified Command.VAdd
|
add tip about metadata driven views (and more flexible view filtering)
While writing this documentation, I realized that there needed to be a way
to stay in a view like tag=* while adding a filter like tag=work that
applies to the same field.
So, there are really two ways a view can be refined. It can have a new
"field=explicitvalue" filter added to it, which does not change the
"shape" of the view, but narrows the files it shows.
Or, it can have a new view added, which adds another level of
subdirectories.
So, added a vfilter command, which takes explicit values to add to the
filter, and rejects changes that would change the shape of the view.
And, made vadd only accept changes that change the shape of the view.
And, changed the View data type slightly; now components that can match
multiple metadata values can be visible, or not visible.
This commit was sponsored by Stelian Iancu.
2014-02-19 19:10:18 +00:00
|
|
|
import qualified Command.VFilter
|
2014-02-18 21:38:23 +00:00
|
|
|
import qualified Command.VPop
|
2014-02-19 00:16:28 +00:00
|
|
|
import qualified Command.VCycle
|
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
|
2013-04-26 22:22:44 +00:00
|
|
|
import qualified Command.EnableRemote
|
2011-01-07 00:26:57 +00:00
|
|
|
import qualified Command.Fsck
|
2013-10-23 16:21:59 +00:00
|
|
|
import qualified Command.Repair
|
2011-01-07 00:26:57 +00:00
|
|
|
import qualified Command.Unused
|
|
|
|
import qualified Command.DropUnused
|
2012-05-02 18:59:05 +00:00
|
|
|
import qualified Command.AddUnused
|
2011-01-07 00:26:57 +00:00
|
|
|
import qualified Command.Unlock
|
|
|
|
import qualified Command.Lock
|
|
|
|
import qualified Command.PreCommit
|
|
|
|
import qualified Command.Find
|
2014-04-17 22:41:24 +00:00
|
|
|
import qualified Command.FindRef
|
2011-03-05 21:23:55 +00:00
|
|
|
import qualified Command.Whereis
|
2013-09-19 18:16:28 +00:00
|
|
|
import qualified Command.List
|
2012-01-06 19:40:04 +00:00
|
|
|
import qualified Command.Log
|
2011-06-22 22:46:45 +00:00
|
|
|
import qualified Command.Merge
|
2014-07-11 20:45:18 +00:00
|
|
|
import qualified Command.ResolveMerge
|
2013-11-07 16:45:59 +00:00
|
|
|
import qualified Command.Info
|
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
|
2014-04-16 00:13:35 +00:00
|
|
|
import qualified Command.Reinit
|
2014-01-20 20:47:56 +00:00
|
|
|
import qualified Command.NumCopies
|
2011-01-07 00:26:57 +00:00
|
|
|
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
|
2012-10-01 19:12:04 +00:00
|
|
|
import qualified Command.Group
|
2013-10-28 18:08:38 +00:00
|
|
|
import qualified Command.Wanted
|
2013-10-13 19:40:38 +00:00
|
|
|
import qualified Command.Schedule
|
2012-10-01 19:12:04 +00:00
|
|
|
import qualified Command.Ungroup
|
2012-10-03 21:04:52 +00:00
|
|
|
import qualified Command.Vicfg
|
2011-12-10 00:27:22 +00:00
|
|
|
import qualified Command.Sync
|
2013-08-20 19:46:35 +00:00
|
|
|
import qualified Command.Mirror
|
2011-07-01 21:15:46 +00:00
|
|
|
import qualified Command.AddUrl
|
2013-07-28 19:27:36 +00:00
|
|
|
#ifdef WITH_FEED
|
|
|
|
import qualified Command.ImportFeed
|
|
|
|
#endif
|
2013-04-22 21:18:53 +00:00
|
|
|
import qualified Command.RmUrl
|
2012-05-31 23:47:18 +00:00
|
|
|
import qualified Command.Import
|
2011-02-03 22:55:12 +00:00
|
|
|
import qualified Command.Map
|
2012-12-13 19:44:56 +00:00
|
|
|
import qualified Command.Direct
|
|
|
|
import qualified Command.Indirect
|
2011-03-16 19:48:26 +00:00
|
|
|
import qualified Command.Upgrade
|
2013-08-28 20:38:03 +00:00
|
|
|
import qualified Command.Forget
|
2014-11-12 19:41:15 +00:00
|
|
|
import qualified Command.Proxy
|
2014-11-24 20:14:01 +00:00
|
|
|
import qualified Command.DiffDriver
|
2014-11-13 20:41:21 +00:00
|
|
|
import qualified Command.Undo
|
2011-03-19 18:33:24 +00:00
|
|
|
import qualified Command.Version
|
2012-11-06 04:52:35 +00:00
|
|
|
import qualified Command.Help
|
2012-06-26 13:15:47 +00:00
|
|
|
#ifdef WITH_ASSISTANT
|
watch subcommand
So far this only handles auto-annexing new files that are created inside
the repository while it's running. To make this really useful,
it needs to at least:
- notice deleted files and stage the deletion
(tricky; there's a race with add..)
- notice renamed files, auto-fix the symlink, and stage the new file location
- periodically auto-commit staged changes
- honor .gitignore, not adding files it excludes
Also nice to have would be:
- Somehow sync remotes, possibly using a push sync like dvcs-autosync
does, so they are immediately updated.
- Somehow get content that is unavilable. This is problimatic with inotify,
since we only get an event once the user has tried (and failed) to read
from the file. Perhaps instead, automatically copy content that is added
out to remotes, with the goal of all repos eventually getting a copy,
if df allows.
- Drop files that have not been used lately, or meet some other criteria
(as long as there's a copy elsewhere).
- Perhaps automatically dropunused files that have been deleted,
although I cannot see a way to do that, since by the time the inotify
deletion event arrives, the file is deleted, and we cannot see what
its symlink pointed to! Alternatievely, perhaps automatically
do an expensive unused/dropunused cleanup process.
Some of this probably needs the currently stateless threads to maintain
a common state.
2012-04-12 21:29:43 +00:00
|
|
|
import qualified Command.Watch
|
2012-06-22 17:04:03 +00:00
|
|
|
import qualified Command.Assistant
|
2012-07-26 03:13:01 +00:00
|
|
|
#ifdef WITH_WEBAPP
|
|
|
|
import qualified Command.WebApp
|
|
|
|
#endif
|
2012-11-06 04:52:35 +00:00
|
|
|
#ifdef WITH_XMPP
|
|
|
|
import qualified Command.XMPPGit
|
|
|
|
#endif
|
2014-04-06 23:06:03 +00:00
|
|
|
import qualified Command.RemoteDaemon
|
2012-06-26 13:15:47 +00:00
|
|
|
#endif
|
2014-08-01 19:09:49 +00:00
|
|
|
import qualified Command.Test
|
2014-08-24 01:46:08 +00:00
|
|
|
#ifdef WITH_TESTSUITE
|
2013-05-23 23:00:46 +00:00
|
|
|
import qualified Command.FuzzTest
|
2014-08-01 19:09:49 +00:00
|
|
|
import qualified Command.TestRemote
|
2013-02-27 19:59:31 +00:00
|
|
|
#endif
|
2013-11-06 20:33:45 +00:00
|
|
|
#ifdef WITH_EKG
|
|
|
|
import System.Remote.Monitoring
|
|
|
|
#endif
|
2011-01-07 00:26:57 +00:00
|
|
|
|
|
|
|
cmds :: [Command]
|
|
|
|
cmds = concat
|
2014-10-14 18:20:10 +00:00
|
|
|
[ Command.Add.cmd
|
|
|
|
, Command.Get.cmd
|
|
|
|
, Command.Drop.cmd
|
|
|
|
, Command.Move.cmd
|
|
|
|
, Command.Copy.cmd
|
|
|
|
, Command.Unlock.cmd
|
|
|
|
, Command.Lock.cmd
|
|
|
|
, Command.Sync.cmd
|
|
|
|
, Command.Mirror.cmd
|
|
|
|
, Command.AddUrl.cmd
|
2013-07-28 19:27:36 +00:00
|
|
|
#ifdef WITH_FEED
|
2014-10-14 18:20:10 +00:00
|
|
|
, Command.ImportFeed.cmd
|
2013-07-28 19:27:36 +00:00
|
|
|
#endif
|
2014-10-14 18:20:10 +00:00
|
|
|
, Command.RmUrl.cmd
|
|
|
|
, Command.Import.cmd
|
|
|
|
, Command.Init.cmd
|
|
|
|
, Command.Describe.cmd
|
|
|
|
, Command.InitRemote.cmd
|
|
|
|
, Command.EnableRemote.cmd
|
|
|
|
, Command.Reinject.cmd
|
|
|
|
, Command.Unannex.cmd
|
|
|
|
, Command.Uninit.cmd
|
|
|
|
, Command.Reinit.cmd
|
|
|
|
, Command.PreCommit.cmd
|
|
|
|
, Command.NumCopies.cmd
|
|
|
|
, Command.Trust.cmd
|
|
|
|
, Command.Untrust.cmd
|
|
|
|
, Command.Semitrust.cmd
|
|
|
|
, Command.Dead.cmd
|
|
|
|
, Command.Group.cmd
|
|
|
|
, Command.Wanted.cmd
|
|
|
|
, Command.Schedule.cmd
|
|
|
|
, Command.Ungroup.cmd
|
|
|
|
, Command.Vicfg.cmd
|
|
|
|
, Command.LookupKey.cmd
|
|
|
|
, Command.ExamineKey.cmd
|
|
|
|
, Command.FromKey.cmd
|
|
|
|
, Command.DropKey.cmd
|
|
|
|
, Command.TransferKey.cmd
|
|
|
|
, Command.TransferKeys.cmd
|
2014-12-29 19:16:40 +00:00
|
|
|
, Command.SetPresentKey.cmd
|
2014-10-14 18:20:10 +00:00
|
|
|
, Command.ReKey.cmd
|
|
|
|
, Command.MetaData.cmd
|
|
|
|
, Command.View.cmd
|
|
|
|
, Command.VAdd.cmd
|
|
|
|
, Command.VFilter.cmd
|
|
|
|
, Command.VPop.cmd
|
|
|
|
, Command.VCycle.cmd
|
|
|
|
, Command.Fix.cmd
|
|
|
|
, Command.Fsck.cmd
|
|
|
|
, Command.Repair.cmd
|
|
|
|
, Command.Unused.cmd
|
|
|
|
, Command.DropUnused.cmd
|
|
|
|
, Command.AddUnused.cmd
|
|
|
|
, Command.Find.cmd
|
|
|
|
, Command.FindRef.cmd
|
|
|
|
, Command.Whereis.cmd
|
|
|
|
, Command.List.cmd
|
|
|
|
, Command.Log.cmd
|
|
|
|
, Command.Merge.cmd
|
|
|
|
, Command.ResolveMerge.cmd
|
|
|
|
, Command.Info.cmd
|
|
|
|
, Command.Status.cmd
|
|
|
|
, Command.Migrate.cmd
|
|
|
|
, Command.Map.cmd
|
|
|
|
, Command.Direct.cmd
|
|
|
|
, Command.Indirect.cmd
|
|
|
|
, Command.Upgrade.cmd
|
|
|
|
, Command.Forget.cmd
|
2014-11-12 19:41:15 +00:00
|
|
|
, Command.Proxy.cmd
|
2014-11-24 20:14:01 +00:00
|
|
|
, Command.DiffDriver.cmd
|
2014-11-13 20:41:21 +00:00
|
|
|
, Command.Undo.cmd
|
2014-10-14 18:20:10 +00:00
|
|
|
, Command.Version.cmd
|
|
|
|
, Command.Help.cmd
|
2012-06-26 13:15:47 +00:00
|
|
|
#ifdef WITH_ASSISTANT
|
2014-10-14 18:20:10 +00:00
|
|
|
, Command.Watch.cmd
|
|
|
|
, Command.Assistant.cmd
|
2012-07-26 03:13:01 +00:00
|
|
|
#ifdef WITH_WEBAPP
|
2014-10-14 18:20:10 +00:00
|
|
|
, Command.WebApp.cmd
|
2012-07-26 03:13:01 +00:00
|
|
|
#endif
|
2012-11-06 04:52:35 +00:00
|
|
|
#ifdef WITH_XMPP
|
2014-10-14 18:20:10 +00:00
|
|
|
, Command.XMPPGit.cmd
|
2012-11-06 04:52:35 +00:00
|
|
|
#endif
|
2014-10-14 18:20:10 +00:00
|
|
|
, Command.RemoteDaemon.cmd
|
2012-06-26 13:15:47 +00:00
|
|
|
#endif
|
2014-10-14 18:20:10 +00:00
|
|
|
, Command.Test.cmd
|
2014-08-24 01:46:08 +00:00
|
|
|
#ifdef WITH_TESTSUITE
|
2014-10-14 18:20:10 +00:00
|
|
|
, Command.FuzzTest.cmd
|
|
|
|
, Command.TestRemote.cmd
|
2013-02-27 19:59:31 +00:00
|
|
|
#endif
|
2011-01-07 00:26:57 +00:00
|
|
|
]
|
|
|
|
|
|
|
|
header :: String
|
2013-03-27 17:51:24 +00:00
|
|
|
header = "git-annex command [option ...]"
|
2011-01-07 06:15:10 +00:00
|
|
|
|
|
|
|
run :: [String] -> IO ()
|
2013-11-06 20:33:45 +00:00
|
|
|
run args = do
|
|
|
|
#ifdef WITH_EKG
|
|
|
|
_ <- forkServer "localhost" 4242
|
|
|
|
#endif
|
2014-04-29 22:08:10 +00:00
|
|
|
go envmodes
|
|
|
|
where
|
|
|
|
go [] = dispatch True args cmds gitAnnexOptions [] header Git.CurrentRepo.get
|
|
|
|
go ((v, a):rest) = maybe (go rest) a =<< getEnv v
|
|
|
|
envmodes =
|
|
|
|
[ (sshCachingEnv, runSshCaching args)
|
|
|
|
, (sshAskPassEnv, runSshAskPass)
|
|
|
|
]
|