summaryrefslogtreecommitdiff
path: root/apt-pkg/deb
diff options
context:
space:
mode:
authorMichael Vogt <michael.vogt@ubuntu.com>2010-01-26 11:57:29 +0100
committerMichael Vogt <michael.vogt@ubuntu.com>2010-01-26 11:57:29 +0100
commita29b2c0b9c4e7b1c36433c9c6dd5d24697f9c4b6 (patch)
treeffc56c0f8c0dd1a8336aecf82a57acad04d9519a /apt-pkg/deb
parent7ec263803c488d90cc72ce46d04d9f5923aa093d (diff)
Change history branch so that it does not break the
apt ABI for the pkgPackageManager interface (can be reverted on the next ABI break)
Diffstat (limited to 'apt-pkg/deb')
-rw-r--r--apt-pkg/deb/dpkgpm.cc34
-rw-r--r--apt-pkg/deb/dpkgpm.h4
2 files changed, 24 insertions, 14 deletions
diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc
index 2f84a5a87..e928776af 100644
--- a/apt-pkg/deb/dpkgpm.cc
+++ b/apt-pkg/deb/dpkgpm.cc
@@ -562,7 +562,7 @@ void pkgDPkgPM::DoDpkgStatusFd(int statusfd, int OutStatusFd)
}
/*}}}*/
// DPkgPM::WriteHistoryTag /*{{{*/
-void pkgDPkgPM::WriteHistoryTag(string tag, string value)
+void pkgDPkgPM::WriteHistoryTag(FILE *history_out, string tag, string value)
{
if (value.size() > 0)
{
@@ -602,7 +602,7 @@ bool pkgDPkgPM::OpenLog()
_config->Find("Dir::Log::History"));
if (!history_name.empty())
{
- history_out = fopen(history_name.c_str(),"a");
+ FILE *history_out = fopen(history_name.c_str(),"a");
chmod(history_name.c_str(), 0644);
fprintf(history_out, "\nStart-Date: %s\n", timestr);
string remove, purge, install, upgrade, downgrade;
@@ -622,12 +622,12 @@ bool pkgDPkgPM::OpenLog()
remove += I.Name() + string(" (") + Cache[I].CurVersion + string("), ");
}
}
- WriteHistoryTag("Install", install);
- WriteHistoryTag("Upgrade", upgrade);
- WriteHistoryTag("Downgrade",downgrade);
- WriteHistoryTag("Remove",remove);
- WriteHistoryTag("Purge",purge);
- fflush(history_out);
+ WriteHistoryTag(history_out, "Install", install);
+ WriteHistoryTag(history_out, "Upgrade", upgrade);
+ WriteHistoryTag(history_out, "Downgrade",downgrade);
+ WriteHistoryTag(history_out, "Remove",remove);
+ WriteHistoryTag(history_out, "Purge",purge);
+ fclose(history_out);
}
return true;
@@ -650,10 +650,11 @@ bool pkgDPkgPM::CloseLog()
}
term_out = NULL;
- if(history_out)
+ string history_name = flCombine(_config->FindDir("Dir::Log"),
+ _config->Find("Dir::Log::History"));
+ if (!history_name.empty())
{
- if (dpkg_error.size() > 0)
- fprintf(history_out, "Error: %s\n", dpkg_error.c_str());
+ FILE *history_out = fopen(history_name.c_str(),"a");
fprintf(history_out, "End-Date: %s\n", timestr);
fclose(history_out);
}
@@ -1125,6 +1126,7 @@ bool pkgDPkgPM::Go(int OutStatusFd)
if(stopOnError)
RunScripts("DPkg::Post-Invoke");
+ string dpkg_error;
if (WIFSIGNALED(Status) != 0 && WTERMSIG(Status) == SIGSEGV)
strprintf(dpkg_error, "Sub-process %s received a segmentation fault.",Args[0]);
else if (WIFEXITED(Status) != 0)
@@ -1133,7 +1135,17 @@ bool pkgDPkgPM::Go(int OutStatusFd)
strprintf(dpkg_error, "Sub-process %s exited unexpectedly",Args[0]);
if(dpkg_error.size() > 0)
+ {
_error->Error(dpkg_error.c_str());
+ string history_name = flCombine(_config->FindDir("Dir::Log"),
+ _config->Find("Dir::Log::History"));
+ if (!history_name.empty())
+ {
+ FILE *history_out = fopen(history_name.c_str(),"a");
+ fprintf(history_out, "Error: %s\n", dpkg_error.c_str());
+ fclose(history_out);
+ }
+ }
if(stopOnError)
{
diff --git a/apt-pkg/deb/dpkgpm.h b/apt-pkg/deb/dpkgpm.h
index ce3e20f2e..160486bf9 100644
--- a/apt-pkg/deb/dpkgpm.h
+++ b/apt-pkg/deb/dpkgpm.h
@@ -29,8 +29,6 @@ class pkgDPkgPM : public pkgPackageManager
char dpkgbuf[1024];
int dpkgbuf_pos;
FILE *term_out;
- FILE *history_out;
- string dpkg_error;
protected:
int pkgFailures;
@@ -70,7 +68,7 @@ class pkgDPkgPM : public pkgPackageManager
// Helpers
bool RunScriptsWithPkgs(const char *Cnf);
bool SendV2Pkgs(FILE *F);
- void WriteHistoryTag(string tag, string value);
+ void WriteHistoryTag(FILE* history_out, string tag, string value);
// apport integration
void WriteApportReport(const char *pkgpath, const char *errormsg);