summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2013-05-25 12:44:58 -0400
committerGravatar Joey Hess <joey@kitenet.net>2013-05-25 12:44:58 -0400
commitb93439ab21727ad809ebce384b78e572799fa39a (patch)
treea36efdd4adc246cb40a62451d84d4ce66bf38c15
parent6442bc73b2799c46c8a45a3cd265dd8dfeaea1f3 (diff)
content: New command line way to view and configure a repository's preferred content settings.
-rw-r--r--Command/Content.hs48
-rw-r--r--Command/Group.hs2
-rw-r--r--Command/Vicfg.hs6
-rw-r--r--GitAnnex.hs2
-rw-r--r--Usage.hs2
-rw-r--r--debian/changelog2
-rw-r--r--doc/git-annex.mdwn8
-rw-r--r--doc/preferred_content.mdwn8
8 files changed, 70 insertions, 8 deletions
diff --git a/Command/Content.hs b/Command/Content.hs
new file mode 100644
index 000000000..d10bdde3c
--- /dev/null
+++ b/Command/Content.hs
@@ -0,0 +1,48 @@
+{- git-annex command
+ -
+ - Copyright 2013 Joey Hess <joey@kitenet.net>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Command.Content where
+
+import Common.Annex
+import Command
+import qualified Remote
+import Logs.PreferredContent
+
+import qualified Data.Map as M
+
+def :: [Command]
+def = [command "content" (paramPair paramRemote (paramOptional paramExpression)) seek
+ SectionSetup "get or set preferred content expression"]
+
+seek :: [CommandSeek]
+seek = [withWords start]
+
+start :: [String] -> CommandStart
+start = parse
+ where
+ parse (name:[]) = go name performGet
+ parse (name:expr:[]) = go name $ \uuid -> do
+ showStart "content" name
+ performSet expr uuid
+ parse _ = error "Specify a repository."
+
+ go name a = do
+ u <- Remote.nameToUUID name
+ next $ a u
+
+performGet :: UUID -> CommandPerform
+performGet uuid = do
+ m <- preferredContentMapRaw
+ liftIO $ putStrLn $ fromMaybe "" $ M.lookup uuid m
+ next $ return True
+
+performSet :: String -> UUID -> CommandPerform
+performSet expr uuid = case checkPreferredContentExpression expr of
+ Just e -> error $ "Parse error: " ++ e
+ Nothing -> do
+ preferredContentSet uuid expr
+ next $ return True
diff --git a/Command/Group.hs b/Command/Group.hs
index aee02b6c4..4c0bf4899 100644
--- a/Command/Group.hs
+++ b/Command/Group.hs
@@ -17,7 +17,7 @@ import qualified Data.Set as S
def :: [Command]
def = [command "group" (paramPair paramRemote paramDesc) seek
- SectionCommon "add a repository to a group"]
+ SectionSetup "add a repository to a group"]
seek :: [CommandSeek]
seek = [withWords start]
diff --git a/Command/Vicfg.hs b/Command/Vicfg.hs
index b176e5597..1aa8722c5 100644
--- a/Command/Vicfg.hs
+++ b/Command/Vicfg.hs
@@ -117,8 +117,8 @@ genCfg cfg descs = unlines $ concat [intro, trust, groups, preferredcontent]
[ ""
, com "Repository preferred contents"
]
- (\(s, u) -> line "preferred-content" u s)
- (\u -> line "preferred-content" u "")
+ (\(s, u) -> line "content" u s)
+ (\u -> line "content" u "")
settings field desc showvals showdefaults = concat
[ desc
@@ -167,7 +167,7 @@ parseCfg curcfg = go [] curcfg . lines
| setting == "group" =
let m = M.insert u (S.fromList $ words value) (cfgGroupMap cfg)
in Right $ cfg { cfgGroupMap = m }
- | setting == "preferred-content" =
+ | setting == "content" =
case checkPreferredContentExpression value of
Just e -> Left e
Nothing ->
diff --git a/GitAnnex.hs b/GitAnnex.hs
index 4dbf7390e..e6e24777c 100644
--- a/GitAnnex.hs
+++ b/GitAnnex.hs
@@ -52,6 +52,7 @@ import qualified Command.Untrust
import qualified Command.Semitrust
import qualified Command.Dead
import qualified Command.Group
+import qualified Command.Content
import qualified Command.Ungroup
import qualified Command.Vicfg
import qualified Command.Sync
@@ -105,6 +106,7 @@ cmds = concat
, Command.Semitrust.def
, Command.Dead.def
, Command.Group.def
+ , Command.Content.def
, Command.Ungroup.def
, Command.Vicfg.def
, Command.FromKey.def
diff --git a/Usage.hs b/Usage.hs
index bcda78be8..9a48a0908 100644
--- a/Usage.hs
+++ b/Usage.hs
@@ -93,6 +93,8 @@ paramFile :: String
paramFile = "FILE"
paramGroup :: String
paramGroup = "GROUP"
+paramExpression :: String
+paramExpression = "EXPR"
paramSize :: String
paramSize = "SIZE"
paramAddress :: String
diff --git a/debian/changelog b/debian/changelog
index 9d180fd34..e0db3d655 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -15,6 +15,8 @@ git-annex (4.20130522) UNRELEASED; urgency=low
are staged.
* Improve error handling when getting uuid of http remotes to auto-ignore,
like with ssh remotes.
+ * content: New command line way to view and configure a repository's
+ preferred content settings.
-- Joey Hess <joeyh@debian.org> Tue, 21 May 2013 18:22:46 -0400
diff --git a/doc/git-annex.mdwn b/doc/git-annex.mdwn
index 29a5a6225..4be3b4a48 100644
--- a/doc/git-annex.mdwn
+++ b/doc/git-annex.mdwn
@@ -306,6 +306,14 @@ subdirectories).
Removes a repository from a group.
+* content repository [expression]
+
+ When run with an expression, configures the content that is preferred
+ to be held in the archive. See PREFERRED CONTENT below.
+
+ Without an expression, displays the current preferred content setting
+ of the repository.
+
* vicfg
Opens EDITOR on a temp file containing most of the above configuration
diff --git a/doc/preferred_content.mdwn b/doc/preferred_content.mdwn
index 23081fc30..6bf56c2e3 100644
--- a/doc/preferred_content.mdwn
+++ b/doc/preferred_content.mdwn
@@ -6,10 +6,10 @@ control over which repositories prefer to have which content. Configuring
this allows `git annex get --auto`, `git annex drop --auto`, etc to do
smarter things.
-Currently, preferred content settings can only be edited using `git
-annex vicfg`. Each repository can have its own settings, and other
-repositories may also try to honor those settings. So there's no local
-`.git/config` setting it.
+Preferred content settings can be edited using `git
+annex vicfg`, or viewed and set at the command line with `git annex content`.
+Each repository can have its own settings, and other repositories may also
+try to honor those settings. So there's no local `.git/config` setting it.
The idea is that you write an expression that files are matched against.
If a file matches, it's preferred to have its content stored in the