cvsdir.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #include <qfile.h>
00013 #include <qtextstream.h>
00014
00015 #include "cvsdir.h"
00016
00018
00020
00021 CVSDir::CVSDir() : QDir()
00022 {
00023 }
00024
00026
00027 CVSDir::CVSDir( const QDir &dir )
00028 : QDir( dir )
00029 {
00030
00031 convertToAbs();
00032
00033 m_cvsDir = absPath() + QDir::separator() + "CVS";
00034
00035 if (isValid())
00036 refreshEntriesCache();
00037 }
00038
00040
00041 CVSDir::CVSDir( const CVSDir &aCvsDir )
00042 : QDir( aCvsDir )
00043 {
00044 *this = aCvsDir;
00045 }
00046
00048
00049 CVSDir &CVSDir::operator=( const CVSDir &aCvsDir )
00050 {
00051 m_cvsDir = aCvsDir.m_cvsDir;
00052 m_cachedEntries = aCvsDir.m_cachedEntries;
00053 QDir::operator=( aCvsDir );
00054
00055 return *this;
00056 }
00057
00059
00060 CVSDir::~CVSDir()
00061 {
00062 }
00063
00065
00066 bool CVSDir::isValid() const
00067 {
00068 return exists() &&
00069 QFile::exists( entriesFileName() ) &&
00070 QFile::exists( rootFileName() ) &&
00071 QFile::exists( repoFileName() );
00072 }
00073
00075
00076 QString CVSDir::entriesFileName() const
00077 {
00078 return m_cvsDir + QDir::separator() + "Entries";
00079 }
00080
00082
00083 QString CVSDir::rootFileName() const
00084 {
00085 return m_cvsDir + QDir::separator() + "Root";
00086 }
00087
00089
00090 QString CVSDir::repoFileName() const
00091 {
00092 return m_cvsDir + QDir::separator() + "Repository";
00093 }
00094
00096
00097 QString CVSDir::cvsIgnoreFileName() const
00098 {
00099 return absPath() + QDir::separator() + ".cvsignore";
00100 }
00101
00103
00104 QString CVSDir::repository() const
00105 {
00106
00107
00108
00109
00110 QString content;
00111
00112 if (!isValid())
00113 return QString::null;
00114
00115 QByteArray bytes = cacheFile( repoFileName() );
00116 QTextStream t( bytes, IO_ReadOnly );
00117 content += t.readLine();
00118
00119 return content;
00120 }
00121
00123
00124 QString CVSDir::root() const
00125 {
00126
00127
00128
00129 QString content;
00130
00131 if (!isValid())
00132 return QString::null;
00133
00134 QByteArray bytes = cacheFile( repoFileName() );
00135 QTextStream t( bytes, IO_ReadOnly );
00136 content += t.readLine();
00137
00138 return content;
00139 }
00140
00142
00143 QByteArray CVSDir::cacheFile( const QString &fileName )
00144 {
00145 QFile f( fileName );
00146 if (!f.open( IO_ReadOnly ))
00147 return QByteArray();
00148 return f.readAll();
00149 }
00150
00152
00153 QStringList CVSDir::registeredEntryList() const
00154 {
00155 QStringList l;
00156 if (!isValid())
00157 return l;
00158
00159 QByteArray bytes = cacheFile( entriesFileName() );
00160 QTextStream t( bytes, IO_ReadOnly );
00161 CVSEntry entry;
00162 while (!t.eof())
00163 {
00164 QString line = t.readLine();
00165 CVSEntry::parse( line, entry );
00166 if (entry.isValid())
00167 l.append( entry.fileName() );
00168 }
00169 return l;
00170 }
00171
00173
00174 bool CVSDir::isRegistered( const QString fileName ) const
00175 {
00176 CVSEntry entry = fileStatus( fileName );
00177 return entry.isValid() && entry.fileName() == fileName;
00178 }
00179
00181
00182 void CVSDir::refreshEntriesCache() const
00183 {
00184 m_cachedEntries.clear();
00185
00186 QByteArray bytes = cacheFile( entriesFileName() );
00187 QTextStream t( bytes, IO_ReadOnly );
00188 CVSEntry entry;
00189 while (!t.eof())
00190 {
00191 QString line = t.readLine();
00192 CVSEntry::parse( line, entry );
00193 if (entry.isValid())
00194 m_cachedEntries[ entry.fileName() ] = entry;
00195 }
00196 }
00197
00199
00200 CVSEntry CVSDir::fileStatus( const QString &fileName, bool refreshCache ) const
00201 {
00202 if (refreshCache)
00203 refreshEntriesCache();
00204
00205 if (m_cachedEntries.contains( fileName ))
00206 {
00207 return m_cachedEntries[ fileName ];
00208 }
00209 else
00210 return CVSEntry( fileName );
00211 }
00212
00214
00215 void CVSDir::ignoreFile( const QString &fileName )
00216 {
00217 if (!isValid())
00218 return;
00219
00220 QFile f( cvsIgnoreFileName() );
00221 if (!f.open( IO_ReadOnly))
00222 return;
00223
00224 QByteArray cachedFile = f.readAll();
00225 QTextStream t( cachedFile, IO_ReadOnly | IO_WriteOnly );
00226
00227 QString readFileName;
00228 bool found = false;
00229
00230 while (!t.eof() && !found)
00231 {
00232 readFileName = t.readLine();
00233 found = (fileName == readFileName);
00234 }
00235
00236 f.close();
00237 if (!found)
00238 {
00239 f.open( IO_WriteOnly );
00240
00241 t << fileName << "\n";
00242
00243 f.writeBlock( cachedFile );
00244 f.close();
00245 }
00246 }
00247
00249
00250 void CVSDir::doNotIgnoreFile( const QString &fileName )
00251 {
00252 if (!isValid())
00253 return;
00254
00255
00256 QFile f( cvsIgnoreFileName() );
00257 if (!f.open( IO_ReadOnly ))
00258 return;
00259
00260 QByteArray cachedFile = f.readAll();
00261 QTextIStream is( cachedFile );
00262
00263 QByteArray cachedOutputFile;
00264 QTextOStream os( cachedOutputFile );
00265
00266 bool removed = false;
00267 while (!is.eof())
00268 {
00269 QString readLine = is.readLine();
00270 if (readLine != fileName)
00271 os << readLine << "\n";
00272 else
00273 removed = true;
00274 }
00275
00276 f.close();
00277 if (removed)
00278 {
00279 f.open( IO_WriteOnly );
00280 f.writeBlock( cachedOutputFile );
00281 f.close();
00282 }
00283 }
00284
00286
00287 VCSFileInfoMap CVSDir::dirStatus() const
00288 {
00289 VCSFileInfoMap vcsInfo;
00291 QStringList entries = registeredEntryList();
00292 for (QStringList::const_iterator it = entries.begin(); it != entries.end(); ++it)
00293 {
00294 const QString &fileName = (*it);
00295 const CVSEntry entry = fileStatus( fileName );
00296
00297 vcsInfo.insert( fileName, entry.toVCSFileInfo() );
00298 }
00299
00300 return vcsInfo;
00301 }
00302
00304
00305 VCSFileInfoMap *CVSDir::cacheableDirStatus() const
00306 {
00307 VCSFileInfoMap *vcsInfo = new VCSFileInfoMap;
00309 QStringList entries = registeredEntryList();
00310 for (QStringList::const_iterator it = entries.begin(); it != entries.end(); ++it)
00311 {
00312 const QString &fileName = (*it);
00313 const CVSEntry entry = fileStatus( fileName );
00314
00315 vcsInfo->insert( fileName, entry.toVCSFileInfo() );
00316 }
00317
00318 return vcsInfo;
00319 }
This file is part of the documentation for KDevelop Version 3.1.2.