libfetchers: avoid api.github.com ratelimit if no github token is set
If we don't have any github token, we won't be able to fetch private repos, but we are also more likely to run into API limits since we don't have a token. To mitigate this only ever use the github api if we actually have a token.
This commit is contained in:
parent
88646eea29
commit
d9abce4ad4
|
@ -262,17 +262,20 @@ struct GitHubInputScheme : GitArchiveInputScheme
|
||||||
|
|
||||||
DownloadUrl getDownloadUrl(const Input & input) const override
|
DownloadUrl getDownloadUrl(const Input & input) const override
|
||||||
{
|
{
|
||||||
// FIXME: use regular /archive URLs instead? api.github.com
|
|
||||||
// might have stricter rate limits.
|
|
||||||
auto host = maybeGetStrAttr(input.attrs, "host").value_or("github.com");
|
auto host = maybeGetStrAttr(input.attrs, "host").value_or("github.com");
|
||||||
auto url = fmt(
|
Headers headers = makeHeadersWithAuthTokens(host);
|
||||||
host == "github.com"
|
// If we have no auth headers then we default to the public archive
|
||||||
? "https://api.%s/repos/%s/%s/tarball/%s"
|
// urls so we do not run into rate limits.
|
||||||
: "https://%s/api/v3/repos/%s/%s/tarball/%s",
|
const auto urlFmt =
|
||||||
host, getStrAttr(input.attrs, "owner"), getStrAttr(input.attrs, "repo"),
|
host != "github.com"
|
||||||
|
? "https://%s/api/v3/repos/%s/%s/tarball/%s"
|
||||||
|
: headers.empty()
|
||||||
|
? "https://%s/%s/%s/archive/%s.tar.gz"
|
||||||
|
: "https://api.%s/repos/%s/%s/tarball/%s";
|
||||||
|
|
||||||
|
const auto url = fmt(urlFmt, host, getStrAttr(input.attrs, "owner"), getStrAttr(input.attrs, "repo"),
|
||||||
input.getRev()->to_string(Base16, false));
|
input.getRev()->to_string(Base16, false));
|
||||||
|
|
||||||
Headers headers = makeHeadersWithAuthTokens(host);
|
|
||||||
return DownloadUrl { url, headers };
|
return DownloadUrl { url, headers };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue