mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-10 08:16:15 +02:00
Merge 'nix flake {info,list-inputs}' into 'nix flake metadata'
Fixes #4613.
This commit is contained in:
parent
77f5d171e1
commit
66fa1c7375
4 changed files with 92 additions and 130 deletions
|
@ -1,23 +0,0 @@
|
||||||
R""(
|
|
||||||
|
|
||||||
# Examples
|
|
||||||
|
|
||||||
* Show the inputs of the `hydra` flake:
|
|
||||||
|
|
||||||
```console
|
|
||||||
# nix flake list-inputs github:NixOS/hydra
|
|
||||||
github:NixOS/hydra/bde8d81876dfc02143e5070e42c78d8f0d83d6f7
|
|
||||||
├───nix: github:NixOS/nix/79aa7d95183cbe6c0d786965f0dbff414fd1aa67
|
|
||||||
│ ├───lowdown-src: github:kristapsdz/lowdown/1705b4a26fbf065d9574dce47a94e8c7c79e052f
|
|
||||||
│ └───nixpkgs: github:NixOS/nixpkgs/ad0d20345219790533ebe06571f82ed6b034db31
|
|
||||||
└───nixpkgs follows input 'nix/nixpkgs'
|
|
||||||
```
|
|
||||||
|
|
||||||
# Description
|
|
||||||
|
|
||||||
This command shows the inputs of the flake specified by the flake
|
|
||||||
referenced *flake-url*. Since it prints the locked inputs that result
|
|
||||||
from generating or updating the lock file, this command essentially
|
|
||||||
displays the contents of the flake's lock file in human-readable form.
|
|
||||||
|
|
||||||
)""
|
|
|
@ -5,19 +5,24 @@ R""(
|
||||||
* Show what `nixpkgs` resolves to:
|
* Show what `nixpkgs` resolves to:
|
||||||
|
|
||||||
```console
|
```console
|
||||||
# nix flake info nixpkgs
|
# nix flake metadata nixpkgs
|
||||||
Resolved URL: github:NixOS/nixpkgs
|
Resolved URL: github:edolstra/dwarffs
|
||||||
Locked URL: github:NixOS/nixpkgs/b67ba0bfcc714453cdeb8d713e35751eb8b4c8f4
|
Locked URL: github:edolstra/dwarffs/f691e2c991e75edb22836f1dbe632c40324215c5
|
||||||
Description: A collection of packages for the Nix package manager
|
Description: A filesystem that fetches DWARF debug info from the Internet on demand
|
||||||
Path: /nix/store/23qapccs6cfmwwrlq8kr41vz5vdmns3r-source
|
Path: /nix/store/769s05vjydmc2lcf6b02az28wsa9ixh1-source
|
||||||
Revision: b67ba0bfcc714453cdeb8d713e35751eb8b4c8f4
|
Revision: f691e2c991e75edb22836f1dbe632c40324215c5
|
||||||
Last modified: 2020-12-23 12:36:12
|
Last modified: 2021-01-21 15:41:26
|
||||||
|
Inputs:
|
||||||
|
├───nix: github:NixOS/nix/6254b1f5d298ff73127d7b0f0da48f142bdc753c
|
||||||
|
│ ├───lowdown-src: github:kristapsdz/lowdown/1705b4a26fbf065d9574dce47a94e8c7c79e052f
|
||||||
|
│ └───nixpkgs: github:NixOS/nixpkgs/ad0d20345219790533ebe06571f82ed6b034db31
|
||||||
|
└───nixpkgs follows input 'nix/nixpkgs'
|
||||||
```
|
```
|
||||||
|
|
||||||
* Show information about `dwarffs` in JSON format:
|
* Show information about `dwarffs` in JSON format:
|
||||||
|
|
||||||
```console
|
```console
|
||||||
# nix flake info dwarffs --json | jq .
|
# nix flake metadata dwarffs --json | jq .
|
||||||
{
|
{
|
||||||
"description": "A filesystem that fetches DWARF debug info from the Internet on demand",
|
"description": "A filesystem that fetches DWARF debug info from the Internet on demand",
|
||||||
"lastModified": 1597153508,
|
"lastModified": 1597153508,
|
||||||
|
@ -29,6 +34,7 @@ R""(
|
||||||
"rev": "d181d714fd36eb06f4992a1997cd5601e26db8f5",
|
"rev": "d181d714fd36eb06f4992a1997cd5601e26db8f5",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
|
"locks": { ... },
|
||||||
"original": {
|
"original": {
|
||||||
"id": "dwarffs",
|
"id": "dwarffs",
|
||||||
"type": "indirect"
|
"type": "indirect"
|
||||||
|
@ -75,6 +81,9 @@ data. This includes:
|
||||||
time of the commit of the locked flake; for tarball flakes, it's the
|
time of the commit of the locked flake; for tarball flakes, it's the
|
||||||
most recent timestamp of any file inside the tarball.
|
most recent timestamp of any file inside the tarball.
|
||||||
|
|
||||||
|
* `Inputs`: The flake inputs with their corresponding lock file
|
||||||
|
entries.
|
||||||
|
|
||||||
With `--json`, the output is a JSON object with the following fields:
|
With `--json`, the output is a JSON object with the following fields:
|
||||||
|
|
||||||
* `original` and `originalUrl`: The flake reference specified by the
|
* `original` and `originalUrl`: The flake reference specified by the
|
||||||
|
@ -96,4 +105,6 @@ With `--json`, the output is a JSON object with the following fields:
|
||||||
|
|
||||||
* `lastModified`: See `Last modified` above.
|
* `lastModified`: See `Last modified` above.
|
||||||
|
|
||||||
|
* `locks`: The contents of `flake.lock`.
|
||||||
|
|
||||||
)""
|
)""
|
134
src/nix/flake.cc
134
src/nix/flake.cc
|
@ -43,12 +43,6 @@ public:
|
||||||
return parseFlakeRef(flakeUrl, absPath(".")); //FIXME
|
return parseFlakeRef(flakeUrl, absPath(".")); //FIXME
|
||||||
}
|
}
|
||||||
|
|
||||||
Flake getFlake()
|
|
||||||
{
|
|
||||||
auto evalState = getEvalState();
|
|
||||||
return flake::getFlake(*evalState, getFlakeRef(), lockFlags.useRegistries);
|
|
||||||
}
|
|
||||||
|
|
||||||
LockedFlake lockFlake()
|
LockedFlake lockFlake()
|
||||||
{
|
{
|
||||||
return flake::lockFlake(*getEvalState(), getFlakeRef(), lockFlags);
|
return flake::lockFlake(*getEvalState(), getFlakeRef(), lockFlags);
|
||||||
|
@ -60,43 +54,6 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static void printFlakeInfo(const Store & store, const Flake & flake)
|
|
||||||
{
|
|
||||||
logger->cout("Resolved URL: %s", flake.resolvedRef.to_string());
|
|
||||||
logger->cout("Locked URL: %s", flake.lockedRef.to_string());
|
|
||||||
if (flake.description)
|
|
||||||
logger->cout("Description: %s", *flake.description);
|
|
||||||
logger->cout("Path: %s", store.printStorePath(flake.sourceInfo->storePath));
|
|
||||||
if (auto rev = flake.lockedRef.input.getRev())
|
|
||||||
logger->cout("Revision: %s", rev->to_string(Base16, false));
|
|
||||||
if (auto revCount = flake.lockedRef.input.getRevCount())
|
|
||||||
logger->cout("Revisions: %s", *revCount);
|
|
||||||
if (auto lastModified = flake.lockedRef.input.getLastModified())
|
|
||||||
logger->cout("Last modified: %s",
|
|
||||||
std::put_time(std::localtime(&*lastModified), "%F %T"));
|
|
||||||
}
|
|
||||||
|
|
||||||
static nlohmann::json flakeToJSON(const Store & store, const Flake & flake)
|
|
||||||
{
|
|
||||||
nlohmann::json j;
|
|
||||||
if (flake.description)
|
|
||||||
j["description"] = *flake.description;
|
|
||||||
j["originalUrl"] = flake.originalRef.to_string();
|
|
||||||
j["original"] = fetchers::attrsToJSON(flake.originalRef.toAttrs());
|
|
||||||
j["resolvedUrl"] = flake.resolvedRef.to_string();
|
|
||||||
j["resolved"] = fetchers::attrsToJSON(flake.resolvedRef.toAttrs());
|
|
||||||
j["url"] = flake.lockedRef.to_string(); // FIXME: rename to lockedUrl
|
|
||||||
j["locked"] = fetchers::attrsToJSON(flake.lockedRef.toAttrs());
|
|
||||||
if (auto rev = flake.lockedRef.input.getRev())
|
|
||||||
j["revision"] = rev->to_string(Base16, false);
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct CmdFlakeUpdate : FlakeCommand
|
struct CmdFlakeUpdate : FlakeCommand
|
||||||
{
|
{
|
||||||
std::string description() override
|
std::string description() override
|
||||||
|
@ -175,54 +132,72 @@ static void enumerateOutputs(EvalState & state, Value & vFlake,
|
||||||
callback(attr.name, *attr.value, *attr.pos);
|
callback(attr.name, *attr.value, *attr.pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct CmdFlakeInfo : FlakeCommand, MixJSON
|
struct CmdFlakeMetadata : FlakeCommand, MixJSON
|
||||||
{
|
{
|
||||||
std::string description() override
|
std::string description() override
|
||||||
{
|
{
|
||||||
return "list info about a given flake";
|
return "show flake metadata";
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string doc() override
|
std::string doc() override
|
||||||
{
|
{
|
||||||
return
|
return
|
||||||
#include "flake-info.md"
|
#include "flake-metadata.md"
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
void run(nix::ref<nix::Store> store) override
|
void run(nix::ref<nix::Store> store) override
|
||||||
{
|
{
|
||||||
auto flake = getFlake();
|
auto lockedFlake = lockFlake();
|
||||||
|
auto & flake = lockedFlake.flake;
|
||||||
|
|
||||||
if (json) {
|
if (json) {
|
||||||
auto json = flakeToJSON(*store, flake);
|
nlohmann::json j;
|
||||||
logger->cout("%s", json.dump());
|
if (flake.description)
|
||||||
} else
|
j["description"] = *flake.description;
|
||||||
printFlakeInfo(*store, flake);
|
j["originalUrl"] = flake.originalRef.to_string();
|
||||||
}
|
j["original"] = fetchers::attrsToJSON(flake.originalRef.toAttrs());
|
||||||
};
|
j["resolvedUrl"] = flake.resolvedRef.to_string();
|
||||||
|
j["resolved"] = fetchers::attrsToJSON(flake.resolvedRef.toAttrs());
|
||||||
|
j["url"] = flake.lockedRef.to_string(); // FIXME: rename to lockedUrl
|
||||||
|
j["locked"] = fetchers::attrsToJSON(flake.lockedRef.toAttrs());
|
||||||
|
if (auto rev = flake.lockedRef.input.getRev())
|
||||||
|
j["revision"] = rev->to_string(Base16, false);
|
||||||
|
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);
|
||||||
|
j["locks"] = lockedFlake.lockFile.toJSON();
|
||||||
|
logger->cout("%s", j.dump());
|
||||||
|
} else {
|
||||||
|
logger->cout(
|
||||||
|
ANSI_BOLD "Resolved URL:" ANSI_NORMAL " %s",
|
||||||
|
flake.resolvedRef.to_string());
|
||||||
|
logger->cout(
|
||||||
|
ANSI_BOLD "Locked URL:" ANSI_NORMAL " %s",
|
||||||
|
flake.lockedRef.to_string());
|
||||||
|
if (flake.description)
|
||||||
|
logger->cout(
|
||||||
|
ANSI_BOLD "Description:" ANSI_NORMAL " %s",
|
||||||
|
*flake.description);
|
||||||
|
logger->cout(
|
||||||
|
ANSI_BOLD "Path:" ANSI_NORMAL " %s",
|
||||||
|
store->printStorePath(flake.sourceInfo->storePath));
|
||||||
|
if (auto rev = flake.lockedRef.input.getRev())
|
||||||
|
logger->cout(
|
||||||
|
ANSI_BOLD "Revision:" ANSI_NORMAL " %s",
|
||||||
|
rev->to_string(Base16, false));
|
||||||
|
if (auto revCount = flake.lockedRef.input.getRevCount())
|
||||||
|
logger->cout(
|
||||||
|
ANSI_BOLD "Revisions:" ANSI_NORMAL " %s",
|
||||||
|
*revCount);
|
||||||
|
if (auto lastModified = flake.lockedRef.input.getLastModified())
|
||||||
|
logger->cout(
|
||||||
|
ANSI_BOLD "Last modified:" ANSI_NORMAL " %s",
|
||||||
|
std::put_time(std::localtime(&*lastModified), "%F %T"));
|
||||||
|
|
||||||
struct CmdFlakeListInputs : FlakeCommand, MixJSON
|
logger->cout(ANSI_BOLD "Inputs:" ANSI_NORMAL);
|
||||||
{
|
|
||||||
std::string description() override
|
|
||||||
{
|
|
||||||
return "list flake inputs";
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string doc() override
|
|
||||||
{
|
|
||||||
return
|
|
||||||
#include "flake-list-inputs.md"
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
void run(nix::ref<nix::Store> store) override
|
|
||||||
{
|
|
||||||
auto flake = lockFlake();
|
|
||||||
|
|
||||||
if (json)
|
|
||||||
logger->cout("%s", flake.lockFile.toJSON());
|
|
||||||
else {
|
|
||||||
logger->cout("%s", flake.flake.lockedRef);
|
|
||||||
|
|
||||||
std::unordered_set<std::shared_ptr<Node>> visited;
|
std::unordered_set<std::shared_ptr<Node>> visited;
|
||||||
|
|
||||||
|
@ -236,7 +211,7 @@ struct CmdFlakeListInputs : FlakeCommand, MixJSON
|
||||||
if (auto lockedNode = std::get_if<0>(&input.second)) {
|
if (auto lockedNode = std::get_if<0>(&input.second)) {
|
||||||
logger->cout("%s" ANSI_BOLD "%s" ANSI_NORMAL ": %s",
|
logger->cout("%s" ANSI_BOLD "%s" ANSI_NORMAL ": %s",
|
||||||
prefix + (last ? treeLast : treeConn), input.first,
|
prefix + (last ? treeLast : treeConn), input.first,
|
||||||
*lockedNode ? (*lockedNode)->lockedRef : flake.flake.lockedRef);
|
*lockedNode ? (*lockedNode)->lockedRef : flake.lockedRef);
|
||||||
|
|
||||||
bool firstVisit = visited.insert(*lockedNode).second;
|
bool firstVisit = visited.insert(*lockedNode).second;
|
||||||
|
|
||||||
|
@ -249,8 +224,8 @@ struct CmdFlakeListInputs : FlakeCommand, MixJSON
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
visited.insert(flake.lockFile.root);
|
visited.insert(lockedFlake.lockFile.root);
|
||||||
recurse(*flake.lockFile.root, "");
|
recurse(*lockedFlake.lockFile.root, "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -1048,8 +1023,7 @@ struct CmdFlake : NixMultiCommand
|
||||||
: MultiCommand({
|
: MultiCommand({
|
||||||
{"update", []() { return make_ref<CmdFlakeUpdate>(); }},
|
{"update", []() { return make_ref<CmdFlakeUpdate>(); }},
|
||||||
{"lock", []() { return make_ref<CmdFlakeLock>(); }},
|
{"lock", []() { return make_ref<CmdFlakeLock>(); }},
|
||||||
{"info", []() { return make_ref<CmdFlakeInfo>(); }},
|
{"metadata", []() { return make_ref<CmdFlakeMetadata>(); }},
|
||||||
{"list-inputs", []() { return make_ref<CmdFlakeListInputs>(); }},
|
|
||||||
{"check", []() { return make_ref<CmdFlakeCheck>(); }},
|
{"check", []() { return make_ref<CmdFlakeCheck>(); }},
|
||||||
{"init", []() { return make_ref<CmdFlakeInit>(); }},
|
{"init", []() { return make_ref<CmdFlakeInit>(); }},
|
||||||
{"new", []() { return make_ref<CmdFlakeNew>(); }},
|
{"new", []() { return make_ref<CmdFlakeNew>(); }},
|
||||||
|
|
|
@ -164,16 +164,17 @@ EOF
|
||||||
# Test 'nix flake list'.
|
# Test 'nix flake list'.
|
||||||
[[ $(nix registry list | wc -l) == 7 ]]
|
[[ $(nix registry list | wc -l) == 7 ]]
|
||||||
|
|
||||||
# Test 'nix flake info'.
|
# Test 'nix flake metadata'.
|
||||||
nix flake info flake1 | grep -q 'URL: .*flake1.*'
|
nix flake metadata flake1
|
||||||
|
nix flake metadata flake1 | grep -q 'Locked URL:.*flake1.*'
|
||||||
|
|
||||||
# Test 'nix flake info' on a local flake.
|
# Test 'nix flake metadata' on a local flake.
|
||||||
(cd $flake1Dir && nix flake info) | grep -q 'URL: .*flake1.*'
|
(cd $flake1Dir && nix flake metadata) | grep -q 'URL:.*flake1.*'
|
||||||
(cd $flake1Dir && nix flake info .) | grep -q 'URL: .*flake1.*'
|
(cd $flake1Dir && nix flake metadata .) | grep -q 'URL:.*flake1.*'
|
||||||
nix flake info $flake1Dir | grep -q 'URL: .*flake1.*'
|
nix flake metadata $flake1Dir | grep -q 'URL:.*flake1.*'
|
||||||
|
|
||||||
# Test 'nix flake info --json'.
|
# Test 'nix flake metadata --json'.
|
||||||
json=$(nix flake info flake1 --json | jq .)
|
json=$(nix flake metadata flake1 --json | jq .)
|
||||||
[[ $(echo "$json" | jq -r .description) = 'Bla bla' ]]
|
[[ $(echo "$json" | jq -r .description) = 'Bla bla' ]]
|
||||||
[[ -d $(echo "$json" | jq -r .path) ]]
|
[[ -d $(echo "$json" | jq -r .path) ]]
|
||||||
[[ $(echo "$json" | jq -r .lastModified) = $(git -C $flake1Dir log -n1 --format=%ct) ]]
|
[[ $(echo "$json" | jq -r .lastModified) = $(git -C $flake1Dir log -n1 --format=%ct) ]]
|
||||||
|
@ -181,7 +182,7 @@ hash1=$(echo "$json" | jq -r .revision)
|
||||||
|
|
||||||
echo -n '# foo' >> $flake1Dir/flake.nix
|
echo -n '# foo' >> $flake1Dir/flake.nix
|
||||||
git -C $flake1Dir commit -a -m 'Foo'
|
git -C $flake1Dir commit -a -m 'Foo'
|
||||||
hash2=$(nix flake info flake1 --json --refresh | jq -r .revision)
|
hash2=$(nix flake metadata flake1 --json --refresh | jq -r .revision)
|
||||||
[[ $hash1 != $hash2 ]]
|
[[ $hash1 != $hash2 ]]
|
||||||
|
|
||||||
# Test 'nix build' on a flake.
|
# Test 'nix build' on a flake.
|
||||||
|
@ -630,7 +631,7 @@ hg commit --config ui.username=foobar@example.org $flake5Dir -m 'Initial commit'
|
||||||
nix build -o $TEST_ROOT/result hg+file://$flake5Dir
|
nix build -o $TEST_ROOT/result hg+file://$flake5Dir
|
||||||
[[ -e $TEST_ROOT/result/hello ]]
|
[[ -e $TEST_ROOT/result/hello ]]
|
||||||
|
|
||||||
(! nix flake info --json hg+file://$flake5Dir | jq -e -r .revision)
|
(! nix flake metadata --json hg+file://$flake5Dir | jq -e -r .revision)
|
||||||
|
|
||||||
nix eval hg+file://$flake5Dir#expr
|
nix eval hg+file://$flake5Dir#expr
|
||||||
|
|
||||||
|
@ -638,13 +639,13 @@ nix eval hg+file://$flake5Dir#expr
|
||||||
|
|
||||||
(! nix eval hg+file://$flake5Dir#expr --no-allow-dirty)
|
(! nix eval hg+file://$flake5Dir#expr --no-allow-dirty)
|
||||||
|
|
||||||
(! nix flake info --json hg+file://$flake5Dir | jq -e -r .revision)
|
(! nix flake metadata --json hg+file://$flake5Dir | jq -e -r .revision)
|
||||||
|
|
||||||
hg commit --config ui.username=foobar@example.org $flake5Dir -m 'Add lock file'
|
hg commit --config ui.username=foobar@example.org $flake5Dir -m 'Add lock file'
|
||||||
|
|
||||||
nix flake info --json hg+file://$flake5Dir --refresh | jq -e -r .revision
|
nix flake metadata --json hg+file://$flake5Dir --refresh | jq -e -r .revision
|
||||||
nix flake info --json hg+file://$flake5Dir
|
nix flake metadata --json hg+file://$flake5Dir
|
||||||
[[ $(nix flake info --json hg+file://$flake5Dir | jq -e -r .revCount) = 1 ]]
|
[[ $(nix flake metadata --json hg+file://$flake5Dir | jq -e -r .revCount) = 1 ]]
|
||||||
|
|
||||||
nix build -o $TEST_ROOT/result hg+file://$flake5Dir --no-registries --no-allow-dirty
|
nix build -o $TEST_ROOT/result hg+file://$flake5Dir --no-registries --no-allow-dirty
|
||||||
|
|
||||||
|
@ -654,7 +655,7 @@ tar cfz $TEST_ROOT/flake.tar.gz -C $TEST_ROOT --exclude .hg flake5
|
||||||
nix build -o $TEST_ROOT/result file://$TEST_ROOT/flake.tar.gz
|
nix build -o $TEST_ROOT/result file://$TEST_ROOT/flake.tar.gz
|
||||||
|
|
||||||
# Building with a tarball URL containing a SRI hash should also work.
|
# Building with a tarball URL containing a SRI hash should also work.
|
||||||
url=$(nix flake info --json file://$TEST_ROOT/flake.tar.gz | jq -r .url)
|
url=$(nix flake metadata --json file://$TEST_ROOT/flake.tar.gz | jq -r .url)
|
||||||
[[ $url =~ sha256- ]]
|
[[ $url =~ sha256- ]]
|
||||||
|
|
||||||
nix build -o $TEST_ROOT/result $url
|
nix build -o $TEST_ROOT/result $url
|
||||||
|
@ -680,9 +681,8 @@ nix flake lock $flake3Dir
|
||||||
nix flake lock $flake3Dir --update-input flake2/flake1
|
nix flake lock $flake3Dir --update-input flake2/flake1
|
||||||
[[ $(jq -r .nodes.flake1_2.locked.rev $flake3Dir/flake.lock) =~ $hash2 ]]
|
[[ $(jq -r .nodes.flake1_2.locked.rev $flake3Dir/flake.lock) =~ $hash2 ]]
|
||||||
|
|
||||||
# Test 'nix flake list-inputs'.
|
# Test 'nix flake metadata --json'.
|
||||||
[[ $(nix flake list-inputs $flake3Dir | wc -l) == 5 ]]
|
nix flake metadata $flake3Dir --json | jq .
|
||||||
nix flake list-inputs $flake3Dir --json | jq .
|
|
||||||
|
|
||||||
# Test circular flake dependencies.
|
# Test circular flake dependencies.
|
||||||
cat > $flakeA/flake.nix <<EOF
|
cat > $flakeA/flake.nix <<EOF
|
||||||
|
@ -721,4 +721,4 @@ git -C $flakeB commit -a -m 'Foo'
|
||||||
[[ $(nix eval --update-input b $flakeA#foo) = 1912 ]]
|
[[ $(nix eval --update-input b $flakeA#foo) = 1912 ]]
|
||||||
|
|
||||||
# Test list-inputs with circular dependencies
|
# Test list-inputs with circular dependencies
|
||||||
nix flake list-inputs $flakeA
|
nix flake metadata $flakeA
|
||||||
|
|
Loading…
Reference in a new issue