#include "misc.hh"
#include "store-api.hh"
#include "local-store.hh"
#include "globals.hh"
namespace nix {
Derivation derivationFromPath(StoreAPI & store, const Path & drvPath)
{
assertStorePath(drvPath);
store.ensurePath(drvPath);
return readDerivation(drvPath);
}
void computeFSClosure(StoreAPI & store, const Path & path,
PathSet & paths, bool flipDirection, bool includeOutputs, bool includeDerivers)
{
if (paths.find(path) != paths.end()) return;
paths.insert(path);
PathSet edges;
if (flipDirection) {
store.queryReferrers(path, edges);
if (includeOutputs) {
PathSet derivers = store.queryValidDerivers(path);
foreach (PathSet::iterator, i, derivers)
edges.insert(*i);
}
if (includeDerivers && isDerivation(path)) {
PathSet outputs = store.queryDerivationOutputs(path);
foreach (PathSet::iterator, i, outputs)
if (store.isValidPath(*i) && store.queryDeriver(*i) == path)
edges.insert(*i);
}
} else {
store.queryReferences(path, edges);
if (includeOutputs && isDerivation(path)) {
PathSet outputs = store.queryDerivationOutputs(path);
foreach (PathSet::iterator, i, outputs)
if (store.isValidPath(*i)) edges.insert(*i);
}
if (includeDerivers) {
Path deriver = store.queryDeriver(path);
if (store.isValidPath(deriver)) edges.insert(deriver);
}
}
foreach (PathSet::iterator, i, edges)
computeFSClosure(store, *i, paths, flipDirection, includeOutputs, includeDerivers);
}
static void dfsVisit(StoreAPI & store, const PathSet & paths,
const Path & path, PathSet & visited, Paths & sorted,
PathSet & parents)
{
if (parents.find(path) != parents.end())
throw BuildError(format("cycle detected in the references of `%1%'") % path);
if (visited.find(path) != visited.end()) return;
visited.insert(path);
parents.insert(path);
PathSet references;
if (store.isValidPath(path))
store.queryReferences(path, references);
foreach (PathSet::iterator, i, references)
/* Don't traverse into paths that don't exist. That can
happen due to substitutes for non-existent paths. */
if (*i != path && paths.find(*i) != paths.end())
dfsVisit(store, paths, *i, visited, sorted, parents);
sorted.push_front(path);
parents.erase(path);
}
Paths topoSortPaths(StoreAPI & store, const PathSet & paths)
{
Paths sorted;
PathSet visited, parents;
foreach (PathSet::const_iterator, i, paths)
dfsVisit(store, paths, *i, visited, sorted, parents);
return sorted;
}
}
d>gnu: unrtf: Update to 0.21.10....* gnu/packages/unrtf.scm (unrtf): Update to 0.21.10.
[source]: Remove patch, remove snippet.
[license]: Update to gpl3+.
* gnu/packages/patches/unrtf-CVE-2016-10091.patch: Remove file.
* gnu/local.mk (dist_patch_DATA): Remove it.
Efraim Flashner |
2018-03-16 | gnu: All snippets report errors using exceptions, else return #t....* gnu/packages/admin.scm, gnu/packages/algebra.scm, gnu/packages/audio.scm,
gnu/packages/backup.scm, gnu/packages/base.scm,
gnu/packages/bioinformatics.scm, gnu/packages/cdrom.scm,
gnu/packages/chez.scm, gnu/packages/code.scm, gnu/packages/compression.scm,
gnu/packages/cross-base.scm, gnu/packages/crypto.scm, gnu/packages/cups.scm,
gnu/packages/databases.scm, gnu/packages/dns.scm, gnu/packages/emacs.scm,
gnu/packages/emulators.scm, gnu/packages/engineering.scm,
gnu/packages/enlightenment.scm, gnu/packages/fpga.scm,
gnu/packages/freedesktop.scm, gnu/packages/ftp.scm, gnu/packages/games.scm,
gnu/packages/gcc.scm, gnu/packages/geo.scm, gnu/packages/ghostscript.scm,
gnu/packages/gl.scm, gnu/packages/glib.scm, gnu/packages/gnome.scm,
gnu/packages/gnuzilla.scm, gnu/packages/graphics.scm, gnu/packages/gtk.scm,
gnu/packages/guile.scm, gnu/packages/irc.scm, gnu/packages/java.scm,
gnu/packages/kerberos.scm, gnu/packages/linux.scm, gnu/packages/lisp.scm,
gnu/packages/lxde.scm, gnu/packages/machine-learning.scm,
gnu/packages/mail.scm, gnu/packages/maths.scm, gnu/packages/messaging.scm,
gnu/packages/monitoring.scm, gnu/packages/mp3.scm, gnu/packages/music.scm,
gnu/packages/netpbm.scm, gnu/packages/networking.scm, gnu/packages/node.scm,
gnu/packages/nvi.scm, gnu/packages/ocaml.scm, gnu/packages/pdf.scm,
gnu/packages/perl.scm, gnu/packages/php.scm, gnu/packages/plotutils.scm,
gnu/packages/pretty-print.scm, gnu/packages/profiling.scm,
gnu/packages/pulseaudio.scm, gnu/packages/python-crypto.scm,
gnu/packages/python.scm, gnu/packages/qt.scm, gnu/packages/robotics.scm,
gnu/packages/sawfish.scm, gnu/packages/scanner.scm, gnu/packages/scheme.scm,
gnu/packages/scribus.scm, gnu/packages/sdl.scm,
gnu/packages/serialization.scm, gnu/packages/shells.scm,
gnu/packages/slang.scm, gnu/packages/smalltalk.scm, gnu/packages/ssh.scm,
gnu/packages/sync.scm, gnu/packages/syncthing.scm, gnu/packages/tbb.scm,
gnu/packages/terminals.scm, gnu/packages/texinfo.scm,
gnu/packages/text-editors.scm, gnu/packages/textutils.scm,
gnu/packages/tls.scm, gnu/packages/unrtf.scm,
gnu/packages/version-control.scm, gnu/packages/video.scm,
gnu/packages/vpn.scm, gnu/packages/web.scm, gnu/packages/wm.scm,
gnu/packages/wxwidgets.scm, gnu/packages/xdisorg.scm, gnu/packages/xorg.scm:
In all snippets, report errors using exceptions, or else return #t.
| Mark H Weaver |
'msg-tooltip'>* guix/graph.scm (shortest-path): New procedure.
* tests/graph.scm ("shortest-path, packages + derivations")
("shortest-path, reverse packages")
("shortest-path, references"): New tests.
Ludovic Courtès |
2020-05-11 | graph: reference/referrer node types work with graph traversal....The graph traversal procedures in (guix graph) assume that nodes can be
compared with 'eq?', which was not the case for nodes of
%REFERENCE-NODE-TYPE and %REFERRER-NODE-TYPE (strings).
* guix/scripts/graph.scm (intern): New procedure.
(ensure-store-items, references*)
(%reference-node-type, non-derivation-referrers)
(%referrer-node-type): Use it on all store items.
* tests/graph.scm ("node-transitive-edges, references"): New test.
| Ludovic Courtès |
2020-02-05 | tests: Adjust reverse-bag graph test to recent OCaml changes....This is a followup to 87858bc526a9d577760f55d05a51cb56630f845b.
Partly fixes <https://bugs.gnu.org/39374>.
Reported by Ellen Papsch <ellen.papsch@wine-logistix.de>.
* tests/graph.scm ("reverse bag DAG"): Adjust test to latest OCaml
changes.
| Ludovic Courtès |