mirror of
https://github.com/NixOS/nix.git
synced 2025-12-03 23:51:00 +01:00
Merge pull request #13486 from fzakaria/issue-12935
Add helpful messages when file:// used as tarball
This commit is contained in:
commit
de1d91f711
1 changed files with 19 additions and 0 deletions
|
|
@ -111,6 +111,25 @@ static DownloadTarballResult downloadTarball_(
|
||||||
const Headers & headers,
|
const Headers & headers,
|
||||||
const std::string & displayPrefix)
|
const std::string & displayPrefix)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
// Some friendly error messages for common mistakes.
|
||||||
|
// Namely lets catch when the url is a local file path, but
|
||||||
|
// it is not in fact a tarball.
|
||||||
|
if (url.rfind("file://", 0) == 0) {
|
||||||
|
// Remove "file://" prefix to get the local file path
|
||||||
|
std::string localPath = url.substr(7);
|
||||||
|
if (!std::filesystem::exists(localPath)) {
|
||||||
|
throw Error("tarball '%s' does not exist.", localPath);
|
||||||
|
}
|
||||||
|
if (std::filesystem::is_directory(localPath)) {
|
||||||
|
if (std::filesystem::exists(localPath + "/.git")) {
|
||||||
|
throw Error(
|
||||||
|
"tarball '%s' is a git repository, not a tarball. Please use `git+file` as the scheme.", localPath);
|
||||||
|
}
|
||||||
|
throw Error("tarball '%s' is a directory, not a file.", localPath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Cache::Key cacheKey{"tarball", {{"url", url}}};
|
Cache::Key cacheKey{"tarball", {{"url", url}}};
|
||||||
|
|
||||||
auto cached = settings.getCache()->lookupExpired(cacheKey);
|
auto cached = settings.getCache()->lookupExpired(cacheKey);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue