Skip to content

Commit

Permalink
nix run: Respect propagated-user-env-packages
Browse files Browse the repository at this point in the history
Also, add $path/bin to $PATH even if it doesn't exist. This makes
'man' work properly (since it looks for ../share/man relative to $PATH
entries).
  • Loading branch information
edolstra committed Aug 9, 2018
1 parent a0b971d commit c87f4b9
Showing 1 changed file with 21 additions and 2 deletions.
23 changes: 21 additions & 2 deletions src/nix/run.cc
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
#include <sys/mount.h>
#endif

#include <queue>

using namespace nix;

std::string chrootHelperName = "__run_in_chroot";
Expand Down Expand Up @@ -121,10 +123,27 @@ struct CmdRun : InstallablesCommand
unsetenv(var.c_str());
}

std::unordered_set<Path> done;
std::queue<Path> todo;
for (auto & path : outPaths) todo.push(path);

auto unixPath = tokenizeString<Strings>(getEnv("PATH"), ":");
for (auto & path : outPaths)
if (accessor->stat(path + "/bin").type != FSAccessor::tMissing)

while (!todo.empty()) {
Path path = todo.front();
todo.pop();
if (!done.insert(path).second) continue;

if (true)
unixPath.push_front(path + "/bin");

auto propPath = path + "/nix-support/propagated-user-env-packages";
if (accessor->stat(propPath).type == FSAccessor::tRegular) {
for (auto & p : tokenizeString<Paths>(readFile(propPath)))
todo.push(p);
}
}

setenv("PATH", concatStringsSep(":", unixPath).c_str(), 1);

std::string cmd = *command.begin();
Expand Down

0 comments on commit c87f4b9

Please sign in to comment.