aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2020-03-04 13:55:15 +0100
committerEelco Dolstra <edolstra@gmail.com>2020-03-04 13:56:17 +0100
commitd37dc71e3cf077fa5d24a9bf8395deae21cc4410 (patch)
tree258c5c7d6e090f8453d727b71bb7c7576735f2a3
parent887030f211dcd062a73021b1cc289992502b35e4 (diff)
nix-build: Fix !<output> handling
This was broken by 22a754c091f765061f59bef5ce091268493bb138. https://hydra.nixos.org/eval/1573669
-rw-r--r--src/libstore/path.cc2
-rw-r--r--src/libstore/store-api.hh2
-rwxr-xr-xsrc/nix-build/nix-build.cc3
3 files changed, 4 insertions, 3 deletions
diff --git a/src/libstore/path.cc b/src/libstore/path.cc
index 70b919adc..9a28aa96a 100644
--- a/src/libstore/path.cc
+++ b/src/libstore/path.cc
@@ -64,7 +64,7 @@ std::optional<StorePath> Store::maybeParseStorePath(std::string_view path) const
}
}
-bool Store::isStorePath(const Path & path) const
+bool Store::isStorePath(std::string_view path) const
{
return (bool) maybeParseStorePath(path);
}
diff --git a/src/libstore/store-api.hh b/src/libstore/store-api.hh
index a1cfb314a..a000757fb 100644
--- a/src/libstore/store-api.hh
+++ b/src/libstore/store-api.hh
@@ -305,7 +305,7 @@ public:
/* Return true if ‘path’ is a store path, i.e. a direct child of
the Nix store. */
- bool isStorePath(const Path & path) const;
+ bool isStorePath(std::string_view path) const;
/* Chop off the parts after the top-level store name, e.g.,
/nix/store/abcd-foo/bar => /nix/store/abcd-foo. */
diff --git a/src/nix-build/nix-build.cc b/src/nix-build/nix-build.cc
index ff95ad787..27ec7d0fe 100755
--- a/src/nix-build/nix-build.cc
+++ b/src/nix-build/nix-build.cc
@@ -295,7 +295,8 @@ static void _main(int argc, char * * argv)
try {
absolute = canonPath(absPath(i), true);
} catch (Error & e) {};
- if (store->isStorePath(absolute) && std::regex_match(absolute, std::regex(".*\\.drv(!.*)?")))
+ auto [path, outputNames] = parsePathWithOutputs(absolute);
+ if (store->isStorePath(path) && hasSuffix(path, ".drv"))
drvs.push_back(DrvInfo(*state, store, absolute));
else
/* If we're in a #! script, interpret filenames