summaryrefslogtreecommitdiffstats
path: root/vcs/cvsservice/changelog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'vcs/cvsservice/changelog.cpp')
-rw-r--r--vcs/cvsservice/changelog.cpp114
1 files changed, 114 insertions, 0 deletions
diff --git a/vcs/cvsservice/changelog.cpp b/vcs/cvsservice/changelog.cpp
new file mode 100644
index 00000000..a63a2b92
--- /dev/null
+++ b/vcs/cvsservice/changelog.cpp
@@ -0,0 +1,114 @@
+/***************************************************************************
+ * Copyright (C) 2003 by Mario Scalas *
+ * mario.scalas@libero.it *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include <qdatetime.h>
+#include <qfile.h>
+#include <qtextstream.h>
+
+#include <kemailsettings.h>
+
+#include "changelog.h"
+
+ChangeLogEntry::ChangeLogEntry()
+{
+ KEMailSettings emailConfig;
+ emailConfig.setProfile( emailConfig.defaultProfileName() );
+ authorEmail = emailConfig.getSetting( KEMailSettings::EmailAddress );
+ authorName = emailConfig.getSetting( KEMailSettings::RealName );
+
+ QDate currDate = QDate::currentDate();
+ date = currDate.toString( "yyyy-MM-dd" );
+}
+
+ChangeLogEntry::~ChangeLogEntry()
+{
+}
+
+void ChangeLogEntry::addLine( const QString &aLine )
+{
+ lines << aLine;
+}
+
+void ChangeLogEntry::addLines( const QStringList &someLines )
+{
+ lines += someLines;
+}
+
+void streamCopy( QTextStream &is, QTextStream &os )
+{
+ while (!is.eof())
+ os << is.readLine() << "\n"; // readLine() eats '\n' !!
+}
+
+void ChangeLogEntry::addToLog( const QString &logFilePath, const bool prepend, const QString &startLineString )
+{
+ if (prepend) // add on head
+ {
+ QString fakeLogFilePath = logFilePath + ".fake";
+
+ QFile fakeFile( fakeLogFilePath );
+ QFile changeLogFile( logFilePath );
+ {
+ if (!fakeFile.open( IO_WriteOnly | IO_Append))
+ return;
+
+ if (changeLogFile.open( IO_ReadOnly )) // A Changelog already exist
+ {
+ QTextStream is( &changeLogFile );
+ QTextStream os( &fakeFile );
+
+ // Put current entry
+ os << toString( startLineString );
+ // Write the rest of the change log file
+ streamCopy( is, os );
+ }
+ else // ChangeLog doesn't exist: just write our entry
+ {
+ QTextStream t( &fakeFile );
+ t << toString( startLineString );
+ }
+ fakeFile.close();
+ changeLogFile.close();
+ }
+ // Ok, now we have the change log we need in fakeLogFilePath: we should ask for a
+ // 'mv fakeLogFilePath logFilePath'-like command ... :-/
+ if (!fakeFile.open( IO_ReadOnly ))
+ return;
+
+ if (changeLogFile.open( IO_WriteOnly ))
+ {
+ QTextStream os( &changeLogFile );
+ QTextStream is( &fakeFile );
+
+ // Write the rest of the change log file
+ streamCopy( is, os );
+ }
+ fakeFile.close();
+ fakeFile.remove(); // fake changelog is no more needed!
+ changeLogFile.close();
+ }
+ else // add on tail
+ {
+ QFile f( logFilePath );
+ if (!f.open( IO_WriteOnly | IO_Append))
+ return;
+
+ QTextStream t( &f );
+ t << toString( startLineString );
+ }
+}
+
+QString ChangeLogEntry::toString( const QString &startLineString ) const
+{
+ QString header = date + " " + authorName + " <" + authorEmail + ">\n";
+
+ return header + startLineString + lines.join( "\n" + startLineString ) + "\n\n";
+}