forked from lix-project/lix
Merge pull request #5942 from NixOS/5912-quieter-nix-why-depends
Make `nix why-depends` quieter by default
This commit is contained in:
commit
c7223db871
|
@ -31,6 +31,7 @@ struct CmdWhyDepends : SourceExprCommand
|
||||||
{
|
{
|
||||||
std::string _package, _dependency;
|
std::string _package, _dependency;
|
||||||
bool all = false;
|
bool all = false;
|
||||||
|
bool precise = false;
|
||||||
|
|
||||||
CmdWhyDepends()
|
CmdWhyDepends()
|
||||||
{
|
{
|
||||||
|
@ -56,6 +57,12 @@ struct CmdWhyDepends : SourceExprCommand
|
||||||
.description = "Show all edges in the dependency graph leading from *package* to *dependency*, rather than just a shortest path.",
|
.description = "Show all edges in the dependency graph leading from *package* to *dependency*, rather than just a shortest path.",
|
||||||
.handler = {&all, true},
|
.handler = {&all, true},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
addFlag({
|
||||||
|
.longName = "precise",
|
||||||
|
.description = "For each edge in the dependency graph, show the files in the parent that cause the dependency.",
|
||||||
|
.handler = {&precise, true},
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string description() override
|
std::string description() override
|
||||||
|
@ -158,11 +165,19 @@ struct CmdWhyDepends : SourceExprCommand
|
||||||
auto pathS = store->printStorePath(node.path);
|
auto pathS = store->printStorePath(node.path);
|
||||||
|
|
||||||
assert(node.dist != inf);
|
assert(node.dist != inf);
|
||||||
|
if (precise) {
|
||||||
logger->cout("%s%s%s%s" ANSI_NORMAL,
|
logger->cout("%s%s%s%s" ANSI_NORMAL,
|
||||||
firstPad,
|
firstPad,
|
||||||
node.visited ? "\e[38;5;244m" : "",
|
node.visited ? "\e[38;5;244m" : "",
|
||||||
firstPad != "" ? "→ " : "",
|
firstPad != "" ? "→ " : "",
|
||||||
pathS);
|
pathS);
|
||||||
|
} else {
|
||||||
|
logger->cout("%s%s%s%s" ANSI_NORMAL,
|
||||||
|
firstPad,
|
||||||
|
node.visited ? "\e[38;5;244m" : "",
|
||||||
|
firstPad != "" ? treeLast : "",
|
||||||
|
pathS);
|
||||||
|
}
|
||||||
|
|
||||||
if (node.path == dependencyPath && !all
|
if (node.path == dependencyPath && !all
|
||||||
&& packagePath != dependencyPath)
|
&& packagePath != dependencyPath)
|
||||||
|
@ -237,7 +252,7 @@ struct CmdWhyDepends : SourceExprCommand
|
||||||
|
|
||||||
// FIXME: should use scanForReferences().
|
// FIXME: should use scanForReferences().
|
||||||
|
|
||||||
visitPath(pathS);
|
if (precise) visitPath(pathS);
|
||||||
|
|
||||||
for (auto & ref : refs) {
|
for (auto & ref : refs) {
|
||||||
std::string hash(ref.second->path.hashPart());
|
std::string hash(ref.second->path.hashPart());
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
mkdir $out
|
mkdir $out
|
||||||
echo $(cat $input1/foo)$(cat $input2/bar) > $out/foobar
|
echo $(cat $input1/foo)$(cat $input2/bar) > $out/foobar
|
||||||
|
|
||||||
ln -s $input2 $out/input-2
|
ln -s $input2 $out/reference-to-input-2
|
||||||
|
|
||||||
# Self-reference.
|
# Self-reference.
|
||||||
ln -s $out $out/self
|
ln -s $out $out/self
|
||||||
|
|
|
@ -27,6 +27,8 @@ let {
|
||||||
input1 = input1 + "/.";
|
input1 = input1 + "/.";
|
||||||
input2 = "${input2}/.";
|
input2 = "${input2}/.";
|
||||||
input1_drv = input1;
|
input1_drv = input1;
|
||||||
|
input2_drv = input2;
|
||||||
|
input0_drv = input0;
|
||||||
meta.description = "Random test package";
|
meta.description = "Random test package";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ if nix-store --gc --print-dead | grep -E $outPath$; then false; fi
|
||||||
|
|
||||||
nix-store --gc --print-dead
|
nix-store --gc --print-dead
|
||||||
|
|
||||||
inUse=$(readLink $outPath/input-2)
|
inUse=$(readLink $outPath/reference-to-input-2)
|
||||||
if nix-store --delete $inUse; then false; fi
|
if nix-store --delete $inUse; then false; fi
|
||||||
test -e $inUse
|
test -e $inUse
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ nix-collect-garbage
|
||||||
|
|
||||||
# Check that the root and its dependencies haven't been deleted.
|
# Check that the root and its dependencies haven't been deleted.
|
||||||
cat $outPath/foobar
|
cat $outPath/foobar
|
||||||
cat $outPath/input-2/bar
|
cat $outPath/reference-to-input-2/bar
|
||||||
|
|
||||||
# Check that the derivation has been GC'd.
|
# Check that the derivation has been GC'd.
|
||||||
if test -e $drvPath; then false; fi
|
if test -e $drvPath; then false; fi
|
||||||
|
|
|
@ -61,7 +61,8 @@ nix_tests = \
|
||||||
ca/concurrent-builds.sh \
|
ca/concurrent-builds.sh \
|
||||||
ca/nix-copy.sh \
|
ca/nix-copy.sh \
|
||||||
eval-store.sh \
|
eval-store.sh \
|
||||||
readfile-context.sh
|
readfile-context.sh \
|
||||||
|
why-depends.sh
|
||||||
# parallel.sh
|
# parallel.sh
|
||||||
|
|
||||||
ifeq ($(HAVE_LIBCPUID), 1)
|
ifeq ($(HAVE_LIBCPUID), 1)
|
||||||
|
|
21
tests/why-depends.sh
Normal file
21
tests/why-depends.sh
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
source common.sh
|
||||||
|
|
||||||
|
clearStore
|
||||||
|
|
||||||
|
cp ./dependencies.nix ./dependencies.builder0.sh ./config.nix $TEST_HOME
|
||||||
|
|
||||||
|
cd $TEST_HOME
|
||||||
|
|
||||||
|
nix-build ./dependencies.nix -A input0_drv -o dep
|
||||||
|
nix-build ./dependencies.nix -o toplevel
|
||||||
|
|
||||||
|
FAST_WHY_DEPENDS_OUTPUT=$(nix why-depends ./toplevel ./dep)
|
||||||
|
PRECISE_WHY_DEPENDS_OUTPUT=$(nix why-depends ./toplevel ./dep --precise)
|
||||||
|
|
||||||
|
# Both outputs should show that `input-2` is in the dependency chain
|
||||||
|
echo "$FAST_WHY_DEPENDS_OUTPUT" | grep -q input-2
|
||||||
|
echo "$PRECISE_WHY_DEPENDS_OUTPUT" | grep -q input-2
|
||||||
|
|
||||||
|
# But only the “precise” one should refere to `reference-to-input-2`
|
||||||
|
echo "$FAST_WHY_DEPENDS_OUTPUT" | (! grep -q reference-to-input-2)
|
||||||
|
echo "$PRECISE_WHY_DEPENDS_OUTPUT" | grep -q reference-to-input-2
|
Loading…
Reference in a new issue