#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "cmt_project.h"
#include "cmt_database.h"
#include "cmt_system.h"
#include "cmt_awk.h"
#include "cmt_syntax.h"
#include "cmt_tag.h"
#include "cmt_error.h"
Include dependency graph for cmt_project.cxx:
Go to the source code of this file.
Classes | |
class | ProjectPatcher |
class | ProjectReader |
class | VisitorForFillCMTPATH |
class | VisitorForShowPaths |
Functions | |
bool | get_release_from_path (const CmtSystem::cmt_string_vector &items, const cmt_string &path, const cmt_string &name, cmt_string &real_name, cmt_string &release) |
|
Definition at line 97 of file cmt_project.cxx. References CmtSystem::basename(), CmtSystem::cmt_string_vector, CmtSystem::dirname(), CmtSystem::file_separator(), and cmt_vector< T >::size(). Referenced by ProjectFactory::create_project().
00102 { 00103 bool result = false; 00104 00105 release = ""; 00106 real_name = ""; 00107 00108 cmt_string p = path; 00109 00110 if ((items.size () == 0) && (name == "")) 00111 { 00112 // There is no CMTPROJECTPATH and no expected project name. 00113 // We have no way to find a project structure 00114 // So we only expect a 2-level structure. 00115 00116 CmtSystem::basename (p, release); 00117 CmtSystem::dirname (p, p); 00118 CmtSystem::basename (p, real_name); 00119 00120 return (false); 00121 } 00122 00123 for (;;) 00124 { 00125 if (p == "") 00126 { 00127 // Protection: we found no matching project name 00128 // and path was outside any CMTPROJECTPATH 00129 00130 p = path; 00131 00132 CmtSystem::basename (p, release); 00133 CmtSystem::dirname (p, p); 00134 CmtSystem::basename (p, real_name); 00135 00136 return (false); 00137 } 00138 00139 cmt_string n; 00140 00141 CmtSystem::basename (p, n); 00142 CmtSystem::dirname (p, p); 00143 00144 if (n == name) 00145 { 00146 real_name = name; 00147 result = true; 00148 break; 00149 } 00150 00151 CmtSystem::basename (p, real_name); 00152 00153 for (int i = 0; i < items.size (); i++) 00154 { 00155 const cmt_string& item = items[i]; 00156 if (p == item) 00157 { 00158 // We have reached an item of CMTPROJECTPATH, no need to continue 00159 return (false); 00160 } 00161 } 00162 00163 if (release == "") 00164 { 00165 release = n; 00166 } 00167 else 00168 { 00169 cmt_string r; 00170 00171 r = n; 00172 r += CmtSystem::file_separator (); 00173 r += release; 00174 release = r; 00175 } 00176 } 00177 00178 //cerr << "$CMT> GRFP> path=" << path << " name=" << name << " rel=" << release << endl; 00179 00180 return (result); 00181 } |