summaryrefslogtreecommitdiff
path: root/apt-pkg/deb
diff options
context:
space:
mode:
authorMichael Vogt <michael.vogt@ubuntu.com>2007-08-03 18:43:46 +0200
committerMichael Vogt <michael.vogt@ubuntu.com>2007-08-03 18:43:46 +0200
commit8ecd1fedeace0e22f96259e250094006c673d065 (patch)
tree19e7725c5b635b55b92459418bd8654803d79e10 /apt-pkg/deb
parenta176a0794da2ffb2025076c0ec0e9e6750a560a6 (diff)
- when writting apport reports, attach the dpkg
terminal log too
Diffstat (limited to 'apt-pkg/deb')
-rw-r--r--apt-pkg/deb/dpkgpm.cc29
-rw-r--r--apt-pkg/deb/dpkgpm.h5
2 files changed, 28 insertions, 6 deletions
diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc
index 08c95b7a4..6cb444ef1 100644
--- a/apt-pkg/deb/dpkgpm.cc
+++ b/apt-pkg/deb/dpkgpm.cc
@@ -44,7 +44,8 @@ using namespace std;
// ---------------------------------------------------------------------
/* */
pkgDPkgPM::pkgDPkgPM(pkgDepCache *Cache)
- : pkgPackageManager(Cache), dpkgbuf_pos(0), PackagesTotal(0), PackagesDone(0)
+ : pkgPackageManager(Cache), dpkgbuf_pos(0), PackagesTotal(0),
+ PackagesDone(0), term_out(NULL)
{
}
/*}}}*/
@@ -351,7 +352,7 @@ void pkgDPkgPM::DoStdin(int master)
/*
* read the terminal pty and write log
*/
-void pkgDPkgPM::DoTerminalPty(int master, FILE *term_out)
+void pkgDPkgPM::DoTerminalPty(int master)
{
char term_buf[1024] = {0,};
@@ -569,7 +570,6 @@ bool pkgDPkgPM::Go(int OutStatusFd)
return _error->Error(_("Directory '%s' missing"), logdir.c_str());
string logfile_name = flCombine(logdir,
_config->Find("Dir::Log::Terminal"));
- FILE *term_out = NULL;
if (!logfile_name.empty())
{
term_out = fopen(logfile_name.c_str(),"a");
@@ -812,7 +812,7 @@ bool pkgDPkgPM::Go(int OutStatusFd)
continue;
if(FD_ISSET(master, &rfds))
- DoTerminalPty(master, term_out);
+ DoTerminalPty(master);
if(FD_ISSET(0, &rfds))
DoStdin(master);
if(FD_ISSET(_dpkgin, &rfds))
@@ -956,6 +956,27 @@ void pkgDPkgPM::WriteApportReport(const char *pkgpath, const char *errormsg)
fprintf(report, "Package: %s %s\n", pkgname.c_str(), pkgver.c_str());
fprintf(report, "SourcePackage: %s\n", srcpkgname.c_str());
fprintf(report, "ErrorMessage:\n %s\n", errormsg);
+
+ // ensure that the log is flushed
+ if(term_out)
+ fflush(term_out);
+
+ // attach terminal log it if we have it
+ string logfile_name = _config->FindFile("Dir::Log::Terminal");
+ if (!logfile_name.empty())
+ {
+ FILE *log = NULL;
+ char buf[1024];
+
+ fprintf(report, "DpkgTerminalLog:\n");
+ log = fopen(logfile_name.c_str(),"r");
+ if(log != NULL)
+ {
+ while( fgets(buf, sizeof(buf), log) != NULL)
+ fprintf(report, " %s", buf);
+ fclose(log);
+ }
+ }
fclose(report);
}
/*}}}*/
diff --git a/apt-pkg/deb/dpkgpm.h b/apt-pkg/deb/dpkgpm.h
index f8e9e44a8..222add98f 100644
--- a/apt-pkg/deb/dpkgpm.h
+++ b/apt-pkg/deb/dpkgpm.h
@@ -26,7 +26,8 @@ class pkgDPkgPM : public pkgPackageManager
// the buffer we use for the dpkg status-fd reading
char dpkgbuf[1024];
int dpkgbuf_pos;
-
+ FILE *term_out;
+
protected:
int pkgFailures;
@@ -71,7 +72,7 @@ class pkgDPkgPM : public pkgPackageManager
// input processing
void DoStdin(int master);
- void DoTerminalPty(int master, FILE *out);
+ void DoTerminalPty(int master);
void DoDpkgStatusFd(int statusfd, int OutStatusFd);
void ProcessDpkgStatusLine(int OutStatusFd, char *line);