remove uuid from annex+http urls
Not needed it turns out.
This commit is contained in:
parent
bc9cc79e85
commit
cd89f91aa5
7 changed files with 14 additions and 58 deletions
|
@ -138,7 +138,7 @@ p2pHttpClientVersions allowedversion rmt fallback clientaction =
|
|||
|
||||
credentialbaseurl = case p2pHttpUrlString <$> remoteAnnexP2PHttpUrl (gitconfig rmt) of
|
||||
Nothing -> error "internal"
|
||||
Just url -> p2pHttpUrlWithoutUUID url
|
||||
Just url -> url
|
||||
|
||||
credauth cred = do
|
||||
ba <- Git.credentialBasicAuth cred
|
||||
|
|
|
@ -32,7 +32,6 @@ isP2PHttpProtocolUrl s =
|
|||
|
||||
data P2PHttpUrl = P2PHttpUrl
|
||||
{ p2pHttpUrlString :: String
|
||||
, p2pHttpUUID :: Maybe UUID
|
||||
#ifdef WITH_SERVANT
|
||||
, p2pHttpBaseUrl :: BaseUrl
|
||||
#endif
|
||||
|
@ -50,29 +49,19 @@ parseP2PHttpUrl us
|
|||
"https:" -> mkbaseurl Https u
|
||||
_ -> Nothing
|
||||
#else
|
||||
Just $ P2PHttpUrl us (extractuuid u)
|
||||
Just $ P2PHttpUrl us
|
||||
#endif
|
||||
| otherwise = Nothing
|
||||
where
|
||||
prefixlen = length "annex+"
|
||||
|
||||
extractuuid u = do
|
||||
p <- lastMaybe $ P.splitDirectories (uriPath u)
|
||||
-- While git-annex generally allows a UUID that is not
|
||||
-- well formed, here it's important to make sure that the
|
||||
-- url a user provided really ends with a UUID, so check
|
||||
-- that it's well formed.
|
||||
case UUID.fromString p of
|
||||
Nothing -> Nothing
|
||||
Just _ -> return (UUID (encodeBS p))
|
||||
|
||||
#ifdef WITH_SERVANT
|
||||
mkbaseurl s u = do
|
||||
auth <- uriAuthority u
|
||||
port <- if null (uriPort auth)
|
||||
then Just defaultP2PHttpProtocolPort
|
||||
else readMaybe (dropWhile (== ':') (uriPort auth))
|
||||
return $ P2PHttpUrl us (extractuuid u) $ BaseUrl
|
||||
return $ P2PHttpUrl us $ BaseUrl
|
||||
{ baseUrlScheme = s
|
||||
, baseUrlHost = uriRegName auth
|
||||
, baseUrlPath = basepath u
|
||||
|
@ -84,14 +73,11 @@ parseP2PHttpUrl us
|
|||
-- it from the url that the user provided. However, it may not be
|
||||
-- present, eg if some other server is speaking the git-annex
|
||||
-- protocol. The UUID is also removed from the end of the url.
|
||||
basepath u = case drop 1 $ reverse $ P.splitDirectories (uriPath u) of
|
||||
basepath u = case reverse $ P.splitDirectories (uriPath u) of
|
||||
("git-annex":"/":rest) -> P.joinPath (reverse rest)
|
||||
rest -> P.joinPath (reverse rest)
|
||||
#endif
|
||||
|
||||
p2pHttpUrlWithoutUUID :: String -> String
|
||||
p2pHttpUrlWithoutUUID = reverse . dropWhile (/= '/') . reverse
|
||||
|
||||
unavailableP2PHttpUrl :: P2PHttpUrl -> P2PHttpUrl
|
||||
unavailableP2PHttpUrl p = p
|
||||
#ifdef WITH_SERVANT
|
||||
|
|
|
@ -169,10 +169,6 @@ enableRemote Nothing _ = giveup "unable to enable git remote with no specified u
|
|||
- done each time git-annex is run in a way that uses remotes, unless
|
||||
- annex-checkuuid is false.
|
||||
-
|
||||
- An annex+http remote's UUID is part of the url,
|
||||
- so the config does not have to be read, but it is verified that
|
||||
- it matches the cached UUID.
|
||||
-
|
||||
- The config of other URL remotes is only read when there is no
|
||||
- cached UUID value.
|
||||
-}
|
||||
|
@ -181,27 +177,12 @@ configRead autoinit r = do
|
|||
gc <- Annex.getRemoteGitConfig r
|
||||
hasuuid <- (/= NoUUID) <$> getRepoUUID r
|
||||
annexignore <- liftIO $ getDynamicConfig (remoteAnnexIgnore gc)
|
||||
c <- fromRepo Git.config
|
||||
case (repoCheap r, annexignore, hasuuid, p2pHttpUUID =<< parseP2PHttpUrl =<< getAnnexUrl r c) of
|
||||
(_, True, _, _) -> return r
|
||||
(True, _, _, _)
|
||||
case (repoCheap r, annexignore, hasuuid) of
|
||||
(_, True, _) -> return r
|
||||
(True, _, _)
|
||||
| remoteAnnexCheckUUID gc -> tryGitConfigRead autoinit r hasuuid
|
||||
| otherwise -> return r
|
||||
(_, _, _, Just p2phttpuuid) -> getRepoUUID r >>= \case
|
||||
u@(UUID {})
|
||||
| u == p2phttpuuid -> return r
|
||||
| otherwise -> do
|
||||
warning $ UnquotedString $ unwords
|
||||
[ "Repository", Git.repoDescribe r
|
||||
, "has different UUIDS in"
|
||||
, Git.fromConfigKey (annexUrlConfigKey r)
|
||||
, "and"
|
||||
, Git.fromConfigKey (configRepoUUID r)
|
||||
]
|
||||
return r
|
||||
NoUUID -> storeUpdatedRemote $
|
||||
liftIO $ setUUID r p2phttpuuid
|
||||
(False, _, False, _) -> configSpecialGitRemotes r >>= \case
|
||||
(False, _, False) -> configSpecialGitRemotes r >>= \case
|
||||
Nothing -> tryGitConfigRead autoinit r False
|
||||
Just r' -> return r'
|
||||
_ -> return r
|
||||
|
@ -960,7 +941,6 @@ listProxied proxies rs = concat <$> mapM go rs
|
|||
annexconfigadjuster clusters r' =
|
||||
let c = adduuid (configRepoUUID renamedr) $
|
||||
addurl $
|
||||
addp2phttpurl $
|
||||
addproxiedby $
|
||||
adjustclusternode clusters $
|
||||
inheritconfigs $ Git.fullconfig r'
|
||||
|
@ -975,13 +955,6 @@ listProxied proxies rs = concat <$> mapM go rs
|
|||
addurl = M.insert (mkRemoteConfigKey renamedr (remoteGitConfigKey UrlField))
|
||||
[Git.ConfigValue $ encodeBS $ Git.repoLocation r]
|
||||
|
||||
addp2phttpurl = case remoteAnnexP2PHttpUrl gc of
|
||||
Just u -> addremoteannexfield AnnexUrlField
|
||||
[Git.ConfigValue $ encodeBS $
|
||||
p2pHttpUrlWithoutUUID (p2pHttpUrlString u)
|
||||
++ fromUUID (proxyRemoteUUID p)]
|
||||
Nothing -> id
|
||||
|
||||
addproxiedby = case remoteAnnexUUID gc of
|
||||
Just u -> addremoteannexfield ProxiedByField
|
||||
[Git.ConfigValue $ fromUUID u]
|
||||
|
|
|
@ -651,7 +651,7 @@ remoteGitConfigField = \case
|
|||
ClusterNodeField -> uninherited True "cluster-node"
|
||||
ClusterGatewayField -> uninherited True "cluster-gateway"
|
||||
UrlField -> uninherited False "url"
|
||||
AnnexUrlField -> uninherited False "annexurl"
|
||||
AnnexUrlField -> inherited False "annexurl"
|
||||
ShellField -> inherited True "shell"
|
||||
SshOptionsField -> inherited True "ssh-options"
|
||||
RsyncOptionsField -> inherited True "rsync-options"
|
||||
|
|
|
@ -10,9 +10,7 @@ connection (mostly). This is a translation of that protocol to HTTP.
|
|||
To indicate that an url uses this protocol, use
|
||||
`annex+http` or `annex+https` as the url scheme. Such an url uses
|
||||
port 9417 by default, although another port can be specified.
|
||||
The last part of the path of such an url is always the repository uuid.
|
||||
For example, `annex+http://example.com/git-annex/$uuid` or
|
||||
`annex+http://example.com:80/git-annex/$uuid`
|
||||
For example, "annex+http://example.com/git-annex/"
|
||||
|
||||
## base64 encoding of keys, uuids, and filenames
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ API.
|
|||
|
||||
Typically a remote will have `remote.name.url` set to a http url
|
||||
as usual, and `remote.name.annexUrl` set to an annex+http url such as
|
||||
`annex+http://example.com/git-annex/$uuid`. The annex+http url is
|
||||
"annex+http://example.com/git-annex/". The annex+http url is
|
||||
served by this server, and uses port 9417 by default.
|
||||
|
||||
As well as serving the git-annex HTTP API, this server provides a
|
||||
|
|
|
@ -26,15 +26,14 @@ that git will use, and also have `remote.name.annexUrl` set to the url
|
|||
that git-annex will use to talk to `git-annex p2phttp`. That url
|
||||
looks like this:
|
||||
|
||||
annex+http://example.com/git-annex/bbdac17e-6633-4b27-8f7b-fb447d5bae7c
|
||||
annex+http://example.com/git-annex/
|
||||
|
||||
The "annex+http" (or "annex+https") indicates that it's a git-annex API
|
||||
url, which defaults to being on port 9417 unless a different port is set.
|
||||
And the last part of the url is the annex.uuid of the repository.
|
||||
|
||||
It would be annoying if every user who cloned your repository
|
||||
had to set `remote.name.annexUrl` manually. So there's a way to automate it.
|
||||
In the git config file of the repository, set `annex.url` to the "annex+http"
|
||||
(or "annex+https") url. The first time it uses a http remote, git-annex
|
||||
downloads the git config file, and sets `remote.name.annexUrl` to the value
|
||||
of annex.url.
|
||||
downloads its git config file, and sets `remote.name.annexUrl` to the value
|
||||
of the remote's `annex.url`.
|
||||
|
|
Loading…
Reference in a new issue