diff --git a/src/libutil/args.cc b/src/libutil/args.cc index b4177bf93..dfaf654ac 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 a2c9dcf68..b40207b3c 100644 --- a/src/nix/main.cc +++ b/src/nix/main.cc @@ -96,6 +96,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 @@ -485,10 +498,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; } @@ -525,17 +544,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;