Changeset 535 for CMT/HEAD/source/cmt_project.cxx
- Timestamp:
- Mar 26, 2010, 11:56:50 AM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
CMT/HEAD/source/cmt_project.cxx
r528 r535 247 247 } 248 248 249 bool updated (false); 249 250 if (parent != 0) 250 251 { 252 if (!p.has_parent (parent) || !parent->has_child (&p)) 253 { 251 254 p.add_parent (parent); 252 255 parent->add_child (&p); … … 255 258 256 259 parent->update_strategies_from_children (); 260 updated = true; 261 } 262 257 263 } 258 264 259 265 CmtSystem::cd (here); 266 if (updated) Project::order_all (); 260 267 return (&p); 261 268 } … … 278 285 279 286 // In case there are symlinks 280 cmt_string here_real, pwd_real; 287 288 // cmt_string here_real, pwd_real; 281 289 //cerr << "realpath_: create_project" << endl; 290 /* 282 291 if (CmtSystem::realpath_ (here, here_real) && CmtSystem::realpath_ (pwd, pwd_real)) 283 292 { 284 293 if (here_real.find (pwd_real) == 0) is_current = true; 294 } 295 */ 296 cmt_string pwd_real; 297 if (CmtSystem::realpath_ (pwd, pwd_real)) 298 { 299 if (Cmt::get_current_dir_real ().find (pwd_real) == 0) is_current = true; 285 300 } 286 301 … … 544 559 parent->update_strategies_from_children (); 545 560 } 561 /* 546 562 else if ((name != "CMTUSERCONTEXT") && (name != "CMTHOME")) 547 563 // else … … 569 585 project->update_strategies_from_children (); 570 586 } 571 587 */ 572 588 if (source == "default path") 573 589 { … … 581 597 project->set_cmtpath_source (source); 582 598 599 project->set_is_current (is_current); 600 583 601 if (is_current) 584 602 { 603 // cerr << "current: " << project->get_name () << endl; 585 604 // 586 605 // The current project defines a tag with its name … … 594 613 595 614 615 // Project::order_all (); 596 616 597 617 if (text != "") … … 649 669 650 670 CmtSystem::cd (here); 671 Project::order_all (); 651 672 652 673 return (project); … … 820 841 Project* Project::get_current () 821 842 { 843 /* 822 844 cmt_string here = CmtSystem::pwd (); 823 845 … … 825 847 cmt_string here_real; 826 848 CmtSystem::realpath_ (here, here_real); 827 849 */ 828 850 static ProjectVector& Projects = projects (); 829 851 … … 840 862 841 863 // if (here.find (p.m_cmtpath) == 0) 842 if (here_real.find (p.m_cmtpath_real) == 0) 864 if (p.is_current ()) 865 // if (here_real.find (p.m_cmtpath_real) == 0) 843 866 { 844 867 result = &p; … … 907 930 908 931 //---------------------------------------------------------- 909 Project::ProjectPtrVector Project::ordered_projects () 910 { 911 static ProjectPtrVector OrderedProjects; 932 Project::ProjectPtrVector& Project::ordered_projects () 933 { 934 static Database& db = Database::instance (); 935 static ProjectPtrVector& Projects = db.ordered_projects (); 936 937 return (Projects); 938 } 939 940 //---------------------------------------------------------- 941 void Project::order_all () 942 //Project::ProjectPtrVector Project::ordered_projects () 943 { 944 ProjectPtrVector OrderedProjects; 945 // static ProjectPtrVector OrderedProjects; 946 static Project::ProjectPtrVector& orderedProjects = Project::ordered_projects (); 912 947 913 948 static Project::ProjectVector& Projects = Project::projects (); … … 956 991 OrderedProjects[i] = p; 957 992 } 993 /* 958 994 if (2 == offset) 959 995 { … … 962 998 OrderedProjects[0]->update_strategies_from_children (); 963 999 } 964 return OrderedProjects; 1000 */ 1001 for (int i = OrderedProjects.size () - 2; i >= 0; i--) 1002 { 1003 if (!OrderedProjects[i]->has_parents () && 1004 OrderedProjects[i]->get_children_size () == 0) 1005 { 1006 OrderedProjects[i]->add_child (OrderedProjects[i + 1]); 1007 OrderedProjects[i]->update_strategies_from_children (); 1008 OrderedProjects[i]->erase_child (OrderedProjects[i + 1]); 1009 } 1010 } 1011 1012 orderedProjects = OrderedProjects; 1013 // return OrderedProjects; 1014 return; 965 1015 } 966 1016 … … 968 1018 969 1019 // cerr << "get_current: " << p << " offset: " << offset << endl; 1020 /* 970 1021 if (p == 0) 971 1022 { … … 973 1024 // p = &(Projects[0]); 974 1025 } 1026 */ 975 1027 // cerr << "p: " << p << " offset: " << offset << " name: " << p->get_name () << endl; 976 1028 977 1029 int order (-1); 978 1030 /* 979 1031 if ((p->get_name () != "CMTUSERCONTEXT") && (p->get_name () != "CMTHOME")) 980 1032 { … … 989 1041 // cerr << "order: " << order << endl; 990 1042 // int unordered = size - offset - (order + 1); 1043 */ 1044 ProjectPtrVector projs; 1045 1046 if (p != 0 && (p->get_name () != "CMTUSERCONTEXT") && (p->get_name () != "CMTHOME")) 1047 { 1048 p->m_order = ++order; 1049 projs.push_back (p); 1050 } 1051 1052 if (p == 0 || 1053 (!p->has_parents () && p->get_children_size () == 0) 1054 // comes from CMTPATH entry 1055 ) 1056 { 1057 for (int i = offset; i < size; i++) 1058 { 1059 Project* q = &(Projects[i]); 1060 if (q != p && !q->has_parents ()) 1061 { 1062 q->m_order = ++order; 1063 projs.push_back (q); 1064 } 1065 } 1066 } 1067 1068 visit (offset, order, projs); 991 1069 992 1070 int beg (0); … … 1017 1095 */ 1018 1096 } 1097 else if (-2 != j) 1098 { 1099 OrderedProjects[beg + j] = p; 1100 } 1101 /* 1019 1102 else if (-2 == j) 1020 1103 { … … 1026 1109 // cerr << "OrderedProjects[" << beg + j << "]: " << (OrderedProjects[beg + j])->get_name () << endl; 1027 1110 } 1028 } 1029 1111 */ 1112 } 1113 1114 if (p != 0) 1115 { 1116 for (int i = 0; i < noorder; i++) 1117 OrderedProjects.pop_back (); 1118 } 1030 1119 if (-1 != ihome) 1031 1120 { 1032 OrderedProjects[size - 1] = &(Projects[ihome]); 1033 } 1034 1121 OrderedProjects[OrderedProjects.size () - 1] = &(Projects[ihome]); 1122 } 1123 /* 1124 if (p) 1125 { 1126 if (-1 != ihome) 1127 { 1128 OrderedProjects[beg + order + 1] = &(Projects[ihome]); 1129 } 1130 for (int i = 0; i < noorder; i++) 1131 OrderedProjects.pop_back (); 1132 } 1133 else 1134 { 1135 if (-1 != ihome) 1136 { 1137 OrderedProjects[size - 1] = &(Projects[ihome]); 1138 } 1139 } 1140 */ 1141 /* 1035 1142 if (-1 != iuser) 1036 1143 { … … 1039 1146 OrderedProjects[0]->update_strategies_from_children (); 1040 1147 } 1041 1042 if (-1 != ihome) 1043 { 1148 */ 1149 1150 // if (-1 != ihome) 1151 // { 1044 1152 /* 1045 1153 cerr << "beg: " << beg << " order: " << order << endl; 1046 1154 cerr << "noorder: " << noorder << " size - offset: " << size - offset << endl; 1047 1155 */ 1156 /* 1048 1157 if (noorder != size - offset) 1049 1158 { // the last ordered project … … 1058 1167 OrderedProjects[size - 2]->update_strategies_from_children (); 1059 1168 } 1060 } 1061 1062 return OrderedProjects; 1169 */ 1170 // } 1171 1172 for (int i = OrderedProjects.size () - 2; i >= 0; i--) 1173 { 1174 if (!OrderedProjects[i]->has_parents () && 1175 OrderedProjects[i]->get_children_size () == 0) 1176 { 1177 OrderedProjects[i]->add_child (OrderedProjects[i + 1]); 1178 OrderedProjects[i]->update_strategies_from_children (); 1179 OrderedProjects[i]->erase_child (OrderedProjects[i + 1]); 1180 } 1181 } 1182 1183 orderedProjects = OrderedProjects; 1184 // return OrderedProjects; 1185 return; 1063 1186 } 1064 1187 … … 1080 1203 void Project::show_all () 1081 1204 { 1082 const Project::ProjectPtrVector& Ordered = Project::ordered_projects (); 1083 // static const Project::ProjectPtrVector Ordered = Project::ordered_projects (); 1084 1085 for (int i = 0; i < Ordered.size (); i++) 1086 { 1087 Project* p = Ordered[i]; 1088 p->m_visited = false; 1089 } 1090 1091 Project* p = get_current (); 1092 1093 if (p == 0) 1094 { 1095 if (Ordered.size () == 0) return; 1096 1097 p = Ordered[0]; 1098 } 1099 /* 1205 static const Project::ProjectPtrVector& Ordered = Project::ordered_projects (); 1100 1206 static Project::ProjectVector& Projects = Project::projects (); 1101 1207 … … 1106 1212 } 1107 1213 1214 for (int i = 0; i < Ordered.size (); i++) 1215 Ordered[i]->show (); 1216 1217 for (int i = 0; i < Projects.size (); i++) 1218 Projects[i].show (); 1219 1220 /* 1108 1221 Project* p = get_current (); 1109 1222 1110 1223 if (p == 0) 1111 1224 { 1112 if ( Projects.size () == 0) return;1113 1114 p = &(Projects[0]);1225 if (Ordered.size () == 0) return; 1226 1227 p = Ordered[0]; 1115 1228 } 1116 1229 */ 1117 1118 p->show (); 1230 // p->show (); 1119 1231 } 1120 1232 … … 1303 1415 void Project::fill_selection (int depth, CmtSystem::cmt_string_vector& path_selections) 1304 1416 { 1305 static ProjectPtrVector Ordered = Project::ordered_projects ();1417 static ProjectPtrVector& Ordered = Project::ordered_projects (); 1306 1418 for (int i = 0; i < Ordered.size (); i++) 1307 1419 { … … 1352 1464 void Project::broadcast (IProjectAction& action) 1353 1465 { 1354 static ProjectPtrVector Projects = Project::ordered_projects (); 1466 // const ProjectPtrVector Projects = Project::ordered_projects (); 1467 static ProjectPtrVector& Projects = Project::ordered_projects (); 1355 1468 1356 1469 for (int i = 0; i < Projects.size (); i++) … … 1375 1488 void Project::reverse_broadcast (IProjectAction& action) 1376 1489 { 1377 static ProjectPtrVector Projects = Project::ordered_projects (); 1490 // const ProjectPtrVector Projects = Project::ordered_projects (); 1491 static ProjectPtrVector& Projects = Project::ordered_projects (); 1378 1492 1379 1493 for (int i = (Projects.size () - 1); i >= 0; i--) … … 1556 1670 { 1557 1671 int size = projs.size (); 1672 // cerr << "visit: " << offset << " " << order << " " << size << endl; 1558 1673 if (0 == size) return; 1559 1674 static ProjectVector& all = Project::projects (); … … 1591 1706 child->m_order = ++order; 1592 1707 } 1593 else if (0 == chorder) 1708 else if (child->is_current ()) 1709 // else if (0 == chorder) 1594 1710 { // the project we started with, i. e. the current project: 1595 1711 // o circular dependency … … 1601 1717 + " " + child->get_cmtpath ()); 1602 1718 } 1603 else if ((0 < chorder) && (chorder < porder)) 1719 else if ((0 <= chorder) && (chorder < porder)) 1720 // else if ((0 < chorder) && (chorder < porder)) 1604 1721 { // ordered already, want to put it after the parent in the order 1605 1722 for (int k = offset; k < all.size (); k++) … … 1609 1726 {// the child we are putting after the parent in the order 1610 1727 q.m_order = porder; 1611 // cerr << "Moved back: " << q.get_name () << " order: " << q.m_order << endl;1728 // cerr << "Moved back: " << q.get_name () << " order: " << q.m_order << endl; 1612 1729 } 1613 1730 else if ((chorder < q.m_order) && (q.m_order <= porder)) … … 1615 1732 } 1616 1733 } 1617 // 1734 // cerr << child->get_name () << " out: " << child->m_order << endl; 1618 1735 // child->m_visits++; 1619 1736 bool unknown (true); … … 1748 1865 start_visit (visitor); 1749 1866 */ 1750 const ProjectPtrVector Ordered = Project::ordered_projects ();1867 const ProjectPtrVector& Ordered = Project::ordered_projects (); 1751 1868 1752 1869 buffer = "path CMTPATH \"\" \n"; … … 1909 2026 1910 2027 //---------------------------------------------------------- 2028 void Project::set_is_current (bool is_current) 2029 { 2030 m_is_current = is_current; 2031 } 2032 2033 //---------------------------------------------------------- 2034 bool Project::is_current () const 2035 { 2036 return m_is_current; 2037 } 2038 2039 //---------------------------------------------------------- 1911 2040 void Project::clear () 1912 2041 { … … 1925 2054 1926 2055 m_strategies.clear (); 2056 m_is_current = false; 1927 2057 } 1928 2058 … … 2019 2149 2020 2150 m_children.push_back (p); 2151 } 2152 2153 //---------------------------------------------------------- 2154 void Project::erase_child (Project* p) 2155 { 2156 if (p == 0) return; 2157 if (p == this) return; 2158 2159 if (!has_child (p)) return; 2160 2161 const cmt_string& name = p->get_name (); 2162 2163 for (int i = 0; i < m_children.size (); i++) 2164 { 2165 const Project* child = m_children[i]; 2166 if (child == 0) continue; 2167 2168 if (child->get_name () == name) 2169 { 2170 // registered as a child 2171 m_children.erase (i); 2172 break; 2173 } 2174 } 2021 2175 } 2022 2176 … … 2088 2242 use->set (name, version, path); 2089 2243 use->get_package ()->remove_use (use); 2244 CmtSystem::cd (m_cmtpath_pwd); 2090 2245 if (use->move_to ()) 2091 2246 { … … 2103 2258 { 2104 2259 use->~Use (); 2260 } 2261 else if (!CmtSystem::absolute_path (use->real_path)) 2262 { 2263 use->change_path (m_cmtpath_pwd); 2105 2264 } 2106 2265 } … … 2382 2541 static int level = 0; 2383 2542 2384 bool is_current = false;2543 // bool is_current = false; 2385 2544 2386 2545 // cmt_string here = CmtSystem::pwd (); 2387 2546 // In case there are symlinks 2547 /* 2388 2548 cmt_string here_real; 2389 2549 CmtSystem::realpath_ (CmtSystem::pwd (), here_real); … … 2397 2557 } 2398 2558 } 2399 2559 */ 2400 2560 for (int tab = 0; tab < level; tab++) cout << " "; 2401 2561 cout << m_name << " " << (m_name != "CMTUSERCONTEXT" && m_name != "CMTHOME" ? m_release : "v0") << " (in " << m_cmtpath << ")"; 2402 2562 // cout << m_name << " " << m_release << " (in " << m_cmtpath << ")"; 2403 2563 2404 if (is_current) cout << " (current)"; 2564 if (m_is_current) cout << " (current)"; 2565 // if (is_current) cout << " (current)"; 2405 2566 2406 2567 int i;
Note: See TracChangeset
for help on using the changeset viewer.