(* febootstrap 3
- * Copyright (C) 2009-2010 Red Hat Inc.
+ * Copyright (C) 2009-2011 Red Hat Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
(* Create a temporary directory for use by all the functions in this file. *)
let tmpdir = tmpdir ()
-let installed_pkgs =
- run_command_get_lines "dpkg-query --show --showformat='${Package}\\n'"
-
let debian_detect () =
file_exists "/etc/debian_version" &&
Config.aptitude <> "no" && Config.apt_cache <> "no" && Config.dpkg <> "no"
+let installed_pkgs = ref []
+
+let debian_init () =
+ installed_pkgs :=
+ run_command_get_lines "dpkg-query --show --showformat='${Package}\\n'"
+
+let get_installed_pkgs () =
+ match !installed_pkgs with
+ | [] -> assert false
+ | pkgs -> pkgs
+
let rec debian_resolve_dependencies_and_download names =
let cmd =
- sprintf "%s depends --recurse -i %s | grep -v '^[<[:space:]]'"
+ sprintf "%s depends --recurse -i %s | grep -v '^[<[:space:]]' | grep -Ev ':\\w+\\b'"
Config.apt_cache
(String.concat " " (List.map Filename.quote names)) in
let pkgs = run_command_get_lines cmd in
not (List.exists (fun re -> Str.string_match re name 0) excludes)
) pkgs in
- let present_pkgs, download_pkgs = List.partition (
- fun pkg -> List.exists ((=) pkg) installed_pkgs
- ) pkgs in
+ let present_pkgs, download_pkgs =
+ if not use_installed then
+ [], pkgs
+ else
+ List.partition (
+ fun pkg -> List.exists ((=) pkg) (get_installed_pkgs ())
+ ) pkgs in
- debug "wanted packages (present / download): %s / %s\n"
- (String.concat " " present_pkgs)
- (String.concat " " download_pkgs);
+ debug "packages already present: %s" (String.concat " " present_pkgs);
+ debug "wanted packages to download: %s" (String.concat " " download_pkgs);
(* Download the packages. *)
if (List.length download_pkgs > 0)
) lines in
files
-let debian_list_files ?(use_installed=false) pkg =
- if use_installed && List.exists ((=) pkg) installed_pkgs then
+let debian_list_files pkg =
+ if use_installed && List.exists ((=) pkg) (get_installed_pkgs ()) then
debian_list_files_installed pkg
else
debian_list_files_downloaded pkg
(* Easy because we already unpacked the archive above. *)
-let debian_get_file_from_package ?(use_installed=false) pkg file =
- if use_installed && List.exists (fun p -> p = pkg) installed_pkgs then
+let debian_get_file_from_package pkg file =
+ if use_installed && List.exists (fun p -> p = pkg) (get_installed_pkgs ())
+ then
file
else
tmpdir // pkg ^ ".d" // file
let () =
let ph = {
ph_detect = debian_detect;
+ ph_init = debian_init;
ph_resolve_dependencies_and_download =
debian_resolve_dependencies_and_download;
ph_list_files = debian_list_files;