forked from lix-project/lix
parent
f8abbdd456
commit
4511f09b49
|
@ -1,10 +1,12 @@
|
||||||
#include "command.hh"
|
#include "command.hh"
|
||||||
#include "store-api.hh"
|
#include "store-api.hh"
|
||||||
#include "references.hh"
|
#include "references.hh"
|
||||||
|
#include "common-args.hh"
|
||||||
|
#include "json.hh"
|
||||||
|
|
||||||
using namespace nix;
|
using namespace nix;
|
||||||
|
|
||||||
struct CmdMakeContentAddressable : StorePathsCommand
|
struct CmdMakeContentAddressable : StorePathsCommand, MixJSON
|
||||||
{
|
{
|
||||||
CmdMakeContentAddressable()
|
CmdMakeContentAddressable()
|
||||||
{
|
{
|
||||||
|
@ -37,6 +39,9 @@ struct CmdMakeContentAddressable : StorePathsCommand
|
||||||
|
|
||||||
std::map<StorePath, StorePath> remappings;
|
std::map<StorePath, StorePath> remappings;
|
||||||
|
|
||||||
|
auto jsonRoot = json ? std::make_unique<JSONObject>(std::cout) : nullptr;
|
||||||
|
auto jsonRewrites = json ? std::make_unique<JSONObject>(jsonRoot->object("rewrites")) : nullptr;
|
||||||
|
|
||||||
for (auto & path : paths) {
|
for (auto & path : paths) {
|
||||||
auto pathS = store->printStorePath(path);
|
auto pathS = store->printStorePath(path);
|
||||||
auto oldInfo = store->queryPathInfo(path);
|
auto oldInfo = store->queryPathInfo(path);
|
||||||
|
@ -76,7 +81,8 @@ struct CmdMakeContentAddressable : StorePathsCommand
|
||||||
info.narSize = sink.s->size();
|
info.narSize = sink.s->size();
|
||||||
info.ca = makeFixedOutputCA(true, info.narHash);
|
info.ca = makeFixedOutputCA(true, info.narHash);
|
||||||
|
|
||||||
printError("rewrote '%s' to '%s'", pathS, store->printStorePath(info.path));
|
if (!json)
|
||||||
|
printError("rewrote '%s' to '%s'", pathS, store->printStorePath(info.path));
|
||||||
|
|
||||||
auto source = sinkToSource([&](Sink & nextSink) {
|
auto source = sinkToSource([&](Sink & nextSink) {
|
||||||
RewritingSink rsink2(oldHashPart, storePathToHash(store->printStorePath(info.path)), nextSink);
|
RewritingSink rsink2(oldHashPart, storePathToHash(store->printStorePath(info.path)), nextSink);
|
||||||
|
@ -86,6 +92,9 @@ struct CmdMakeContentAddressable : StorePathsCommand
|
||||||
|
|
||||||
store->addToStore(info, *source);
|
store->addToStore(info, *source);
|
||||||
|
|
||||||
|
if (json)
|
||||||
|
jsonRewrites->attr(store->printStorePath(path), store->printStorePath(info.path));
|
||||||
|
|
||||||
remappings.insert_or_assign(std::move(path), std::move(info.path));
|
remappings.insert_or_assign(std::move(path), std::move(info.path));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue