Change history branch so that it does not break the
authorMichael Vogt <michael.vogt@ubuntu.com>
Tue, 26 Jan 2010 10:57:29 +0000 (11:57 +0100)
committerMichael Vogt <michael.vogt@ubuntu.com>
Tue, 26 Jan 2010 10:57:29 +0000 (11:57 +0100)
apt ABI for the pkgPackageManager interface
(can be reverted on the next ABI break)

apt-pkg/deb/dpkgpm.cc
apt-pkg/deb/dpkgpm.h
apt-pkg/packagemanager.h
debian/changelog

index 2f84a5a..e928776 100644 (file)
@@ -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) 
         {
index ce3e20f..160486b 100644 (file)
@@ -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);
index af1476b..44f5d5e 100644 (file)
@@ -49,7 +49,11 @@ class pkgPackageManager : protected pkgCache::Namespace
    bool Debug;
          
    bool DepAdd(pkgOrderList &Order,PkgIterator P,int Depth = 0);
-   void ImmediateAdd(PkgIterator P, bool UseInstallVer, unsigned const int &Depth = 0);
+   // binary-compat change, fix on next abi break
+   void ImmediateAdd(PkgIterator P, bool UseInstallVer) {
+      ImmediateAdd(P, UseInstallVer, 0);
+   }
+   void ImmediateAdd(PkgIterator P, bool UseInstallVer, unsigned const int &Depth);
    virtual OrderResult OrderInstall();
    bool CheckRConflicts(PkgIterator Pkg,DepIterator Dep,const char *Ver);
    bool CreateOrderList();
index e6afafe..9615201 100644 (file)
@@ -1,3 +1,11 @@
+apt (0.7.25ubuntu2) lucid; urgency=low
+
+  * Change history branch so that it does not break the 
+    apt ABI for the pkgPackageManager interface
+    (can be reverted on the next ABI break)
+
+ -- Michael Vogt <michael.vogt@ubuntu.com>  Wed, 23 Dec 2009 10:14:16 +0100
+
 apt (0.7.25ubuntu1) lucid; urgency=low
 
   * Merged from the mvo branch