Changeset 273
- Timestamp:
- Oct 11, 2006, 3:30:11 PM (19 years ago)
- Location:
- CMT/HEAD
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
CMT/HEAD/ChangeLog
r272 r273 1 2 2006-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 1 6 2 7 2006-10-17 Vincent Garonne <garonne@lal.in2p3.fr> 313 -
CMT/HEAD/source/cmt_project.cxx
r272 r273 706 706 { 707 707 Project& p = Projects[i]; 708 709 708 if (p.m_name == name) return (&p); 709 710 710 } 711 711 … … 1431 1431 // + the new project is then parsed ... etc... 1432 1432 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 1433 1450 cmt_string cmtprojectpath = Symbol::get_env_value ("CMTPROJECTPATH"); 1434 1435 1451 cmt_string sep; 1436 1452 sep = CmtSystem::path_separator (); … … 1448 1464 p += CmtSystem::file_separator (); 1449 1465 p += name; 1450 if ( release != "")1466 if (new_release != "") 1451 1467 { 1452 1468 p += CmtSystem::file_separator (); 1453 p += release;1454 } 1455 1456 1469 p += new_release; 1470 } 1471 1472 if (CmtSystem::test_directory (p)) 1457 1473 { 1458 1474 //cerr << "Project directory " << p << " exists " << endl; … … 1473 1489 1474 1490 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 1485 1500 if (!found && (cmtprojectpath != "")) 1486 1501 { … … 1489 1504 } 1490 1505 1506 //--------------------------------------------------------- 1507 bool 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 //--------------------------------------------------------- 1599 const 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 } 1491 1636 1492 1637 //---------------------------------------------------------- -
CMT/HEAD/source/cmt_project.h
r272 r273 138 138 const cmt_string& get_cmtpath_source () const; 139 139 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 140 144 Project* get_child (int index) const; 141 145 bool visited () const; -
CMT/HEAD/source/cmt_syntax.cxx
r272 r273 19 19 #include "cmt_cmtpath_pattern.h" 20 20 21 /*void Kwd::action (const CmtSystem::cmt_string_vector& words,22 Project* project,23 const cmt_string& file_name,24 int line_number)25 {}*/26 21 27 22 class KwdAction : public Kwd
Note:
See TracChangeset
for help on using the changeset viewer.