libutil/hash: Add default values for Hash::to_string
The sane default is to print in SRI format, and include the hash type Change-Id: I7efcb5dcfbe56c82dbf1928e2bb35cdd3ff089c6
This commit is contained in:
@@ -467,7 +467,7 @@ opQuery(std::shared_ptr<Store> store, AsyncIoRoot & aio, Strings opFlags, String
|
|||||||
auto info = aio.blockOn(store->queryPathInfo(j));
|
auto info = aio.blockOn(store->queryPathInfo(j));
|
||||||
if (query == qHash) {
|
if (query == qHash) {
|
||||||
assert(info->narHash.type == HashType::SHA256);
|
assert(info->narHash.type == HashType::SHA256);
|
||||||
cout << fmt("%s\n", info->narHash.to_string(HashFormat::Base32, true));
|
cout << fmt("%s\n", info->narHash.to_string(HashFormat::Base32));
|
||||||
} else if (query == qSize)
|
} else if (query == qSize)
|
||||||
cout << fmt("%d\n", info->narSize);
|
cout << fmt("%d\n", info->narSize);
|
||||||
}
|
}
|
||||||
@@ -859,8 +859,8 @@ opVerifyPath(std::shared_ptr<Store> store, AsyncIoRoot & aio, Strings opFlags, S
|
|||||||
printError(
|
printError(
|
||||||
"path '%s' was modified! expected hash '%s', got '%s'",
|
"path '%s' was modified! expected hash '%s', got '%s'",
|
||||||
store->printStorePath(path),
|
store->printStorePath(path),
|
||||||
info->narHash.to_string(HashFormat::SRI, true),
|
info->narHash.to_string(),
|
||||||
current.first.to_string(HashFormat::SRI, true)
|
current.first.to_string()
|
||||||
);
|
);
|
||||||
status = 1;
|
status = 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ void emitTreeAttrs(
|
|||||||
|
|
||||||
auto narHash = input.getNarHash();
|
auto narHash = input.getNarHash();
|
||||||
assert(narHash);
|
assert(narHash);
|
||||||
attrs.alloc("narHash").mkString(narHash->to_string(HashFormat::SRI, true));
|
attrs.alloc("narHash").mkString(narHash->to_string());
|
||||||
|
|
||||||
if (input.getType() == "git")
|
if (input.getType() == "git")
|
||||||
attrs.alloc("submodules").mkBool(
|
attrs.alloc("submodules").mkBool(
|
||||||
@@ -318,8 +318,8 @@ static void fetch(EvalState & state, const PosIdx pos, Value * * args, Value & v
|
|||||||
.make<EvalError>(
|
.make<EvalError>(
|
||||||
"hash mismatch in file downloaded from '%s':\n specified: %s\n got: %s",
|
"hash mismatch in file downloaded from '%s':\n specified: %s\n got: %s",
|
||||||
*url,
|
*url,
|
||||||
expectedHash->to_string(HashFormat::SRI, true),
|
expectedHash->to_string(),
|
||||||
hash.to_string(HashFormat::SRI, true)
|
hash.to_string()
|
||||||
)
|
)
|
||||||
.withExitStatus(102)
|
.withExitStatus(102)
|
||||||
.debugThrow();
|
.debugThrow();
|
||||||
|
|||||||
@@ -178,7 +178,7 @@ try {
|
|||||||
};
|
};
|
||||||
|
|
||||||
auto narHash = TRY_AWAIT(store->queryPathInfo(tree.storePath))->narHash;
|
auto narHash = TRY_AWAIT(store->queryPathInfo(tree.storePath))->narHash;
|
||||||
input.attrs.insert_or_assign("narHash", narHash.to_string(HashFormat::SRI, true));
|
input.attrs.insert_or_assign("narHash", narHash.to_string());
|
||||||
|
|
||||||
if (auto prevNarHash = getNarHash()) {
|
if (auto prevNarHash = getNarHash()) {
|
||||||
if (narHash != *prevNarHash)
|
if (narHash != *prevNarHash)
|
||||||
@@ -187,8 +187,8 @@ try {
|
|||||||
"NAR hash mismatch in input '%s' (%s), expected '%s', got '%s'",
|
"NAR hash mismatch in input '%s' (%s), expected '%s', got '%s'",
|
||||||
to_string(),
|
to_string(),
|
||||||
tree.actualPath,
|
tree.actualPath,
|
||||||
prevNarHash->to_string(HashFormat::SRI, true),
|
prevNarHash->to_string(),
|
||||||
narHash.to_string(HashFormat::SRI, true)
|
narHash.to_string()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -579,7 +579,7 @@ struct GitInputScheme : InputScheme
|
|||||||
if (hash.has_value() && !(hash->type == HashType::SHA1 || hash->type == HashType::SHA256))
|
if (hash.has_value() && !(hash->type == HashType::SHA1 || hash->type == HashType::SHA256))
|
||||||
throw Error(
|
throw Error(
|
||||||
"Hash '%s' is not supported by Git. Supported types are sha1 and sha256.",
|
"Hash '%s' is not supported by Git. Supported types are sha1 and sha256.",
|
||||||
hash->to_string(HashFormat::Base16, true)
|
hash->to_string(HashFormat::Base16)
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -252,7 +252,7 @@ struct MercurialInputScheme : InputScheme
|
|||||||
if (hash.has_value() && hash->type != HashType::SHA1)
|
if (hash.has_value() && hash->type != HashType::SHA1)
|
||||||
throw Error(
|
throw Error(
|
||||||
"Hash '%s' is not supported by Mercurial. Only sha1 is supported.",
|
"Hash '%s' is not supported by Mercurial. Only sha1 is supported.",
|
||||||
hash->to_string(HashFormat::Base16, true)
|
hash->to_string(HashFormat::Base16)
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -293,7 +293,7 @@ struct CurlInputScheme : InputScheme
|
|||||||
// NAR hashes are preferred over file hashes since tar/zip
|
// NAR hashes are preferred over file hashes since tar/zip
|
||||||
// files don't have a canonical representation.
|
// files don't have a canonical representation.
|
||||||
if (auto narHash = input.getNarHash())
|
if (auto narHash = input.getNarHash())
|
||||||
url.query.insert_or_assign("narHash", narHash->to_string(HashFormat::SRI, true));
|
url.query.insert_or_assign("narHash", narHash->to_string());
|
||||||
return url;
|
return url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2105,8 +2105,8 @@ try {
|
|||||||
"specified: %s\n got: %s\n expected path: %s\n got path: %s",
|
"specified: %s\n got: %s\n expected path: %s\n got path: %s",
|
||||||
worker.store.printStorePath(drvPath),
|
worker.store.printStorePath(drvPath),
|
||||||
guessedUrl,
|
guessedUrl,
|
||||||
wanted.to_string(HashFormat::SRI, true),
|
wanted.to_string(),
|
||||||
got.to_string(HashFormat::SRI, true),
|
got.to_string(),
|
||||||
worker.store.printStorePath(dof.path(worker.store, drv->name, outputName)),
|
worker.store.printStorePath(dof.path(worker.store, drv->name, outputName)),
|
||||||
worker.store.printStorePath(newInfo0.path)
|
worker.store.printStorePath(newInfo0.path)
|
||||||
));
|
));
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ std::string ContentAddress::render() const
|
|||||||
},
|
},
|
||||||
method.raw
|
method.raw
|
||||||
)
|
)
|
||||||
+ this->hash.to_string(HashFormat::Base32, true);
|
+ this->hash.to_string(HashFormat::Base32);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -42,8 +42,8 @@ try {
|
|||||||
throw Error(
|
throw Error(
|
||||||
"hash of path '%s' has changed from '%s' to '%s'!",
|
"hash of path '%s' has changed from '%s' to '%s'!",
|
||||||
printStorePath(path),
|
printStorePath(path),
|
||||||
info->narHash.to_string(HashFormat::SRI, true),
|
info->narHash.to_string(),
|
||||||
hash.to_string(HashFormat::SRI, true)
|
hash.to_string()
|
||||||
);
|
);
|
||||||
|
|
||||||
teeSink
|
teeSink
|
||||||
|
|||||||
@@ -655,7 +655,7 @@ try {
|
|||||||
|
|
||||||
state.stmts->RegisterValidPath.use()
|
state.stmts->RegisterValidPath.use()
|
||||||
(printStorePath(info.path))
|
(printStorePath(info.path))
|
||||||
(info.narHash.to_string(HashFormat::Base16, true))
|
(info.narHash.to_string(HashFormat::Base16))
|
||||||
(info.registrationTime == 0 ? time(0) : info.registrationTime)
|
(info.registrationTime == 0 ? time(0) : info.registrationTime)
|
||||||
(info.deriver ? printStorePath(*info.deriver) : "", (bool) info.deriver)
|
(info.deriver ? printStorePath(*info.deriver) : "", (bool) info.deriver)
|
||||||
(info.narSize, info.narSize != 0)
|
(info.narSize, info.narSize != 0)
|
||||||
@@ -768,7 +768,7 @@ void LocalStore::updatePathInfo(DBState & state, const ValidPathInfo & info)
|
|||||||
{
|
{
|
||||||
state.stmts->UpdatePathInfo.use()
|
state.stmts->UpdatePathInfo.use()
|
||||||
(info.narSize, info.narSize != 0)
|
(info.narSize, info.narSize != 0)
|
||||||
(info.narHash.to_string(HashFormat::Base16, true))
|
(info.narHash.to_string(HashFormat::Base16))
|
||||||
(info.ultimate ? 1 : 0, info.ultimate)
|
(info.ultimate ? 1 : 0, info.ultimate)
|
||||||
(concatStringsSep(" ", info.sigs), !info.sigs.empty())
|
(concatStringsSep(" ", info.sigs), !info.sigs.empty())
|
||||||
(renderContentAddress(info.ca), (bool) info.ca)
|
(renderContentAddress(info.ca), (bool) info.ca)
|
||||||
@@ -1143,8 +1143,8 @@ try {
|
|||||||
throw Error(
|
throw Error(
|
||||||
"hash mismatch importing path '%s';\n specified: %s\n got: %s",
|
"hash mismatch importing path '%s';\n specified: %s\n got: %s",
|
||||||
printStorePath(info.path),
|
printStorePath(info.path),
|
||||||
info.narHash.to_string(HashFormat::SRI, true),
|
info.narHash.to_string(),
|
||||||
hashResult.first.to_string(HashFormat::SRI, true)
|
hashResult.first.to_string()
|
||||||
);
|
);
|
||||||
|
|
||||||
if (hashResult.second != info.narSize)
|
if (hashResult.second != info.narSize)
|
||||||
@@ -1162,8 +1162,8 @@ try {
|
|||||||
throw Error(
|
throw Error(
|
||||||
"ca hash mismatch importing path '%s';\n specified: %s\n got: %s",
|
"ca hash mismatch importing path '%s';\n specified: %s\n got: %s",
|
||||||
printStorePath(info.path),
|
printStorePath(info.path),
|
||||||
specified.hash.to_string(HashFormat::SRI, true),
|
specified.hash.to_string(),
|
||||||
actualHash.hash.to_string(HashFormat::SRI, true)
|
actualHash.hash.to_string()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1551,8 +1551,8 @@ try {
|
|||||||
printError(
|
printError(
|
||||||
"path '%s' was modified! expected hash '%s', got '%s'",
|
"path '%s' was modified! expected hash '%s', got '%s'",
|
||||||
toRealPath(printStorePath(i)),
|
toRealPath(printStorePath(i)),
|
||||||
info->narHash.to_string(HashFormat::SRI, true),
|
info->narHash.to_string(),
|
||||||
current.first.to_string(HashFormat::SRI, true)
|
current.first.to_string()
|
||||||
);
|
);
|
||||||
if (repair) TRY_AWAIT(repairPath(i)); else errors = true;
|
if (repair) TRY_AWAIT(repairPath(i)); else errors = true;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -288,9 +288,9 @@ public:
|
|||||||
(std::string(info->path.name()))
|
(std::string(info->path.name()))
|
||||||
(narInfo ? narInfo->url : "", narInfo != 0)
|
(narInfo ? narInfo->url : "", narInfo != 0)
|
||||||
(narInfo ? narInfo->compression : "", narInfo != 0)
|
(narInfo ? narInfo->compression : "", narInfo != 0)
|
||||||
(narInfo && narInfo->fileHash ? narInfo->fileHash->to_string(HashFormat::Base32, true) : "", narInfo && narInfo->fileHash)
|
(narInfo && narInfo->fileHash ? narInfo->fileHash->to_string(HashFormat::Base32) : "", narInfo && narInfo->fileHash)
|
||||||
(narInfo ? narInfo->fileSize : 0, narInfo != 0 && narInfo->fileSize)
|
(narInfo ? narInfo->fileSize : 0, narInfo != 0 && narInfo->fileSize)
|
||||||
(info->narHash.to_string(HashFormat::Base32, true))
|
(info->narHash.to_string(HashFormat::Base32))
|
||||||
(info->narSize)
|
(info->narSize)
|
||||||
(concatStringsSep(" ", info->shortRefs()))
|
(concatStringsSep(" ", info->shortRefs()))
|
||||||
(info->deriver ? std::string(info->deriver->to_string()) : "", (bool) info->deriver)
|
(info->deriver ? std::string(info->deriver->to_string()) : "", (bool) info->deriver)
|
||||||
|
|||||||
@@ -105,10 +105,10 @@ std::string NarInfo::to_string(const Store & store) const
|
|||||||
assert(compression != "");
|
assert(compression != "");
|
||||||
res += "Compression: " + compression + "\n";
|
res += "Compression: " + compression + "\n";
|
||||||
assert(fileHash && fileHash->type == HashType::SHA256);
|
assert(fileHash && fileHash->type == HashType::SHA256);
|
||||||
res += "FileHash: " + fileHash->to_string(HashFormat::Base32, true) + "\n";
|
res += "FileHash: " + fileHash->to_string(HashFormat::Base32) + "\n";
|
||||||
res += "FileSize: " + std::to_string(fileSize) + "\n";
|
res += "FileSize: " + std::to_string(fileSize) + "\n";
|
||||||
assert(narHash.type == HashType::SHA256);
|
assert(narHash.type == HashType::SHA256);
|
||||||
res += "NarHash: " + narHash.to_string(HashFormat::Base32, true) + "\n";
|
res += "NarHash: " + narHash.to_string(HashFormat::Base32) + "\n";
|
||||||
res += "NarSize: " + std::to_string(narSize) + "\n";
|
res += "NarSize: " + std::to_string(narSize) + "\n";
|
||||||
|
|
||||||
res += "References: " + concatStringsSep(" ", shortRefs()) + "\n";
|
res += "References: " + concatStringsSep(" ", shortRefs()) + "\n";
|
||||||
|
|||||||
@@ -156,7 +156,7 @@ std::optional<struct ::stat> LocalStore::optimisePath_(
|
|||||||
contents of the symlink (i.e. the result of readlink()), not
|
contents of the symlink (i.e. the result of readlink()), not
|
||||||
the contents of the target (which may not even exist). */
|
the contents of the target (which may not even exist). */
|
||||||
Hash hash = hashPath(HashType::SHA256, path).first;
|
Hash hash = hashPath(HashType::SHA256, path).first;
|
||||||
debug("'%1%' has hash '%2%'", path, hash.to_string(HashFormat::Base32, true));
|
debug("'%1%' has hash '%2%'", path, hash.to_string(HashFormat::Base32));
|
||||||
|
|
||||||
/* Check if this is a known hash. */
|
/* Check if this is a known hash. */
|
||||||
Path linkPath = linksDir + "/" + hash.to_string(HashFormat::Base32, false);
|
Path linkPath = linksDir + "/" + hash.to_string(HashFormat::Base32, false);
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ std::string ValidPathInfo::fingerprint(const Store & store) const
|
|||||||
if (narSize == 0)
|
if (narSize == 0)
|
||||||
throw Error("cannot calculate fingerprint of path '%s' because its size is not known",
|
throw Error("cannot calculate fingerprint of path '%s' because its size is not known",
|
||||||
store.printStorePath(path));
|
store.printStorePath(path));
|
||||||
return "1;" + store.printStorePath(path) + ";" + narHash.to_string(HashFormat::Base32, true) + ";"
|
return "1;" + store.printStorePath(path) + ";" + narHash.to_string(HashFormat::Base32) + ";"
|
||||||
+ std::to_string(narSize) + ";" + concatStringsSep(",", store.printStorePathSet(references));
|
+ std::to_string(narSize) + ";" + concatStringsSep(",", store.printStorePathSet(references));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ struct DrvOutput {
|
|||||||
|
|
||||||
std::string strHash() const
|
std::string strHash() const
|
||||||
{
|
{
|
||||||
return drvHash.to_string(HashFormat::Base16, true);
|
return drvHash.to_string(HashFormat::Base16);
|
||||||
}
|
}
|
||||||
|
|
||||||
static DrvOutput parse(const std::string &);
|
static DrvOutput parse(const std::string &);
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ WireFormatGenerator ServeProto::Serialise<UnkeyedValidPathInfo>::write(WriteConn
|
|||||||
co_yield info.narSize; // downloadSize, lie a little
|
co_yield info.narSize; // downloadSize, lie a little
|
||||||
co_yield info.narSize;
|
co_yield info.narSize;
|
||||||
if (GET_PROTOCOL_MINOR(conn.version) >= 4) {
|
if (GET_PROTOCOL_MINOR(conn.version) >= 4) {
|
||||||
co_yield info.narHash.to_string(HashFormat::Base32, true);
|
co_yield info.narHash.to_string(HashFormat::Base32);
|
||||||
co_yield renderContentAddress(info.ca);
|
co_yield renderContentAddress(info.ca);
|
||||||
co_yield info.sigs;
|
co_yield info.sigs;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -178,7 +178,7 @@ StorePath Store::makeStorePath(std::string_view type,
|
|||||||
StorePath Store::makeStorePath(std::string_view type,
|
StorePath Store::makeStorePath(std::string_view type,
|
||||||
const Hash & hash, std::string_view name) const
|
const Hash & hash, std::string_view name) const
|
||||||
{
|
{
|
||||||
return makeStorePath(type, hash.to_string(HashFormat::Base16, true), name);
|
return makeStorePath(type, hash.to_string(HashFormat::Base16), name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -219,8 +219,8 @@ StorePath Store::makeFixedOutputPath(std::string_view name, const FixedOutputInf
|
|||||||
"output:out",
|
"output:out",
|
||||||
hashString(
|
hashString(
|
||||||
HashType::SHA256,
|
HashType::SHA256,
|
||||||
"fixed:out:" + makeFileIngestionPrefix(info.method)
|
"fixed:out:" + makeFileIngestionPrefix(info.method) + info.hash.to_string(HashFormat::Base16)
|
||||||
+ info.hash.to_string(HashFormat::Base16, true) + ":"
|
+ ":"
|
||||||
),
|
),
|
||||||
name
|
name
|
||||||
);
|
);
|
||||||
|
|||||||
+1
-8
@@ -8,20 +8,16 @@
|
|||||||
#include "lix/libutil/serialise.hh"
|
#include "lix/libutil/serialise.hh"
|
||||||
#include "lix/libutil/file-system.hh"
|
#include "lix/libutil/file-system.hh"
|
||||||
|
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
|
|
||||||
using EvpMdCtxPtr = std::unique_ptr<EVP_MD_CTX, decltype(&EVP_MD_CTX_free)>;
|
using EvpMdCtxPtr = std::unique_ptr<EVP_MD_CTX, decltype(&EVP_MD_CTX_free)>;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
MakeError(BadHash, Error);
|
MakeError(BadHash, Error);
|
||||||
|
|
||||||
|
|
||||||
enum class HashType : char { MD5 = 42, SHA1, SHA256, SHA512 };
|
enum class HashType : char { MD5 = 42, SHA1, SHA256, SHA512 };
|
||||||
|
|
||||||
|
|
||||||
@@ -136,7 +132,7 @@ public:
|
|||||||
* or base-64. By default, this is prefixed by the hash type
|
* or base-64. By default, this is prefixed by the hash type
|
||||||
* (e.g. "sha256:").
|
* (e.g. "sha256:").
|
||||||
*/
|
*/
|
||||||
std::string to_string(HashFormat format, bool includeType) const;
|
std::string to_string(HashFormat format = HashFormat::SRI, bool includeType = true) const;
|
||||||
|
|
||||||
std::string gitRev() const
|
std::string gitRev() const
|
||||||
{
|
{
|
||||||
@@ -198,7 +194,6 @@ std::optional<HashType> parseHashTypeOpt(std::string_view s);
|
|||||||
*/
|
*/
|
||||||
std::string_view printHashType(HashType ht);
|
std::string_view printHashType(HashType ht);
|
||||||
|
|
||||||
|
|
||||||
struct AbstractHashSink : virtual Sink
|
struct AbstractHashSink : virtual Sink
|
||||||
{
|
{
|
||||||
virtual HashResult finish() = 0;
|
virtual HashResult finish() = 0;
|
||||||
@@ -225,6 +220,4 @@ inline HashResult hashSource(HashType ht, Source & source)
|
|||||||
source.drainInto(h);
|
source.drainInto(h);
|
||||||
return h.finish();
|
return h.finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -1532,14 +1532,14 @@ struct CmdFlakePrefetch : FlakeCommand, MixJSON
|
|||||||
if (json) {
|
if (json) {
|
||||||
auto res = JSON::object();
|
auto res = JSON::object();
|
||||||
res["storePath"] = store->printStorePath(tree.storePath);
|
res["storePath"] = store->printStorePath(tree.storePath);
|
||||||
res["hash"] = hash.to_string(HashFormat::SRI, true);
|
res["hash"] = hash.to_string();
|
||||||
logger->cout(res.dump());
|
logger->cout(res.dump());
|
||||||
} else {
|
} else {
|
||||||
notice(
|
notice(
|
||||||
"Downloaded '%s' to '%s' (hash '%s').",
|
"Downloaded '%s' to '%s' (hash '%s').",
|
||||||
lockedRef.to_string(),
|
lockedRef.to_string(),
|
||||||
store->printStorePath(tree.storePath),
|
store->printStorePath(tree.storePath),
|
||||||
hash.to_string(HashFormat::SRI, true)
|
hash.to_string()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -345,14 +345,14 @@ struct CmdStorePrefetchFile : StoreCommand, MixJSON
|
|||||||
if (json) {
|
if (json) {
|
||||||
auto res = JSON::object();
|
auto res = JSON::object();
|
||||||
res["storePath"] = store->printStorePath(storePath);
|
res["storePath"] = store->printStorePath(storePath);
|
||||||
res["hash"] = hash.to_string(HashFormat::SRI, true);
|
res["hash"] = hash.to_string();
|
||||||
logger->cout(res.dump());
|
logger->cout(res.dump());
|
||||||
} else {
|
} else {
|
||||||
notice(
|
notice(
|
||||||
"Downloaded '%s' to '%s' (hash '%s').",
|
"Downloaded '%s' to '%s' (hash '%s').",
|
||||||
url,
|
url,
|
||||||
store->printStorePath(storePath),
|
store->printStorePath(storePath),
|
||||||
hash.to_string(HashFormat::SRI, true)
|
hash.to_string()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -117,8 +117,8 @@ struct CmdVerify : StorePathsCommand
|
|||||||
printError(
|
printError(
|
||||||
"path '%s' was modified! expected hash '%s', got '%s'",
|
"path '%s' was modified! expected hash '%s', got '%s'",
|
||||||
store->printStorePath(info->path),
|
store->printStorePath(info->path),
|
||||||
info->narHash.to_string(HashFormat::SRI, true),
|
info->narHash.to_string(),
|
||||||
hash.first.to_string(HashFormat::SRI, true)
|
hash.first.to_string()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ SV * queryReferences(char * path)
|
|||||||
SV * queryPathHash(char * path)
|
SV * queryPathHash(char * path)
|
||||||
PPCODE:
|
PPCODE:
|
||||||
try {
|
try {
|
||||||
auto s = aio().blockOn(store()->queryPathInfo(store()->parseStorePath(path)))->narHash.to_string(HashFormat::Base32, true);
|
auto s = aio().blockOn(store()->queryPathInfo(store()->parseStorePath(path)))->narHash.to_string(HashFormat::Base32);
|
||||||
XPUSHs(sv_2mortal(newSVpv(s.c_str(), 0)));
|
XPUSHs(sv_2mortal(newSVpv(s.c_str(), 0)));
|
||||||
} catch (Error & e) {
|
} catch (Error & e) {
|
||||||
croak("%s", e.what());
|
croak("%s", e.what());
|
||||||
|
|||||||
@@ -14,28 +14,28 @@ namespace nix {
|
|||||||
// values taken from: https://tools.ietf.org/html/rfc1321
|
// values taken from: https://tools.ietf.org/html/rfc1321
|
||||||
auto s1 = "";
|
auto s1 = "";
|
||||||
auto hash = hashString(HashType::MD5, s1);
|
auto hash = hashString(HashType::MD5, s1);
|
||||||
ASSERT_EQ(hash.to_string(HashFormat::Base16, true), "md5:d41d8cd98f00b204e9800998ecf8427e");
|
ASSERT_EQ(hash.to_string(HashFormat::Base16), "md5:d41d8cd98f00b204e9800998ecf8427e");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(hashString, testKnownMD5Hashes2) {
|
TEST(hashString, testKnownMD5Hashes2) {
|
||||||
// values taken from: https://tools.ietf.org/html/rfc1321
|
// values taken from: https://tools.ietf.org/html/rfc1321
|
||||||
auto s2 = "abc";
|
auto s2 = "abc";
|
||||||
auto hash = hashString(HashType::MD5, s2);
|
auto hash = hashString(HashType::MD5, s2);
|
||||||
ASSERT_EQ(hash.to_string(HashFormat::Base16, true), "md5:900150983cd24fb0d6963f7d28e17f72");
|
ASSERT_EQ(hash.to_string(HashFormat::Base16), "md5:900150983cd24fb0d6963f7d28e17f72");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(hashString, testKnownSHA1Hashes1) {
|
TEST(hashString, testKnownSHA1Hashes1) {
|
||||||
// values taken from: https://tools.ietf.org/html/rfc3174
|
// values taken from: https://tools.ietf.org/html/rfc3174
|
||||||
auto s = "abc";
|
auto s = "abc";
|
||||||
auto hash = hashString(HashType::SHA1, s);
|
auto hash = hashString(HashType::SHA1, s);
|
||||||
ASSERT_EQ(hash.to_string(HashFormat::Base16, true), "sha1:a9993e364706816aba3e25717850c26c9cd0d89d");
|
ASSERT_EQ(hash.to_string(HashFormat::Base16), "sha1:a9993e364706816aba3e25717850c26c9cd0d89d");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(hashString, testKnownSHA1Hashes2) {
|
TEST(hashString, testKnownSHA1Hashes2) {
|
||||||
// values taken from: https://tools.ietf.org/html/rfc3174
|
// values taken from: https://tools.ietf.org/html/rfc3174
|
||||||
auto s = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
|
auto s = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
|
||||||
auto hash = hashString(HashType::SHA1, s);
|
auto hash = hashString(HashType::SHA1, s);
|
||||||
ASSERT_EQ(hash.to_string(HashFormat::Base16, true), "sha1:84983e441c3bd26ebaae4aa1f95129e5e54670f1");
|
ASSERT_EQ(hash.to_string(HashFormat::Base16), "sha1:84983e441c3bd26ebaae4aa1f95129e5e54670f1");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(hashString, testKnownSHA256Hashes1) {
|
TEST(hashString, testKnownSHA256Hashes1) {
|
||||||
@@ -44,7 +44,7 @@ namespace nix {
|
|||||||
|
|
||||||
auto hash = hashString(HashType::SHA256, s);
|
auto hash = hashString(HashType::SHA256, s);
|
||||||
ASSERT_EQ(
|
ASSERT_EQ(
|
||||||
hash.to_string(HashFormat::Base16, true),
|
hash.to_string(HashFormat::Base16),
|
||||||
"sha256:ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
|
"sha256:ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -54,7 +54,7 @@ namespace nix {
|
|||||||
auto s = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
|
auto s = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
|
||||||
auto hash = hashString(HashType::SHA256, s);
|
auto hash = hashString(HashType::SHA256, s);
|
||||||
ASSERT_EQ(
|
ASSERT_EQ(
|
||||||
hash.to_string(HashFormat::Base16, true),
|
hash.to_string(HashFormat::Base16),
|
||||||
"sha256:248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1"
|
"sha256:248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -64,7 +64,7 @@ namespace nix {
|
|||||||
auto s = "abc";
|
auto s = "abc";
|
||||||
auto hash = hashString(HashType::SHA512, s);
|
auto hash = hashString(HashType::SHA512, s);
|
||||||
ASSERT_EQ(
|
ASSERT_EQ(
|
||||||
hash.to_string(HashFormat::Base16, true),
|
hash.to_string(HashFormat::Base16),
|
||||||
"sha512:ddaf35a193617abacc417349ae20413112e6fa4e89a9"
|
"sha512:ddaf35a193617abacc417349ae20413112e6fa4e89a9"
|
||||||
"7ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd"
|
"7ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd"
|
||||||
"454d4423643ce80e2a9ac94fa54ca49f"
|
"454d4423643ce80e2a9ac94fa54ca49f"
|
||||||
@@ -76,7 +76,7 @@ namespace nix {
|
|||||||
|
|
||||||
auto hash = hashString(HashType::SHA512, s);
|
auto hash = hashString(HashType::SHA512, s);
|
||||||
ASSERT_EQ(
|
ASSERT_EQ(
|
||||||
hash.to_string(HashFormat::Base16, true),
|
hash.to_string(HashFormat::Base16),
|
||||||
"sha512:8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa1"
|
"sha512:8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa1"
|
||||||
"7299aeadb6889018501d289e4900f7e4331b99dec4b5433a"
|
"7299aeadb6889018501d289e4900f7e4331b99dec4b5433a"
|
||||||
"c7d329eeb6dd26545e96e55b874be909"
|
"c7d329eeb6dd26545e96e55b874be909"
|
||||||
|
|||||||
Reference in New Issue
Block a user