diff options
-rw-r--r-- | apt-pkg/contrib/fileutl.cc | 6 | ||||
-rw-r--r-- | apt-pkg/deb/dpkgpm.cc | 29 | ||||
-rw-r--r-- | doc/apt.conf.5.xml | 12 | ||||
-rw-r--r-- | doc/examples/configure-index | 2 |
4 files changed, 40 insertions, 9 deletions
diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc index 69406a9bf..188bb87ee 100644 --- a/apt-pkg/contrib/fileutl.cc +++ b/apt-pkg/contrib/fileutl.cc @@ -104,7 +104,11 @@ bool RunScripts(const char *Cnf) { if (Opts->Value.empty() == true) continue; - + + if(_config->FindB("Debug::RunScripts", false) == true) + std::clog << "Running external script: '" + << Opts->Value << "'" << std::endl; + if (system(Opts->Value.c_str()) != 0) _exit(100+Count); } diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 5a5fff13b..c3e7e1d1d 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -399,10 +399,14 @@ bool pkgDPkgPM::SendPkgsInfo(FILE * const F, unsigned int const &Version) that are due to be installed. */ bool pkgDPkgPM::RunScriptsWithPkgs(const char *Cnf) { + bool result = true; + Configuration::Item const *Opts = _config->Tree(Cnf); if (Opts == 0 || Opts->Child == 0) return true; Opts = Opts->Child; + + sighandler_t old_sigpipe = signal(SIGPIPE, SIG_IGN); unsigned int Count = 1; for (; Opts != 0; Opts = Opts->Next, Count++) @@ -410,6 +414,10 @@ bool pkgDPkgPM::RunScriptsWithPkgs(const char *Cnf) if (Opts->Value.empty() == true) continue; + if(_config->FindB("Debug::RunScripts", false) == true) + std::clog << "Running external script with list of all .deb file: '" + << Opts->Value << "'" << std::endl; + // Determine the protocol version string OptSec = Opts->Value; string::size_type Pos; @@ -424,8 +432,10 @@ bool pkgDPkgPM::RunScriptsWithPkgs(const char *Cnf) std::set<int> KeepFDs; MergeKeepFdsFromConfiguration(KeepFDs); int Pipes[2]; - if (pipe(Pipes) != 0) - return _error->Errno("pipe","Failed to create IPC pipe to subprocess"); + if (pipe(Pipes) != 0) { + result = _error->Errno("pipe","Failed to create IPC pipe to subprocess"); + break; + } if (InfoFD != (unsigned)Pipes[0]) SetCloseExec(Pipes[0],true); else @@ -459,8 +469,10 @@ bool pkgDPkgPM::RunScriptsWithPkgs(const char *Cnf) } close(Pipes[0]); FILE *F = fdopen(Pipes[1],"w"); - if (F == 0) - return _error->Errno("fdopen","Faild to open new FD"); + if (F == 0) { + result = _error->Errno("fdopen","Faild to open new FD"); + break; + } // Feed it the filenames. if (Version <= 1) @@ -488,11 +500,14 @@ bool pkgDPkgPM::RunScriptsWithPkgs(const char *Cnf) fclose(F); // Clean up the sub process - if (ExecWait(Process,Opts->Value.c_str()) == false) - return _error->Error("Failure running script %s",Opts->Value.c_str()); + if (ExecWait(Process,Opts->Value.c_str()) == false) { + result = _error->Error("Failure running script %s",Opts->Value.c_str()); + break; + } } + signal(SIGPIPE, old_sigpipe); - return true; + return result; } /*}}}*/ // DPkgPM::DoStdin - Read stdin and pass to slave pty /*{{{*/ diff --git a/doc/apt.conf.5.xml b/doc/apt.conf.5.xml index 78f6a27a2..fcbf20dac 100644 --- a/doc/apt.conf.5.xml +++ b/doc/apt.conf.5.xml @@ -1184,6 +1184,18 @@ DPkg::TriggersPending "true";</literallayout></para> </listitem> </varlistentry> + <varlistentry> + <term><option>Debug::RunScripts</option></term> + <listitem> + <para> + Display the external commands that are called by apt hooks. + This includes e.g. the config options + <literal>DPkg::{Pre,Post}-Invoke</literal> or + <literal>APT::Update::{Pre,Post}-Invoke</literal>. + </para> + </listitem> + </varlistentry> + <!-- 2009/07/11 Currently used nowhere. The corresponding code is commented. <varlistentry> diff --git a/doc/examples/configure-index b/doc/examples/configure-index index 020f0d2ce..2d9f829ba 100644 --- a/doc/examples/configure-index +++ b/doc/examples/configure-index @@ -450,7 +450,7 @@ Debug aptcdrom "false"; // Show found package files IdentCdrom "false"; acquire::netrc "false"; // netrc parser - + RunScripts "false"; // debug invocation of external scripts } pkgCacheGen::Essential "native"; // other modes: all, none, installed |