* Change referer' to
referrer' throughout. In particular, the
nix-store query options `--referer' and `--referer-closure' have been changed to `--referrer' and `--referrer-closure' (but the old ones are still accepted for compatibility).
This commit is contained in:
parent
d87549c1c7
commit
ab5c6bb3a3
11 changed files with 69 additions and 68 deletions
|
@ -292,8 +292,8 @@ $ nix-store --gc</screen>
|
|||
<arg choice='plain'><option>--requisites</option></arg>
|
||||
<arg choice='plain'><option>-R</option></arg>
|
||||
<arg choice='plain'><option>--references</option></arg>
|
||||
<arg choice='plain'><option>--referers</option></arg>
|
||||
<arg choice='plain'><option>--referers-closure</option></arg>
|
||||
<arg choice='plain'><option>--referrers</option></arg>
|
||||
<arg choice='plain'><option>--referrers-closure</option></arg>
|
||||
<arg choice='plain'><option>--deriver</option></arg>
|
||||
<arg choice='plain'><option>--deriver</option></arg>
|
||||
<arg choice='plain'><option>--graph</option></arg>
|
||||
|
@ -411,21 +411,21 @@ query is applied to the target of the symlink.</para>
|
|||
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term><option>--referers</option></term>
|
||||
<varlistentry><term><option>--referrers</option></term>
|
||||
|
||||
<listitem><para>Prints the set of <emphasis>referers</emphasis> of
|
||||
<listitem><para>Prints the set of <emphasis>referrers</emphasis> of
|
||||
the store paths <replaceable>paths</replaceable>, that is, the
|
||||
store paths currently existing in the Nix store that refer to one
|
||||
of <replaceable>paths</replaceable>. Note that contrary to the
|
||||
references, the set of referers is not constant; it can change as
|
||||
references, the set of referrers is not constant; it can change as
|
||||
store paths are added or removed.</para></listitem>
|
||||
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term><option>--referers-closure</option></term>
|
||||
<varlistentry><term><option>--referrers-closure</option></term>
|
||||
|
||||
<listitem><para>Prints the closure of the set of store paths
|
||||
<replaceable>paths</replaceable> under the referers relation; that
|
||||
<replaceable>paths</replaceable> under the referrers relation; that
|
||||
is, all store paths that directly or indirectly refer to one of
|
||||
<replaceable>paths</replaceable>. These are all the path currently
|
||||
in the Nix store that are dependent on
|
||||
|
@ -536,7 +536,7 @@ $ nix-store -q --tree $(nix-store -qd $(which svn))
|
|||
<command>svn</command>:
|
||||
|
||||
<screen>
|
||||
$ nix-store -q --referers $(nix-store -q --binding openssl $(nix-store -qd $(which svn)))
|
||||
$ nix-store -q --referrers $(nix-store -q --binding openssl $(nix-store -qd $(which svn)))
|
||||
/nix/store/23ny9l9wixx21632y2wi4p585qhva1q8-sylpheed-1.0.0
|
||||
/nix/store/5mbglq5ldqld8sj57273aljwkfvj22mc-subversion-1.1.4
|
||||
/nix/store/dpmvp969yhdqs7lm2r1a3gng7pyq6vy4-subversion-1.1.3
|
||||
|
@ -548,7 +548,7 @@ $ nix-store -q --referers $(nix-store -q --binding openssl $(nix-store -qd $(whi
|
|||
(C library) used by <command>svn</command>:
|
||||
|
||||
<screen>
|
||||
$ nix-store -q --referers-closure $(ldd $(which svn) | grep /libc.so | awk '{print $3}')
|
||||
$ nix-store -q --referrers-closure $(ldd $(which svn) | grep /libc.so | awk '{print $3}')
|
||||
/nix/store/034a6h4vpz9kds5r6kzb9lhh81mscw43-libgnomeprintui-2.8.2
|
||||
/nix/store/15l3yi0d45prm7a82pcrknxdh6nzmxza-gawk-3.1.4
|
||||
<replaceable>...</replaceable></screen>
|
||||
|
|
|
@ -236,7 +236,7 @@ $ nix-store -q --tree $(nix-store -qd $(which firefox))</screen>
|
|||
certain Glibc:
|
||||
|
||||
<screen>
|
||||
$ nix-store -q --referers-closure \
|
||||
$ nix-store -q --referrers-closure \
|
||||
/nix/store/8lz9yc6zgmc0vlqmn2ipcpkjlmbi51vv-glibc-2.3.4</screen>
|
||||
|
||||
</para>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#! @perl@ -w -I@libexecdir@/nix
|
||||
>#! @perl@ -w -I@libexecdir@/nix
|
||||
|
||||
use strict;
|
||||
use POSIX qw(tmpnam);
|
||||
|
@ -140,19 +140,19 @@ sub computeUses {
|
|||
|
||||
# print " DERIVER $deriver\n";
|
||||
|
||||
# Optimisation: build the referers graph from the references
|
||||
# Optimisation: build the referrers graph from the references
|
||||
# graph.
|
||||
my %referers;
|
||||
my %referrers;
|
||||
foreach my $q (keys %{$narFiles}) {
|
||||
my @refs = split " ", @{$$narFiles{$q}}[0]->{references};
|
||||
foreach my $r (@refs) {
|
||||
$referers{$r} = [] unless defined $referers{$r};
|
||||
push @{$referers{$r}}, $q;
|
||||
$referrers{$r} = [] unless defined $referrers{$r};
|
||||
push @{$referrers{$r}}, $q;
|
||||
}
|
||||
}
|
||||
|
||||
# Determine the shortest path from $deriver to all other reachable
|
||||
# paths in the `referers' graph.
|
||||
# paths in the `referrers' graph.
|
||||
|
||||
my %dist;
|
||||
$dist{$deriver} = 0;
|
||||
|
@ -164,7 +164,7 @@ sub computeUses {
|
|||
my $p = $queue[$pos];
|
||||
$pos++;
|
||||
|
||||
foreach my $q (@{$referers{$p}}) {
|
||||
foreach my $q (@{$referrers{$p}}) {
|
||||
if (!defined $dist{$q}) {
|
||||
$dist{$q} = $dist{$p} + 1;
|
||||
# print " $q $dist{$q}\n";
|
||||
|
|
|
@ -23,8 +23,9 @@ Derivation derivationFromPath(const Path & drvPath);
|
|||
closure of `storePath'; that is, all paths than can be directly or
|
||||
indirectly reached from it. `paths' is not cleared. If
|
||||
`flipDirection' is true, the set of paths that can reach
|
||||
`storePath' is returned; that is, the closures under the `referers'
|
||||
relation instead of the `references' relation is returned. */
|
||||
`storePath' is returned; that is, the closures under the
|
||||
`referrers' relation instead of the `references' relation is
|
||||
returned. */
|
||||
void computeFSClosure(const Path & storePath,
|
||||
PathSet & paths, bool flipDirection = false);
|
||||
|
||||
|
|
|
@ -401,8 +401,8 @@ void collectGarbage(GCAction action, PathSet & result)
|
|||
for (Paths::iterator i = storePaths.begin(); i != storePaths.end(); ++i)
|
||||
storePaths2.insert(canonPath(nixStore + "/" + *i));
|
||||
|
||||
/* Topologically sort them under the `referers' relation. That
|
||||
is, a < b iff a is in referers(b). This gives us the order in
|
||||
/* Topologically sort them under the `referrers' relation. That
|
||||
is, a < b iff a is in referrers(b). This gives us the order in
|
||||
which things can be deleted safely. */
|
||||
/* !!! when we have multiple output paths per derivation, this
|
||||
will not work anymore because we get cycles. */
|
||||
|
|
|
@ -19,7 +19,7 @@ void computeFSClosure(const Path & storePath,
|
|||
|
||||
PathSet references;
|
||||
if (flipDirection)
|
||||
queryReferers(noTxn, storePath, references);
|
||||
queryReferrers(noTxn, storePath, references);
|
||||
else
|
||||
queryReferences(noTxn, storePath, references);
|
||||
|
||||
|
|
|
@ -309,7 +309,7 @@ static string stripPrefix(const string & prefix, const string & s)
|
|||
}
|
||||
|
||||
|
||||
static PathSet getReferers(const Transaction & txn, const Path & storePath)
|
||||
static PathSet getReferrers(const Transaction & txn, const Path & storePath)
|
||||
{
|
||||
PathSet referrers;
|
||||
Strings keys;
|
||||
|
@ -338,13 +338,13 @@ void setReferences(const Transaction & txn, const Path & storePath,
|
|||
nixDB.setStrings(txn, dbReferences, storePath,
|
||||
Paths(references.begin(), references.end()));
|
||||
|
||||
/* Update the referers mappings of all new referenced paths. */
|
||||
/* Update the referrers mappings of all new referenced paths. */
|
||||
for (PathSet::const_iterator i = references.begin();
|
||||
i != references.end(); ++i)
|
||||
if (oldReferences2.find(*i) == oldReferences2.end())
|
||||
nixDB.setString(txn, dbReferrers, addPrefix(*i, storePath), "");
|
||||
|
||||
/* Remove referer mappings from paths that are no longer
|
||||
/* Remove referrer mappings from paths that are no longer
|
||||
references. */
|
||||
for (Paths::iterator i = oldReferences.begin();
|
||||
i != oldReferences.end(); ++i)
|
||||
|
@ -364,13 +364,13 @@ void queryReferences(const Transaction & txn,
|
|||
}
|
||||
|
||||
|
||||
void queryReferers(const Transaction & txn,
|
||||
const Path & storePath, PathSet & referers)
|
||||
void queryReferrers(const Transaction & txn,
|
||||
const Path & storePath, PathSet & referrers)
|
||||
{
|
||||
if (!isRealisablePath(txn, storePath))
|
||||
throw Error(format("path `%1%' is not valid") % storePath);
|
||||
PathSet referers2 = getReferers(txn, storePath);
|
||||
referers.insert(referers2.begin(), referers2.end());
|
||||
PathSet referrers2 = getReferrers(txn, storePath);
|
||||
referrers.insert(referrers2.begin(), referrers2.end());
|
||||
}
|
||||
|
||||
|
||||
|
@ -499,9 +499,9 @@ void clearSubstitutes()
|
|||
invalidatePath(txn, *i);
|
||||
}
|
||||
|
||||
/* !!! there should be no referers to any of the invalid
|
||||
/* !!! there should be no referrers to any of the invalid
|
||||
substitutable paths. This should be the case by construction
|
||||
(the only referers can be other invalid substitutable paths,
|
||||
(the only referrers can be other invalid substitutable paths,
|
||||
which have all been removed now). */
|
||||
|
||||
txn.commit();
|
||||
|
@ -587,13 +587,13 @@ void registerValidPaths(const Transaction & txn,
|
|||
|
||||
|
||||
/* Invalidate a path. The caller is responsible for checking that
|
||||
there are no referers. */
|
||||
there are no referrers. */
|
||||
static void invalidatePath(Transaction & txn, const Path & path)
|
||||
{
|
||||
debug(format("unregistering path `%1%'") % path);
|
||||
|
||||
/* Clear the `references' entry for this path, as well as the
|
||||
inverse `referers' entries, and the `derivers' entry; but only
|
||||
inverse `referrers' entries, and the `derivers' entry; but only
|
||||
if there are no substitutes for this path. This maintains the
|
||||
cleanup invariant. */
|
||||
if (querySubstitutes(txn, path).size() == 0) {
|
||||
|
@ -754,9 +754,9 @@ void deleteFromStore(const Path & _path)
|
|||
|
||||
Transaction txn(nixDB);
|
||||
if (isValidPathTxn(txn, path)) {
|
||||
PathSet referers = getReferers(txn, path);
|
||||
for (PathSet::iterator i = referers.begin();
|
||||
i != referers.end(); ++i)
|
||||
PathSet referrers = getReferrers(txn, path);
|
||||
for (PathSet::iterator i = referrers.begin();
|
||||
i != referrers.end(); ++i)
|
||||
if (*i != path && isValidPathTxn(txn, *i))
|
||||
throw Error(format("cannot delete path `%1%' because it is in use by path `%2%'") % path % *i);
|
||||
invalidatePath(txn, path);
|
||||
|
@ -817,7 +817,7 @@ void verifyStore(bool checkContents)
|
|||
}
|
||||
|
||||
/* Check the cleanup invariant: only usable paths can have
|
||||
`references', `referers', or `derivers' entries. */
|
||||
`references', `referrers', or `derivers' entries. */
|
||||
|
||||
/* Check the `derivers' table. */
|
||||
Paths deriversKeys;
|
||||
|
@ -860,7 +860,7 @@ void verifyStore(bool checkContents)
|
|||
{
|
||||
string dummy;
|
||||
if (!nixDB.queryString(txn, dbReferrers, addPrefix(*j, *i), dummy)) {
|
||||
printMsg(lvlError, format("missing referer mapping from `%1%' to `%2%'")
|
||||
printMsg(lvlError, format("missing referrer mapping from `%1%' to `%2%'")
|
||||
% *j % *i);
|
||||
nixDB.setString(txn, dbReferrers, addPrefix(*j, *i), "");
|
||||
}
|
||||
|
@ -873,26 +873,26 @@ void verifyStore(bool checkContents)
|
|||
}
|
||||
|
||||
#if 0 // !!!
|
||||
/* Check the `referers' table. */
|
||||
Paths referersKeys;
|
||||
nixDB.enumTable(txn, dbReferers, referersKeys);
|
||||
for (Paths::iterator i = referersKeys.begin();
|
||||
i != referersKeys.end(); ++i)
|
||||
/* Check the `referrers' table. */
|
||||
Paths referrersKeys;
|
||||
nixDB.enumTable(txn, dbReferrers, referrersKeys);
|
||||
for (Paths::iterator i = referrersKeys.begin();
|
||||
i != referrersKeys.end(); ++i)
|
||||
{
|
||||
if (usablePaths.find(*i) == usablePaths.end()) {
|
||||
printMsg(lvlError, format("found referers entry for unusable path `%1%'")
|
||||
printMsg(lvlError, format("found referrers entry for unusable path `%1%'")
|
||||
% *i);
|
||||
nixDB.delPair(txn, dbReferers, *i);
|
||||
nixDB.delPair(txn, dbReferrers, *i);
|
||||
}
|
||||
else {
|
||||
PathSet referers, newReferers;
|
||||
queryReferers(txn, *i, referers);
|
||||
for (PathSet::iterator j = referers.begin();
|
||||
j != referers.end(); ++j)
|
||||
PathSet referrers, newReferrers;
|
||||
queryReferrers(txn, *i, referrers);
|
||||
for (PathSet::iterator j = referrers.begin();
|
||||
j != referrers.end(); ++j)
|
||||
{
|
||||
Paths references;
|
||||
if (usablePaths.find(*j) == usablePaths.end()) {
|
||||
printMsg(lvlError, format("referer mapping from `%1%' to unusable `%2%'")
|
||||
printMsg(lvlError, format("referrer mapping from `%1%' to unusable `%2%'")
|
||||
% *i % *j);
|
||||
} else {
|
||||
nixDB.queryStrings(txn, dbReferences, *j, references);
|
||||
|
@ -901,12 +901,12 @@ void verifyStore(bool checkContents)
|
|||
% *j % *i);
|
||||
/* !!! repair by inserting *i into references */
|
||||
}
|
||||
else newReferers.insert(*j);
|
||||
else newReferrers.insert(*j);
|
||||
}
|
||||
}
|
||||
if (referers != newReferers)
|
||||
nixDB.setStrings(txn, dbReferers, *i,
|
||||
Paths(newReferers.begin(), newReferers.end()));
|
||||
if (referrers != newReferrers)
|
||||
nixDB.setStrings(txn, dbReferrers, *i,
|
||||
Paths(newReferrers.begin(), newReferrers.end()));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -123,8 +123,8 @@ void queryReferences(const Transaction & txn,
|
|||
|
||||
/* Queries the set of incoming FS references for a store path. The
|
||||
result is not cleared. */
|
||||
void queryReferers(const Transaction & txn,
|
||||
const Path & storePath, PathSet & referers);
|
||||
void queryReferrers(const Transaction & txn,
|
||||
const Path & storePath, PathSet & referrers);
|
||||
|
||||
/* Sets the deriver of a store path. Use with care! */
|
||||
void setDeriver(const Transaction & txn, const Path & storePath,
|
||||
|
|
|
@ -28,8 +28,8 @@ Query flags:
|
|||
--outputs: query the output paths of a Nix derivation (default)
|
||||
--requisites / -R: print all paths necessary to realise a path
|
||||
--references: print all paths referenced by the given path
|
||||
--referers: print all paths directly refering to the given path
|
||||
--referers-closure: print all paths (in)directly refering to the given path
|
||||
--referrers: print all paths directly refering to the given path
|
||||
--referrers-closure: print all paths (in)directly refering to the given path
|
||||
--tree: print a tree showing the dependency graph of the given paths
|
||||
--graph: print a dot graph rooted at given paths
|
||||
|
||||
|
|
|
@ -273,8 +273,8 @@ static void printTree(const Path & path,
|
|||
/* Perform various sorts of queries. */
|
||||
static void opQuery(Strings opFlags, Strings opArgs)
|
||||
{
|
||||
enum { qOutputs, qRequisites, qReferences, qReferers
|
||||
, qReferersClosure, qDeriver, qBinding, qHash
|
||||
enum { qOutputs, qRequisites, qReferences, qReferrers
|
||||
, qReferrersClosure, qDeriver, qBinding, qHash
|
||||
, qTree, qGraph } query = qOutputs;
|
||||
bool useOutput = false;
|
||||
bool includeOutputs = false;
|
||||
|
@ -286,8 +286,8 @@ static void opQuery(Strings opFlags, Strings opArgs)
|
|||
if (*i == "--outputs") query = qOutputs;
|
||||
else if (*i == "--requisites" || *i == "-R") query = qRequisites;
|
||||
else if (*i == "--references") query = qReferences;
|
||||
else if (*i == "--referers") query = qReferers;
|
||||
else if (*i == "--referers-closure") query = qReferersClosure;
|
||||
else if (*i == "--referrers" || *i == "--referers") query = qReferrers;
|
||||
else if (*i == "--referrers-closure" || *i == "--referers-closure") query = qReferrersClosure;
|
||||
else if (*i == "--deriver" || *i == "-d") query = qDeriver;
|
||||
else if (*i == "--binding" || *i == "-b") {
|
||||
if (opArgs.size() == 0)
|
||||
|
@ -320,8 +320,8 @@ static void opQuery(Strings opFlags, Strings opArgs)
|
|||
|
||||
case qRequisites:
|
||||
case qReferences:
|
||||
case qReferers:
|
||||
case qReferersClosure: {
|
||||
case qReferrers:
|
||||
case qReferrersClosure: {
|
||||
PathSet paths;
|
||||
for (Strings::iterator i = opArgs.begin();
|
||||
i != opArgs.end(); ++i)
|
||||
|
@ -330,8 +330,8 @@ static void opQuery(Strings opFlags, Strings opArgs)
|
|||
if (query == qRequisites)
|
||||
storePathRequisites(path, includeOutputs, paths);
|
||||
else if (query == qReferences) queryReferences(noTxn, path, paths);
|
||||
else if (query == qReferers) queryReferers(noTxn, path, paths);
|
||||
else if (query == qReferersClosure) computeFSClosure(path, paths, true);
|
||||
else if (query == qReferrers) queryReferrers(noTxn, path, paths);
|
||||
else if (query == qReferrersClosure) computeFSClosure(path, paths, true);
|
||||
}
|
||||
printPathSet(paths);
|
||||
break;
|
||||
|
|
|
@ -22,8 +22,8 @@ if echo "$deps" | grep -q "dependencies-input-1"; then exit 1; fi
|
|||
# Input-2 is retained.
|
||||
input2OutPath=$(echo "$deps" | grep "dependencies-input-2")
|
||||
|
||||
# The referers closure of input-2 should include outPath.
|
||||
$TOP/src/nix-store/nix-store -q --referers-closure "$input2OutPath" | grep "$outPath"
|
||||
# The referrers closure of input-2 should include outPath.
|
||||
$TOP/src/nix-store/nix-store -q --referrers-closure "$input2OutPath" | grep "$outPath"
|
||||
|
||||
# Check that the derivers are set properly.
|
||||
test $($TOP/src/nix-store/nix-store -q --deriver "$outPath") = "$drvPath"
|
||||
|
|
Loading…
Reference in a new issue