aboutsummaryrefslogtreecommitdiff
path: root/src/nix
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2020-05-30 00:44:11 +0200
committerEelco Dolstra <edolstra@gmail.com>2020-05-30 00:44:11 +0200
commit950b46821f644eb3f92725460584a3102f356179 (patch)
tree0916b068dad6c03dfb81a80dd51b199464376bf4 /src/nix
parent5633c0975b9dec6bceaa85003223a346d7d1bd0b (diff)
Remove TreeInfo
The attributes previously stored in TreeInfo (narHash, revCount, lastModified) are now stored in Input. This makes it less arbitrary what attributes are stored where. As a result, the lock file format has changed. An entry like "info": { "lastModified": 1585405475, "narHash": "sha256-bESW0n4KgPmZ0luxvwJ+UyATrC6iIltVCsGdLiphVeE=" }, "locked": { "owner": "NixOS", "repo": "nixpkgs", "rev": "b88ff468e9850410070d4e0ccd68c7011f15b2be", "type": "github" }, is now stored as "locked": { "owner": "NixOS", "repo": "nixpkgs", "rev": "b88ff468e9850410070d4e0ccd68c7011f15b2be", "type": "github", "lastModified": 1585405475, "narHash": "sha256-bESW0n4KgPmZ0luxvwJ+UyATrC6iIltVCsGdLiphVeE=" }, The 'Input' class is now a dumb set of attributes. All the fetcher implementations subclass InputScheme, not Input. This simplifies the API. Also, fix substitution of flake inputs. This was broken since lazy flake fetching started using fetchTree internally.
Diffstat (limited to 'src/nix')
-rw-r--r--src/nix/flake.cc32
-rw-r--r--src/nix/installables.cc2
-rw-r--r--src/nix/profile.cc2
-rw-r--r--src/nix/registry.cc6
4 files changed, 21 insertions, 21 deletions
diff --git a/src/nix/flake.cc b/src/nix/flake.cc
index 59bb40110..15a3e261a 100644
--- a/src/nix/flake.cc
+++ b/src/nix/flake.cc
@@ -62,13 +62,13 @@ static void printFlakeInfo(const Store & store, const Flake & flake)
if (flake.description)
logger->stdout("Description: %s", *flake.description);
logger->stdout("Path: %s", store.printStorePath(flake.sourceInfo->storePath));
- if (auto rev = flake.lockedRef.input->getRev())
+ if (auto rev = flake.lockedRef.input.getRev())
logger->stdout("Revision: %s", rev->to_string(Base16, false));
- if (flake.sourceInfo->info.revCount)
- logger->stdout("Revisions: %s", *flake.sourceInfo->info.revCount);
- if (flake.sourceInfo->info.lastModified)
+ if (auto revCount = flake.lockedRef.input.getRevCount())
+ logger->stdout("Revisions: %s", *revCount);
+ if (auto lastModified = flake.lockedRef.input.getLastModified())
logger->stdout("Last modified: %s",
- std::put_time(std::localtime(&*flake.sourceInfo->info.lastModified), "%F %T"));
+ std::put_time(std::localtime(&*lastModified), "%F %T"));
}
static nlohmann::json flakeToJson(const Store & store, const Flake & flake)
@@ -82,13 +82,12 @@ static nlohmann::json flakeToJson(const Store & store, const Flake & flake)
j["resolved"] = attrsToJson(flake.resolvedRef.toAttrs());
j["url"] = flake.lockedRef.to_string(); // FIXME: rename to lockedUrl
j["locked"] = attrsToJson(flake.lockedRef.toAttrs());
- j["info"] = flake.sourceInfo->info.toJson();
- if (auto rev = flake.lockedRef.input->getRev())
+ if (auto rev = flake.lockedRef.input.getRev())
j["revision"] = rev->to_string(Base16, false);
- if (flake.sourceInfo->info.revCount)
- j["revCount"] = *flake.sourceInfo->info.revCount;
- if (flake.sourceInfo->info.lastModified)
- j["lastModified"] = *flake.sourceInfo->info.lastModified;
+ if (auto revCount = flake.lockedRef.input.getRevCount())
+ j["revCount"] = *revCount;
+ if (auto lastModified = flake.lockedRef.input.getLastModified())
+ j["lastModified"] = *lastModified;
j["path"] = store.printStorePath(flake.sourceInfo->storePath);
return j;
}
@@ -172,7 +171,7 @@ struct CmdFlakeListInputs : FlakeCommand, MixJSON
logger->stdout("%s" ANSI_BOLD "%s" ANSI_NORMAL ": %s",
prefix + (last ? treeLast : treeConn), input.first,
lockedNode ? lockedNode->lockedRef : flake.flake.lockedRef);
-
+
if (firstVisit) recurse(*input.second, prefix + (last ? treeNull : treeLine));
}
};
@@ -501,7 +500,7 @@ struct CmdFlakeClone : FlakeCommand
if (destDir.empty())
throw Error("missing flag '--dest'");
- getFlakeRef().resolve(store).input->clone(destDir);
+ getFlakeRef().resolve(store).input.clone(destDir);
}
};
@@ -563,9 +562,10 @@ struct CmdFlakeArchive : FlakeCommand, MixJSON, MixDryRun
auto lockedInput = std::dynamic_pointer_cast<const LockedNode>(input.second);
assert(lockedInput);
auto jsonObj3 = jsonObj2 ? jsonObj2->object(input.first) : std::optional<JSONObject>();
- if (!dryRun)
- lockedInput->lockedRef.input->fetchTree(store);
- auto storePath = lockedInput->computeStorePath(*store);
+ auto storePath =
+ dryRun
+ ? lockedInput->lockedRef.input.computeStorePath(*store)
+ : lockedInput->lockedRef.input.fetch(store).first.storePath;
if (jsonObj3)
jsonObj3->attr("path", store->printStorePath(storePath));
sources.insert(std::move(storePath));
diff --git a/src/nix/installables.cc b/src/nix/installables.cc
index fde1ca7aa..86d3bfd20 100644
--- a/src/nix/installables.cc
+++ b/src/nix/installables.cc
@@ -194,7 +194,7 @@ void EvalCommand::completeFlakeRef(std::string_view prefix)
/* Look for registry entries that match the prefix. */
for (auto & registry : fetchers::getRegistries(getStore())) {
for (auto & entry : registry->entries) {
- auto from = entry.from->to_string();
+ auto from = entry.from.to_string();
if (!hasPrefix(prefix, "flake:") && hasPrefix(from, "flake:")) {
std::string from2(from, 6);
if (hasPrefix(from2, prefix))
diff --git a/src/nix/profile.cc b/src/nix/profile.cc
index cc239052d..f39213b8f 100644
--- a/src/nix/profile.cc
+++ b/src/nix/profile.cc
@@ -330,7 +330,7 @@ struct CmdProfileUpgrade : virtual SourceExprCommand, MixDefaultProfile, MixProf
for (size_t i = 0; i < manifest.elements.size(); ++i) {
auto & element(manifest.elements[i]);
if (element.source
- && !element.source->originalRef.input->isImmutable()
+ && !element.source->originalRef.input.isImmutable()
&& matches(*store, element, i, matchers))
{
Activity act(*logger, lvlChatty, actUnknown,
diff --git a/src/nix/registry.cc b/src/nix/registry.cc
index e9c76e6c6..16d7e511f 100644
--- a/src/nix/registry.cc
+++ b/src/nix/registry.cc
@@ -31,8 +31,8 @@ struct CmdRegistryList : StoreCommand
registry->type == Registry::User ? "user " :
registry->type == Registry::System ? "system" :
"global",
- entry.from->to_string(),
- entry.to->to_string());
+ entry.from.to_string(),
+ entry.to.to_string());
}
}
}
@@ -107,7 +107,7 @@ struct CmdRegistryPin : virtual Args, EvalCommand
auto ref = parseFlakeRef(url);
auto userRegistry = fetchers::getUserRegistry();
userRegistry->remove(ref.input);
- auto [tree, resolved] = ref.resolve(store).input->fetchTree(store);
+ auto [tree, resolved] = ref.resolve(store).input.fetch(store);
fetchers::Attrs extraAttrs;
if (ref.subdir != "") extraAttrs["dir"] = ref.subdir;
userRegistry->add(ref.input, resolved, extraAttrs);