diff --git a/P2P/Http/Client.hs b/P2P/Http/Client.hs index 9cf8a1e631..5c3606c265 100644 --- a/P2P/Http/Client.hs +++ b/P2P/Http/Client.hs @@ -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 diff --git a/P2P/Http/Url.hs b/P2P/Http/Url.hs index 1cc18a9214..b4d0a86264 100644 --- a/P2P/Http/Url.hs +++ b/P2P/Http/Url.hs @@ -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 diff --git a/Remote/Git.hs b/Remote/Git.hs index a915b2835a..90fb301c34 100644 --- a/Remote/Git.hs +++ b/Remote/Git.hs @@ -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] diff --git a/Types/GitConfig.hs b/Types/GitConfig.hs index d6c295edfb..93f1737717 100644 --- a/Types/GitConfig.hs +++ b/Types/GitConfig.hs @@ -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" diff --git a/doc/design/p2p_protocol_over_http.mdwn b/doc/design/p2p_protocol_over_http.mdwn index 6037656472..8cc9351297 100644 --- a/doc/design/p2p_protocol_over_http.mdwn +++ b/doc/design/p2p_protocol_over_http.mdwn @@ -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 diff --git a/doc/git-annex-p2phttp.mdwn b/doc/git-annex-p2phttp.mdwn index d1a4bc70b6..600677f05a 100644 --- a/doc/git-annex-p2phttp.mdwn +++ b/doc/git-annex-p2phttp.mdwn @@ -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 diff --git a/doc/tips/smart_http_server.mdwn b/doc/tips/smart_http_server.mdwn index 242c2e96e3..d7a56d0596 100644 --- a/doc/tips/smart_http_server.mdwn +++ b/doc/tips/smart_http_server.mdwn @@ -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`.