setup: problems with local install

Jon Turney jon.turney@dronecode.org.uk
Thu Mar 15 21:02:00 GMT 2018


On 14/03/2018 19:24, Ken Brown wrote:
> On 3/14/2018 12:07 PM, Jon Turney wrote:
>> On 12/03/2018 13:22, Ken Brown wrote:
>>> On 3/8/2018 4:59 PM, Ken Brown wrote:
>>>> On 3/8/2018 10:59 AM, Ken Brown wrote:
>>>>> On 3/7/2018 4:52 PM, Ken Brown wrote:
>>>>>> On 3/6/2018 1:47 PM, Jon Turney wrote:
>>>>>>> On 06/03/2018 15:18, Jon Turney wrote:
>>>>>> I've found another problem with local installs: If a package needs 
>>>>>> upgrading, then the chooser will offer the upgraded version for 
>>>>>> install, even if there's no archive available.  As a result, the 
>>>>>> current version will get uninstalled, and then setup will discover 
>>>>>> that it doesn't have the archive to install the new version.
>>
>> Thanks very much for finding this.
>>
>>>>>> The problem occurs because packagedb::defaultTrust() is called 
>>>>>> after ScanDownloadedFiles() has already done its work. 
>>>>>> solution.update() and solution.trans2db() are called, and 
>>>>>> pkg->desired is set equal to an inaccessible version pv (which has 
>>>>>> been previously removed from pkg->versions).
>>>>>>
>>>>>> I guess trans2db() should check that pv is in pkg->versions before 
>>>>>> acting on an install transaction for pv.  And then we also have to 
>>>>>> make sure to ignore the erase transaction for the current version 
>>>>>> of pkg.
>>>>>>
>>>>>> Alternatively, can we just remove an inaccessible packageversion 
>>>>>> from the libsolv pool, or at at least just tell libsolv that we 
>>>>>> don't want to install it?
>>
>> Attached is an attempt at that.
>>
>> I think this is preferable, if it works correctly, as I think avoiding 
>> solutions with these unavailable versions is better than trying to 
>> massage the solution afterwards.
> 
> I agree, and it does seem to work correctly.  But there's one other case 
> that it doesn't cover:  Suppose there's no archive for the installed 
> version.  Even with your patch, the user can still choose 'Reinstall', 
> which will fail.  The first of the patches from my previous email fixes 
> this case.

Yes.  I applied that as well.

The subtlety I'd failed to grasp when I wrote that comment is that 
ScanDownloadedFiles() prunes versions which aren't available locally, 
*except* if they are already installed.

Thanks.




More information about the Cygwin-apps mailing list