diff --git a/src/libutil/args.cc b/src/libutil/args.cc index d8d004e6f..2c27ed862 100644 --- a/src/libutil/args.cc +++ b/src/libutil/args.cc @@ -236,7 +236,8 @@ void ParseQuoted::operator()(std::shared_ptr &state, Strings & r) { assert(false); } -Strings parseShebangContent(std::string_view s) { +Strings parseShebangContent(std::string_view s) +{ Strings result; std::shared_ptr parserState(std::make_shared(ParseUnquoted(s))); diff --git a/src/nix/main.cc b/src/nix/main.cc index 6144f746f..13d669795 100644 --- a/src/nix/main.cc +++ b/src/nix/main.cc @@ -84,6 +84,19 @@ static bool haveInternet() #endif } +static void disableNet() +{ + // FIXME: should check for command line overrides only. + if (!settings.useSubstitutes.overridden) + settings.useSubstitutes = false; + if (!settings.tarballTtl.overridden) + settings.tarballTtl = std::numeric_limits::max(); + if (!fileTransferSettings.tries.overridden) + fileTransferSettings.tries = 0; + if (!fileTransferSettings.connectTimeout.overridden) + fileTransferSettings.connectTimeout = 1; +} + std::string programPath; struct NixArgs : virtual MultiCommand, virtual MixCommonArgs, virtual RootArgs @@ -452,10 +465,16 @@ void mainWrapped(int argc, char * * argv) } }); + if (getEnv("NIX_GET_COMPLETIONS")) + /* Avoid fetching stuff during tab completion. We have to this + early because we haven't checked `haveInternet()` yet + (below). */ + disableNet(); + try { auto isNixCommand = std::regex_search(programName, std::regex("nix$")); auto allowShebang = isNixCommand && argc > 1; - args.parseCmdline(argvToStrings(argc, argv),allowShebang); + args.parseCmdline(argvToStrings(argc, argv), allowShebang); } catch (UsageError &) { if (!args.helpRequested && !args.completions) throw; } @@ -494,17 +513,8 @@ void mainWrapped(int argc, char * * argv) args.useNet = false; } - if (!args.useNet) { - // FIXME: should check for command line overrides only. - if (!settings.useSubstitutes.overridden) - settings.useSubstitutes = false; - if (!settings.tarballTtl.overridden) - settings.tarballTtl = std::numeric_limits::max(); - if (!fileTransferSettings.tries.overridden) - fileTransferSettings.tries = 0; - if (!fileTransferSettings.connectTimeout.overridden) - fileTransferSettings.connectTimeout = 1; - } + if (!args.useNet) + disableNet(); if (args.refresh) { settings.tarballTtl = 0;