浏览代码

Refactor post postinst script tasks into a new function

Based on a patch by Ian Jackson <ian@davenant.greenend.org.uk>.
Guillem Jover 18 年之前
父节点
当前提交
6a65c0a8d4
共有 5 个文件被更改,包括 26 次插入10 次删除
  1. 12 0
      ChangeLog
  2. 4 8
      src/cleanup.c
  3. 1 2
      src/configure.c
  4. 7 0
      src/help.c
  5. 2 0
      src/main.h

+ 12 - 0
ChangeLog

@@ -1,3 +1,15 @@
+2008-03-28  Ian Jackson  <ian@davenant.greenend.org.uk>,
+            Guillem Jover  <guillem@debian.org>
+
+	* src/main.h (post_postinst_tasks): New prototype.
+	* src/help.c (post_postinst_tasks): New function.
+	* src/cleanup.c (cu_prermupgrade): Use post_postinst_tasks instead of
+	duplicate code.
+	(cu_prermdeconfigure): Likewise.
+	(cu_prerminfavour): Likewise.
+	(cu_prermremove): Likewise.
+	* src/configure.c (deferred_configure): Likewise.
+
 2008-03-28  Guillem Jover  <guillem@debian.org>
 
 	* src/packages.c (process_queue): Fix typo in comment.

+ 4 - 8
src/cleanup.c

@@ -112,9 +112,8 @@ void cu_prermupgrade(int argc, void **argv) {
                               versiondescribe(&pkg->available.version,
                                               vdew_nonambig),
                               NULL);
-  pkg->status= stat_installed;
   pkg->eflag &= ~eflagf_reinstreq;
-  modstatdb_note(pkg);
+  post_postinst_tasks(pkg, stat_installed);
   cleanup_pkg_failed--;
 }
 
@@ -151,8 +150,7 @@ void cu_prermdeconfigure(int argc, void **argv) {
                                 NULL);
   }
 
-  deconf->status= stat_installed;
-  modstatdb_note(deconf);
+  post_postinst_tasks(deconf, stat_installed);
 }
 
 void cu_prerminfavour(int argc, void **argv) {
@@ -165,9 +163,8 @@ void cu_prerminfavour(int argc, void **argv) {
                               versiondescribe(&infavour->available.version,
                                               vdew_nonambig),
                               NULL);
-  conflictor->status= stat_installed;
   conflictor->eflag &= ~eflagf_reinstreq;
-  modstatdb_note(conflictor);
+  post_postinst_tasks(conflictor, stat_installed);
   cleanup_conflictor_failed--;
 }
 
@@ -238,8 +235,7 @@ void cu_prermremove(int argc, void **argv) {
   if (cleanup_pkg_failed++) return;
   maintainer_script_installed(pkg,POSTINSTFILE,"post-installation",
                               "abort-remove", NULL);
-  pkg->status= *oldpkgstatus;
   pkg->eflag &= ~eflagf_reinstreq;
-  modstatdb_note(pkg);
+  post_postinst_tasks(pkg, *oldpkgstatus);
   cleanup_pkg_failed--;
 }

+ 1 - 2
src/configure.c

@@ -303,9 +303,8 @@ void deferred_configure(struct pkginfo *pkg) {
 	                                            vdew_nonambig) : "",
 	                            NULL);
 
-	pkg->status= stat_installed;
 	pkg->eflag= eflagv_ok;
-	modstatdb_note(pkg);
+	post_postinst_tasks(pkg, stat_installed);
 }
 
 

+ 7 - 0
src/help.c

@@ -217,6 +217,13 @@ static void script_catchsignals(void) {
   onerr_abort--;
 }
 
+void
+post_postinst_tasks(struct pkginfo *pkg, enum pkgstatus new_status)
+{
+  pkg->status = new_status;
+  modstatdb_note(pkg);
+}
+
 static void setexecute(const char *path, struct stat *stab) {
   if ((stab->st_mode & 0555) == 0555) return;
   if (!chmod(path,0755)) return;

+ 2 - 0
src/main.h

@@ -214,6 +214,8 @@ int maintainer_script_alternative(struct pkginfo *pkg,
                                   const char *scriptname, const char *description,
                                   const char *cidir, char *cidirrest,
                                   const char *ifok, const char *iffallback);
+void post_postinst_tasks(struct pkginfo *pkg, enum pkgstatus new_status);
+
 void clear_istobes(void);
 int isdirectoryinuse(struct filenamenode *namenode, struct pkginfo *pkg);
 int hasdirectoryconffiles(struct filenamenode *namenode, struct pkginfo *pkg);