mirror of
https://github.com/NixOS/nix
synced 2025-06-25 14:51:16 +02:00
Merge pull request #12492 from xokdvium/refactor/move-show-man-page-to-nix-cli
Move code related to NIX_MAN_DIR from libstore to nix-cli
This commit is contained in:
commit
f55eb06d76
17 changed files with 79 additions and 25 deletions
|
@ -315,20 +315,6 @@ void printVersion(const std::string & programName)
|
||||||
throw Exit();
|
throw Exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void showManPage(const std::string & name)
|
|
||||||
{
|
|
||||||
restoreProcessContext();
|
|
||||||
setEnv("MANPATH", settings.nixManDir.c_str());
|
|
||||||
execlp("man", "man", name.c_str(), nullptr);
|
|
||||||
if (errno == ENOENT) {
|
|
||||||
// Not SysError because we don't want to suffix the errno, aka No such file or directory.
|
|
||||||
throw Error("The '%1%' command was not found, but it is needed for '%2%' and some other '%3%' commands' help text. Perhaps you could install the '%1%' command?", "man", name.c_str(), "nix-*");
|
|
||||||
}
|
|
||||||
throw SysError("command 'man %1%' failed", name.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int handleExceptions(const std::string & programName, std::function<void()> fun)
|
int handleExceptions(const std::string & programName, std::function<void()> fun)
|
||||||
{
|
{
|
||||||
ReceiveInterrupts receiveInterrupts; // FIXME: need better place for this
|
ReceiveInterrupts receiveInterrupts; // FIXME: need better place for this
|
||||||
|
|
|
@ -70,11 +70,6 @@ struct LegacyArgs : public MixCommonArgs, public RootArgs
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Show the manual page for the specified program.
|
|
||||||
*/
|
|
||||||
void showManPage(const std::string & name);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The constructor of this class starts a pager if standard output is a
|
* The constructor of this class starts a pager if standard output is a
|
||||||
* terminal and $PAGER is set. Standard output is redirected to the
|
* terminal and $PAGER is set. Standard output is redirected to the
|
||||||
|
|
|
@ -65,7 +65,6 @@ Settings::Settings()
|
||||||
, nixStateDir(canonPath(getEnvNonEmpty("NIX_STATE_DIR").value_or(NIX_STATE_DIR)))
|
, nixStateDir(canonPath(getEnvNonEmpty("NIX_STATE_DIR").value_or(NIX_STATE_DIR)))
|
||||||
, nixConfDir(canonPath(getEnvNonEmpty("NIX_CONF_DIR").value_or(NIX_CONF_DIR)))
|
, nixConfDir(canonPath(getEnvNonEmpty("NIX_CONF_DIR").value_or(NIX_CONF_DIR)))
|
||||||
, nixUserConfFiles(getUserConfigFiles())
|
, nixUserConfFiles(getUserConfigFiles())
|
||||||
, nixManDir(canonPath(NIX_MAN_DIR))
|
|
||||||
, nixDaemonSocketFile(canonPath(getEnvNonEmpty("NIX_DAEMON_SOCKET_PATH").value_or(nixStateDir + DEFAULT_SOCKET_PATH)))
|
, nixDaemonSocketFile(canonPath(getEnvNonEmpty("NIX_DAEMON_SOCKET_PATH").value_or(nixStateDir + DEFAULT_SOCKET_PATH)))
|
||||||
{
|
{
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
|
|
|
@ -84,11 +84,6 @@ public:
|
||||||
*/
|
*/
|
||||||
std::vector<Path> nixUserConfFiles;
|
std::vector<Path> nixUserConfFiles;
|
||||||
|
|
||||||
/**
|
|
||||||
* The directory where the man pages are stored.
|
|
||||||
*/
|
|
||||||
Path nixManDir;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* File name of the socket the daemon listens to.
|
* File name of the socket the daemon listens to.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include "users.hh"
|
#include "users.hh"
|
||||||
#include "network-proxy.hh"
|
#include "network-proxy.hh"
|
||||||
#include "compatibility-settings.hh"
|
#include "compatibility-settings.hh"
|
||||||
|
#include "man-pages.hh"
|
||||||
|
|
||||||
using namespace nix;
|
using namespace nix;
|
||||||
using namespace std::string_literals;
|
using namespace std::string_literals;
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include "users.hh"
|
#include "users.hh"
|
||||||
#include "tarball.hh"
|
#include "tarball.hh"
|
||||||
#include "self-exe.hh"
|
#include "self-exe.hh"
|
||||||
|
#include "man-pages.hh"
|
||||||
|
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <regex>
|
#include <regex>
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include "shared.hh"
|
#include "shared.hh"
|
||||||
#include "globals.hh"
|
#include "globals.hh"
|
||||||
#include "legacy.hh"
|
#include "legacy.hh"
|
||||||
|
#include "man-pages.hh"
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <cerrno>
|
#include <cerrno>
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#include "realisation.hh"
|
#include "realisation.hh"
|
||||||
#include "store-api.hh"
|
#include "store-api.hh"
|
||||||
#include "legacy.hh"
|
#include "legacy.hh"
|
||||||
|
#include "man-pages.hh"
|
||||||
|
|
||||||
using namespace nix;
|
using namespace nix;
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include "legacy.hh"
|
#include "legacy.hh"
|
||||||
#include "eval-settings.hh" // for defexpr
|
#include "eval-settings.hh" // for defexpr
|
||||||
#include "terminal.hh"
|
#include "terminal.hh"
|
||||||
|
#include "man-pages.hh"
|
||||||
|
|
||||||
#include <cerrno>
|
#include <cerrno>
|
||||||
#include <ctime>
|
#include <ctime>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include "local-fs-store.hh"
|
#include "local-fs-store.hh"
|
||||||
#include "common-eval-args.hh"
|
#include "common-eval-args.hh"
|
||||||
#include "legacy.hh"
|
#include "legacy.hh"
|
||||||
|
#include "man-pages.hh"
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include "legacy.hh"
|
#include "legacy.hh"
|
||||||
#include "posix-source-accessor.hh"
|
#include "posix-source-accessor.hh"
|
||||||
#include "path-with-outputs.hh"
|
#include "path-with-outputs.hh"
|
||||||
|
#include "man-pages.hh"
|
||||||
|
|
||||||
#ifndef _WIN32 // TODO implement on Windows or provide allowed-to-noop interface
|
#ifndef _WIN32 // TODO implement on Windows or provide allowed-to-noop interface
|
||||||
# include "local-store.hh"
|
# include "local-store.hh"
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include "git.hh"
|
#include "git.hh"
|
||||||
#include "posix-source-accessor.hh"
|
#include "posix-source-accessor.hh"
|
||||||
#include "misc-store-flags.hh"
|
#include "misc-store-flags.hh"
|
||||||
|
#include "man-pages.hh"
|
||||||
|
|
||||||
using namespace nix;
|
using namespace nix;
|
||||||
|
|
||||||
|
|
29
src/nix/man-pages.cc
Normal file
29
src/nix/man-pages.cc
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
#include "man-pages.hh"
|
||||||
|
#include "file-system.hh"
|
||||||
|
#include "current-process.hh"
|
||||||
|
#include "environment-variables.hh"
|
||||||
|
|
||||||
|
namespace nix {
|
||||||
|
|
||||||
|
std::filesystem::path getNixManDir()
|
||||||
|
{
|
||||||
|
return canonPath(NIX_MAN_DIR);
|
||||||
|
}
|
||||||
|
|
||||||
|
void showManPage(const std::string & name)
|
||||||
|
{
|
||||||
|
restoreProcessContext();
|
||||||
|
setEnv("MANPATH", getNixManDir().c_str());
|
||||||
|
execlp("man", "man", name.c_str(), nullptr);
|
||||||
|
if (errno == ENOENT) {
|
||||||
|
// Not SysError because we don't want to suffix the errno, aka No such file or directory.
|
||||||
|
throw Error(
|
||||||
|
"The '%1%' command was not found, but it is needed for '%2%' and some other '%3%' commands' help text. Perhaps you could install the '%1%' command?",
|
||||||
|
"man",
|
||||||
|
name.c_str(),
|
||||||
|
"nix-*");
|
||||||
|
}
|
||||||
|
throw SysError("command 'man %1%' failed", name.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
28
src/nix/man-pages.hh
Normal file
28
src/nix/man-pages.hh
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
#pragma once
|
||||||
|
///@file
|
||||||
|
|
||||||
|
#include <filesystem>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace nix {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get path to the nix manual dir.
|
||||||
|
*
|
||||||
|
* Nix relies on the man pages being available at a NIX_MAN_DIR for
|
||||||
|
* displaying help messaged for legacy cli.
|
||||||
|
*
|
||||||
|
* NIX_MAN_DIR is a compile-time parameter, so man pages are unlikely to work
|
||||||
|
* for cases when the nix executable is installed out-of-store or as a static binary.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
std::filesystem::path getNixManDir();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the manual page for the specified program.
|
||||||
|
*
|
||||||
|
* @param name Name of the man item.
|
||||||
|
*/
|
||||||
|
void showManPage(const std::string & name);
|
||||||
|
|
||||||
|
}
|
|
@ -90,6 +90,7 @@ nix_sources = [config_h] + files(
|
||||||
'ls.cc',
|
'ls.cc',
|
||||||
'main.cc',
|
'main.cc',
|
||||||
'make-content-addressed.cc',
|
'make-content-addressed.cc',
|
||||||
|
'man-pages.cc',
|
||||||
'nar.cc',
|
'nar.cc',
|
||||||
'optimise-store.cc',
|
'optimise-store.cc',
|
||||||
'path-from-hash-part.cc',
|
'path-from-hash-part.cc',
|
||||||
|
@ -182,6 +183,16 @@ if host_machine.system() != 'windows'
|
||||||
]
|
]
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
fs = import('fs')
|
||||||
|
prefix = get_option('prefix')
|
||||||
|
|
||||||
|
mandir = get_option('mandir')
|
||||||
|
mandir = fs.is_absolute(mandir) ? mandir : prefix / mandir
|
||||||
|
|
||||||
|
cpp_args= [
|
||||||
|
'-DNIX_MAN_DIR="@0@"'.format(mandir)
|
||||||
|
]
|
||||||
|
|
||||||
include_dirs = [include_directories('.')]
|
include_dirs = [include_directories('.')]
|
||||||
|
|
||||||
this_exe = executable(
|
this_exe = executable(
|
||||||
|
@ -189,6 +200,7 @@ this_exe = executable(
|
||||||
sources,
|
sources,
|
||||||
dependencies : deps_private_subproject + deps_private + deps_other,
|
dependencies : deps_private_subproject + deps_private + deps_other,
|
||||||
include_directories : include_dirs,
|
include_directories : include_dirs,
|
||||||
|
cpp_args : cpp_args,
|
||||||
link_args: linker_export_flags,
|
link_args: linker_export_flags,
|
||||||
install : true,
|
install : true,
|
||||||
)
|
)
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include "posix-source-accessor.hh"
|
#include "posix-source-accessor.hh"
|
||||||
#include "misc-store-flags.hh"
|
#include "misc-store-flags.hh"
|
||||||
#include "terminal.hh"
|
#include "terminal.hh"
|
||||||
|
#include "man-pages.hh"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
#include "finally.hh"
|
#include "finally.hh"
|
||||||
#include "legacy.hh"
|
#include "legacy.hh"
|
||||||
#include "daemon.hh"
|
#include "daemon.hh"
|
||||||
|
#include "man-pages.hh"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <climits>
|
#include <climits>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue