git-remote-annex.
* When building an adjusted unlocked branch, make pointer files
executable when the annex object file is executable.
+ * group: Added --list option.
* fsck: Fix recent reversion that made it say it was checksumming files
whose content is not present.
* Avoid the --fast option preventing checksumming in some cases it
{- git-annex command
-
- - Copyright 2012 Joey Hess <id@joeyh.name>
+ - Copyright 2012-2024 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU AGPL version 3 or higher.
-}
import Command
import qualified Remote
-import Logs.Group
import Types.Group
+import Logs.Group
+import Logs.UUID
+import Logs.Trust
import Utility.SafeOutput
import qualified Data.Set as S
+import qualified Data.Map as M
cmd :: Command
cmd = noMessages $ command "group" SectionSetup "add a repository to a group"
- (paramPair paramRemote paramDesc) (withParams seek)
+ (paramPair paramRemote paramDesc) (seek <$$> optParser)
+
+data GroupOptions = GroupOptions
+ { cmdparams :: CmdParams
+ , listOption :: Bool
+ }
-seek :: CmdParams -> CommandSeek
-seek = withWords (commandAction . start)
+optParser :: CmdParamsDesc -> Parser GroupOptions
+optParser desc = GroupOptions
+ <$> cmdParams desc
+ <*> switch
+ ( long "list"
+ <> help "list all currently defined groups"
+ )
+
+seek :: GroupOptions -> CommandSeek
+seek o
+ | listOption o = if null (cmdparams o)
+ then commandAction startList
+ else giveup "Cannot combine --list with other options"
+ | otherwise = commandAction $ start (cmdparams o)
start :: [String] -> CommandStart
start ps@(name:g:[]) = do
start (name:[]) = do
u <- Remote.nameToUUID name
startingCustomOutput (ActionItemOther Nothing) $ do
- liftIO . putStrLn . safeOutput . unwords . map fmt . S.toList
- =<< lookupGroups u
+ liftIO . listGroups =<< lookupGroups u
next $ return True
+start _ = giveup "Specify a repository and a group."
+
+startList :: CommandStart
+startList = startingCustomOutput (ActionItemOther Nothing) $ do
+ us <- trustExclude DeadTrusted =<< M.keys <$> uuidDescMap
+ gs <- foldl' S.union mempty <$> mapM lookupGroups us
+ liftIO $ listGroups gs
+ next $ return True
+
+listGroups :: S.Set Group -> IO ()
+listGroups = liftIO . putStrLn . safeOutput . unwords . map fmt . S.toList
where
fmt (Group g) = decodeBS g
-start _ = giveup "Specify a repository and a group."
setGroup :: UUID -> Group -> CommandPerform
setGroup uuid g = do
# DESCRIPTION
-Adds a repository to a group, such as "archival", "enduser", or "transfer".
+Adds a repository to a group, such as "archive" or "transfer".
The groupname must be a single word.
Omit the groupname to show the current groups that a repository is in.
# OPTIONS
-* The [[git-annex-common-options]](1) can be used.
+* `--list`
+
+ Outputs a list of all groups that are used by at least one repository.
+
+* Also the [[git-annex-common-options]](1) can be used.
# SEE ALSO