1
1
Fork 0
mirror of https://github.com/NixOS/nix.git synced 2025-11-14 22:42:41 +01:00

libstore: Correct getUri methods for all stores

Previously `getUri` didn't include store query parameters,
`ssh-ng` didn't include any information at all and the local
store didn't have the path:

```
$ nix store info --store "local?root=/tmp/aaa&require-sigs=false"
Store URL: local
Version: 2.31.0
Trusted: 1
$ nix store info --store "ssh-ng://localhost?remote-program=nix-daemon"
Store URL: ssh-ng://
Version: 2.31.0
Trusted: 1
$ nix store info --store "ssh://localhost?remote-program=nix-store"
Store URL: ssh://localhost
```

This commit changes this to:

```
$ nix store info --store "local?root=/tmp/aaa&require-sigs=false"
Store URL: local?require-sigs=false&root=/tmp/aaa
Version: 2.31.0
Trusted: 1
$ nix store info --store "ssh-ng://localhost?remote-program=nix-daemon"
Store URL: ssh-ng://localhost?remote-program=nix-daemon
Version: 2.31.0
Trusted: 1
$ nix store info --store "ssh://localhost?remote-program=nix-store"
Store URL: ssh://localhost?remote-program=nix-store
```
This commit is contained in:
Sergei Zimmerman 2025-08-11 17:51:03 +03:00
parent 73ebdf2497
commit 41af531392
No known key found for this signature in database
7 changed files with 58 additions and 16 deletions

View file

@ -6,21 +6,27 @@ namespace nix {
TEST(LegacySSHStore, constructConfig)
{
LegacySSHStoreConfig config{
initLibStore(/*loadConfig=*/false);
auto config = make_ref<LegacySSHStoreConfig>(
"ssh",
"localhost",
"me@localhost:2222",
StoreConfig::Params{
{
"remote-program",
// TODO #11106, no more split on space
"foo bar",
},
}};
});
EXPECT_EQ(
config.remoteProgram.get(),
config->remoteProgram.get(),
(Strings{
"foo",
"bar",
}));
auto store = config->openStore();
EXPECT_EQ(store->getUri(), "ssh://me@localhost:2222?remote-program=foo%20bar");
}
} // namespace nix

View file

@ -5,6 +5,7 @@
#include "nix/store/tests/nix_api_store.hh"
#include "nix/util/tests/string_callback.hh"
#include "nix/util/url.hh"
#include "store-tests-config.hh"
@ -23,7 +24,13 @@ TEST_F(nix_api_store_test, nix_store_get_uri)
std::string str;
auto ret = nix_store_get_uri(ctx, store, OBSERVE_STRING(str));
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)

View file

@ -8,24 +8,31 @@ namespace nix {
TEST(SSHStore, constructConfig)
{
SSHStoreConfig config{
"ssh",
"localhost",
initLibStore(/*loadConfig=*/false);
auto config = make_ref<SSHStoreConfig>(
"ssh-ng",
"me@localhost:2222",
StoreConfig::Params{
{
"remote-program",
// TODO #11106, no more split on space
"foo bar",
},
},
};
});
EXPECT_EQ(
config.remoteProgram.get(),
config->remoteProgram.get(),
(Strings{
"foo",
"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)