Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

BestFitNoCheckSelector Class Reference

Inheritance diagram for BestFitNoCheckSelector

Inheritance graph
[legend]
Collaboration diagram for BestFitNoCheckSelector:

Collaboration graph
[legend]
List of all members.

Public Methods

Useoperate (Use* ref_use, Use* new_use)

Member Function Documentation

Use * BestFitNoCheckSelector::operate ( Use * ref_use,
Use * new_use ) [virtual]
 

Reimplemented from VersionSelector.

Definition at line 2344 of file cmt_use.cxx.

02345 {
02346   Use* selected = ref_use;
02347 
02348   int old_v = -1;
02349   int old_r = -1;
02350   int old_p = -1;
02351   cmt_string old_pp;
02352 
02353   int new_v = -1;
02354   int new_r = -1;
02355   int new_p = -1;
02356   cmt_string new_pp;
02357 
02358   int alias_v = -1;
02359   int alias_r = -1;
02360   int alias_p = -1;
02361   cmt_string alias_pp;
02362 
02363   enum { no_alias, new_has_alias, ref_has_alias } has_alias = no_alias;
02364 
02365   CmtSystem::is_version_directory (ref_use->version, old_v, old_r, old_p);
02366   old_pp = ref_use->path;
02367 
02368   CmtSystem::is_version_directory (new_use->version, new_v, new_r, new_p);
02369   new_pp = new_use->path;
02370 
02371   if (new_use->version_alias != "")
02372     {
02373       has_alias = new_has_alias;
02374       CmtSystem::is_version_directory (new_use->version_alias, 
02375                                        alias_v, alias_r, alias_p);
02376       alias_pp = new_use->path_alias;
02377     }
02378   else if (ref_use->version_alias != "")
02379     {
02380       has_alias = ref_has_alias;
02381       CmtSystem::is_version_directory (ref_use->version_alias, 
02382                                        alias_v, alias_r, alias_p);
02383       alias_pp = ref_use->path_alias;
02384     }
02385 
02386   ref_use->undiscard ();
02387   new_use->undiscard ();
02388 
02389   if (new_v != old_v)
02390     {
02391       if (has_alias != no_alias)
02392         {
02393           if (has_alias == new_has_alias)
02394             {
02395               new_v = alias_v;
02396               new_r = alias_r;
02397               new_p = alias_p;
02398               new_pp = alias_pp;
02399             }
02400           else if (has_alias == ref_has_alias)
02401             {
02402               old_v = alias_v;
02403               old_r = alias_r;
02404               old_p = alias_p;
02405               old_pp = alias_pp;
02406             }
02407         }
02408     }
02409 
02410   if (new_v < old_v)
02411     {
02412       if (!Cmt::get_quiet ())
02413         {
02414           cout << "# Keep version " << ref_use->version <<
02415             " of package " << ref_use->package <<
02416             " (ignore version " << new_use->version << ")" <<
02417             endl;
02418         }
02419 
02420       if (ref_use != new_use) new_use->discard ();
02421     }
02422   else if (new_v > old_v)
02423     {
02424       if (!Cmt::get_quiet ())
02425         {
02426           cout << "# Select version " << new_use->version <<
02427             " of package " << ref_use->package <<
02428             " instead of existing " << ref_use->version <<
02429             endl;
02430         }
02431 
02432       if (ref_use != new_use) ref_use->discard ();
02433       selected = new_use;
02434       selected->done = false; // Will read the new requirements
02435     }
02436   else if (new_r < old_r)
02437     {
02438       if (!Cmt::get_quiet ())
02439         {
02440           cout << "# keep release " << ref_use->version <<
02441             " of package " << ref_use->package <<
02442             " (ignore release " << new_use->version << ")" <<
02443             endl;
02444         }
02445 
02446       if (ref_use != new_use) new_use->discard ();
02447     }
02448   else if (new_r > old_r)
02449     {
02450       if (!Cmt::get_quiet ())
02451         {
02452           cout << "# Select release " << new_use->version <<
02453             " of package " << ref_use->package <<
02454             " instead of existing " << ref_use->version <<
02455             endl;
02456         }
02457 
02458       if (ref_use != new_use) ref_use->discard ();
02459       selected = new_use;
02460       selected->done = false; // Will read the new requirements
02461     }
02462   else if (new_p > old_p)
02463     {
02464       if (!Cmt::get_quiet ())
02465         {
02466           cout << "# Select patch " << new_use->version <<
02467             " of package " << ref_use->package <<
02468             " instead of existing " << ref_use->version <<
02469             endl;
02470         }
02471 
02472       if (ref_use != new_use) ref_use->discard ();
02473       selected = new_use;
02474       selected->done = false; // Will read the new requirements
02475     }
02476   else if (new_pp != old_pp) // same version-r-p but from different path
02477     {
02478       if (ref_use != new_use) ref_use->discard ();
02479       selected = new_use;
02480       selected->done = false; // Will read the new requirements
02481     }
02482 
02483   return (selected);
02484 }


The documentation for this class was generated from the following file:
Generated at Thu Apr 11 16:50:25 2002 for CMT by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000