summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Vogt <michael.vogt@ubuntu.com>2006-06-07 10:03:41 +0200
committerMichael Vogt <michael.vogt@ubuntu.com>2006-06-07 10:03:41 +0200
commit614adaa09f9f24dccd9e2e8bb4eb00d17285c92e (patch)
treebc2def8dc62ec49a60fa162b38cd47ee51b77b7e
parent89b70b5a5c80b15d928b6593604bacc02a1b9a51 (diff)
* apt-pkg/deb/dpkgpm.cc, apt-pkg/contrib/fileutl.{cc,h}:
- move the RunScripts() code into fileutl.{cc,h} * apt-pkg/cachefile.cc: - add support for "APT::Update::{Pre,Post}-Invoke" scripts
-rw-r--r--apt-pkg/cachefile.cc6
-rw-r--r--apt-pkg/contrib/fileutl.cc67
-rw-r--r--apt-pkg/contrib/fileutl.h1
-rw-r--r--apt-pkg/deb/dpkgpm.cc56
-rw-r--r--po/apt-all.pot60
5 files changed, 105 insertions, 85 deletions
diff --git a/apt-pkg/cachefile.cc b/apt-pkg/cachefile.cc
index 96d9672c2..8b8e6dc98 100644
--- a/apt-pkg/cachefile.cc
+++ b/apt-pkg/cachefile.cc
@@ -24,6 +24,7 @@
#include <apt-pkg/policy.h>
#include <apt-pkg/pkgsystem.h>
#include <apt-pkg/acquire-item.h>
+#include <apt-pkg/fileutl.h>
#include <apti18n.h>
/*}}}*/
@@ -123,6 +124,9 @@ bool pkgCacheFile::ListUpdate(pkgAcquireStatus &Stat, pkgSourceList &List)
if (List.GetIndexes(&Fetcher) == false)
return false;
+ // Run scripts
+ RunScripts("APT::Update::Pre-Invoke");
+
// Run it
if (Fetcher.Run() == pkgAcquire::Failed)
return false;
@@ -152,6 +156,8 @@ bool pkgCacheFile::ListUpdate(pkgAcquireStatus &Stat, pkgSourceList &List)
return false;
}
+ // Run the scripts
+ RunScripts("APT::Update::Post-Invoke");
return (Failed == false);
}
diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc
index 9fd71728e..77287952a 100644
--- a/apt-pkg/contrib/fileutl.cc
+++ b/apt-pkg/contrib/fileutl.cc
@@ -8,9 +8,12 @@
CopyFile - Buffered copy of a single file
GetLock - dpkg compatible lock file manipulation (fcntl)
- This source is placed in the Public Domain, do with it what you will
+ Most of this source is placed in the Public Domain, do with it what
+ you will
It was originally written by Jason Gunthorpe <jgg@debian.org>.
+ The exception is RunScripts() it is under the GPLv2
+
##################################################################### */
/*}}}*/
// Include Files /*{{{*/
@@ -38,6 +41,68 @@
using namespace std;
+// RunScripts - Run a set of scripts from a configuration subtree /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool RunScripts(const char *Cnf)
+{
+ Configuration::Item const *Opts = _config->Tree(Cnf);
+ if (Opts == 0 || Opts->Child == 0)
+ return true;
+ Opts = Opts->Child;
+
+ // Fork for running the system calls
+ pid_t Child = ExecFork();
+
+ // This is the child
+ if (Child == 0)
+ {
+ if (chdir("/tmp/") != 0)
+ _exit(100);
+
+ unsigned int Count = 1;
+ for (; Opts != 0; Opts = Opts->Next, Count++)
+ {
+ if (Opts->Value.empty() == true)
+ continue;
+
+ if (system(Opts->Value.c_str()) != 0)
+ _exit(100+Count);
+ }
+ _exit(0);
+ }
+
+ // Wait for the child
+ int Status = 0;
+ while (waitpid(Child,&Status,0) != Child)
+ {
+ if (errno == EINTR)
+ continue;
+ return _error->Errno("waitpid","Couldn't wait for subprocess");
+ }
+
+ // Restore sig int/quit
+ signal(SIGQUIT,SIG_DFL);
+ signal(SIGINT,SIG_DFL);
+
+ // Check for an error code.
+ if (WIFEXITED(Status) == 0 || WEXITSTATUS(Status) != 0)
+ {
+ unsigned int Count = WEXITSTATUS(Status);
+ if (Count > 100)
+ {
+ Count -= 100;
+ for (; Opts != 0 && Count != 1; Opts = Opts->Next, Count--);
+ _error->Error("Problem executing scripts %s '%s'",Cnf,Opts->Value.c_str());
+ }
+
+ return _error->Error("Sub-process returned an error code");
+ }
+
+ return true;
+}
+ /*}}}*/
+
// CopyFile - Buffered copy of a file /*{{{*/
// ---------------------------------------------------------------------
/* The caller is expected to set things so that failure causes erasure */
diff --git a/apt-pkg/contrib/fileutl.h b/apt-pkg/contrib/fileutl.h
index 041aa3309..363dd041d 100644
--- a/apt-pkg/contrib/fileutl.h
+++ b/apt-pkg/contrib/fileutl.h
@@ -80,6 +80,7 @@ class FileFd
virtual ~FileFd();
};
+bool RunScripts(const char *Cnf);
bool CopyFile(FileFd &From,FileFd &To);
int GetLock(string File,bool Errors = true);
bool FileExists(string File);
diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc
index 667db8ff2..fe13614c5 100644
--- a/apt-pkg/deb/dpkgpm.cc
+++ b/apt-pkg/deb/dpkgpm.cc
@@ -16,6 +16,7 @@
#include <apt-pkg/configuration.h>
#include <apt-pkg/depcache.h>
#include <apt-pkg/strutl.h>
+#include <apt-pkg/fileutl.h>
#include <unistd.h>
#include <stdlib.h>
@@ -93,60 +94,7 @@ bool pkgDPkgPM::Remove(PkgIterator Pkg,bool Purge)
each one is run with system from a forked child. */
bool pkgDPkgPM::RunScripts(const char *Cnf)
{
- Configuration::Item const *Opts = _config->Tree(Cnf);
- if (Opts == 0 || Opts->Child == 0)
- return true;
- Opts = Opts->Child;
-
- // Fork for running the system calls
- pid_t Child = ExecFork();
-
- // This is the child
- if (Child == 0)
- {
- if (chdir("/tmp/") != 0)
- _exit(100);
-
- unsigned int Count = 1;
- for (; Opts != 0; Opts = Opts->Next, Count++)
- {
- if (Opts->Value.empty() == true)
- continue;
-
- if (system(Opts->Value.c_str()) != 0)
- _exit(100+Count);
- }
- _exit(0);
- }
-
- // Wait for the child
- int Status = 0;
- while (waitpid(Child,&Status,0) != Child)
- {
- if (errno == EINTR)
- continue;
- return _error->Errno("waitpid","Couldn't wait for subprocess");
- }
-
- // Restore sig int/quit
- signal(SIGQUIT,SIG_DFL);
- signal(SIGINT,SIG_DFL);
-
- // Check for an error code.
- if (WIFEXITED(Status) == 0 || WEXITSTATUS(Status) != 0)
- {
- unsigned int Count = WEXITSTATUS(Status);
- if (Count > 100)
- {
- Count -= 100;
- for (; Opts != 0 && Count != 1; Opts = Opts->Next, Count--);
- _error->Error("Problem executing scripts %s '%s'",Cnf,Opts->Value.c_str());
- }
-
- return _error->Error("Sub-process returned an error code");
- }
-
- return true;
+ RunScripts(Cnf);
}
/*}}}*/
// DPkgPM::SendV2Pkgs - Send version 2 package info /*{{{*/
diff --git a/po/apt-all.pot b/po/apt-all.pot
index 5b84c3768..0b647873f 100644
--- a/po/apt-all.pot
+++ b/po/apt-all.pot
@@ -699,7 +699,7 @@ msgid "Unable to lock the download directory"
msgstr ""
#: cmdline/apt-get.cc:801 cmdline/apt-get.cc:1856 cmdline/apt-get.cc:2092
-#: apt-pkg/cachefile.cc:68
+#: apt-pkg/cachefile.cc:69
msgid "The list of sources could not be read."
msgstr ""
@@ -761,7 +761,7 @@ msgstr ""
msgid "Do you want to continue [Y/n]? "
msgstr ""
-#: cmdline/apt-get.cc:961 cmdline/apt-get.cc:1989 apt-pkg/cachefile.cc:138
+#: cmdline/apt-get.cc:961 cmdline/apt-get.cc:1989 apt-pkg/cachefile.cc:142
#, c-format
msgid "Failed to fetch %s %s\n"
msgstr ""
@@ -1544,7 +1544,7 @@ msgstr ""
msgid "Server closed the connection"
msgstr ""
-#: methods/ftp.cc:338 apt-pkg/contrib/fileutl.cc:471 methods/rsh.cc:190
+#: methods/ftp.cc:338 apt-pkg/contrib/fileutl.cc:536 methods/rsh.cc:190
msgid "Read error"
msgstr ""
@@ -1556,7 +1556,7 @@ msgstr ""
msgid "Protocol corruption"
msgstr ""
-#: methods/ftp.cc:446 apt-pkg/contrib/fileutl.cc:510 methods/rsh.cc:232
+#: methods/ftp.cc:446 apt-pkg/contrib/fileutl.cc:575 methods/rsh.cc:232
msgid "Write error"
msgstr ""
@@ -1953,70 +1953,70 @@ msgstr ""
msgid "Failed to stat the cdrom"
msgstr ""
-#: apt-pkg/contrib/fileutl.cc:82
+#: apt-pkg/contrib/fileutl.cc:147
#, c-format
msgid "Not using locking for read only lock file %s"
msgstr ""
-#: apt-pkg/contrib/fileutl.cc:87
+#: apt-pkg/contrib/fileutl.cc:152
#, c-format
msgid "Could not open lock file %s"
msgstr ""
-#: apt-pkg/contrib/fileutl.cc:105
+#: apt-pkg/contrib/fileutl.cc:170
#, c-format
msgid "Not using locking for nfs mounted lock file %s"
msgstr ""
-#: apt-pkg/contrib/fileutl.cc:109
+#: apt-pkg/contrib/fileutl.cc:174
#, c-format
msgid "Could not get lock %s"
msgstr ""
-#: apt-pkg/contrib/fileutl.cc:377
+#: apt-pkg/contrib/fileutl.cc:442
#, c-format
msgid "Waited for %s but it wasn't there"
msgstr ""
-#: apt-pkg/contrib/fileutl.cc:387
+#: apt-pkg/contrib/fileutl.cc:452
#, c-format
msgid "Sub-process %s received a segmentation fault."
msgstr ""
-#: apt-pkg/contrib/fileutl.cc:390
+#: apt-pkg/contrib/fileutl.cc:455
#, c-format
msgid "Sub-process %s returned an error code (%u)"
msgstr ""
-#: apt-pkg/contrib/fileutl.cc:392
+#: apt-pkg/contrib/fileutl.cc:457
#, c-format
msgid "Sub-process %s exited unexpectedly"
msgstr ""
-#: apt-pkg/contrib/fileutl.cc:436
+#: apt-pkg/contrib/fileutl.cc:501
#, c-format
msgid "Could not open file %s"
msgstr ""
-#: apt-pkg/contrib/fileutl.cc:492
+#: apt-pkg/contrib/fileutl.cc:557
#, c-format
msgid "read, still have %lu to read but none left"
msgstr ""
-#: apt-pkg/contrib/fileutl.cc:522
+#: apt-pkg/contrib/fileutl.cc:587
#, c-format
msgid "write, still have %lu to write but couldn't"
msgstr ""
-#: apt-pkg/contrib/fileutl.cc:597
+#: apt-pkg/contrib/fileutl.cc:662
msgid "Problem closing the file"
msgstr ""
-#: apt-pkg/contrib/fileutl.cc:603
+#: apt-pkg/contrib/fileutl.cc:668
msgid "Problem unlinking the file"
msgstr ""
-#: apt-pkg/contrib/fileutl.cc:614
+#: apt-pkg/contrib/fileutl.cc:679
msgid "Problem syncing the file"
msgstr ""
@@ -2245,11 +2245,11 @@ msgstr ""
msgid "You must put some 'source' URIs in your sources.list"
msgstr ""
-#: apt-pkg/cachefile.cc:74
+#: apt-pkg/cachefile.cc:75
msgid "The package lists or status file could not be parsed or opened."
msgstr ""
-#: apt-pkg/cachefile.cc:78
+#: apt-pkg/cachefile.cc:79
msgid "You may want to run apt-get update to correct these problems"
msgstr ""
@@ -2477,52 +2477,52 @@ msgstr ""
msgid "Wrote %i records with %i missing files and %i mismatched files\n"
msgstr ""
-#: apt-pkg/deb/dpkgpm.cc:358
+#: apt-pkg/deb/dpkgpm.cc:306
#, c-format
msgid "Preparing %s"
msgstr ""
-#: apt-pkg/deb/dpkgpm.cc:359
+#: apt-pkg/deb/dpkgpm.cc:307
#, c-format
msgid "Unpacking %s"
msgstr ""
-#: apt-pkg/deb/dpkgpm.cc:364
+#: apt-pkg/deb/dpkgpm.cc:312
#, c-format
msgid "Preparing to configure %s"
msgstr ""
-#: apt-pkg/deb/dpkgpm.cc:365
+#: apt-pkg/deb/dpkgpm.cc:313
#, c-format
msgid "Configuring %s"
msgstr ""
-#: apt-pkg/deb/dpkgpm.cc:366
+#: apt-pkg/deb/dpkgpm.cc:314
#, c-format
msgid "Installed %s"
msgstr ""
-#: apt-pkg/deb/dpkgpm.cc:371
+#: apt-pkg/deb/dpkgpm.cc:319
#, c-format
msgid "Preparing for removal of %s"
msgstr ""
-#: apt-pkg/deb/dpkgpm.cc:372
+#: apt-pkg/deb/dpkgpm.cc:320
#, c-format
msgid "Removing %s"
msgstr ""
-#: apt-pkg/deb/dpkgpm.cc:373
+#: apt-pkg/deb/dpkgpm.cc:321
#, c-format
msgid "Removed %s"
msgstr ""
-#: apt-pkg/deb/dpkgpm.cc:378
+#: apt-pkg/deb/dpkgpm.cc:326
#, c-format
msgid "Preparing to completely remove %s"
msgstr ""
-#: apt-pkg/deb/dpkgpm.cc:379
+#: apt-pkg/deb/dpkgpm.cc:327
#, c-format
msgid "Completely removed %s"
msgstr ""