libfetchers: remove scheme static initializers
provide a initLibFetchers function instead that runs them explicitly. Change-Id: Ida532e6ff18b72fdc21c9f98df7aceda6713e5df
This commit is contained in:
@@ -191,6 +191,8 @@ void initLibExpr()
|
||||
|
||||
#endif
|
||||
|
||||
fetchers::initLibFetchers();
|
||||
|
||||
libexprInitialised = true;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
#pragma once
|
||||
///@file internal header for fetcher declarations
|
||||
|
||||
#include "fetchers.hh"
|
||||
|
||||
namespace nix::fetchers {
|
||||
|
||||
std::unique_ptr<InputScheme> makeIndirectInputScheme();
|
||||
std::unique_ptr<InputScheme> makePathInputScheme();
|
||||
std::unique_ptr<InputScheme> makeFileInputScheme();
|
||||
std::unique_ptr<InputScheme> makeTarballInputScheme();
|
||||
std::unique_ptr<InputScheme> makeGitInputScheme();
|
||||
std::unique_ptr<InputScheme> makeMercurialInputScheme();
|
||||
std::unique_ptr<InputScheme> makeGitHubInputScheme();
|
||||
std::unique_ptr<InputScheme> makeGitLabInputScheme();
|
||||
std::unique_ptr<InputScheme> makeSourceHutInputScheme();
|
||||
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
#include "fetchers.hh"
|
||||
#include "builtin-fetchers.hh"
|
||||
#include "store-api.hh"
|
||||
#include "source-path.hh"
|
||||
#include "fetch-to-store.hh"
|
||||
@@ -7,12 +8,24 @@
|
||||
|
||||
namespace nix::fetchers {
|
||||
|
||||
std::unique_ptr<std::vector<std::shared_ptr<InputScheme>>> inputSchemes = nullptr;
|
||||
static std::vector<std::shared_ptr<InputScheme>> inputSchemes;
|
||||
|
||||
void registerInputScheme(std::shared_ptr<InputScheme> && inputScheme)
|
||||
{
|
||||
if (!inputSchemes) inputSchemes = std::make_unique<std::vector<std::shared_ptr<InputScheme>>>();
|
||||
inputSchemes->push_back(std::move(inputScheme));
|
||||
inputSchemes.push_back(std::move(inputScheme));
|
||||
}
|
||||
|
||||
void initLibFetchers()
|
||||
{
|
||||
registerInputScheme(makeIndirectInputScheme());
|
||||
registerInputScheme(makePathInputScheme());
|
||||
registerInputScheme(makeFileInputScheme());
|
||||
registerInputScheme(makeTarballInputScheme());
|
||||
registerInputScheme(makeGitInputScheme());
|
||||
registerInputScheme(makeMercurialInputScheme());
|
||||
registerInputScheme(makeGitHubInputScheme());
|
||||
registerInputScheme(makeGitLabInputScheme());
|
||||
registerInputScheme(makeSourceHutInputScheme());
|
||||
}
|
||||
|
||||
Input Input::fromURL(const std::string & url, bool requireTree)
|
||||
@@ -35,7 +48,7 @@ static void fixupInput(Input & input)
|
||||
|
||||
Input Input::fromURL(const ParsedURL & url, bool requireTree)
|
||||
{
|
||||
for (auto & inputScheme : *inputSchemes) {
|
||||
for (auto & inputScheme : inputSchemes) {
|
||||
auto res = inputScheme->inputFromURL(url, requireTree);
|
||||
if (res) {
|
||||
res->scheme = inputScheme;
|
||||
@@ -49,7 +62,7 @@ Input Input::fromURL(const ParsedURL & url, bool requireTree)
|
||||
|
||||
Input Input::fromAttrs(Attrs && attrs)
|
||||
{
|
||||
for (auto & inputScheme : *inputSchemes) {
|
||||
for (auto & inputScheme : inputSchemes) {
|
||||
auto res = inputScheme->inputFromAttrs(attrs);
|
||||
if (res) {
|
||||
res->scheme = inputScheme;
|
||||
|
||||
@@ -196,6 +196,8 @@ protected:
|
||||
|
||||
void registerInputScheme(std::shared_ptr<InputScheme> && fetcher);
|
||||
|
||||
void initLibFetchers();
|
||||
|
||||
struct DownloadFileResult
|
||||
{
|
||||
StorePath storePath;
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include "fetchers.hh"
|
||||
#include "cache.hh"
|
||||
#include "globals.hh"
|
||||
#include "builtin-fetchers.hh"
|
||||
#include "processes.hh"
|
||||
#include "tarfile.hh"
|
||||
#include "store-api.hh"
|
||||
@@ -795,6 +796,9 @@ struct GitInputScheme : InputScheme
|
||||
}
|
||||
};
|
||||
|
||||
static auto rGitInputScheme = OnStartup([] { registerInputScheme(std::make_unique<GitInputScheme>()); });
|
||||
std::unique_ptr<InputScheme> makeGitInputScheme()
|
||||
{
|
||||
return std::make_unique<GitInputScheme>();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include "filetransfer.hh"
|
||||
#include "cache.hh"
|
||||
#include "globals.hh"
|
||||
#include "builtin-fetchers.hh"
|
||||
#include "store-api.hh"
|
||||
#include "types.hh"
|
||||
#include "url-parts.hh"
|
||||
@@ -477,8 +478,18 @@ struct SourceHutInputScheme : GitArchiveInputScheme
|
||||
}
|
||||
};
|
||||
|
||||
static auto rGitHubInputScheme = OnStartup([] { registerInputScheme(std::make_unique<GitHubInputScheme>()); });
|
||||
static auto rGitLabInputScheme = OnStartup([] { registerInputScheme(std::make_unique<GitLabInputScheme>()); });
|
||||
static auto rSourceHutInputScheme = OnStartup([] { registerInputScheme(std::make_unique<SourceHutInputScheme>()); });
|
||||
std::unique_ptr<InputScheme> makeGitHubInputScheme()
|
||||
{
|
||||
return std::make_unique<GitHubInputScheme>();
|
||||
}
|
||||
|
||||
std::unique_ptr<InputScheme> makeGitLabInputScheme()
|
||||
{
|
||||
return std::make_unique<GitLabInputScheme>();
|
||||
}
|
||||
|
||||
std::unique_ptr<InputScheme> makeSourceHutInputScheme()
|
||||
{
|
||||
return std::make_unique<SourceHutInputScheme>();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include "fetchers.hh"
|
||||
#include "builtin-fetchers.hh"
|
||||
#include "url-parts.hh"
|
||||
#include "path.hh"
|
||||
|
||||
@@ -107,6 +108,9 @@ struct IndirectInputScheme : InputScheme
|
||||
}
|
||||
};
|
||||
|
||||
static auto rIndirectInputScheme = OnStartup([] { registerInputScheme(std::make_unique<IndirectInputScheme>()); });
|
||||
std::unique_ptr<InputScheme> makeIndirectInputScheme()
|
||||
{
|
||||
return std::make_unique<IndirectInputScheme>();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#include "fetchers.hh"
|
||||
#include "cache.hh"
|
||||
#include "builtin-fetchers.hh"
|
||||
#include "processes.hh"
|
||||
#include "store-api.hh"
|
||||
#include "temporary-dir.hh"
|
||||
@@ -330,6 +331,9 @@ struct MercurialInputScheme : InputScheme
|
||||
}
|
||||
};
|
||||
|
||||
static auto rMercurialInputScheme = OnStartup([] { registerInputScheme(std::make_unique<MercurialInputScheme>()); });
|
||||
std::unique_ptr<InputScheme> makeMercurialInputScheme()
|
||||
{
|
||||
return std::make_unique<MercurialInputScheme>();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include "fetchers.hh"
|
||||
#include "builtin-fetchers.hh"
|
||||
#include "store-api.hh"
|
||||
#include "archive.hh"
|
||||
|
||||
@@ -139,6 +140,9 @@ struct PathInputScheme : InputScheme
|
||||
}
|
||||
};
|
||||
|
||||
static auto rPathInputScheme = OnStartup([] { registerInputScheme(std::make_unique<PathInputScheme>()); });
|
||||
std::unique_ptr<InputScheme> makePathInputScheme()
|
||||
{
|
||||
return std::make_unique<PathInputScheme>();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include "cache.hh"
|
||||
#include "filetransfer.hh"
|
||||
#include "globals.hh"
|
||||
#include "builtin-fetchers.hh"
|
||||
#include "store-api.hh"
|
||||
#include "archive.hh"
|
||||
#include "tarfile.hh"
|
||||
@@ -307,7 +308,14 @@ struct TarballInputScheme : CurlInputScheme
|
||||
}
|
||||
};
|
||||
|
||||
static auto rTarballInputScheme = OnStartup([] { registerInputScheme(std::make_unique<TarballInputScheme>()); });
|
||||
static auto rFileInputScheme = OnStartup([] { registerInputScheme(std::make_unique<FileInputScheme>()); });
|
||||
std::unique_ptr<InputScheme> makeFileInputScheme()
|
||||
{
|
||||
return std::make_unique<TarballInputScheme>();
|
||||
}
|
||||
|
||||
std::unique_ptr<InputScheme> makeTarballInputScheme()
|
||||
{
|
||||
return std::make_unique<FileInputScheme>();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -32,15 +32,6 @@ typedef std::set<Path> PathSet;
|
||||
|
||||
typedef std::vector<std::pair<std::string, std::string>> Headers;
|
||||
|
||||
/**
|
||||
* Helper class to run code at startup.
|
||||
*/
|
||||
template<typename T>
|
||||
struct OnStartup
|
||||
{
|
||||
OnStartup(T && t) { t(); }
|
||||
};
|
||||
|
||||
/**
|
||||
* Wrap bools to prevent string literals (i.e. 'char *') from being
|
||||
* cast to a bool in Attr.
|
||||
|
||||
Reference in New Issue
Block a user