@@ -262,17 +262,35 @@ void Resolver::add_dep(Dependencies &dd, const PackageId &d)
262262
263263void Resolver::resolve (const UnresolvedPackages &deps, std::function<void ()> resolve_action)
264264{
265- if (!resolve_action)
266- throw std::logic_error (" Empty resolve action!" );
267-
268265 if (getPackageStore ().use_lock_file )
269266 {
267+ UnresolvedPackages deps2;
270268 for (auto &d : deps)
271- add_dep (download_dependencies_, getPackageStore ().resolved_packages [d]);
269+ {
270+ auto &up = getPackageStore ().resolved_packages ;
271+ auto i = up.find (d);
272+ if (i == up.end ())
273+ {
274+ deps2.insert (d);
275+ LOG_INFO (logger, " new dependency detected: " + d.toString ());
276+ // throw std::runtime_error("unresolved package from lock file: " + d.toString());
277+ }
278+ add_dep (download_dependencies_, i->second );
279+ }
280+ if (!deps2.empty ())
281+ resolve1 (deps2, resolve_action);
272282 resolve_action ();
273283 return ;
274284 }
275285
286+ resolve1 (deps, resolve_action);
287+ }
288+
289+ void Resolver::resolve1 (const UnresolvedPackages &deps, std::function<void ()> resolve_action)
290+ {
291+ if (!resolve_action)
292+ throw std::logic_error (" Empty resolve action!" );
293+
276294 // ref to not invalidate all ptrs
277295 auto &us = Settings::get_user_settings ();
278296 auto cr = us.remotes .begin ();
@@ -288,7 +306,8 @@ void Resolver::resolve(const UnresolvedPackages &deps, std::function<void()> res
288306 {
289307 if (us.remotes .size () > 1 )
290308 LOG_INFO (logger, " Trying " + current_remote->name + " remote" );
291- download_dependencies_ = getDependenciesFromRemote (deps, current_remote);
309+ auto dd = getDependenciesFromRemote (deps, current_remote);
310+ download_dependencies_.insert (dd.begin (), dd.end ());
292311 }
293312 catch (const std::exception &e)
294313 {
@@ -315,7 +334,8 @@ void Resolver::resolve(const UnresolvedPackages &deps, std::function<void()> res
315334 {
316335 try
317336 {
318- download_dependencies_ = getDependenciesFromDb (deps, current_remote);
337+ auto dd = getDependenciesFromDb (deps, current_remote);
338+ download_dependencies_.insert (dd.begin (), dd.end ());
319339 }
320340 catch (std::exception &e)
321341 {
0 commit comments