forked from lix-project/lix
Merge remote-tracking branch 'origin/master' into substitute-other-storedir
This commit is contained in:
commit
bcf8582091
|
@ -97,7 +97,7 @@ $ rm -rf /nix
|
||||||
installation on your system:
|
installation on your system:
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<screen>sh <(curl https://nixos.org/nix/install) --daemon</screen>
|
<screen>sh <(curl -L https://nixos.org/nix/install) --daemon</screen>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The multi-user installation of Nix will create build users between
|
The multi-user installation of Nix will create build users between
|
||||||
|
@ -178,7 +178,7 @@ sudo rm /Library/LaunchDaemons/org.nixos.nix-daemon.plist
|
||||||
is a bit of a misnomer). To use this approach, just install Nix with:
|
is a bit of a misnomer). To use this approach, just install Nix with:
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<screen>$ sh <(curl https://nixos.org/nix/install) --darwin-use-unencrypted-nix-store-volume</screen>
|
<screen>$ sh <(curl -L https://nixos.org/nix/install) --darwin-use-unencrypted-nix-store-volume</screen>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
If you don't like the sound of this, you'll want to weigh the
|
If you don't like the sound of this, you'll want to weigh the
|
||||||
|
@ -429,7 +429,7 @@ LABEL=Nix\040Store /nix apfs rw,nobrowse
|
||||||
NixOS.org installation script:
|
NixOS.org installation script:
|
||||||
|
|
||||||
<screen>
|
<screen>
|
||||||
sh <(curl https://nixos.org/nix/install)
|
sh <(curl -L https://nixos.org/nix/install)
|
||||||
</screen>
|
</screen>
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
|
|
@ -526,7 +526,7 @@ This script is going to call sudo a lot. Normally, it would show you
|
||||||
exactly what commands it is running and why. However, the script is
|
exactly what commands it is running and why. However, the script is
|
||||||
run in a headless fashion, like this:
|
run in a headless fashion, like this:
|
||||||
|
|
||||||
$ curl https://nixos.org/nix/install | sh
|
$ curl -L https://nixos.org/nix/install | sh
|
||||||
|
|
||||||
or maybe in a CI pipeline. Because of that, we're going to skip the
|
or maybe in a CI pipeline. Because of that, we're going to skip the
|
||||||
verbose output in the interest of brevity.
|
verbose output in the interest of brevity.
|
||||||
|
@ -534,7 +534,7 @@ verbose output in the interest of brevity.
|
||||||
If you would like to
|
If you would like to
|
||||||
see the output, try like this:
|
see the output, try like this:
|
||||||
|
|
||||||
$ curl -o install-nix https://nixos.org/nix/install
|
$ curl -L -o install-nix https://nixos.org/nix/install
|
||||||
$ sh ./install-nix
|
$ sh ./install-nix
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
|
|
|
@ -113,7 +113,7 @@ if [ "$(uname -s)" = "Darwin" ]; then
|
||||||
(
|
(
|
||||||
echo ""
|
echo ""
|
||||||
echo "Installing on macOS >=10.15 requires relocating the store to an apfs volume."
|
echo "Installing on macOS >=10.15 requires relocating the store to an apfs volume."
|
||||||
echo "Use sh <(curl https://nixos.org/nix/install) --darwin-use-unencrypted-nix-store-volume or run the preparation steps manually."
|
echo "Use sh <(curl -L https://nixos.org/nix/install) --darwin-use-unencrypted-nix-store-volume or run the preparation steps manually."
|
||||||
echo "See https://nixos.org/nix/manual/#sect-macos-installation"
|
echo "See https://nixos.org/nix/manual/#sect-macos-installation"
|
||||||
echo ""
|
echo ""
|
||||||
) >&2
|
) >&2
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <boost/format.hpp>
|
#include <boost/format.hpp>
|
||||||
|
#include <boost/algorithm/string/replace.hpp>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include "ansicolor.hh"
|
#include "ansicolor.hh"
|
||||||
|
|
||||||
|
@ -103,7 +104,9 @@ class hintformat
|
||||||
public:
|
public:
|
||||||
hintformat(const string &format) :fmt(format)
|
hintformat(const string &format) :fmt(format)
|
||||||
{
|
{
|
||||||
fmt.exceptions(boost::io::all_error_bits ^ boost::io::too_many_args_bit);
|
fmt.exceptions(boost::io::all_error_bits ^
|
||||||
|
boost::io::too_many_args_bit ^
|
||||||
|
boost::io::too_few_args_bit);
|
||||||
}
|
}
|
||||||
|
|
||||||
hintformat(const hintformat &hf)
|
hintformat(const hintformat &hf)
|
||||||
|
@ -117,6 +120,13 @@ public:
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
hintformat& operator%(const normaltxt<T> &value)
|
||||||
|
{
|
||||||
|
fmt % value.value;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
std::string str() const
|
std::string str() const
|
||||||
{
|
{
|
||||||
return fmt.str();
|
return fmt.str();
|
||||||
|
@ -136,4 +146,9 @@ inline hintformat hintfmt(const std::string & fs, const Args & ... args)
|
||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline hintformat hintfmt(std::string plain_string)
|
||||||
|
{
|
||||||
|
// we won't be receiving any args in this case, so just print the original string
|
||||||
|
return hintfmt("%s", normaltxt(plain_string));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "logging.hh"
|
#include "logging.hh"
|
||||||
#include "nixexpr.hh"
|
#include "nixexpr.hh"
|
||||||
#include "util.hh"
|
#include "util.hh"
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
|
@ -42,7 +43,7 @@ namespace nix {
|
||||||
logger->logEI(ei);
|
logger->logEI(ei);
|
||||||
auto str = testing::internal::GetCapturedStderr();
|
auto str = testing::internal::GetCapturedStderr();
|
||||||
|
|
||||||
ASSERT_STREQ(str.c_str(), "\x1B[31;1merror:\x1B[0m\x1B[34;1m --- TestError --- error-unit-test\x1B[0m\n\x1B[33;1m\x1B[0minitial error\x1B[0m; subsequent error message.\n");
|
ASSERT_STREQ(str.c_str(), "\x1B[31;1merror:\x1B[0m\x1B[34;1m --- TestError --- error-unit-test\x1B[0m\ninitial error; subsequent error message.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -60,8 +61,7 @@ namespace nix {
|
||||||
logError(e.info());
|
logError(e.info());
|
||||||
auto str = testing::internal::GetCapturedStderr();
|
auto str = testing::internal::GetCapturedStderr();
|
||||||
|
|
||||||
ASSERT_STREQ(str.c_str(), "\x1B[31;1merror:\x1B[0m\x1B[34;1m --- SysError --- error-unit-test\x1B[0m\n\x1B[33;1m\x1B[0mstatting file\x1B[0m: \x1B[33;1mBad file descriptor\x1B[0m\n");
|
ASSERT_STREQ(str.c_str(), "\x1B[31;1merror:\x1B[0m\x1B[34;1m --- SysError --- error-unit-test\x1B[0m\nstatting file: \x1B[33;1mBad file descriptor\x1B[0m\n");
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,9 +69,9 @@ namespace nix {
|
||||||
testing::internal::CaptureStderr();
|
testing::internal::CaptureStderr();
|
||||||
|
|
||||||
logger->logEI({ .level = lvlInfo,
|
logger->logEI({ .level = lvlInfo,
|
||||||
.name = "Info name",
|
.name = "Info name",
|
||||||
.description = "Info description",
|
.description = "Info description",
|
||||||
});
|
});
|
||||||
|
|
||||||
auto str = testing::internal::GetCapturedStderr();
|
auto str = testing::internal::GetCapturedStderr();
|
||||||
ASSERT_STREQ(str.c_str(), "\x1B[32;1minfo:\x1B[0m\x1B[34;1m --- Info name --- error-unit-test\x1B[0m\nInfo description\n");
|
ASSERT_STREQ(str.c_str(), "\x1B[32;1minfo:\x1B[0m\x1B[34;1m --- Info name --- error-unit-test\x1B[0m\nInfo description\n");
|
||||||
|
@ -85,7 +85,7 @@ namespace nix {
|
||||||
logger->logEI({ .level = lvlTalkative,
|
logger->logEI({ .level = lvlTalkative,
|
||||||
.name = "Talkative name",
|
.name = "Talkative name",
|
||||||
.description = "Talkative description",
|
.description = "Talkative description",
|
||||||
});
|
});
|
||||||
|
|
||||||
auto str = testing::internal::GetCapturedStderr();
|
auto str = testing::internal::GetCapturedStderr();
|
||||||
ASSERT_STREQ(str.c_str(), "\x1B[32;1mtalk:\x1B[0m\x1B[34;1m --- Talkative name --- error-unit-test\x1B[0m\nTalkative description\n");
|
ASSERT_STREQ(str.c_str(), "\x1B[32;1mtalk:\x1B[0m\x1B[34;1m --- Talkative name --- error-unit-test\x1B[0m\nTalkative description\n");
|
||||||
|
@ -99,7 +99,7 @@ namespace nix {
|
||||||
logger->logEI({ .level = lvlChatty,
|
logger->logEI({ .level = lvlChatty,
|
||||||
.name = "Chatty name",
|
.name = "Chatty name",
|
||||||
.description = "Talkative description",
|
.description = "Talkative description",
|
||||||
});
|
});
|
||||||
|
|
||||||
auto str = testing::internal::GetCapturedStderr();
|
auto str = testing::internal::GetCapturedStderr();
|
||||||
ASSERT_STREQ(str.c_str(), "\x1B[32;1mchat:\x1B[0m\x1B[34;1m --- Chatty name --- error-unit-test\x1B[0m\nTalkative description\n");
|
ASSERT_STREQ(str.c_str(), "\x1B[32;1mchat:\x1B[0m\x1B[34;1m --- Chatty name --- error-unit-test\x1B[0m\nTalkative description\n");
|
||||||
|
@ -113,7 +113,7 @@ namespace nix {
|
||||||
logger->logEI({ .level = lvlDebug,
|
logger->logEI({ .level = lvlDebug,
|
||||||
.name = "Debug name",
|
.name = "Debug name",
|
||||||
.description = "Debug description",
|
.description = "Debug description",
|
||||||
});
|
});
|
||||||
|
|
||||||
auto str = testing::internal::GetCapturedStderr();
|
auto str = testing::internal::GetCapturedStderr();
|
||||||
ASSERT_STREQ(str.c_str(), "\x1B[33;1mdebug:\x1B[0m\x1B[34;1m --- Debug name --- error-unit-test\x1B[0m\nDebug description\n");
|
ASSERT_STREQ(str.c_str(), "\x1B[33;1mdebug:\x1B[0m\x1B[34;1m --- Debug name --- error-unit-test\x1B[0m\nDebug description\n");
|
||||||
|
@ -127,7 +127,7 @@ namespace nix {
|
||||||
logger->logEI({ .level = lvlVomit,
|
logger->logEI({ .level = lvlVomit,
|
||||||
.name = "Vomit name",
|
.name = "Vomit name",
|
||||||
.description = "Vomit description",
|
.description = "Vomit description",
|
||||||
});
|
});
|
||||||
|
|
||||||
auto str = testing::internal::GetCapturedStderr();
|
auto str = testing::internal::GetCapturedStderr();
|
||||||
ASSERT_STREQ(str.c_str(), "\x1B[32;1mvomit:\x1B[0m\x1B[34;1m --- Vomit name --- error-unit-test\x1B[0m\nVomit description\n");
|
ASSERT_STREQ(str.c_str(), "\x1B[32;1mvomit:\x1B[0m\x1B[34;1m --- Vomit name --- error-unit-test\x1B[0m\nVomit description\n");
|
||||||
|
@ -144,7 +144,7 @@ namespace nix {
|
||||||
logError({
|
logError({
|
||||||
.name = "name",
|
.name = "name",
|
||||||
.description = "error description",
|
.description = "error description",
|
||||||
});
|
});
|
||||||
|
|
||||||
auto str = testing::internal::GetCapturedStderr();
|
auto str = testing::internal::GetCapturedStderr();
|
||||||
ASSERT_STREQ(str.c_str(), "\x1B[31;1merror:\x1B[0m\x1B[34;1m --- name --- error-unit-test\x1B[0m\nerror description\n");
|
ASSERT_STREQ(str.c_str(), "\x1B[31;1merror:\x1B[0m\x1B[34;1m --- name --- error-unit-test\x1B[0m\nerror description\n");
|
||||||
|
@ -160,13 +160,13 @@ namespace nix {
|
||||||
.name = "error name",
|
.name = "error name",
|
||||||
.description = "error with code lines",
|
.description = "error with code lines",
|
||||||
.hint = hintfmt("this hint has %1% templated %2%!!",
|
.hint = hintfmt("this hint has %1% templated %2%!!",
|
||||||
"yellow",
|
"yellow",
|
||||||
"values"),
|
"values"),
|
||||||
.nixCode = NixCode {
|
.nixCode = NixCode {
|
||||||
.errPos = Pos(problem_file, 40, 13),
|
.errPos = Pos(problem_file, 40, 13),
|
||||||
.prevLineOfCode = "previous line of code",
|
.prevLineOfCode = "previous line of code",
|
||||||
.errLineOfCode = "this is the problem line of code",
|
.errLineOfCode = "this is the problem line of code",
|
||||||
.nextLineOfCode = "next line of code",
|
.nextLineOfCode = "next line of code",
|
||||||
}});
|
}});
|
||||||
|
|
||||||
|
|
||||||
|
@ -183,10 +183,10 @@ namespace nix {
|
||||||
.name = "error name",
|
.name = "error name",
|
||||||
.description = "error without any code lines.",
|
.description = "error without any code lines.",
|
||||||
.hint = hintfmt("this hint has %1% templated %2%!!",
|
.hint = hintfmt("this hint has %1% templated %2%!!",
|
||||||
"yellow",
|
"yellow",
|
||||||
"values"),
|
"values"),
|
||||||
.nixCode = NixCode {
|
.nixCode = NixCode {
|
||||||
.errPos = Pos(problem_file, 40, 13)
|
.errPos = Pos(problem_file, 40, 13)
|
||||||
}});
|
}});
|
||||||
|
|
||||||
auto str = testing::internal::GetCapturedStderr();
|
auto str = testing::internal::GetCapturedStderr();
|
||||||
|
@ -202,7 +202,7 @@ namespace nix {
|
||||||
.name = "error name",
|
.name = "error name",
|
||||||
.hint = hintfmt("hint %1%", "only"),
|
.hint = hintfmt("hint %1%", "only"),
|
||||||
.nixCode = NixCode {
|
.nixCode = NixCode {
|
||||||
.errPos = Pos(problem_file, 40, 13)
|
.errPos = Pos(problem_file, 40, 13)
|
||||||
}});
|
}});
|
||||||
|
|
||||||
auto str = testing::internal::GetCapturedStderr();
|
auto str = testing::internal::GetCapturedStderr();
|
||||||
|
@ -218,10 +218,10 @@ namespace nix {
|
||||||
testing::internal::CaptureStderr();
|
testing::internal::CaptureStderr();
|
||||||
|
|
||||||
logWarning({
|
logWarning({
|
||||||
.name = "name",
|
.name = "name",
|
||||||
.description = "error description",
|
.description = "error description",
|
||||||
.hint = hintfmt("there was a %1%", "warning"),
|
.hint = hintfmt("there was a %1%", "warning"),
|
||||||
});
|
});
|
||||||
|
|
||||||
auto str = testing::internal::GetCapturedStderr();
|
auto str = testing::internal::GetCapturedStderr();
|
||||||
ASSERT_STREQ(str.c_str(), "\x1B[33;1mwarning:\x1B[0m\x1B[34;1m --- name --- error-unit-test\x1B[0m\nerror description\n\nthere was a \x1B[33;1mwarning\x1B[0m\n");
|
ASSERT_STREQ(str.c_str(), "\x1B[33;1mwarning:\x1B[0m\x1B[34;1m --- name --- error-unit-test\x1B[0m\nerror description\n\nthere was a \x1B[33;1mwarning\x1B[0m\n");
|
||||||
|
@ -238,13 +238,13 @@ namespace nix {
|
||||||
.name = "warning name",
|
.name = "warning name",
|
||||||
.description = "warning description",
|
.description = "warning description",
|
||||||
.hint = hintfmt("this hint has %1% templated %2%!!",
|
.hint = hintfmt("this hint has %1% templated %2%!!",
|
||||||
"yellow",
|
"yellow",
|
||||||
"values"),
|
"values"),
|
||||||
.nixCode = NixCode {
|
.nixCode = NixCode {
|
||||||
.errPos = Pos(problem_file, 40, 13),
|
.errPos = Pos(problem_file, 40, 13),
|
||||||
.prevLineOfCode = std::nullopt,
|
.prevLineOfCode = std::nullopt,
|
||||||
.errLineOfCode = "this is the problem line of code",
|
.errLineOfCode = "this is the problem line of code",
|
||||||
.nextLineOfCode = std::nullopt
|
.nextLineOfCode = std::nullopt
|
||||||
}});
|
}});
|
||||||
|
|
||||||
|
|
||||||
|
@ -252,4 +252,41 @@ namespace nix {
|
||||||
ASSERT_STREQ(str.c_str(), "\x1B[33;1mwarning:\x1B[0m\x1B[34;1m --- warning name --- error-unit-test\x1B[0m\nin file: \x1B[34;1mmyfile.nix (40:13)\x1B[0m\n\nwarning description\n\n 40| this is the problem line of code\n | \x1B[31;1m^\x1B[0m\n\nthis hint has \x1B[33;1myellow\x1B[0m templated \x1B[33;1mvalues\x1B[0m!!\n");
|
ASSERT_STREQ(str.c_str(), "\x1B[33;1mwarning:\x1B[0m\x1B[34;1m --- warning name --- error-unit-test\x1B[0m\nin file: \x1B[34;1mmyfile.nix (40:13)\x1B[0m\n\nwarning description\n\n 40| this is the problem line of code\n | \x1B[31;1m^\x1B[0m\n\nthis hint has \x1B[33;1myellow\x1B[0m templated \x1B[33;1mvalues\x1B[0m!!\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------------
|
||||||
|
* hintfmt
|
||||||
|
* --------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
TEST(hintfmt, percentStringWithoutArgs) {
|
||||||
|
|
||||||
|
const char *teststr = "this is 100%s correct!";
|
||||||
|
|
||||||
|
ASSERT_STREQ(
|
||||||
|
hintfmt(teststr).str().c_str(),
|
||||||
|
teststr);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(hintfmt, fmtToHintfmt) {
|
||||||
|
|
||||||
|
ASSERT_STREQ(
|
||||||
|
hintfmt(fmt("the color of this this text is %1%", "not yellow")).str().c_str(),
|
||||||
|
"the color of this this text is not yellow");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(hintfmt, tooFewArguments) {
|
||||||
|
|
||||||
|
ASSERT_STREQ(
|
||||||
|
hintfmt("only one arg %1% %2%", "fulfilled").str().c_str(),
|
||||||
|
"only one arg " ANSI_YELLOW "fulfilled" ANSI_NORMAL " ");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(hintfmt, tooManyArguments) {
|
||||||
|
|
||||||
|
ASSERT_STREQ(
|
||||||
|
hintfmt("what about this %1% %2%", "%3%", "one", "two").str().c_str(),
|
||||||
|
"what about this " ANSI_YELLOW "%3%" ANSI_NORMAL " " ANSI_YELLOW "one" ANSI_NORMAL);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue