summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2017-09-19 13:05:43 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2017-09-19 13:05:43 -0400
commitc1cfb595d426ebbad6b9778d03ecaef544df776b (patch)
treecbd69743deae06bd805ddb654f5b3ecea312ffd0
parentd1f97163ff320c21676528f70213112591ed38dd (diff)
configuration and docs for tracking exports
Not yet handled by sync or assistant. This commit was sponsored by Nick Daly on Patreon.
-rw-r--r--Command/Export.hs11
-rw-r--r--Config.hs4
-rw-r--r--Types/GitConfig.hs3
-rw-r--r--doc/git-annex-export.mdwn20
-rw-r--r--doc/git-annex-sync.mdwn4
-rw-r--r--doc/git-annex.mdwn8
6 files changed, 50 insertions, 0 deletions
diff --git a/Command/Export.hs b/Command/Export.hs
index 02c64eadf..81013ad47 100644
--- a/Command/Export.hs
+++ b/Command/Export.hs
@@ -28,6 +28,7 @@ import Logs.Location
import Logs.Export
import Database.Export
import Messages.Progress
+import Config
import Utility.Tmp
import qualified Data.ByteString.Lazy as L
@@ -41,16 +42,22 @@ cmd = command "export" SectionCommon
data ExportOptions = ExportOptions
{ exportTreeish :: Git.Ref
, exportRemote :: DeferredParse Remote
+ , exportTracking :: Bool
}
optParser :: CmdParamsDesc -> Parser ExportOptions
optParser _ = ExportOptions
<$> (Git.Ref <$> parsetreeish)
<*> (parseRemoteOption <$> parseToOption)
+ <*> parsetracking
where
parsetreeish = argument str
( metavar paramTreeish
)
+ parsetracking = switch
+ ( long "tracking"
+ <> help ("track changes to the " ++ paramTreeish)
+ )
-- To handle renames which swap files, the exported file is first renamed
-- to a stable temporary name based on the key.
@@ -75,6 +82,10 @@ seek' o r = do
db <- openDb (uuid r)
ea <- exportActions r
recordExportBeginning (uuid r) new
+
+ when (exportTracking o) $
+ setConfig (remoteConfig r "export-tracking")
+ (fromRef $ exportTreeish o)
-- Clean up after incomplete export of a tree, in which
-- the next block of code below may have renamed some files to
diff --git a/Config.hs b/Config.hs
index 783f07238..66808571a 100644
--- a/Config.hs
+++ b/Config.hs
@@ -18,6 +18,7 @@ import Config.Cost
import Config.DynamicConfig
import Types.Availability
import Git.Types
+import qualified Types.Remote as Remote
type UnqualifiedConfigKey = String
data ConfigKey = ConfigKey String
@@ -55,6 +56,9 @@ instance RemoteNameable Git.Repo where
instance RemoteNameable RemoteName where
getRemoteName = id
+instance RemoteNameable Remote where
+ getRemoteName = Remote.name
+
{- A per-remote config setting in git config. -}
remoteConfig :: RemoteNameable r => r -> UnqualifiedConfigKey -> ConfigKey
remoteConfig r key = ConfigKey $
diff --git a/Types/GitConfig.hs b/Types/GitConfig.hs
index d523c745a..05b5623a6 100644
--- a/Types/GitConfig.hs
+++ b/Types/GitConfig.hs
@@ -199,6 +199,7 @@ data RemoteGitConfig = RemoteGitConfig
, remoteAnnexPush :: Bool
, remoteAnnexReadOnly :: Bool
, remoteAnnexVerify :: Bool
+ , remoteAnnexExportTracking :: Maybe Git.Ref
, remoteAnnexTrustLevel :: Maybe String
, remoteAnnexStartCommand :: Maybe String
, remoteAnnexStopCommand :: Maybe String
@@ -247,6 +248,8 @@ extractRemoteGitConfig r remotename = do
, remoteAnnexPush = getbool "push" True
, remoteAnnexReadOnly = getbool "readonly" False
, remoteAnnexVerify = getbool "verify" True
+ , remoteAnnexExportTracking = Git.Ref
+ <$> notempty (getmaybe "export-tracking")
, remoteAnnexTrustLevel = notempty $ getmaybe "trustlevel"
, remoteAnnexStartCommand = notempty $ getmaybe "start-command"
, remoteAnnexStopCommand = notempty $ getmaybe "stop-command"
diff --git a/doc/git-annex-export.mdwn b/doc/git-annex-export.mdwn
index 8958e7233..98fb40c57 100644
--- a/doc/git-annex-export.mdwn
+++ b/doc/git-annex-export.mdwn
@@ -6,6 +6,8 @@ git-annex export - export content to a remote
git annex export `treeish --to remote`
+git annex export `--tracking treeish --to remote`
+
# DESCRIPTION
Use this command to export a tree of files from a git-annex repository.
@@ -36,6 +38,18 @@ verification of content downloaded from an export. Some types of keys,
that are not based on checksums, cannot be downloaded from an export.
And, git-annex will never trust an export to retain the content of a key.
+# OPTIONS
+
+* `--to=remote`
+
+ Specify the special remote to export to.
+
+* `--tracking`
+
+ This makes the export track changes that are committed to
+ the branch. `git annex sync --content` and the git-annex assistant
+ will update exports when it commits to the branch they are tracking.
+
# EXAMPLE
git annex initremote myexport type=directory directory=/mnt/myexport \
@@ -56,6 +70,10 @@ That updates /mnt/myexport to reflect the renamed file.
That updates /mnt/myexport, to contain only the files in the "subdir"
directory of the master branch.
+ git annex export --tracking master --to myexport
+
+That makes myexport track changes that are committed to the master branch.
+
# EXPORT CONFLICTS
If two different git-annex repositories are both exporting different trees
@@ -81,6 +99,8 @@ export`, it will detect the export conflict, and resolve it.
[[git-annex-initremote]](1)
+[[git-annex-sync]](1)
+
# AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/doc/git-annex-sync.mdwn b/doc/git-annex-sync.mdwn
index 2aa009cf8..7b03a2ed1 100644
--- a/doc/git-annex-sync.mdwn
+++ b/doc/git-annex-sync.mdwn
@@ -82,6 +82,10 @@ by running "git annex sync" on the remote.
This behavior can be overridden by configuring the preferred content
of a repository. See [[git-annex-preferred-content]](1).
+ When a special remote is configured as an export and is tracking a branch,
+ the export will be updated to the current content of the branch.
+ See [[git-annex-export]](1).
+
* `--content-of=path` `-C path`
While --content operates on all annexed files in the work tree,
diff --git a/doc/git-annex.mdwn b/doc/git-annex.mdwn
index 544baafa1..1e8155988 100644
--- a/doc/git-annex.mdwn
+++ b/doc/git-annex.mdwn
@@ -1210,6 +1210,14 @@ Here are all the supported configuration settings.
from remotes. If you trust a remote and don't want the overhead
of these checksums, you can set this to `false`.
+* `remote.<name>.annex-export-tracking`
+
+ When set to a branch name or other treeish, this makes what's exported
+ to the special remote track changes to the branch. See
+ [[git-annex-export]](1). `git-annex sync --content` and the
+ git-annex assistant update exports when changes have been
+ committed to the tracking branch.
+
* `remote.<name>.annexUrl`
Can be used to specify a different url than the regular `remote.<name>.url`