From c4f98941ed7e5e07786d92fc0be4435878f9b3cd Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 4 Aug 2008 12:29:04 +0000 Subject: [PATCH] * nix-env --dry-run: show the total size of the substituter downloads. --- src/libstore/local-store.cc | 5 ++++- src/libstore/misc.cc | 6 +++++- src/libstore/misc.hh | 3 ++- src/nix-env/nix-env.cc | 6 ++++-- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc index 6926c49370..141c7a8529 100644 --- a/src/libstore/local-store.cc +++ b/src/libstore/local-store.cc @@ -565,7 +565,10 @@ bool LocalStore::querySubstitutablePathInfo(const Path & path, Path p; getline(*run.from, p); info.references.insert(p); } - info.downloadSize = 0; + getline(*run.from, s); + long long size; + if (!string2Int(s, size)) abort(); + info.downloadSize = size; return true; } } diff --git a/src/libstore/misc.cc b/src/libstore/misc.cc index 1759f521cc..85197adcf0 100644 --- a/src/libstore/misc.cc +++ b/src/libstore/misc.cc @@ -46,8 +46,11 @@ Path findOutput(const Derivation & drv, string id) void queryMissing(const PathSet & targets, - PathSet & willBuild, PathSet & willSubstitute, PathSet & unknown) + PathSet & willBuild, PathSet & willSubstitute, PathSet & unknown, + unsigned long long & downloadSize) { + downloadSize = 0; + PathSet todo(targets.begin(), targets.end()), done; while (!todo.empty()) { @@ -86,6 +89,7 @@ void queryMissing(const PathSet & targets, SubstitutablePathInfo info; if (store->querySubstitutablePathInfo(p, info)) { willSubstitute.insert(p); + downloadSize += info.downloadSize; todo.insert(info.references.begin(), info.references.end()); } else unknown.insert(p); diff --git a/src/libstore/misc.hh b/src/libstore/misc.hh index 33d81ed4a0..f3aa34076c 100644 --- a/src/libstore/misc.hh +++ b/src/libstore/misc.hh @@ -29,7 +29,8 @@ Path findOutput(const Derivation & drv, string id); derivations that will be built, and the set of output paths that will be substituted. */ void queryMissing(const PathSet & targets, - PathSet & willBuild, PathSet & willSubstitute, PathSet & unknown); + PathSet & willBuild, PathSet & willSubstitute, PathSet & unknown, + unsigned long long & downloadSize); } diff --git a/src/nix-env/nix-env.cc b/src/nix-env/nix-env.cc index ee870f6906..085d83a5b9 100644 --- a/src/nix-env/nix-env.cc +++ b/src/nix-env/nix-env.cc @@ -540,7 +540,8 @@ static void printMissing(EvalState & state, const DrvInfos & elems) targets.insert(i->queryOutPath(state)); } - queryMissing(targets, willBuild, willSubstitute, unknown); + unsigned long long downloadSize; + queryMissing(targets, willBuild, willSubstitute, unknown, downloadSize); if (!willBuild.empty()) { printMsg(lvlInfo, format("the following derivations will be built:")); @@ -549,7 +550,8 @@ static void printMissing(EvalState & state, const DrvInfos & elems) } if (!willSubstitute.empty()) { - printMsg(lvlInfo, format("the following paths will be downloaded/copied:")); + printMsg(lvlInfo, format("the following paths will be downloaded/copied (%.2f MiB):") % + (downloadSize / (1024.0 * 1024.0))); foreach (PathSet::iterator, i, willSubstitute) printMsg(lvlInfo, format(" %1%") % *i); }