mirror of
https://github.com/NixOS/nix.git
synced 2025-11-09 12:06:01 +01:00
Merge pull request #13734 from xokdvium/get-uri-correct
libstore: Correct getUri methods for all stores
This commit is contained in:
commit
dfb78af184
17 changed files with 84 additions and 50 deletions
|
|
@ -1,6 +1,5 @@
|
||||||
#include "nix/expr/eval-profiler-settings.hh"
|
#include "nix/expr/eval-profiler-settings.hh"
|
||||||
#include "nix/util/configuration.hh"
|
#include "nix/util/configuration.hh"
|
||||||
#include "nix/util/logging.hh" /* Needs to be included before config-impl.hh */
|
|
||||||
#include "nix/util/config-impl.hh"
|
#include "nix/util/config-impl.hh"
|
||||||
#include "nix/util/abstract-setting-to-json.hh"
|
#include "nix/util/abstract-setting-to-json.hh"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,21 +6,27 @@ namespace nix {
|
||||||
|
|
||||||
TEST(LegacySSHStore, constructConfig)
|
TEST(LegacySSHStore, constructConfig)
|
||||||
{
|
{
|
||||||
LegacySSHStoreConfig config{
|
initLibStore(/*loadConfig=*/false);
|
||||||
|
|
||||||
|
auto config = make_ref<LegacySSHStoreConfig>(
|
||||||
"ssh",
|
"ssh",
|
||||||
"localhost",
|
"me@localhost:2222",
|
||||||
StoreConfig::Params{
|
StoreConfig::Params{
|
||||||
{
|
{
|
||||||
"remote-program",
|
"remote-program",
|
||||||
// TODO #11106, no more split on space
|
// TODO #11106, no more split on space
|
||||||
"foo bar",
|
"foo bar",
|
||||||
},
|
},
|
||||||
}};
|
});
|
||||||
|
|
||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
config.remoteProgram.get(),
|
config->remoteProgram.get(),
|
||||||
(Strings{
|
(Strings{
|
||||||
"foo",
|
"foo",
|
||||||
"bar",
|
"bar",
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
auto store = config->openStore();
|
||||||
|
EXPECT_EQ(store->getUri(), "ssh://me@localhost:2222?remote-program=foo%20bar");
|
||||||
}
|
}
|
||||||
} // namespace nix
|
} // namespace nix
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,6 @@
|
||||||
// FIXME: Odd failures for templates that are causing the PR to break
|
#include <gtest/gtest.h>
|
||||||
// for now with discussion with @Ericson2314 to comment out.
|
|
||||||
#if 0
|
|
||||||
# include <gtest/gtest.h>
|
|
||||||
|
|
||||||
# include "nix/store/local-overlay-store.hh"
|
#include "nix/store/local-overlay-store.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
|
@ -31,4 +28,3 @@ TEST(LocalOverlayStore, constructConfig_rootPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace nix
|
} // namespace nix
|
||||||
#endif
|
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,12 @@
|
||||||
// FIXME: Odd failures for templates that are causing the PR to break
|
#include <gtest/gtest.h>
|
||||||
// for now with discussion with @Ericson2314 to comment out.
|
|
||||||
#if 0
|
|
||||||
# include <gtest/gtest.h>
|
|
||||||
|
|
||||||
# include "nix/store/local-store.hh"
|
#include "nix/store/local-store.hh"
|
||||||
|
|
||||||
// Needed for template specialisations. This is not good! When we
|
// Needed for template specialisations. This is not good! When we
|
||||||
// overhaul how store configs work, this should be fixed.
|
// overhaul how store configs work, this should be fixed.
|
||||||
# include "nix/util/args.hh"
|
#include "nix/util/args.hh"
|
||||||
# include "nix/util/config-impl.hh"
|
#include "nix/util/config-impl.hh"
|
||||||
# include "nix/util/abstract-setting-to-json.hh"
|
#include "nix/util/abstract-setting-to-json.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
|
@ -37,4 +34,3 @@ TEST(LocalStore, constructConfig_rootPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace nix
|
} // namespace nix
|
||||||
#endif
|
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
#include "nix/store/tests/nix_api_store.hh"
|
#include "nix/store/tests/nix_api_store.hh"
|
||||||
#include "nix/util/tests/string_callback.hh"
|
#include "nix/util/tests/string_callback.hh"
|
||||||
|
#include "nix/util/url.hh"
|
||||||
|
|
||||||
#include "store-tests-config.hh"
|
#include "store-tests-config.hh"
|
||||||
|
|
||||||
|
|
@ -23,7 +24,13 @@ TEST_F(nix_api_store_test, nix_store_get_uri)
|
||||||
std::string str;
|
std::string str;
|
||||||
auto ret = nix_store_get_uri(ctx, store, OBSERVE_STRING(str));
|
auto ret = nix_store_get_uri(ctx, store, OBSERVE_STRING(str));
|
||||||
ASSERT_EQ(NIX_OK, ret);
|
ASSERT_EQ(NIX_OK, ret);
|
||||||
ASSERT_STREQ("local", str.c_str());
|
auto expectedStoreURI = "local?"
|
||||||
|
+ nix::encodeQuery({
|
||||||
|
{"log", nixLogDir},
|
||||||
|
{"state", nixStateDir},
|
||||||
|
{"store", nixStoreDir},
|
||||||
|
});
|
||||||
|
ASSERT_EQ(expectedStoreURI, str);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(nix_api_util_context, nix_store_get_storedir_default)
|
TEST_F(nix_api_util_context, nix_store_get_storedir_default)
|
||||||
|
|
|
||||||
|
|
@ -1,32 +1,38 @@
|
||||||
// FIXME: Odd failures for templates that are causing the PR to break
|
#include <gtest/gtest.h>
|
||||||
// for now with discussion with @Ericson2314 to comment out.
|
|
||||||
#if 0
|
|
||||||
# include <gtest/gtest.h>
|
|
||||||
|
|
||||||
# include "nix/store/ssh-store.hh"
|
#include "nix/store/ssh-store.hh"
|
||||||
|
#include "nix/util/config-impl.hh"
|
||||||
|
#include "nix/util/abstract-setting-to-json.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
TEST(SSHStore, constructConfig)
|
TEST(SSHStore, constructConfig)
|
||||||
{
|
{
|
||||||
SSHStoreConfig config{
|
initLibStore(/*loadConfig=*/false);
|
||||||
"ssh",
|
|
||||||
"localhost",
|
auto config = make_ref<SSHStoreConfig>(
|
||||||
|
"ssh-ng",
|
||||||
|
"me@localhost:2222",
|
||||||
StoreConfig::Params{
|
StoreConfig::Params{
|
||||||
{
|
{
|
||||||
"remote-program",
|
"remote-program",
|
||||||
// TODO #11106, no more split on space
|
// TODO #11106, no more split on space
|
||||||
"foo bar",
|
"foo bar",
|
||||||
},
|
},
|
||||||
},
|
});
|
||||||
};
|
|
||||||
|
|
||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
config.remoteProgram.get(),
|
config->remoteProgram.get(),
|
||||||
(Strings{
|
(Strings{
|
||||||
"foo",
|
"foo",
|
||||||
"bar",
|
"bar",
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
auto store = config->openStore();
|
||||||
|
EXPECT_EQ(store->getUri(), "ssh-ng://me@localhost:2222?remote-program=foo%20bar");
|
||||||
|
config->resetOverridden();
|
||||||
|
store = config->openStore();
|
||||||
|
EXPECT_EQ(store->getUri(), "ssh-ng://me@localhost:2222");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(MountedSSHStore, constructConfig)
|
TEST(MountedSSHStore, constructConfig)
|
||||||
|
|
@ -51,5 +57,4 @@ TEST(MountedSSHStore, constructConfig)
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
} // namespace nix
|
||||||
#endif
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,6 @@
|
||||||
// FIXME: Odd failures for templates that are causing the PR to break
|
#include <gtest/gtest.h>
|
||||||
// for now with discussion with @Ericson2314 to comment out.
|
|
||||||
#if 0
|
|
||||||
# include <gtest/gtest.h>
|
|
||||||
|
|
||||||
# include "nix/store/uds-remote-store.hh"
|
#include "nix/store/uds-remote-store.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
|
@ -20,4 +17,3 @@ TEST(UDSRemoteStore, constructConfigWrongScheme)
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace nix
|
} // namespace nix
|
||||||
#endif
|
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,11 @@ namespace nix {
|
||||||
|
|
||||||
typedef enum { smEnabled, smRelaxed, smDisabled } SandboxMode;
|
typedef enum { smEnabled, smRelaxed, smDisabled } SandboxMode;
|
||||||
|
|
||||||
|
template<>
|
||||||
|
SandboxMode BaseSetting<SandboxMode>::parse(const std::string & str) const;
|
||||||
|
template<>
|
||||||
|
std::string BaseSetting<SandboxMode>::to_string() const;
|
||||||
|
|
||||||
struct MaxBuildJobsSetting : public BaseSetting<unsigned int>
|
struct MaxBuildJobsSetting : public BaseSetting<unsigned int>
|
||||||
{
|
{
|
||||||
MaxBuildJobsSetting(
|
MaxBuildJobsSetting(
|
||||||
|
|
|
||||||
|
|
@ -126,6 +126,19 @@ struct StoreConfig : public StoreDirConfig
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get overridden store reference query parameters.
|
||||||
|
*/
|
||||||
|
StringMap getQueryParams() const
|
||||||
|
{
|
||||||
|
auto queryParams = std::map<std::string, AbstractConfig::SettingInfo>{};
|
||||||
|
getSettings(queryParams, /*overriddenOnly=*/true);
|
||||||
|
StringMap res;
|
||||||
|
for (const auto & [name, info] : queryParams)
|
||||||
|
res.insert({name, info.value});
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An experimental feature this type store is gated, if it is to be
|
* An experimental feature this type store is gated, if it is to be
|
||||||
* experimental.
|
* experimental.
|
||||||
|
|
|
||||||
|
|
@ -90,7 +90,9 @@ ref<LegacySSHStore::Connection> LegacySSHStore::openConnection()
|
||||||
|
|
||||||
std::string LegacySSHStore::getUri()
|
std::string LegacySSHStore::getUri()
|
||||||
{
|
{
|
||||||
return *Config::uriSchemes().begin() + "://" + config->authority.to_string();
|
return ParsedURL{
|
||||||
|
.scheme = *Config::uriSchemes().begin(), .authority = config->authority, .query = config->getQueryParams()}
|
||||||
|
.to_string();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::map<StorePath, UnkeyedValidPathInfo> LegacySSHStore::queryPathInfosUncached(const StorePathSet & paths)
|
std::map<StorePath, UnkeyedValidPathInfo> LegacySSHStore::queryPathInfosUncached(const StorePathSet & paths)
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@
|
||||||
#include "nix/store/posix-fs-canonicalise.hh"
|
#include "nix/store/posix-fs-canonicalise.hh"
|
||||||
#include "nix/util/posix-source-accessor.hh"
|
#include "nix/util/posix-source-accessor.hh"
|
||||||
#include "nix/store/keys.hh"
|
#include "nix/store/keys.hh"
|
||||||
|
#include "nix/util/url.hh"
|
||||||
#include "nix/util/users.hh"
|
#include "nix/util/users.hh"
|
||||||
#include "nix/store/store-open.hh"
|
#include "nix/store/store-open.hh"
|
||||||
#include "nix/store/store-registration.hh"
|
#include "nix/store/store-registration.hh"
|
||||||
|
|
@ -440,7 +441,13 @@ LocalStore::~LocalStore()
|
||||||
|
|
||||||
std::string LocalStore::getUri()
|
std::string LocalStore::getUri()
|
||||||
{
|
{
|
||||||
return "local";
|
std::ostringstream oss;
|
||||||
|
oss << *config->uriSchemes().begin();
|
||||||
|
auto queryParams = config->getQueryParams();
|
||||||
|
if (!queryParams.empty())
|
||||||
|
oss << "?";
|
||||||
|
oss << encodeQuery(queryParams);
|
||||||
|
return std::move(oss).str();
|
||||||
}
|
}
|
||||||
|
|
||||||
int LocalStore::getSchema()
|
int LocalStore::getSchema()
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,9 @@ struct SSHStore : virtual RemoteStore
|
||||||
|
|
||||||
std::string getUri() override
|
std::string getUri() override
|
||||||
{
|
{
|
||||||
return *Config::uriSchemes().begin() + "://" + host;
|
return ParsedURL{
|
||||||
|
.scheme = *Config::uriSchemes().begin(), .authority = config->authority, .query = config->getQueryParams()}
|
||||||
|
.to_string();
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME extend daemon protocol, move implementation to RemoteStore
|
// FIXME extend daemon protocol, move implementation to RemoteStore
|
||||||
|
|
@ -66,8 +68,6 @@ protected:
|
||||||
|
|
||||||
ref<RemoteStore::Connection> openConnection() override;
|
ref<RemoteStore::Connection> openConnection() override;
|
||||||
|
|
||||||
std::string host;
|
|
||||||
|
|
||||||
std::vector<std::string> extraRemoteProgramArgs;
|
std::vector<std::string> extraRemoteProgramArgs;
|
||||||
|
|
||||||
SSHMaster master;
|
SSHMaster master;
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ bool GlobalConfig::set(const std::string & name, const std::string & value)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GlobalConfig::getSettings(std::map<std::string, SettingInfo> & res, bool overriddenOnly)
|
void GlobalConfig::getSettings(std::map<std::string, SettingInfo> & res, bool overriddenOnly) const
|
||||||
{
|
{
|
||||||
for (auto & config : configRegistrations())
|
for (auto & config : configRegistrations())
|
||||||
config->getSettings(res, overriddenOnly);
|
config->getSettings(res, overriddenOnly);
|
||||||
|
|
|
||||||
|
|
@ -85,7 +85,7 @@ void AbstractConfig::reapplyUnknownSettings()
|
||||||
set(s.first, s.second);
|
set(s.first, s.second);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Config::getSettings(std::map<std::string, SettingInfo> & res, bool overriddenOnly)
|
void Config::getSettings(std::map<std::string, SettingInfo> & res, bool overriddenOnly) const
|
||||||
{
|
{
|
||||||
for (const auto & opt : _settings)
|
for (const auto & opt : _settings)
|
||||||
if (!opt.second.isAlias && (!overriddenOnly || opt.second.setting->overridden)
|
if (!opt.second.isAlias && (!overriddenOnly || opt.second.setting->overridden)
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ struct GlobalConfig : public AbstractConfig
|
||||||
|
|
||||||
bool set(const std::string & name, const std::string & value) override;
|
bool set(const std::string & name, const std::string & value) override;
|
||||||
|
|
||||||
void getSettings(std::map<std::string, SettingInfo> & res, bool overriddenOnly = false) override;
|
void getSettings(std::map<std::string, SettingInfo> & res, bool overriddenOnly = false) const override;
|
||||||
|
|
||||||
void resetOverridden() override;
|
void resetOverridden() override;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,8 +12,10 @@
|
||||||
* instantiation.
|
* instantiation.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "nix/util/util.hh"
|
||||||
#include "nix/util/configuration.hh"
|
#include "nix/util/configuration.hh"
|
||||||
#include "nix/util/args.hh"
|
#include "nix/util/args.hh"
|
||||||
|
#include "nix/util/logging.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,7 @@ public:
|
||||||
* - res: map to store settings in
|
* - res: map to store settings in
|
||||||
* - overriddenOnly: when set to true only overridden settings will be added to `res`
|
* - overriddenOnly: when set to true only overridden settings will be added to `res`
|
||||||
*/
|
*/
|
||||||
virtual void getSettings(std::map<std::string, SettingInfo> & res, bool overriddenOnly = false) = 0;
|
virtual void getSettings(std::map<std::string, SettingInfo> & res, bool overriddenOnly = false) const = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses the configuration in `contents` and applies it
|
* Parses the configuration in `contents` and applies it
|
||||||
|
|
@ -160,7 +160,7 @@ public:
|
||||||
|
|
||||||
void addSetting(AbstractSetting * setting);
|
void addSetting(AbstractSetting * setting);
|
||||||
|
|
||||||
void getSettings(std::map<std::string, SettingInfo> & res, bool overriddenOnly = false) override;
|
void getSettings(std::map<std::string, SettingInfo> & res, bool overriddenOnly = false) const override;
|
||||||
|
|
||||||
void resetOverridden() override;
|
void resetOverridden() override;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue