configuration and docs for tracking exports

Not yet handled by sync or assistant.

This commit was sponsored by Nick Daly on Patreon.
This commit is contained in:
Joey Hess 2017-09-19 13:05:43 -04:00
parent a6268b79b2
commit 527f734492
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
6 changed files with 50 additions and 0 deletions

View file

@ -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

View file

@ -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 $

View file

@ -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"

View file

@ -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>

View file

@ -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,

View file

@ -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`