aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2022-02-14 22:06:11 +0100
committerGitHub <noreply@github.com>2022-02-14 22:06:11 +0100
commit94992a919636fb9df4c7441dacbde08592e4494d (patch)
tree859c9b9126358e723c5e70c97cf7c490c3e6487f
parent744a101a36696f39653400b76a6c9f6ba9bcbad8 (diff)
parent023e45977745ffd6c16eec299a00affd65176669 (diff)
Merge pull request #6100 from edolstra/installables-cleanup
InstallableFlake: Default attr paths cleanup
-rw-r--r--src/libcmd/installables.cc16
-rw-r--r--src/libcmd/installables.hh5
-rw-r--r--src/nix/bundle.cc19
-rw-r--r--src/nix/develop.cc3
-rw-r--r--src/nix/flake.cc15
-rw-r--r--src/nix/profile.cc1
6 files changed, 32 insertions, 27 deletions
diff --git a/src/libcmd/installables.cc b/src/libcmd/installables.cc
index 9f138b420..644954977 100644
--- a/src/libcmd/installables.cc
+++ b/src/libcmd/installables.cc
@@ -545,13 +545,14 @@ InstallableFlake::InstallableFlake(
SourceExprCommand * cmd,
ref<EvalState> state,
FlakeRef && flakeRef,
- Strings && attrPaths,
- Strings && prefixes,
+ std::string_view fragment,
+ Strings attrPaths,
+ Strings prefixes,
const flake::LockFlags & lockFlags)
: InstallableValue(state),
flakeRef(flakeRef),
- attrPaths(attrPaths),
- prefixes(prefixes),
+ attrPaths(fragment == "" ? attrPaths : Strings{(std::string) fragment}),
+ prefixes(fragment == "" ? Strings{} : prefixes),
lockFlags(lockFlags)
{
if (cmd && cmd->getAutoArgs(*state)->size())
@@ -566,6 +567,8 @@ std::tuple<std::string, FlakeRef, InstallableValue::DerivationInfo> InstallableF
auto root = cache->getRoot();
for (auto & attrPath : getActualAttrPaths()) {
+ debug("trying flake output attribute '%s'", attrPath);
+
auto attr = root->findAlongAttrPath(
parseAttrPath(*state, attrPath),
true
@@ -708,8 +711,9 @@ std::vector<std::shared_ptr<Installable>> SourceExprCommand::parseInstallables(
this,
getEvalState(),
std::move(flakeRef),
- fragment == "" ? getDefaultFlakeAttrPaths() : Strings{fragment},
- fragment == "" ? Strings{} : getDefaultFlakeAttrPathPrefixes(),
+ fragment,
+ getDefaultFlakeAttrPaths(),
+ getDefaultFlakeAttrPathPrefixes(),
lockFlags));
continue;
} catch (...) {
diff --git a/src/libcmd/installables.hh b/src/libcmd/installables.hh
index ced6b3f10..3d2563e4b 100644
--- a/src/libcmd/installables.hh
+++ b/src/libcmd/installables.hh
@@ -102,8 +102,9 @@ struct InstallableFlake : InstallableValue
SourceExprCommand * cmd,
ref<EvalState> state,
FlakeRef && flakeRef,
- Strings && attrPaths,
- Strings && prefixes,
+ std::string_view fragment,
+ Strings attrPaths,
+ Strings prefixes,
const flake::LockFlags & lockFlags);
std::string what() const override { return flakeRef.to_string() + "#" + *attrPaths.begin(); }
diff --git a/src/nix/bundle.cc b/src/nix/bundle.cc
index 113ceca33..c13018328 100644
--- a/src/nix/bundle.cc
+++ b/src/nix/bundle.cc
@@ -74,21 +74,16 @@ struct CmdBundle : InstallableCommand
{
auto evalState = getEvalState();
- auto [progFlakeRef, progName] = parseFlakeRefWithFragment(installable->what(), absPath("."));
- const flake::LockFlags lockFlagsProg{ .writeLockFile = false };
- auto programInstallable = InstallableFlake(this,
- evalState, std::move(progFlakeRef),
- Strings{progName == "" ? "defaultApp" : progName},
- Strings(this->getDefaultFlakeAttrPathPrefixes()),
- lockFlagsProg);
- auto val = programInstallable.toValue(*evalState).first;
+ auto val = installable->toValue(*evalState).first;
auto [bundlerFlakeRef, bundlerName] = parseFlakeRefWithFragment(bundler, absPath("."));
const flake::LockFlags lockFlags{ .writeLockFile = false };
- auto bundler = InstallableFlake(this,
- evalState, std::move(bundlerFlakeRef),
- Strings{bundlerName == "" ? "defaultBundler." + settings.thisSystem.get() : settings.thisSystem.get() + "." + bundlerName, bundlerName},
- Strings({"","bundlers."}), lockFlags);
+ InstallableFlake bundler{this,
+ evalState, std::move(bundlerFlakeRef), bundlerName,
+ {"defaultBundler." + settings.thisSystem.get()},
+ {"bundlers." + settings.thisSystem.get() + "."},
+ lockFlags
+ };
auto vRes = evalState->allocValue();
evalState->callFunction(*bundler.toValue(*evalState).first, *val, *vRes, noPos);
diff --git a/src/nix/develop.cc b/src/nix/develop.cc
index 42e13436a..f88f5909c 100644
--- a/src/nix/develop.cc
+++ b/src/nix/develop.cc
@@ -498,7 +498,8 @@ struct CmdDevelop : Common, MixEnvironment
this,
state,
installable->nixpkgsFlakeRef(),
- Strings{"bashInteractive"},
+ "bashInteractive",
+ Strings{},
Strings{"legacyPackages." + settings.thisSystem.get() + "."},
nixpkgsLockFlags);
diff --git a/src/nix/flake.cc b/src/nix/flake.cc
index 4bc79820c..3effce2c1 100644
--- a/src/nix/flake.cc
+++ b/src/nix/flake.cc
@@ -649,12 +649,14 @@ struct CmdFlakeCheck : FlakeCommand
}
};
+static Strings defaultTemplateAttrPathsPrefixes{"templates."};
+static Strings defaultTemplateAttrPaths = {"defaultTemplate"};
+
struct CmdFlakeInitCommon : virtual Args, EvalCommand
{
std::string templateUrl = "templates";
Path destDir;
- const Strings attrsPathPrefixes{"templates."};
const LockFlags lockFlags{ .writeLockFile = false };
CmdFlakeInitCommon()
@@ -669,8 +671,8 @@ struct CmdFlakeInitCommon : virtual Args, EvalCommand
completeFlakeRefWithFragment(
getEvalState(),
lockFlags,
- attrsPathPrefixes,
- {"defaultTemplate"},
+ defaultTemplateAttrPathsPrefixes,
+ defaultTemplateAttrPaths,
prefix);
}}
});
@@ -685,9 +687,10 @@ struct CmdFlakeInitCommon : virtual Args, EvalCommand
auto [templateFlakeRef, templateName] = parseFlakeRefWithFragment(templateUrl, absPath("."));
auto installable = InstallableFlake(nullptr,
- evalState, std::move(templateFlakeRef),
- Strings{templateName == "" ? "defaultTemplate" : templateName},
- Strings(attrsPathPrefixes), lockFlags);
+ evalState, std::move(templateFlakeRef), templateName,
+ defaultTemplateAttrPaths,
+ defaultTemplateAttrPathsPrefixes,
+ lockFlags);
auto [cursor, attrPath] = installable.getCursor(*evalState);
diff --git a/src/nix/profile.cc b/src/nix/profile.cc
index b9279414d..55b5ff736 100644
--- a/src/nix/profile.cc
+++ b/src/nix/profile.cc
@@ -423,6 +423,7 @@ struct CmdProfileUpgrade : virtual SourceExprCommand, MixDefaultProfile, MixProf
this,
getEvalState(),
FlakeRef(element.source->originalRef),
+ "",
{element.source->attrPath},
{},
lockFlags);