121 lines
3.9 KiB
Diff
121 lines
3.9 KiB
Diff
From 57cb5a62439cc0e4b59d4d19ee1d7e0ffdb4ba26 Mon Sep 17 00:00:00 2001
|
|
From: Pino Toscano <ptoscano@redhat.com>
|
|
Date: Wed, 17 Sep 2014 13:07:24 +0200
|
|
Subject: [PATCH] package handlers: add possibility for final teardown
|
|
|
|
Add a ph_fini callback to package handlers, so they can do teardown
|
|
operations, if needed, at the very end of the supermin run.
|
|
|
|
Currently all of the current package handlers do nothing.
|
|
---
|
|
src/dpkg.ml | 1 +
|
|
src/package_handler.ml | 5 +++++
|
|
src/package_handler.mli | 7 +++++++
|
|
src/pacman.ml | 1 +
|
|
src/rpm.ml | 1 +
|
|
src/supermin.ml | 4 +++-
|
|
6 files changed, 18 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/src/dpkg.ml b/src/dpkg.ml
|
|
index 1bb3f7f..ddfb03a 100644
|
|
--- a/src/dpkg.ml
|
|
+++ b/src/dpkg.ml
|
|
@@ -191,6 +191,7 @@ let () =
|
|
let ph = {
|
|
ph_detect = dpkg_detect;
|
|
ph_init = dpkg_init;
|
|
+ ph_fini = (fun () -> ());
|
|
ph_package_of_string = dpkg_package_of_string;
|
|
ph_package_to_string = dpkg_package_to_string;
|
|
ph_package_name = dpkg_package_name;
|
|
diff --git a/src/package_handler.ml b/src/package_handler.ml
|
|
index b1dffc0..64b8f66 100644
|
|
--- a/src/package_handler.ml
|
|
+++ b/src/package_handler.ml
|
|
@@ -59,6 +59,7 @@ let file_source file =
|
|
type package_handler = {
|
|
ph_detect : unit -> bool;
|
|
ph_init : settings -> unit;
|
|
+ ph_fini : unit -> unit;
|
|
ph_package_of_string : string -> package option;
|
|
ph_package_to_string : package -> string;
|
|
ph_package_name : package -> string;
|
|
@@ -140,6 +141,10 @@ let rec get_package_handler_name () =
|
|
| Some (system, packager, _) -> sprintf "%s/%s" system packager
|
|
| None -> assert false
|
|
|
|
+let package_handler_shutdown () =
|
|
+ let ph = get_package_handler () in
|
|
+ ph.ph_fini ()
|
|
+
|
|
let get_all_requires pkgs =
|
|
let ph = get_package_handler () in
|
|
match ph.ph_get_requires with
|
|
diff --git a/src/package_handler.mli b/src/package_handler.mli
|
|
index 7e17981..43b0c08 100644
|
|
--- a/src/package_handler.mli
|
|
+++ b/src/package_handler.mli
|
|
@@ -99,6 +99,11 @@ type package_handler = {
|
|
initializes. The [settings] parameter is a struct of general
|
|
settings and configuration. *)
|
|
|
|
+ ph_fini : unit -> unit;
|
|
+ (** This is called at the end of the supermin processing. It can
|
|
+ be used to do teardown operations for the package handler,
|
|
+ when no more package-related operations are going to be done. *)
|
|
+
|
|
ph_package_of_string : string -> package option;
|
|
(** Convert a string (from user input) into a package object. If
|
|
the package is not installed or the string is otherwise
|
|
@@ -172,6 +177,8 @@ val list_package_handlers : unit -> unit
|
|
|
|
val check_system : settings -> unit
|
|
|
|
+val package_handler_shutdown : unit -> unit
|
|
+
|
|
val get_package_handler : unit -> package_handler
|
|
|
|
val get_package_handler_name : unit -> string
|
|
diff --git a/src/pacman.ml b/src/pacman.ml
|
|
index 8b11ba8..45fb393 100644
|
|
--- a/src/pacman.ml
|
|
+++ b/src/pacman.ml
|
|
@@ -227,6 +227,7 @@ let () =
|
|
let ph = {
|
|
ph_detect = pacman_detect;
|
|
ph_init = pacman_init;
|
|
+ ph_fini = (fun () -> ());
|
|
ph_package_of_string = pacman_package_of_string;
|
|
ph_package_to_string = pacman_package_to_string;
|
|
ph_package_name = pacman_package_name;
|
|
diff --git a/src/rpm.ml b/src/rpm.ml
|
|
index 1195948..1bd81f4 100644
|
|
--- a/src/rpm.ml
|
|
+++ b/src/rpm.ml
|
|
@@ -394,6 +394,7 @@ let () =
|
|
let fedora = {
|
|
ph_detect = fedora_detect;
|
|
ph_init = rpm_init;
|
|
+ ph_fini = (fun () -> ());
|
|
ph_package_of_string = rpm_package_of_string;
|
|
ph_package_to_string = rpm_package_to_string;
|
|
ph_package_name = rpm_package_name;
|
|
diff --git a/src/supermin.ml b/src/supermin.ml
|
|
index 0153977..2ee61a9 100644
|
|
--- a/src/supermin.ml
|
|
+++ b/src/supermin.ml
|
|
@@ -261,7 +261,9 @@ let main () =
|
|
*)
|
|
sprintf "( chmod -R +w %s ; rm -rf %s ) 2>/dev/null &"
|
|
(quote old_outputdir) (quote old_outputdir) in
|
|
- ignore (Sys.command cmd)
|
|
+ ignore (Sys.command cmd);
|
|
+
|
|
+ package_handler_shutdown ()
|
|
|
|
let () =
|
|
try main ()
|
|
--
|
|
1.9.3
|
|
|