208
208
-- Directory where the package was downloaded is stored in 'download_dir' attribute
209
209
-- of that package in the table of packages returned by this function.
210
210
--
211
+ -- Optional argument 'dependency_manifest' is a table of dependencies examined
212
+ -- from previous installations etc. It can be used to speed-up the dependency
213
+ -- resolving procedure for example.
214
+ --
211
215
-- When optional 'force_no_download' parameter is set to true, then information
212
216
-- about packages won't be downloaded during dependency resolving, assuming that
213
217
-- entries in the provided manifest are already complete.
227
231
-- in installed packages between the recursive calls of this function.
228
232
--
229
233
-- TODO: refactor this spaghetti code!
230
- local function get_packages_to_install (pkg , installed , manifest , force_no_download , suppress_printing , deploy_dir , dependency_parents , tmp_installed )
234
+ local function get_packages_to_install (pkg , installed , manifest , dependency_manifest , force_no_download , suppress_printing , deploy_dir , dependency_parents , tmp_installed )
231
235
manifest = manifest or mf .get_manifest ()
236
+ dependency_manifest = dependency_manifest or {}
232
237
force_no_download = force_no_download or false
233
238
suppress_printing = suppress_printing or false
234
239
deploy_dir = deploy_dir or cfg .root_dir
@@ -240,6 +245,7 @@ local function get_packages_to_install(pkg, installed, manifest, force_no_downlo
240
245
assert (type (pkg ) == " string" , " depends.get_packages_to_install: Argument 'pkg' is not a string." )
241
246
assert (type (installed ) == " table" , " depends.get_packages_to_install: Argument 'installed' is not a table." )
242
247
assert (type (manifest ) == " table" , " depends.get_packages_to_install: Argument 'manifest' is not a table." )
248
+ assert (type (dependency_manifest ) == " table" , " depends.get_packages_to_install: Argument 'dependency_manifest' is not a table." )
243
249
assert (type (force_no_download ) == " boolean" , " depends.get_packages_to_install: Argument 'force_no_download' is not a boolean." )
244
250
assert (type (suppress_printing ) == " boolean" , " depends.get_packages_to_install: Argument 'suppress_printing' is not a boolean." )
245
251
assert (type (deploy_dir ) == " string" , " depends.get_packages_to_install: Argument 'deploy_dir' is not a string." )
@@ -302,17 +308,23 @@ local function get_packages_to_install(pkg, installed, manifest, force_no_downlo
302
308
-- will be rewritten by information taken from pkg's dist.info file
303
309
if pkg .version == " scm" then pkg .was_scm_version = true end
304
310
305
- -- download info about the package if not already downloaded and downloading not prohibited
306
- if not (pkg .download_dir or force_no_download ) then
307
- local path_or_err
308
- pkg , path_or_err = package .retrieve_pkg_info (pkg , deploy_dir , suppress_printing )
309
- if not pkg then
310
- err = " Error when resolving dependencies: " .. path_or_err
311
- else
312
- -- set path to downloaded package - used to indicate that the
313
- -- package was already downloaded, to delete unused but downloaded
314
- -- packages and also to install choosen packages
315
- pkg .download_dir = path_or_err
311
+ -- TODO: HERE?
312
+ -- Try to obtain cached dependency information from the dependency manifest
313
+ if dependency_manifest [pkg .name .. " -" .. pkg .version ] and cfg .dep_cache then
314
+ pkg = dependency_manifest [pkg .name .. " -" .. pkg .version ]
315
+ else
316
+ -- download info about the package if not already downloaded and downloading not prohibited
317
+ if not (pkg .download_dir or force_no_download ) then
318
+ local path_or_err
319
+ pkg , path_or_err = package .retrieve_pkg_info (pkg , deploy_dir , suppress_printing )
320
+ if not pkg then
321
+ err = " Error when resolving dependencies: " .. path_or_err
322
+ else
323
+ -- set path to downloaded package - used to indicate that the
324
+ -- package was already downloaded, to delete unused but downloaded
325
+ -- packages and also to install choosen packages
326
+ pkg .download_dir = path_or_err
327
+ end
316
328
end
317
329
end
318
330
@@ -528,7 +540,7 @@ function get_depends(packages, installed, manifest, dependency_manifest, deploy_
528
540
-- get packages needed to satisfy the dependencies
529
541
for _ , pkg in pairs (packages ) do
530
542
531
- local needed_to_install , err = get_packages_to_install (pkg , tmp_installed , manifest , force_no_download , suppress_printing , deploy_dir )
543
+ local needed_to_install , err = get_packages_to_install (pkg , tmp_installed , manifest , dependency_manifest , force_no_download , suppress_printing , deploy_dir )
532
544
533
545
-- if everything's fine
534
546
if needed_to_install then
@@ -705,10 +717,16 @@ function update_dependency_manifest(pkg, installed, to_install, dep_manifest)
705
717
dep_manifest [name_ver ] = {}
706
718
dep_manifest [name_ver ].name = pkg .name
707
719
dep_manifest [name_ver ].version = pkg .version
720
+ dep_manifest [name_ver ].arch = pkg .arch
721
+ dep_manifest [name_ver ].type = pkg .type
708
722
dep_manifest [name_ver ].path = pkg .path
709
723
dep_manifest [name_ver ].depends = pkg .depends
710
724
dep_manifest [name_ver ].conflicts = pkg .conflicts
711
725
dep_manifest [name_ver ].provides = pkg .provides
726
+ dep_manifest [name_ver ].license = pkg .license
727
+ dep_manifest [name_ver ].desc = pkg .desc
728
+ dep_manifest [name_ver ].author = pkg .author
729
+ dep_manifest [name_ver ].maintainer = pkg .maintainer
712
730
713
731
-- add information which dependency is satisfied by which package
714
732
if pkg .depends then
0 commit comments