]> dgit.raspbian.org Git - git-annex.git/commitdiff
add annex-proxied
authorJoey Hess <joeyh@joeyh.name>
Mon, 24 Jun 2024 14:13:13 +0000 (10:13 -0400)
committerJoey Hess <joeyh@joeyh.name>
Mon, 24 Jun 2024 14:16:59 +0000 (10:16 -0400)
This makes git-annex sync and similar not treat proxied remotes as git
syncable remotes.

Also, display in git-annex info remote when the remote is proxied.

Command/Sync.hs
Remote.hs
Remote/Git.hs
Remote/Helper/Git.hs
Types/GitConfig.hs
doc/git-annex.mdwn
doc/todo/git-annex_proxies.mdwn

index a0f9bc814760bf558f693e58c6cd8588f632a494..62b557ccc7126372e81d3dd37b02a2b5a29f9304 100644 (file)
@@ -1158,7 +1158,3 @@ splitRemoteAnnexTrackingBranchSubdir tb = (branch, subdir)
        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)
index a57a929114184b3d97240a821abb90d0b780abbc..9038d2a767bb960ea2c0785a2d8b7982c5b75d0d 100644 (file)
--- a/Remote.hs
+++ b/Remote.hs
@@ -449,11 +449,13 @@ claimingUrl' remotefilter url = do
        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
index 6f7d4265c2b6baf35b7768a22f7cc4b5997422fa..6e3906892f1274bec990e65a4dec033ad1660623 100644 (file)
@@ -827,7 +827,8 @@ listProxied proxies rs = concat <$> mapM go rs
                
                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
@@ -837,8 +838,11 @@ listProxied proxies rs = concat <$> mapM go rs
                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
                
index ccefb231ea00de05e8d31345333f4285518c5a1f..b240ee0a2f6d52c75a45016df6c30e8cb95926a0 100644 (file)
@@ -64,5 +64,7 @@ gitRepoInfo r = do
        repo <- Remote.getRepo r
        return
                [ ("repository location", Git.repoLocation repo)
+               , ("proxied", Git.Config.boolConfig 
+                       (remoteAnnexProxied (Remote.gitconfig r)))
                , ("last synced", lastsynctime)
                ]
index 2f8a4e3875d89ac5301a4e47ec2ccf43ee0241c6..56eb25713b340d3a478ca8ff029d4bcaf7d06094 100644 (file)
@@ -388,6 +388,7 @@ data RemoteGitConfig = RemoteGitConfig
        , remoteAnnexMaxGitBundles :: Int
        , remoteAnnexAllowEncryptedGitRepo :: Bool
        , remoteAnnexProxy :: Bool
+       , remoteAnnexProxied :: Bool
        , remoteAnnexClusterNode :: Maybe [RemoteName]
        , remoteUrl :: Maybe String
 
@@ -474,6 +475,7 @@ extractRemoteGitConfig r remotename = do
                , remoteAnnexAllowEncryptedGitRepo = 
                        getbool AllowEncryptedGitRepoField False
                , remoteAnnexProxy = getbool ProxyField False
+               , remoteAnnexProxied = getbool ProxiedField False
                , remoteAnnexClusterNode = 
                        (filter isLegalName . words)
                                <$> getmaybe ClusterNodeField
@@ -554,6 +556,7 @@ data RemoteGitConfigField
        | MaxGitBundlesField
        | AllowEncryptedGitRepoField
        | ProxyField
+       | ProxiedField
        | ClusterNodeField
        | UrlField
        | ShellField
@@ -619,6 +622,7 @@ remoteGitConfigField = \case
        AllowEncryptedGitRepoField -> inherited "allow-encrypted-gitrepo"
        -- Allow proxy chains.
        ProxyField -> inherited "proxy"
+       ProxiedField -> uninherited "proxied"
        ClusterNodeField -> uninherited "cluster-node"
        UrlField -> uninherited "url"
        ShellField -> inherited "shell"
index 06b2b63abd01722c34c4e65c06cc1aa28c8e8b70..428068f04e4a46f0351e4a9aa8c96f6323964a4a 100644 (file)
@@ -1674,6 +1674,15 @@ Remotes are configured using these settings in `.git/config`.
   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
index 57f7ca5186362a4226e983613a7414a809edf666..15637fe78adea9d0a84592f0c06cfddb9f8a5b3d 100644 (file)
@@ -26,17 +26,17 @@ In development on the `proxy` branch.
 
 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