Update to current master
This commit is contained in:
parent
a82b32b7a4
commit
cfc87a581d
26
0001-ext2-fix-small-memory-leak-on-error.patch
Normal file
26
0001-ext2-fix-small-memory-leak-on-error.patch
Normal file
@ -0,0 +1,26 @@
|
||||
From b84a7d38902199382a7264cc17be509384940020 Mon Sep 17 00:00:00 2001
|
||||
From: Pino Toscano <ptoscano@redhat.com>
|
||||
Date: Tue, 9 Sep 2014 14:43:02 +0200
|
||||
Subject: [PATCH] ext2: fix small memory leak on error
|
||||
|
||||
When failing to read the output of `readlink -f`, free the memory buffer
|
||||
used for it.
|
||||
---
|
||||
src/ext2fs-c.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/src/ext2fs-c.c b/src/ext2fs-c.c
|
||||
index 9e0770a..f3ca7dc 100644
|
||||
--- a/src/ext2fs-c.c
|
||||
+++ b/src/ext2fs-c.c
|
||||
@@ -631,6 +631,7 @@ ext2_copy_file (struct ext2_data *data, const char *src, const char *dest)
|
||||
}
|
||||
if (fgets (new_dirname, PATH_MAX, fp) == NULL) {
|
||||
pclose (fp);
|
||||
+ free (new_dirname);
|
||||
goto cont;
|
||||
}
|
||||
pclose (fp);
|
||||
--
|
||||
1.9.3
|
||||
|
36
0002-build-Add-some-more-debug-messages.patch
Normal file
36
0002-build-Add-some-more-debug-messages.patch
Normal file
@ -0,0 +1,36 @@
|
||||
From c11daf4e7b254bcb56af4871e0a1b8d27b828486 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Sat, 13 Sep 2014 14:41:29 +0100
|
||||
Subject: [PATCH] build: Add some more debug messages.
|
||||
|
||||
Allows us to use 'annotate-output supermin -v ...' in order to find
|
||||
out how long the RPM dependency checking takes.
|
||||
---
|
||||
src/build.ml | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git a/src/build.ml b/src/build.ml
|
||||
index 8ff574b..7011731 100644
|
||||
--- a/src/build.ml
|
||||
+++ b/src/build.ml
|
||||
@@ -86,11 +86,17 @@ let rec build debug
|
||||
(* Read the supermin appliance, ie. the input files and/or
|
||||
* directories that make up the appliance.
|
||||
*)
|
||||
+ if debug >= 1 then
|
||||
+ printf "supermin: reading the supermin appliance\n%!";
|
||||
let appliance = read_appliance debug basedir empty_appliance inputs in
|
||||
|
||||
(* Resolve dependencies in the list of packages. *)
|
||||
let ph = get_package_handler () in
|
||||
+ if debug >= 1 then
|
||||
+ printf "supermin: mapping package names to installed packages\n%!";
|
||||
let packages = filter_map ph.ph_package_of_string appliance.packages in
|
||||
+ if debug >= 1 then
|
||||
+ printf "supermin: resolving full list of package dependencies\n%!";
|
||||
let packages =
|
||||
let packages = package_set_of_list packages in
|
||||
get_all_requires packages in
|
||||
--
|
||||
1.9.3
|
||||
|
@ -0,0 +1,61 @@
|
||||
From 7c3984e45b91f8a78530efe6ddfc7a83556892ec Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Mon, 15 Sep 2014 13:51:06 +0100
|
||||
Subject: [PATCH] rpm: Don't both verifying signatures and digests when reading
|
||||
RPM metadata.
|
||||
|
||||
supermin doesn't care, and there's a performance penalty for
|
||||
doing it.
|
||||
|
||||
Thanks: Panu Matilainen
|
||||
---
|
||||
src/rpm.ml | 11 ++++++-----
|
||||
1 file changed, 6 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/rpm.ml b/src/rpm.ml
|
||||
index 434f15b..1195948 100644
|
||||
--- a/src/rpm.ml
|
||||
+++ b/src/rpm.ml
|
||||
@@ -136,7 +136,7 @@ let rpm_package_of_string str =
|
||||
* ourselves. *)
|
||||
let parse_rpm str =
|
||||
let cmd =
|
||||
- sprintf "%s -q --qf '%%{name} %%{epoch} %%{version} %%{release} %%{arch}\\n' %s"
|
||||
+ sprintf "%s --nosignature --nodigest -q --qf '%%{name} %%{epoch} %%{version} %%{release} %%{arch}\\n' %s"
|
||||
Config.rpm
|
||||
(quote str) in
|
||||
let lines = run_command_get_lines cmd in
|
||||
@@ -177,7 +177,8 @@ let rpm_package_of_string str =
|
||||
|
||||
(* Check if an RPM is installed. *)
|
||||
and check_rpm_installed name =
|
||||
- let cmd = sprintf "%s -q %s >/dev/null" Config.rpm (quote name) in
|
||||
+ let cmd = sprintf "%s --nosignature --nodigest -q %s >/dev/null"
|
||||
+ Config.rpm (quote name) in
|
||||
0 = Sys.command cmd
|
||||
in
|
||||
|
||||
@@ -227,9 +228,9 @@ let rpm_get_package_database_mtime () =
|
||||
let rpm_get_all_requires pkgs =
|
||||
let get pkgs =
|
||||
let cmd = sprintf "\
|
||||
- %s -qR %s |
|
||||
+ %s --nosignature --nodigest -qR %s |
|
||||
awk '{print $1}' |
|
||||
- xargs rpm -q --qf '%%{name}\\n' --whatprovides |
|
||||
+ xargs rpm --nosignature --nodigest -q --qf '%%{name}\\n' --whatprovides |
|
||||
grep -v 'no package provides' |
|
||||
sort -u"
|
||||
Config.rpm
|
||||
@@ -251,7 +252,7 @@ let rpm_get_all_requires pkgs =
|
||||
|
||||
let rpm_get_all_files pkgs =
|
||||
let cmd = sprintf "\
|
||||
- %s -q --qf '[%%{FILENAMES}\\t%%{FILEFLAGS:fflags}\\n]' %s |
|
||||
+ %s --nosignature --nodigest -q --qf '[%%{FILENAMES}\\t%%{FILEFLAGS:fflags}\\n]' %s |
|
||||
grep '^/' |
|
||||
sort -u"
|
||||
Config.rpm
|
||||
--
|
||||
1.9.3
|
||||
|
37
0004-Use-open_process_full-in-compressed-file-reading.patch
Normal file
37
0004-Use-open_process_full-in-compressed-file-reading.patch
Normal file
@ -0,0 +1,37 @@
|
||||
From 68bc5e82e4892f981b1d5409ec217518749c4b61 Mon Sep 17 00:00:00 2001
|
||||
From: Pino Toscano <ptoscano@redhat.com>
|
||||
Date: Wed, 17 Sep 2014 12:59:54 +0200
|
||||
Subject: [PATCH] Use open_process_full in compressed file reading
|
||||
|
||||
Since only few bytes of the compressed file are read, closing the stdout
|
||||
of the process will cause it to complain about that.
|
||||
Switch to open_process_full instead of open_process_in, so we can close
|
||||
also stderr and avoid that harmless error message.
|
||||
---
|
||||
src/build.ml | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/build.ml b/src/build.ml
|
||||
index 7011731..500ce33 100644
|
||||
--- a/src/build.ml
|
||||
+++ b/src/build.ml
|
||||
@@ -322,13 +322,13 @@ and get_file_content file buf len =
|
||||
|
||||
and get_compressed_file_content zcat file =
|
||||
let cmd = sprintf "%s %s" zcat (quote file) in
|
||||
- let chan = open_process_in cmd in
|
||||
+ let chan_out, chan_in, chan_err = open_process_full cmd [||] in
|
||||
let buf = String.create 512 in
|
||||
- let len = input chan buf 0 (String.length buf) in
|
||||
+ let len = input chan_out buf 0 (String.length buf) in
|
||||
(* We're expecting the subprocess to fail because we close the pipe
|
||||
* early, so:
|
||||
*)
|
||||
- ignore (close_process_in chan);
|
||||
+ ignore (Unix.close_process_full (chan_out, chan_in, chan_err));
|
||||
|
||||
get_file_content file buf len
|
||||
|
||||
--
|
||||
1.9.3
|
||||
|
120
0005-package-handlers-add-possibility-for-final-teardown.patch
Normal file
120
0005-package-handlers-add-possibility-for-final-teardown.patch
Normal file
@ -0,0 +1,120 @@
|
||||
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
|
||||
|
1011
0006-rpm-use-the-rpm-library-instead-of-invoking-rpm.patch
Normal file
1011
0006-rpm-use-the-rpm-library-instead-of-invoking-rpm.patch
Normal file
File diff suppressed because it is too large
Load Diff
27
0007-rpm-fix-typo-in-non-librpm-code.patch
Normal file
27
0007-rpm-fix-typo-in-non-librpm-code.patch
Normal file
@ -0,0 +1,27 @@
|
||||
From 906fedeed83fe8f1a4e4fd7ec2656e548b83b9c5 Mon Sep 17 00:00:00 2001
|
||||
From: Pino Toscano <ptoscano@redhat.com>
|
||||
Date: Wed, 17 Sep 2014 17:34:59 +0200
|
||||
Subject: [PATCH] rpm: fix typo in non-librpm code
|
||||
|
||||
Properly spell the name of a stub function, so it builds fine also with
|
||||
no rpm library.
|
||||
---
|
||||
src/librpm-c.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/librpm-c.c b/src/librpm-c.c
|
||||
index 7131de9..e5079b1 100644
|
||||
--- a/src/librpm-c.c
|
||||
+++ b/src/librpm-c.c
|
||||
@@ -463,7 +463,7 @@ supermin_rpm_installed (value rpmv, value pkgv)
|
||||
}
|
||||
|
||||
value
|
||||
-supermin_rpm_pkg_required (value rpmv, value pkgv)
|
||||
+supermin_rpm_pkg_requires (value rpmv, value pkgv)
|
||||
{
|
||||
abort ();
|
||||
}
|
||||
--
|
||||
1.9.3
|
||||
|
91
0008-rpm-reuse-the-rpmtd-when-possible.patch
Normal file
91
0008-rpm-reuse-the-rpmtd-when-possible.patch
Normal file
@ -0,0 +1,91 @@
|
||||
From 3a967a746008001fb9b7ade5451d19a1f1956601 Mon Sep 17 00:00:00 2001
|
||||
From: Pino Toscano <ptoscano@redhat.com>
|
||||
Date: Thu, 18 Sep 2014 16:37:48 +0200
|
||||
Subject: [PATCH] rpm: reuse the rpmtd when possible
|
||||
|
||||
Use a single rpmtd object per operation, making sure it is properly
|
||||
cleaned when needed. This slightly reduces the number of malloc/free's.
|
||||
---
|
||||
src/librpm-c.c | 12 ++++++------
|
||||
1 file changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/librpm-c.c b/src/librpm-c.c
|
||||
index e5079b1..1ae3bad 100644
|
||||
--- a/src/librpm-c.c
|
||||
+++ b/src/librpm-c.c
|
||||
@@ -185,6 +185,7 @@ supermin_rpm_installed (value rpmv, value pkgv)
|
||||
rpmdbMatchIterator iter;
|
||||
int count, i;
|
||||
Header h;
|
||||
+ rpmtd td;
|
||||
|
||||
data = Librpm_val (rpmv);
|
||||
if (data.ts == NULL)
|
||||
@@ -200,16 +201,15 @@ supermin_rpm_installed (value rpmv, value pkgv)
|
||||
|
||||
rv = caml_alloc (count, 0);
|
||||
i = 0;
|
||||
+ td = rpmtdNew ();
|
||||
|
||||
while ((h = rpmdbNextIterator (iter)) != NULL) {
|
||||
HeaderIterator hi;
|
||||
- rpmtd td;
|
||||
uint32_t *val;
|
||||
bool stored_vals[5] = { false };
|
||||
|
||||
v = caml_alloc (5, 0);
|
||||
hi = headerInitIterator (h);
|
||||
- td = rpmtdNew ();
|
||||
while (headerNext (hi, td) == 1) {
|
||||
switch (rpmtdTag (td)) {
|
||||
case RPMTAG_NAME:
|
||||
@@ -251,11 +251,11 @@ supermin_rpm_installed (value rpmv, value pkgv)
|
||||
Store_field (v, 4, caml_copy_string ("unknown"));
|
||||
Store_field (rv, i, v);
|
||||
|
||||
- rpmtdFree (td);
|
||||
headerFreeIterator (hi);
|
||||
++i;
|
||||
}
|
||||
|
||||
+ rpmtdFree (td);
|
||||
rpmdbFreeIterator (iter);
|
||||
|
||||
CAMLreturn (rv);
|
||||
@@ -334,6 +334,7 @@ supermin_rpm_pkg_whatprovides (value rpmv, value pkgv)
|
||||
rpmdbMatchIterator iter;
|
||||
int count, i;
|
||||
Header h;
|
||||
+ rpmtd td;
|
||||
|
||||
data = Librpm_val (rpmv);
|
||||
if (data.ts == NULL)
|
||||
@@ -349,12 +350,11 @@ supermin_rpm_pkg_whatprovides (value rpmv, value pkgv)
|
||||
|
||||
rv = caml_alloc (count, 0);
|
||||
i = 0;
|
||||
+ td = rpmtdNew ();
|
||||
|
||||
while ((h = rpmdbNextIterator (iter)) != NULL) {
|
||||
- rpmtd td;
|
||||
int ret;
|
||||
|
||||
- td = rpmtdNew ();
|
||||
ret = headerGet (h, RPMTAG_NAME, td, HEADERGET_MINMEM);
|
||||
if (ret != 1)
|
||||
caml_failwith ("rpm_pkg_whatprovides: headerGet failed");
|
||||
@@ -362,10 +362,10 @@ supermin_rpm_pkg_whatprovides (value rpmv, value pkgv)
|
||||
Store_field (rv, i, caml_copy_string (rpmtdGetString (td)));
|
||||
|
||||
rpmtdFreeData (td);
|
||||
- rpmtdFree (td);
|
||||
++i;
|
||||
}
|
||||
|
||||
+ rpmtdFree (td);
|
||||
rpmdbFreeIterator (iter);
|
||||
|
||||
CAMLreturn (rv);
|
||||
--
|
||||
1.9.3
|
||||
|
35
0009-rpm-reuse-the-same-iteration-set.patch
Normal file
35
0009-rpm-reuse-the-same-iteration-set.patch
Normal file
@ -0,0 +1,35 @@
|
||||
From c3638240da5f1b56a807cdf802495704bd395cc2 Mon Sep 17 00:00:00 2001
|
||||
From: Pino Toscano <ptoscano@redhat.com>
|
||||
Date: Thu, 18 Sep 2014 16:58:54 +0200
|
||||
Subject: [PATCH] rpm: reuse the same iteration set
|
||||
|
||||
When resolving the requirements of a package, use the same set with the
|
||||
results, instead of creating a new set and merging it with the results
|
||||
set.
|
||||
---
|
||||
src/rpm.ml | 5 ++---
|
||||
1 file changed, 2 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/rpm.ml b/src/rpm.ml
|
||||
index 3a75ea0..4c2156a 100644
|
||||
--- a/src/rpm.ml
|
||||
+++ b/src/rpm.ml
|
||||
@@ -212,13 +212,12 @@ let rpm_get_all_requires pkgs =
|
||||
let provides =
|
||||
try Hashtbl.find rpm_providers x
|
||||
with Not_found -> rpm_pkg_whatprovides (get_rpm ()) x in
|
||||
- let newset = Array.fold_left (
|
||||
+ Array.fold_left (
|
||||
fun newset p ->
|
||||
match rpm_package_of_string p with
|
||||
| None -> newset
|
||||
| Some x -> StringSet.add p newset
|
||||
- ) StringSet.empty provides in
|
||||
- StringSet.union set newset
|
||||
+ ) set provides
|
||||
with Not_found -> set
|
||||
) StringSet.empty reqs in
|
||||
pkgs'
|
||||
--
|
||||
1.9.3
|
||||
|
27
0010-chroot-fix-quoting-in-cp-invocation.patch
Normal file
27
0010-chroot-fix-quoting-in-cp-invocation.patch
Normal file
@ -0,0 +1,27 @@
|
||||
From 73e10157dc90309e9d2cea63e1be3c74ed4aa635 Mon Sep 17 00:00:00 2001
|
||||
From: Pino Toscano <ptoscano@redhat.com>
|
||||
Date: Mon, 29 Sep 2014 16:53:55 +0200
|
||||
Subject: [PATCH] chroot: fix quoting in cp invocation
|
||||
|
||||
Make sure to quote source and destination, to avoid failures when
|
||||
dealing with paths with e.g. spaces, brackets, etc.
|
||||
---
|
||||
src/chroot.ml | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/chroot.ml b/src/chroot.ml
|
||||
index 63a5a79..d0ee4c3 100644
|
||||
--- a/src/chroot.ml
|
||||
+++ b/src/chroot.ml
|
||||
@@ -60,7 +60,7 @@ let build_chroot debug files outputdir =
|
||||
|
||||
| S_REG | S_CHR | S_BLK | S_FIFO | S_SOCK ->
|
||||
if debug >= 2 then printf "supermin: chroot: copy %s\n%!" opath;
|
||||
- let cmd = sprintf "cp -p %s %s" path opath in
|
||||
+ let cmd = sprintf "cp -p %s %s" (quote path) (quote opath) in
|
||||
ignore (Sys.command cmd)
|
||||
with Unix_error _ -> ()
|
||||
) files;
|
||||
--
|
||||
1.9.3
|
||||
|
25
0011-rpm-use-the-proper-parameter.patch
Normal file
25
0011-rpm-use-the-proper-parameter.patch
Normal file
@ -0,0 +1,25 @@
|
||||
From 17317277c8c7a7051502c975d3aa03d9863ca552 Mon Sep 17 00:00:00 2001
|
||||
From: Pino Toscano <ptoscano@redhat.com>
|
||||
Date: Tue, 7 Oct 2014 10:51:01 +0200
|
||||
Subject: [PATCH] rpm: use the proper parameter
|
||||
|
||||
---
|
||||
src/rpm.ml | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/rpm.ml b/src/rpm.ml
|
||||
index 4c2156a..b88ac73 100644
|
||||
--- a/src/rpm.ml
|
||||
+++ b/src/rpm.ml
|
||||
@@ -137,7 +137,7 @@ let rpmh = Hashtbl.create 13
|
||||
|
||||
let rpm_package_of_string str =
|
||||
let query rpm =
|
||||
- let rpms = Array.to_list (rpm_installed (get_rpm ()) str) in
|
||||
+ let rpms = Array.to_list (rpm_installed (get_rpm ()) rpm) in
|
||||
(* RPM will return multiple hits when either multiple versions or
|
||||
* multiple arches are installed at the same time. We are only
|
||||
* interested in the highest version with the best
|
||||
--
|
||||
1.9.3
|
||||
|
29
0012-rpm-fix-caching-of-provides.patch
Normal file
29
0012-rpm-fix-caching-of-provides.patch
Normal file
@ -0,0 +1,29 @@
|
||||
From 46f987c48296ebd35c153c04488fcf7ee97a41bd Mon Sep 17 00:00:00 2001
|
||||
From: Pino Toscano <ptoscano@redhat.com>
|
||||
Date: Tue, 7 Oct 2014 11:09:10 +0200
|
||||
Subject: [PATCH] rpm: fix caching of provides
|
||||
|
||||
Now each provide is resolved really once.
|
||||
---
|
||||
src/rpm.ml | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/rpm.ml b/src/rpm.ml
|
||||
index b88ac73..71cdab2 100644
|
||||
--- a/src/rpm.ml
|
||||
+++ b/src/rpm.ml
|
||||
@@ -211,7 +211,10 @@ let rpm_get_all_requires pkgs =
|
||||
try
|
||||
let provides =
|
||||
try Hashtbl.find rpm_providers x
|
||||
- with Not_found -> rpm_pkg_whatprovides (get_rpm ()) x in
|
||||
+ with Not_found ->
|
||||
+ let p = rpm_pkg_whatprovides (get_rpm ()) x in
|
||||
+ Hashtbl.add rpm_providers x p;
|
||||
+ p in
|
||||
Array.fold_left (
|
||||
fun newset p ->
|
||||
match rpm_package_of_string p with
|
||||
--
|
||||
1.9.3
|
||||
|
38
0013-rpm-check-for-providers-for-not-found-package.patch
Normal file
38
0013-rpm-check-for-providers-for-not-found-package.patch
Normal file
@ -0,0 +1,38 @@
|
||||
From d78c898c7e2bc5f12cbebef98b95a7908d9120f1 Mon Sep 17 00:00:00 2001
|
||||
From: Pino Toscano <ptoscano@redhat.com>
|
||||
Date: Tue, 7 Oct 2014 11:51:15 +0200
|
||||
Subject: [PATCH] rpm: check for providers for not found package
|
||||
|
||||
If a package is not found among the ones installed, check whether there
|
||||
is any other package providing it (only a single one).
|
||||
---
|
||||
src/rpm.ml | 13 ++++++++++++-
|
||||
1 file changed, 12 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/rpm.ml b/src/rpm.ml
|
||||
index 71cdab2..b5c5ff5 100644
|
||||
--- a/src/rpm.ml
|
||||
+++ b/src/rpm.ml
|
||||
@@ -158,7 +158,18 @@ let rpm_package_of_string str =
|
||||
Not_found ->
|
||||
let r =
|
||||
try Some (pkg_of_rpm (query str))
|
||||
- with Not_found -> None in
|
||||
+ with Not_found ->
|
||||
+ try
|
||||
+ let p = rpm_pkg_whatprovides (get_rpm ()) str in
|
||||
+ (* Pick only a provided package when there is just one of them,
|
||||
+ * otherwise there is no reliable way to know which one to pick
|
||||
+ * if there are multiple providers.
|
||||
+ *)
|
||||
+ if Array.length p = 1 then
|
||||
+ Some (pkg_of_rpm (query p.(0)))
|
||||
+ else
|
||||
+ None
|
||||
+ with Not_found -> None in
|
||||
Hashtbl.add rpmh str r;
|
||||
r
|
||||
|
||||
--
|
||||
1.9.3
|
||||
|
@ -1,7 +1,7 @@
|
||||
Summary: Tool for creating supermin appliances
|
||||
Name: supermin
|
||||
Version: 5.1.10
|
||||
Release: 1%{?dist}
|
||||
Release: 2%{?dist}
|
||||
License: GPLv2+
|
||||
|
||||
%if 0%{?rhel} >= 7
|
||||
@ -11,8 +11,23 @@ ExclusiveArch: x86_64
|
||||
URL: http://people.redhat.com/~rjones/supermin/
|
||||
Source0: http://libguestfs.org/download/supermin/%{name}-%{version}.tar.gz
|
||||
|
||||
Patch1: 0001-ext2-fix-small-memory-leak-on-error.patch
|
||||
Patch2: 0002-build-Add-some-more-debug-messages.patch
|
||||
Patch3: 0003-rpm-Don-t-both-verifying-signatures-and-digests-when.patch
|
||||
Patch4: 0004-Use-open_process_full-in-compressed-file-reading.patch
|
||||
Patch5: 0005-package-handlers-add-possibility-for-final-teardown.patch
|
||||
Patch6: 0006-rpm-use-the-rpm-library-instead-of-invoking-rpm.patch
|
||||
Patch7: 0007-rpm-fix-typo-in-non-librpm-code.patch
|
||||
Patch8: 0008-rpm-reuse-the-rpmtd-when-possible.patch
|
||||
Patch9: 0009-rpm-reuse-the-same-iteration-set.patch
|
||||
Patch10: 0010-chroot-fix-quoting-in-cp-invocation.patch
|
||||
Patch11: 0011-rpm-use-the-proper-parameter.patch
|
||||
Patch12: 0012-rpm-fix-caching-of-provides.patch
|
||||
Patch13: 0013-rpm-check-for-providers-for-not-found-package.patch
|
||||
|
||||
BuildRequires: /usr/bin/pod2man
|
||||
BuildRequires: rpm
|
||||
BuildRequires: rpm-devel
|
||||
BuildRequires: yum-utils
|
||||
BuildRequires: /usr/sbin/mke2fs
|
||||
BuildRequires: e2fsprogs-devel
|
||||
@ -21,6 +36,9 @@ BuildRequires: glibc-static, zlib-static
|
||||
BuildRequires: xz-static, xz-devel
|
||||
BuildRequires: ocaml, ocaml-findlib-devel
|
||||
|
||||
# autoreconf during build, since the patches change configure.ac
|
||||
BuildRequires: automake, autoconf
|
||||
|
||||
# These are required only to run the tests. We could patch out the
|
||||
# tests to not require these packages.
|
||||
BuildRequires: augeas hivex kernel tar
|
||||
@ -52,6 +70,10 @@ second when you need to boot one of them.
|
||||
%prep
|
||||
%setup -q
|
||||
|
||||
%autopatch -p1
|
||||
|
||||
autoreconf -i
|
||||
|
||||
|
||||
%build
|
||||
%configure --disable-network-tests
|
||||
@ -84,6 +106,10 @@ make check || {
|
||||
|
||||
|
||||
%changelog
|
||||
* Tue Oct 7 2014 Pino Toscano <ptoscano@redhat.com> - 5.1.10-2
|
||||
- Update to upstream commit d78c898c7e2bc5f12cbebef98b95a7908d9120f1.
|
||||
- BR rpm-devel, since it is now used instead of invoking rpm.
|
||||
|
||||
* Thu Sep 4 2014 Richard W.M. Jones <rjones@redhat.com> - 5.1.10-1
|
||||
- New upstream version 5.1.10.
|
||||
- Remove patch which is now included upstream.
|
||||
|
Loading…
Reference in New Issue
Block a user