aboutsummaryrefslogtreecommitdiff
path: root/src/nix/hash.cc
diff options
context:
space:
mode:
authorCarlo Nucera <carlo.nucera@protonmail.com>2020-05-28 10:58:22 -0400
committerCarlo Nucera <carlo.nucera@protonmail.com>2020-05-28 10:58:22 -0400
commit4f597fb901dec55a86a2b29a122b9007177b2358 (patch)
treec89fff8fb0670fb55eb0c2593b6b48575a2ef914 /src/nix/hash.cc
parent87b32bab05ff91981c8847d66cd5502feb44f3b5 (diff)
parentf60ce4fa207a210e23a1142d3a8ead611526e6e1 (diff)
Merge branch 'master' of github.com:NixOS/nix into enum-class
Diffstat (limited to 'src/nix/hash.cc')
-rw-r--r--src/nix/hash.cc47
1 files changed, 27 insertions, 20 deletions
diff --git a/src/nix/hash.cc b/src/nix/hash.cc
index deced3d11..3362ffd0d 100644
--- a/src/nix/hash.cc
+++ b/src/nix/hash.cc
@@ -9,23 +9,20 @@ using namespace nix;
struct CmdHash : Command
{
- enum Mode { mFile, mPath };
- Mode mode;
+ FileIngestionMethod mode;
Base base = Base::SRI;
bool truncate = false;
HashType ht = HashType::SHA256;
std::vector<std::string> paths;
std::optional<std::string> modulus;
- CmdHash(Mode mode) : mode(mode)
+ CmdHash(FileIngestionMethod mode) : mode(mode)
{
mkFlag(0, "sri", "print hash in Base::SRI format", &base, Base::SRI);
mkFlag(0, "base64", "print hash in base-64", &base, Base::Base64);
mkFlag(0, "base32", "print hash in base-32 (Nix-specific)", &base, Base::Base32);
mkFlag(0, "base16", "print hash in base-16", &base, Base::Base16);
- mkFlag()
- .longName("type")
- .mkHashTypeFlag(&ht);
+ addFlag(Flag::mkHashTypeFlag("type", &ht));
#if 0
mkFlag()
.longName("modulo")
@@ -38,11 +35,18 @@ struct CmdHash : Command
std::string description() override
{
- return mode == mFile
- ? "print cryptographic hash of a regular file"
- : "print cryptographic hash of the NAR serialisation of a path";
+ const char* d;
+ switch (mode) {
+ case FileIngestionMethod::Flat:
+ d = "print cryptographic hash of a regular file";
+ case FileIngestionMethod::Recursive:
+ d = "print cryptographic hash of the NAR serialisation of a path";
+ };
+ return d;
}
+ Category category() override { return catUtility; }
+
void run() override
{
for (auto path : paths) {
@@ -53,21 +57,24 @@ struct CmdHash : Command
else
hashSink = std::make_unique<HashSink>(ht);
- if (mode == mFile)
+ switch (mode) {
+ case FileIngestionMethod::Flat:
readFile(path, *hashSink);
- else
+ break;
+ case FileIngestionMethod::Recursive:
dumpPath(path, *hashSink);
+ break;
+ }
Hash h = hashSink->finish().first;
if (truncate && h.hashSize > 20) h = compressHash(h, 20);
- std::cout << format("%1%\n") %
- h.to_string(base, base == Base::SRI);
+ logger->stdout(h.to_string(base, base == Base::SRI));
}
}
};
-static RegisterCommand r1("hash-file", [](){ return make_ref<CmdHash>(CmdHash::mFile); });
-static RegisterCommand r2("hash-path", [](){ return make_ref<CmdHash>(CmdHash::mPath); });
+static RegisterCommand r1("hash-file", [](){ return make_ref<CmdHash>(FileIngestionMethod::Flat); });
+static RegisterCommand r2("hash-path", [](){ return make_ref<CmdHash>(FileIngestionMethod::Recursive); });
struct CmdToBase : Command
{
@@ -77,9 +84,7 @@ struct CmdToBase : Command
CmdToBase(Base base) : base(base)
{
- mkFlag()
- .longName("type")
- .mkHashTypeFlag(&ht);
+ addFlag(Flag::mkHashTypeFlag("type", &ht));
expectArgs("strings", &args);
}
@@ -92,10 +97,12 @@ struct CmdToBase : Command
"Base::SRI");
}
+ Category category() override { return catUtility; }
+
void run() override
{
for (auto s : args)
- std::cout << fmt("%s\n", Hash(s, ht).to_string(base, base == Base::SRI));
+ logger->stdout(Hash(s, ht).to_string(base, base == Base::SRI));
}
};
@@ -138,7 +145,7 @@ static int compatNixHash(int argc, char * * argv)
});
if (op == opHash) {
- CmdHash cmd(flat ? CmdHash::mFile : CmdHash::mPath);
+ CmdHash cmd(flat ? FileIngestionMethod::Flat : FileIngestionMethod::Recursive);
cmd.ht = ht;
cmd.base = base32 ? Base::Base32 : Base::Base16;
cmd.truncate = truncate;