mirror of
https://github.com/NixOS/nix.git
synced 2025-11-14 14:32:42 +01:00
Ensure all store types support "real" URIs
In particular `local://<path>` and `unix://` (without any path) now work, and mean the same things as `local` and `daemon`, respectively. We thus now have the opportunity to desguar `local` and `daemon` early. This will allow me to make a change to https://github.com/NixOS/nix/pull/9839 requested during review to desugar those earlier. Co-authored-by: Théophane Hufschmitt <7226587+thufschmitt@users.noreply.github.com>
This commit is contained in:
parent
3a7d62528d
commit
470c0501eb
19 changed files with 170 additions and 75 deletions
24
src/libstore/ssh-store-config.cc
Normal file
24
src/libstore/ssh-store-config.cc
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
#include <regex>
|
||||
|
||||
#include "ssh-store-config.hh"
|
||||
|
||||
namespace nix {
|
||||
|
||||
std::string CommonSSHStoreConfig::extractConnStr(std::string_view scheme, std::string_view _connStr)
|
||||
{
|
||||
if (_connStr.empty())
|
||||
throw UsageError("`%s` store requires a valid SSH host as the authority part in Store URI", scheme);
|
||||
|
||||
std::string connStr{_connStr};
|
||||
|
||||
std::smatch result;
|
||||
static std::regex v6AddrRegex("^((.*)@)?\\[(.*)\\]$");
|
||||
|
||||
if (std::regex_match(connStr, result, v6AddrRegex)) {
|
||||
connStr = result[1].matched ? result.str(1) + result.str(3) : result.str(3);
|
||||
}
|
||||
|
||||
return connStr;
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue