public inbox for cygwin@cygwin.com
 help / color / mirror / Atom feed
* Package choosing algorithm ...
@ 2016-03-20 16:55 Houder
  2016-03-21 10:00 ` Corinna Vinschen
  0 siblings, 1 reply; 9+ messages in thread
From: Houder @ 2016-03-20 16:55 UTC (permalink / raw)
  To: cygwin

Hi Corinna,

A year ago you changed the "package choosing algorithm" ...

https://sourceware.org/ml/cygwin/2015-02/msg00034.html
  - [ANNOUNCEMENT] Updated: setup.exe (Release 2.864) -- by Corinna 
Vinschen
Here C. announces the modification of the "package choosing algorithm"
(and the introduction of the "mirror mode")

When I started setup (2.873) and selected "Download without Installing", 
it
offered me to download version 2.5.0-0.8 of cygwin (installed: 
2.5.0-0.7).

Splendid!

However when I restarted setup and selected "Install from Local 
Directory",
it did NOT offer me to install version 2.5.0-0.8 ...

(Meaning, I had to restart setup AGAIN, and force it to install the last
  version of cygwin - a bit annoying, as you wrote in [1])

Did your modification only apply to the  "Download without Installing" 
part
of setup? (i.e. downloading from internet)

(honestly, I do not remember whether or not setup acted consistently in 
both
  modes after your modification)

Did I miss something?

Regards,

Henri

[1]
https://cygwin.com/ml/cygwin-apps/2015-01/msg00126.html
  - Setup patch to keep test version if test version installed - by 
Corinna
    Vinschen
Start of discussion ...

=====

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Package choosing algorithm ...
  2016-03-20 16:55 Package choosing algorithm Houder
@ 2016-03-21 10:00 ` Corinna Vinschen
  2016-03-21 10:23   ` Houder
  2016-03-21 12:40   ` Houder
  0 siblings, 2 replies; 9+ messages in thread
From: Corinna Vinschen @ 2016-03-21 10:00 UTC (permalink / raw)
  To: cygwin

[-- Attachment #1: Type: text/plain, Size: 1346 bytes --]

On Mar 20 17:54, Houder wrote:
> Hi Corinna,
> 
> A year ago you changed the "package choosing algorithm" ...
> 
> https://sourceware.org/ml/cygwin/2015-02/msg00034.html
>  - [ANNOUNCEMENT] Updated: setup.exe (Release 2.864) -- by Corinna Vinschen
> Here C. announces the modification of the "package choosing algorithm"
> (and the introduction of the "mirror mode")
> 
> When I started setup (2.873) and selected "Download without Installing", it
> offered me to download version 2.5.0-0.8 of cygwin (installed: 2.5.0-0.7).
> 
> Splendid!
> 
> However when I restarted setup and selected "Install from Local Directory",
> it did NOT offer me to install version 2.5.0-0.8 ...
> 
> (Meaning, I had to restart setup AGAIN, and force it to install the last
>  version of cygwin - a bit annoying, as you wrote in [1])
> 
> Did your modification only apply to the  "Download without Installing" part
> of setup? (i.e. downloading from internet)

I'm using "Install from Local Directory: all the time (having a local
mirror dir) and it works fine for me.  No idea what has gone different
in your scenario.  If there's a bug, we're certainly open to get fixes :)


Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Package choosing algorithm ...
  2016-03-21 10:00 ` Corinna Vinschen
@ 2016-03-21 10:23   ` Houder
  2016-03-21 12:40   ` Houder
  1 sibling, 0 replies; 9+ messages in thread
From: Houder @ 2016-03-21 10:23 UTC (permalink / raw)
  To: cygwin

On 2016-03-21 11:00, Corinna Vinschen wrote:
> On Mar 20 17:54, Houder wrote:
>> Hi Corinna,
>> 
>> A year ago you changed the "package choosing algorithm" ...

[snip]

> I'm using "Install from Local Directory: all the time (having a local
> mirror dir) and it works fine for me.  No idea what has gone different
> in your scenario.  If there's a bug, we're certainly open to get fixes 
> :)

... it works for you ... that is odd (yes, I am surprised, as I first 
did
look for the cause of the problem at my side)

 From the above I understand that you specify -m option when calling 
setup
... Do you?

Is that the only option that you use? (just asking, because I 
experimented
with a different (higher) version number for the cygwin tar ball when, 
but
it did not make a difference).

Anyone using setup in the same way as I do and not experiencing my 
problem?

Regards,

Henri


--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Package choosing algorithm ...
  2016-03-21 10:00 ` Corinna Vinschen
  2016-03-21 10:23   ` Houder
@ 2016-03-21 12:40   ` Houder
  2016-03-22  9:52     ` Corinna Vinschen
  1 sibling, 1 reply; 9+ messages in thread
From: Houder @ 2016-03-21 12:40 UTC (permalink / raw)
  To: cygwin

On 2016-03-21 11:00, Corinna Vinschen wrote:
> On Mar 20 17:54, Houder wrote:
>> Hi Corinna,
>> 
>> A year ago you changed the "package choosing algorithm" ...

[snip]

> I'm using "Install from Local Directory: all the time (having a local
> mirror dir) and it works fine for me.  No idea what has gone different
> in your scenario.  If there's a bug, we're certainly open to get fixes 
> :)

Hi Corinna, Achim, Yaakov ... (did I miss anyone? :-)

Did some more experimenting ...

All the time using "Install from Local Directory" ...

  - copied vim-minimal-7.4.1558-1.tar.xz to vim-minimal-7.4.1600-1.tar.xz
  - copied cygwin-2.5.0-0.8.tar.xz to cygwin-2.5.0-0.9.tar.xz
  - modified setup.ini
vim-minimal: substituted 1600 for current
cygwin: substituted 0.9 for TEST <====

Invoked setup:
  - vim-minimal is offered for install
  - cygwin is NOT (0.8 is shown with a interrogation sign (?) for size 
...

==> Again:
  - modified setup.ini
cygwin: substituted 0.9 for CURRENT <====

Invoked setup:
  - vim-minimal is offered for install
  - cygwin is ** NOW ** offered for install ...

==> Again:
  - modified setup.ini
cygwin: substituted 0.9 for TEST <==== (as in the 1st test)

Invoked setup: BUT THIS TIME SPECIFYING the -m option
  - vim-minimal is offered for install
  - cygwin is ** NOW ** offered for install ...

Apparently specifying the -m option makes a difference ...

Regards,

Henri

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Package choosing algorithm ...
  2016-03-21 12:40   ` Houder
@ 2016-03-22  9:52     ` Corinna Vinschen
  2016-03-22 17:44       ` Ian Lambert
                         ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Corinna Vinschen @ 2016-03-22  9:52 UTC (permalink / raw)
  To: cygwin

[-- Attachment #1: Type: text/plain, Size: 1266 bytes --]

On Mar 21 13:40, Houder wrote:
> All the time using "Install from Local Directory" ...
> 
>  - copied vim-minimal-7.4.1558-1.tar.xz to vim-minimal-7.4.1600-1.tar.xz
>  - copied cygwin-2.5.0-0.8.tar.xz to cygwin-2.5.0-0.9.tar.xz
>  - modified setup.ini
> vim-minimal: substituted 1600 for current
> cygwin: substituted 0.9 for TEST <====
> 
> Invoked setup:
>  - vim-minimal is offered for install
>  - cygwin is NOT (0.8 is shown with a interrogation sign (?) for size ...
> 
> ==> Again:
>  - modified setup.ini
> cygwin: substituted 0.9 for CURRENT <====
> 
> Invoked setup:
>  - vim-minimal is offered for install
>  - cygwin is ** NOW ** offered for install ...
> 
> ==> Again:
>  - modified setup.ini
> cygwin: substituted 0.9 for TEST <==== (as in the 1st test)
> 
> Invoked setup: BUT THIS TIME SPECIFYING the -m option
>  - vim-minimal is offered for install
>  - cygwin is ** NOW ** offered for install ...
> 
> Apparently specifying the -m option makes a difference ...

It shouldn't but apparently it does, oh well.

https://cygwin.com/acronyms#PGA anybody?


Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Package choosing algorithm ...
  2016-03-22  9:52     ` Corinna Vinschen
@ 2016-03-22 17:44       ` Ian Lambert
  2016-03-23 16:22       ` Houder
                         ` (2 subsequent siblings)
  3 siblings, 0 replies; 9+ messages in thread
From: Ian Lambert @ 2016-03-22 17:44 UTC (permalink / raw)
  To: cygwin

On March 22, 2016 5:52:50 AM EDT, Corinna Vinschen <corinna-cygwin@cygwin.com> wrote:
>On Mar 21 13:40, Houder wrote:
>> 
>> Apparently specifying the -m option makes a difference ...

>>>Anyone using setup in the same way as I do and not experiencing my 
problem?



Since:
 http://cygwin.com/ml/cygwin/2016-02/msg00250.html

I have been struggling with using apt-cyg to download package updates, 
because it uses wget, and running setup local.
Also using no-admin, without -m, I had similar problems
 getting the latest or test versions to download and install. My latest trick was deletes in /etc/setup/installed.db, and a small mod to apt-cyg.
I got cygwin 2.5.0-0.8 and mintty 2.3.3 this way.


>It shouldn't but apparently it does, oh well.
>
>https://cygwin.com/acronyms#PGA anybody?
>
>
>Corinna

I took a shot at git mirror of setup, to see if I could add user/password, or user-agent, options to setup,
 but getting git to download anything has so far failed for me. 




--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Package choosing algorithm ...
  2016-03-22  9:52     ` Corinna Vinschen
  2016-03-22 17:44       ` Ian Lambert
@ 2016-03-23 16:22       ` Houder
  2016-04-06 10:29       ` Houder
  2016-04-06 10:49       ` Package choosing algorithm ... more clarification Houder
  3 siblings, 0 replies; 9+ messages in thread
From: Houder @ 2016-03-23 16:22 UTC (permalink / raw)
  To: cygwin

On 2016-03-22 10:52, Corinna Vinschen wrote:
> On Mar 21 13:40, Houder wrote:

[snip]

>> Apparently specifying the -m option makes a difference ...
> 
> It shouldn't but apparently it does, oh well.
> 
> https://cygwin.com/acronyms#PGA anybody?

Hi Corinna,

More experimenting ... including building and testing setup.exe

All the time using "Install from Local Directory" ...

  - copied cygwin-2.5.0-0.8.tar.xz to cygwin-2.5.0-0.9.tar.xz
  - modified setup.ini
cygwin: substituted 0.9 for TEST

  - using my test version of setup.exe, I found out that the current 
version of
    the cygwin tarball (setup.ini) HAD to be in my repo ... or else setup 
would
    not offer the new test version for install ...
  - I modified package_meta.h accordingly - see below
    (my new test version is offered for install after the modification)
  - next I downloaded the current version of the cygwin tarball and moved
    the file to appropriate place in my repo.
    Using the official version of setup, I verified that my test version 
is now
    offered for install.

Please, keep in mind: I am NOT announcing here that I found the bug ... 
Please,
keep that in mind (inexperienced C++ developer and all that).

I am sure more testing is required ...

Regards,

Henri

======

package_meta.h:

   std::string action_caption () const;
   packageversion trustp (bool _default, trusts const t) const
   {
     /* If the user chose "test" and a "test" version is available, 
return it. */
     if (t == TRUST_TEST && exp)
       return exp;
     /* Are we looking for the default version and does the installed 
version
        have a higher version number than the "curr" package?  This means 
the
        user has installed a "test" version, or built her own version 
newer
        than "curr".  Rather than pulling the user back to "curr", we 
install
        "test" if a "test" version is available and the version number is 
higher,
        or we stick to "installed" if not.  This reflects the behaviour 
of
        `yum update' on Fedora. */
// Henri
//Log (LOG_PLAIN) << "HENRI:" << "\t" << this->name << "\t" << _default 
<< "\t" << prev << curr << exp << "\t" << installed << endLog;
Log (LOG_PLAIN) << "HENRI:" << "\t" << this->name << " " \
         << curr << " " << installed << " cmp(c,i): " << 
packageversion::compareVersions (curr, installed) << " " \
         << installed << " " << exp << " cmp(i,e): " << 
packageversion::compareVersions (installed, exp) << endLog;

// Henri: Oops, current (setup.ini) is NOT present in repo in my case 
...
//    if (_default && curr && installed
     if (_default && installed
         && packageversion::compareVersions (curr, installed) < 0)
       {
         if (exp && packageversion::compareVersions (installed, exp) < 0) 
{
Log (LOG_PLAIN) << "HENRI!" << "\t" << this->name << endLog;
           return exp;
         }
         return installed;
       }
     /* Otherwise, if a "curr" version exists, return "curr". */
     if (curr)
       return curr;
     /* Otherwise return the installed version. */
     return installed;
   }

=====

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Package choosing algorithm ...
  2016-03-22  9:52     ` Corinna Vinschen
  2016-03-22 17:44       ` Ian Lambert
  2016-03-23 16:22       ` Houder
@ 2016-04-06 10:29       ` Houder
  2016-04-06 10:49       ` Package choosing algorithm ... more clarification Houder
  3 siblings, 0 replies; 9+ messages in thread
From: Houder @ 2016-04-06 10:29 UTC (permalink / raw)
  To: cygwin

[-- Attachment #1: Type: text/plain, Size: 4033 bytes --]

Title: Re: Package choosing agorithm ...

Hi Corinna,

(Of course I am formally addressing the project leader, but Achim, Jon, 
Yaakov,
  others? are welcome to correct me if I am wrong below).

D w/o I = Download without Install
I f LD  = Install from Local Directory

As a reminder: I reported that a new test release of Cygwin is NOT 
offered
for install (having installed the previous test release) in my case.

     https://cygwin.com/ml/cygwin/2016-03/msg00425.html

Relevant in my case is:

  - I am not using a local mirror ...
      - but a "partially populated Local Directory"
  - I do not invoke setup.exe with the -m option
  - my local directory does not have the current release of Cygwin

As you replied "it works for me" and "not using the -m option should not
make a difference", I decided to study the source code of setup.exe.

As I had never seen the source code of setup before, I started my study 
where
you had "left off" modifying (about a year ago).

Subsequently, I reported back to the list, announcing that I found the 
bug,
but was not sure I had.

    https://cygwin.com/ml/cygwin/2016-03/msg00480.html

I was wrong.

My patch did work, but for the wrong reasons.

So does your modification of packagemeta::trustp ...

Here is another attempt of mine (attempt? I seriously doubt whether 
there is
someone which fully understands the source code in all its details ...)

You will find 2 patch files attached. These patch files modify 
(correct):

  1. packagemeta::ScanDownLoadedFiles and
  2. packagemeta::trustp

(yes, I do realize, that this correction to setup, is NOT important 
enough to
  most of you - using a local mirror and all that; consequently, do 
whatever you
  like with my post - I am merely providing info to the list).

My argument for the correction is as follows:

  - packagedb::packages, a class variable, is the "package database" that 
is
    used by setup.
  - basically, it is a list of pairs (mapping between the packagename and 
its
    entry in setup.ini) (one where installed.db has been "integrated").
  - formally:
     - typedef std::map <std::string, packagemeta *> packagecollection;
     - static packagecollection packages;
  - packagemeta is the type that describes a "package entry" from 
setup.ini
  - an object of type packagemeta does not only describe the previous, 
current
    and experimental (if applicable) lines from a package entry in 
setup.ini,
    it also describes the installed version of a package, as if 
installed.db is
    part of setup.ini.
--
  - bottom-line: the prev, curr, exp and installed data member of 
packagemeta
    are "static": these data members represent the info from setup.ini 
(and
    installed.db) and they should never be "nullified".
  - yet, that is exactly what happens in 
metapackage::ScanDownLoadedFiles.
--
  - packagemeta ALSO has a "not so static" data member, called versions; 
like
    packages, the contents of versions is "variable"
     - versions, a set of type packageversion, contains the versions of 
the
       package that are available (the source code speaks about 
"accessible")
     - available (in my simplistic view) means whether or not the tarball 
is
       present in the (local) repo
     - unfortunately, though versions specifies which versions are 
available,
       it does not tell us whether the previous, current or experimental
       version of a package is available or not
--
  - bottom-line: version numbers can be compared if that info is present 
in
    setup.ini; however, although the info may be present, it does not 
tell us
    that the associated tarball is available (neither does versions).
  - consequently, metapackage:trustp does not only have to verify that
    setup.ini has the required info, it also has to verify that the 
tarball
    is available, before it can give the "go-ahead".

Lastly: No, I have not tested (been able) my modification for each 
possible
configuration out there (for instance, I do not install source 
tarballs).

Regards,
Henri

=====

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: package_meta_cc.patch --]
[-- Type: text/x-diff; name=package_meta_cc.patch, Size: 869 bytes --]

diff --git a/package_meta.cc b/package_meta.cc
index 34ff78c..ff787a8 100644
--- a/package_meta.cc
+++ b/../src2/package_meta.cc
@@ -683,15 +683,18 @@ packagemeta::ScanDownloadedFiles (bool mirror_mode)
 	  /* For local installs, if there is no src and no bin, the version
 	   * is unavailable
 	   */
-	  if (!i->accessible () && !pkgsrcver.accessible ()
-	      && *i != pkg.installed)
+	  if (*i != pkg.installed
+	      && !i->accessible () && !pkgsrcver.accessible () )
 	    {
+// Henri: innihilate the info that has been collected from setup.ini? DO NOT!
+	      #if 0
 	      if (pkg.prev == *i)
 		pkg.prev = packageversion ();
 	      if (pkg.curr == *i)
 		pkg.curr = packageversion ();
 	      if (pkg.exp == *i)
 		pkg.exp = packageversion ();
+	      #endif
 	      pkg.versions.erase (i++);
 	      /* For now, leave the source version alone */
 	    }

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: package_meta_h.patch --]
[-- Type: text/x-diff; name=package_meta_h.patch, Size: 856 bytes --]

diff --git a/package_meta.h b/package_meta.h
index b24d4fc..3d2b775 100644
--- a/package_meta.h
+++ b/../src2/package_meta.h
@@ -105,12 +105,14 @@ public:
     if (_default && curr && installed
 	&& packageversion::compareVersions (curr, installed) < 0)
       {
-	if (exp && packageversion::compareVersions (installed, exp) < 0)
+// Henri: no, no, no ... first check whether the associated tarball is in the repo or not!
+	if (exp.accessible() && exp && packageversion::compareVersions (installed, exp) < 0)
 	  return exp;
 	return installed;
       }
     /* Otherwise, if a "curr" version exists, return "curr". */
-    if (curr)
+// Henri: no, no, no ... first check whether the associated tarball is in the repo or not!
+    if (curr.accessible() && curr)
       return curr;
     /* Otherwise return the installed version. */
     return installed;

[-- Attachment #4: Type: text/plain, Size: 218 bytes --]

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Package choosing algorithm ... more clarification
  2016-03-22  9:52     ` Corinna Vinschen
                         ` (2 preceding siblings ...)
  2016-04-06 10:29       ` Houder
@ 2016-04-06 10:49       ` Houder
  3 siblings, 0 replies; 9+ messages in thread
From: Houder @ 2016-04-06 10:49 UTC (permalink / raw)
  To: cygwin

[-- Attachment #1: Type: text/plain, Size: 79 bytes --]

For those interested, see attached file (chooser_overview.txt).

Regards,
Henri

[-- Attachment #2: chooser_overview.txt --]
[-- Type: text/plain, Size: 5697 bytes --]

chooser_overview.txt:

2016-04-05 // Another attempt to create an overview ...

 = precondition
 - assume a "database" which reflects the info from setup.ini ... (packagedb::packages)
    - it list each package and every version of that pkg ...
 - this database even tells us what version has been installed if that is the case (reflecting installed.db)
 - furthermore we (setup.exe) are able to ascertain whether the tarball, associated with a version, is available
   or not -- the source code of setup.exe uses the term "accessible" for availability

 = D w/o I (Download without Installing)
 - setup.exe should show us ALL the pkgs and every version of that pkg ...
    - assume all tarballs are available (stable mirror)

 = I f LD (Install from Local Directory)
 - setup.exe should show us the installed pkgs and the versions of that pkg that are not installed, but are available
   in the repo ...
    - the tarball of an installed version may or may not be available in the repo ...
 - furthermore it should show us each non-installed pkg if at least one version of that pkg is available in the repo

ChooserPage::OnInit has the following call flow in both cases (D w/o I and I f LD)

ChooserPage::OnInit
  packagemeta::ScanDownLoadedFiles
  packagedb::setExistence
  packagemeta::trustp(true, ...

 = D w/o I

 // (pkg.installed == version) => pkg is installed
 - ScanDownloadedFiles # method name is a misnomer here
    ! (pkg is installed || a version is acccessible) => erase version from packagemeta.versions
    - here all versions will be kept (stable mirror) in packagemeta.versions
 - setExistence
    ! (pkg is installed || a version is acccessible) => erase pkg from packages
    - the test whether the pkg is installed or not, is useless here ...
    - ... as all pkgs (i.e. all versions of each pkg) are available (accessible): UNmodified database
 End result: setup.up will show us all the pkgs and every version of each pkg ...

 = I f LD

 // (pkg.installed == version) => pkg is installed
 - ScanDownloadedFiles
    ! (pkg is installed || a version is accessible) => erase version from packagemeta.versions
    - not-installed pkgs: available versions will be kept in packagemeta.versions
    - installed pkgs: the installed version will be kept
    - installed pkgs: non-available versions will be removed from packagemeta.versions
 - setExistence
    ! (pkg is installed || a version is accessible) => erase pkg from packages
    - a not-installed pkg, of which at least one version is available: this pkg will be kept in the database
      (versions will show the available versions)
    - installed pkgs: these pkgs will be kept in the database
      (versions will show the installed version and available versions that are not installed)
 End result: setup.exe will show us all the available versions of each pkg, if it has not been installed yet, and all
 the pkgs (both the installed version and available versions that are not installed) which have been installed ...

----- Ignoring the issue of source tarballs ...

Each "package entry" (p, c and/or t) in setup.ini is represeneted by an object of type packagemeta ...

 - class variable packages (of type packagedb): std::map <std::string, *packagemeta>
   or: a mapping from a packagename to a pointer to an object of type packagemeta

A simplified view of the data members of class packagemeta is as follows:

 - prev of type packageversion
 - curr ditto
 - exp ditto
 - installed ditto
 - versions of type std::set <packageversion>
-
prev, curr, exp and installed reflect the "static" part of a "package entry": these data members reflect the info from both
setup.ini and installed.db ...
"Nullifying" these data members, as currently happens in ScanDownLoadedFiles is ... stupid?

versions tells what versions of the pkg are available (accessible); versions is managed by ScanDownLoadedFiles ...

Attempting to grasp the general flow of computation:

packagemeta::ScanDownLoadedFiles =>
for each pkg // from packagedb::packages
  for each version // from metapackage::versions
    [ <this>.scan() ] // packageversion::scan() -- simplified!
    // (pkg.installed == version) => pkg is installed
    if ! (pkg is installed || version is accessible) // packagemeta::installed, packageversion::accessible()
        erase version from versions
Note: a version is NOT erased if the version is installed OR if the version is available

packagemeta::accessible => // called by setExistence
for each version // from metapackage::versions
  if version is accessible // packageversion::accessible()
    return true // pkg is available in (local) repo
  return false

packageversion::accessible =>
_packageversion::accessible =>
...

packagedb::setExistence
for each pkg // from packagedb::packages
  // (pkg.installed == version) => pkg is installed
  if ! (pkg is installed || a version is accessible) // packagemeta::installed, packagemeta::accessible()
    erase pkg from packages
Note: a pkg is NOT erased if it is installed, OR if at least one version is available if the pkg is not installed

packagemeta:trustp =>
... only the default trust for the moment ...
if (pkg is installed)
  if (installed version > current version) // requires curr to be properly initialized, i.e. setup.ini MUST have
                                           // a current entry for this package
    if (the experimental version is available
        && experimental version > installed version) // requires exp to be properly initialized ...
          return exp;
    else
      return installed;
else
  if (the current version is available) // requires curr to be properly initialized ...
    return curr;
return installed;

=====

[-- Attachment #3: Type: text/plain, Size: 218 bytes --]

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2016-04-06 10:49 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-03-20 16:55 Package choosing algorithm Houder
2016-03-21 10:00 ` Corinna Vinschen
2016-03-21 10:23   ` Houder
2016-03-21 12:40   ` Houder
2016-03-22  9:52     ` Corinna Vinschen
2016-03-22 17:44       ` Ian Lambert
2016-03-23 16:22       ` Houder
2016-04-06 10:29       ` Houder
2016-04-06 10:49       ` Package choosing algorithm ... more clarification Houder

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).