Changeset 273


Ignore:
Timestamp:
Oct 11, 2006, 3:30:11 PM (19 years ago)
Author:
garonne
Message:

See C.L. 314

Location:
CMT/HEAD
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • CMT/HEAD/ChangeLog

    r272 r273  
     1
     22006-11-17 Vincent Garonne <garonne@lal.in2p3.fr> 314
     3
     4    * source/cmt_project.*: Add two functions - get_project_releases, select_release   
     5    * source/cmt_project.*: Add support for wildcarded project dependencies
    16
    272006-10-17 Vincent Garonne <garonne@lal.in2p3.fr> 313
  • CMT/HEAD/source/cmt_project.cxx

    r272 r273  
    706706    {
    707707      Project& p = Projects[i];
    708 
    709708      if (p.m_name == name) return (&p);
     709     
    710710    }
    711711
     
    14311431  //   +             the new project is then parsed ... etc...
    14321432
     1433  // First test it wilcard is used
     1434  int v = -1;
     1435  int r = -1;
     1436  int p = -1;
     1437  cmt_string new_release = release;
     1438  CmtSystem::is_version_directory (new_release, v, r, p); 
     1439  bool use_has_wild_card = (v == -1) || (r == -1) || (p == -1);
     1440  if (use_has_wild_card)
     1441  {
     1442      cmt_string selected_release = "";
     1443      if (select_release(name, new_release,selected_release))
     1444      { // yes
     1445          // cout <<"selected_release: "<<selected_release<<endl;   
     1446          new_release = selected_release;
     1447      }         
     1448   }
     1449
    14331450  cmt_string cmtprojectpath = Symbol::get_env_value ("CMTPROJECTPATH");
    1434 
    14351451  cmt_string sep;
    14361452  sep = CmtSystem::path_separator ();
     
    14481464      p += CmtSystem::file_separator ();
    14491465      p += name;
    1450       if (release != "")
     1466      if (new_release != "")
    14511467        {
    14521468          p += CmtSystem::file_separator ();
    1453           p += release;
    1454         }
    1455 
    1456       if (CmtSystem::test_directory (p))
     1469          p += new_release;
     1470        }
     1471
     1472    if (CmtSystem::test_directory (p))
    14571473        {
    14581474          //cerr << "Project directory " << p << " exists " << endl;
     
    14731489
    14741490      if (p != 0)
    1475         {
    1476           found = true;
    1477 
    1478           p->add_parent (this);
    1479           add_child (p);
    1480 
    1481           update_strategies_from_children ();
    1482         }
    1483     }
    1484 
     1491          {
     1492              found = true;
     1493              p->add_parent (this);
     1494              add_child (p);
     1495
     1496              update_strategies_from_children ();
     1497            }
     1498    }
     1499   
    14851500  if (!found && (cmtprojectpath != ""))
    14861501    {
     
    14891504}
    14901505
     1506//---------------------------------------------------------
     1507bool Project::select_release(const cmt_string& name, const cmt_string& release, cmt_string& result)
     1508{
     1509    cmt_string selected_release = "";
     1510
     1511    int v = -1;
     1512    int r = -1;
     1513    int p = -1;
     1514    CmtSystem::is_version_directory (release, v, r, p);
     1515
     1516    int selected_v = -1;
     1517    int selected_r = -1;
     1518    int selected_p = -1;
     1519    CmtSystem::cmt_string_vector releases = get_project_releases(name);
     1520    for (int j = 0; j < releases.size (); j++)
     1521    {
     1522         //cout <<releases[j]<<endl; 
     1523         int new_v = -1;
     1524         int new_r = -1;
     1525         int new_p = -1;
     1526         CmtSystem::is_version_directory (releases[j], new_v, new_r, new_p);
     1527         if (v == -1)
     1528         {
     1529             if (selected_v<new_v)
     1530             {
     1531                 selected_v       = new_v;
     1532                 selected_r = -1;
     1533                 selected_p = -1;
     1534                 selected_release = releases[j];
     1535             }
     1536             else if (selected_v==new_v)
     1537             { // We compare the r
     1538                 if (selected_r<new_r)
     1539                 {
     1540                     selected_r = new_r;
     1541                     selected_p = -1;
     1542                     selected_release = releases[j];                               
     1543                 }
     1544                 else if (selected_r==new_r)
     1545                 { // We compare the p
     1546                     if (selected_p<new_p)
     1547                     {
     1548                         selected_p = new_p;
     1549                         selected_release = releases[j];                               
     1550                     }
     1551                     // else if ? not possible                                                           
     1552                 }                               
     1553             }
     1554         }
     1555         else if (r == -1)
     1556         {
     1557             if (v==new_v)
     1558             { // We compare the r                                                     
     1559                 if (selected_r<new_r)
     1560                 {
     1561                     selected_r = new_r;
     1562                     selected_p = -1;
     1563                     selected_release = releases[j];                               
     1564                 }
     1565                 else if (selected_r==new_r)
     1566                 { // We compare the p
     1567                     if (selected_p<new_p)
     1568                     {
     1569                         selected_p = new_p;
     1570                         selected_release = releases[j];                               
     1571                     }
     1572                     // else if ? not possible
     1573                 }
     1574             }                                               
     1575         }
     1576         else if (p == -1)
     1577         {
     1578             if (v==new_v && r==new_r)
     1579                 { // We compare the p
     1580                     if (selected_p<new_p)
     1581                     {
     1582                         selected_p = new_p;
     1583                         selected_release = releases[j];                               
     1584                     }
     1585                     // else if ? not possible
     1586                 }       
     1587         }       
     1588         //cerr<<"v:"<<new_v<<", r:"<<new_r<<", p:"<<new_p<<endl;             
     1589         //cerr<<"req v:"<<v<<", req r:"<<r<<", req p:"<<p<<endl;       
     1590    }
     1591    //cerr <<"selected release: "<<selected_release<<endl; 
     1592    if (selected_release == "")
     1593        return false;
     1594    result = selected_release;   
     1595    return true;
     1596}
     1597
     1598//---------------------------------------------------------
     1599const CmtSystem::cmt_string_vector Project::get_project_releases(const cmt_string& name) const
     1600{
     1601        CmtSystem::cmt_string_vector releases;
     1602    cmt_string cmtprojectpath = Symbol::get_env_value ("CMTPROJECTPATH");
     1603    cmt_string sep;
     1604    sep = CmtSystem::path_separator ();
     1605
     1606    CmtSystem::cmt_string_vector items;
     1607    CmtSystem::split (cmtprojectpath, sep, items);   
     1608    for (int i = 0; i < items.size (); i++)
     1609    {
     1610        const cmt_string& item = items[i];
     1611        cmt_string p = item;
     1612        p += CmtSystem::file_separator ();
     1613        p += name;
     1614        if (CmtSystem::test_directory (p))
     1615            {
     1616                CmtSystem::cmt_string_vector directories;
     1617            CmtSystem::scan_dir (p, directories);
     1618                for (int j = 0; j < directories.size (); j++)
     1619                {
     1620                    if  (CmtSystem::test_directory(directories[j]))
     1621                    {
     1622                        cmt_string release;
     1623                        CmtSystem:: basename(directories[j], release);
     1624                        if (CmtSystem::is_version_directory(release))
     1625                        {                                 
     1626                             cmt_string& name_entry = releases.add ();
     1627                             name_entry = release;
     1628                             //cout << release <<endl; 
     1629                        }             
     1630                    }                       
     1631                }                               
     1632            }
     1633    }
     1634    return (releases);
     1635}
    14911636
    14921637//----------------------------------------------------------
  • CMT/HEAD/source/cmt_project.h

    r272 r273  
    138138  const cmt_string& get_cmtpath_source () const;
    139139  int get_children_size () const;
     140 
     141  const CmtSystem::cmt_string_vector get_project_releases(const cmt_string& name) const;
     142  bool select_release(const cmt_string& name, const cmt_string& release, cmt_string& result);
     143 
    140144  Project* get_child (int index) const;
    141145  bool visited () const;
  • CMT/HEAD/source/cmt_syntax.cxx

    r272 r273  
    1919#include "cmt_cmtpath_pattern.h"
    2020
    21 /*void Kwd::action (const CmtSystem::cmt_string_vector& words,
    22                   Project* project,
    23                   const cmt_string& file_name,
    24                   int line_number)
    25 {}*/
    2621
    2722class KwdAction : public Kwd
Note: See TracChangeset for help on using the changeset viewer.