Ignore:
Timestamp:
Mar 3, 2005, 5:23:09 PM (19 years ago)
Author:
arnault
Message:

Add release conflict detection - CL 255

File:
1 edited

Legend:

Unmodified
Added
Removed
  • CMT/v1r19/source/cmt_project.cxx

    r3 r8  
    1616#include "cmt_syntax.h"
    1717#include "cmt_tag.h"
     18#include "cmt_error.h"
    1819
    1920class ProjectReader : public Awk
     
    128129  if (!CmtSystem::cd (compressed_path)) return;
    129130
     131  cmt_string name;
     132  cmt_string release;
     133  CmtSystem::basename (compressed_path, release);
     134
    130135  //
    131136  // Figure out if this is the current project
     
    149154      reader.run (text);
    150155
    151       cmt_string name = reader.get_project_name ();
     156      name = reader.get_project_name ();
    152157      if (name == "")
    153158        {
     159          CmtSystem::dirname (compressed_path, name);
     160          CmtSystem::basename (name, name);
     161
     162          /*
    154163          char buffer[20];
    155164          m_id++;
    156165          sprintf (buffer, "Project%d", m_id);
    157166          name = buffer;
    158         }
    159 
    160       project = Project::add (name);
    161 
     167          */
     168        }
    162169    }
    163170  else
     
    167174        {
    168175          strcpy (buffer, "CMT");
     176          name = buffer;
    169177        }
    170178      else
    171179        {
    172           m_id++;
    173           sprintf (buffer, "Project%d", m_id);
    174         }
    175       project = Project::add (buffer);
    176     }
     180          CmtSystem::dirname (compressed_path, name);
     181          CmtSystem::basename (name, name);
     182          //m_id++;
     183          //sprintf (buffer, "Project%d", m_id);
     184        }
     185    }
     186
     187  project = Project::add (name, release);
    177188
    178189  if (source == "default path")
     
    337348
    338349//----------------------------------------------------------
    339 Project* Project::add (const cmt_string& name)
     350Project* Project::add (const cmt_string& name,
     351                       const cmt_string& release)
    340352{
    341353  static ProjectVector& Projects = projects ();
     
    349361    if (project != 0)
    350362      {
     363        if (!Cmt::get_quiet ())
     364          {
     365            if (release != project->get_release ())
     366              {
     367                cerr << "#CMT> Project " << name << " requested with conflicting releases " << project->get_release () << " and " << release << endl;
     368                CmtError::set (CmtError::project_release_conflict, name);
     369              }
     370          }
     371
     372        // Project objects are recreated here to follow the hierarchy
     373        // This duplication is needed for properly applying the strategies
    351374        Project& p = Projects.add ();
    352375
    353376        project->set_reference (&p);
    354377        p.set_name (name);
     378        p.set_release (release);
    355379
    356380        return (&p);
     381
     382        //return (project);
    357383      }
    358384  }
     
    360386  Project& project = Projects.add ();
    361387  project.set_name (name);
     388  project.set_release (release);
    362389
    363390  return (&project);
     
    613640
    614641//----------------------------------------------------------
     642const cmt_string& Project::get_release () const
     643{
     644  return (m_release);
     645}
     646
     647//----------------------------------------------------------
    615648const cmt_string& Project::get_cmtpath () const
    616649{
     
    638671
    639672//----------------------------------------------------------
     673void Project::set_release (const cmt_string& release)
     674{
     675  m_release = release;
     676}
     677
     678//----------------------------------------------------------
    640679void Project::set_cmtpath (const cmt_string& path)
    641680{
     
    671710{
    672711  m_name = "";
     712  m_release = "";
    673713  m_cmtpath = "";
    674714  m_cmtpath_pwd = "";
     
    814854  //   +             the new project is then parsed ... etc...
    815855
    816   // Question : do we consider by default pwd/../.. ???
    817 
    818856  cmt_string cmtprojectpath = CmtSystem::getenv ("CMTPROJECTPATH");
    819857  cmt_string sep;
     
    884922    }
    885923
    886   cout << m_name << " (in " << m_cmtpath << ")";
     924  cout << m_name << " " << m_release << " (in " << m_cmtpath << ")";
    887925
    888926  if (is_current) cout << " (current)";
Note: See TracChangeset for help on using the changeset viewer.