subdir = if S.null p
then Nothing
else Just (asTopFilePath p)
-
-sameGitRepo :: Remote -> Remote -> Bool
-sameGitRepo x y =
- remoteUrl (Remote.gitconfig x) == remoteUrl (Remote.gitconfig y)
checkclaim = maybe (pure False) (`id` url) . claimUrl
{- Is this a remote of a type that git pull and push work with?
- - That includes special remotes with an annex:: url configured. -}
+ - That includes special remotes with an annex:: url configured.
+ - It does not include proxied remotes. -}
gitSyncableRemote :: Remote -> Bool
gitSyncableRemote r
| gitSyncableRemoteType (remotetype r)
- && isJust (remoteUrl (gitconfig r)) = True
+ && isJust (remoteUrl (gitconfig r)) =
+ not (remoteAnnexProxied (gitconfig r))
| otherwise = case remoteUrl (gitconfig r) of
Just u | "annex::" `isPrefixOf` u -> True
_ -> False
annexconfigadjuster r' =
let c = adduuid (configRepoUUID renamedr) $
- addurl (remoteConfig renamedr "url") $
+ addurl $
+ addproxied $
inheritconfigs $ Git.fullconfig r'
in r'
{ Git.config = M.map Prelude.head c
adduuid ck = M.insert ck
[Git.ConfigValue $ fromUUID $ proxyRemoteUUID p]
- addurl ck = M.insert ck
+ addurl = M.insert (remoteConfig renamedr "url")
[Git.ConfigValue $ encodeBS $ Git.repoLocation r]
+
+ addproxied = M.insert (remoteAnnexConfig renamedr "proxied")
+ [Git.ConfigValue $ Git.Config.boolConfig' True]
inheritconfigs c = foldl' inheritconfig c proxyInheritedFields
repo <- Remote.getRepo r
return
[ ("repository location", Git.repoLocation repo)
+ , ("proxied", Git.Config.boolConfig
+ (remoteAnnexProxied (Remote.gitconfig r)))
, ("last synced", lastsynctime)
]
, remoteAnnexMaxGitBundles :: Int
, remoteAnnexAllowEncryptedGitRepo :: Bool
, remoteAnnexProxy :: Bool
+ , remoteAnnexProxied :: Bool
, remoteAnnexClusterNode :: Maybe [RemoteName]
, remoteUrl :: Maybe String
, remoteAnnexAllowEncryptedGitRepo =
getbool AllowEncryptedGitRepoField False
, remoteAnnexProxy = getbool ProxyField False
+ , remoteAnnexProxied = getbool ProxiedField False
, remoteAnnexClusterNode =
(filter isLegalName . words)
<$> getmaybe ClusterNodeField
| MaxGitBundlesField
| AllowEncryptedGitRepoField
| ProxyField
+ | ProxiedField
| ClusterNodeField
| UrlField
| ShellField
AllowEncryptedGitRepoField -> inherited "allow-encrypted-gitrepo"
-- Allow proxy chains.
ProxyField -> inherited "proxy"
+ ProxiedField -> uninherited "proxied"
ClusterNodeField -> uninherited "cluster-node"
UrlField -> uninherited "url"
ShellField -> inherited "shell"
After configuring this, run [[git-annex-updateproxy](1) to store
the new configuration in the git-annex branch.
+* `remote.<name>.annex-proxied`
+
+ Setting this to "true" indicates that a remote is proxied via the
+ git-annex repository that its remote points to. That prevents commands
+ like `git-annex sync` from pulling and pushing the remote.
+
+ Usually this is used internally, when git-annex sets up proxied remotes,
+ and will not need to be set.
+
* `remote.<name>.annex-cluster-node`
Set to the name of a cluster to make this remote be part of
For June's work on [[design/passthrough_proxy]], remaining todos:
-* `git-annex sync` etc should not treat clusters as git syncable remotes.
+* On upload to cluster, send to nodes where it's preferred content, and not
+ to other nodes.
-* `git-annex sync` etc, when operating on clusters, should first
+* `git-annex sync --content` etc, when operating on clusters, should first
operate on the cluster as a whole, to take advantages of fanout on upload
and mass drop. Only operate on individual cluster nodes afterwards,
to handle cases such as a cluster containing a key, but some node
wanting and lacking the key. Perhaps just setting cost for nodes slightly
- higher than the cluster cost will be enough?
-
-* On upload to cluster, send to nodes where it's preferred content, and not
- to other nodes.
+ higher than the cluster cost will be enough? Or should it even send a key
+ to a cluster node if the cluster contains the key? Perhaps that is
+ unnecessary work, the cluster should be able to rebalance itself.
* Getting a key from a cluster currently always selects the lowest cost
remote, and always the same remote if cost is the same. Should