ClearCase integration with QMake project (patch included, help needed)

Philippe Hétroy Phil at hetroy.org
Wed Sep 14 17:22:17 UTC 2005


Hi,

You will find attached a clearcase part patch against kdevelop.3.2.2 and
certainly above.

This patch contains also the modifications made by Patrick Noffke. This
version supports :
* adding new entries in the clearcase menu
* detects the clearcase environment and activates the menu. It does not
check a hard coded path anymore! 
* adds the clearcase VCS file infos
* enables VCS synchronisation when right clicking on a folder...

Many things can still be improved. I am opened to any suggestions.


Cheers,

Philippe

-- 
Philippe Hétroy, Phil at hetroy.org
-------------- next part --------------
diff -rupN kdevelop-3.2.2.ORIG/vcs/clearcase/Makefile.am kdevelop-3.2.2.patch/vcs/clearcase/Makefile.am
--- kdevelop-3.2.2.ORIG/vcs/clearcase/Makefile.am	2005-05-23 14:10:08.000000000 +0200
+++ kdevelop-3.2.2.patch/vcs/clearcase/Makefile.am	2005-09-12 23:37:30.000000000 +0200
@@ -7,11 +7,12 @@ kde_module_LTLIBRARIES = libkdevclearcas
 libkdevclearcase_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN)
 libkdevclearcase_la_LIBADD = $(top_builddir)/lib/libkdevelop.la
 
-libkdevclearcase_la_SOURCES = clearcasepart.cpp commentdlg.cpp
+libkdevclearcase_la_SOURCES = clearcasepart.cpp commentdlg.cpp \
+	clearcasefileinfoprovider.cpp clearcasemanipulator.cpp
 
 METASOURCES = AUTO
 
 servicedir = $(kde_servicesdir)
 service_DATA = kdevclearcase.desktop
 
-SUBDIRS = integrator
\ No newline at end of file
+SUBDIRS = integrator
diff -rupN kdevelop-3.2.2.ORIG/vcs/clearcase/README.dox kdevelop-3.2.2.patch/vcs/clearcase/README.dox
--- kdevelop-3.2.2.ORIG/vcs/clearcase/README.dox	2005-05-23 14:10:08.000000000 +0200
+++ kdevelop-3.2.2.patch/vcs/clearcase/README.dox	2005-09-12 22:51:57.000000000 +0200
@@ -14,19 +14,29 @@ To use clearcase functions, you need to:
   -# Clearcase functions appear in the popup menu for an open file just
     like cvs or perforce.
   -# Functions supported so far are: checkout, checkin, uncheckout, diff,
-    mkelem, and rmname (not rmelem).
+    mkelem, rmname (not rmelem), lshistory, and lsco (list checkouts).
   -# For mkelem or rmname, you need to make sure that current directory
     is checked out or the operation will fail.
-  -# No support for snapshot views yet. I haven't worked with them.
+  -# For lshistory, the history is printed to the Messages window.
+  -# For lsco, the checkouts are listed recursively from the directory
+     containing the selected file.
+  -# Snapshot views should work.
   -# To checkout a directory, select directory in file selector part and use
     popup-menu.
+  -# The Clearcase popup-menu will appear for any file, even if it is not in
+    a VOB.  Attempts to perform Clearcase operations on these files will not
+    succeed, and the output can be viewed in the Messages window.
 
 \authors <a href="mailto:ajay_guleria AT yahoo dot com">Ajay Guleria</a>
+\authors <a href="mailto:pnoffke AT bigpond dot com">Patrick Noffke</a>
+\authors <a href="mailto:phil AT hetroy dot org">Philippe Hétroy</a>
 
-\feature Integrates Clearcase configuration management system into KDevelop.
+\feature Integrates Clearcase configuration management system into KDevelop and displays VCS file information
+\feature Detects the clearcase environment and activates menus
 \feature Provided a dialog for checkout and checkin comments.
-\feature If selected file is not a clearcase file, "ClearCase" menu does not appear
-    in the popup. A filename must start with /view or /vobs to qualify as a
-    clearcase filename.
+
+
+\todo Update the tree view when a VCS action is done (checkout, checkin...)
+\todo Add a clearcase logging window
 
 */
diff -rupN kdevelop-3.2.2.ORIG/vcs/clearcase/clearcasefileinfoprovider.cpp kdevelop-3.2.2.patch/vcs/clearcase/clearcasefileinfoprovider.cpp
--- kdevelop-3.2.2.ORIG/vcs/clearcase/clearcasefileinfoprovider.cpp	1970-01-01 01:00:00.000000000 +0100
+++ kdevelop-3.2.2.patch/vcs/clearcase/clearcasefileinfoprovider.cpp	2005-09-12 22:40:45.000000000 +0200
@@ -0,0 +1,66 @@
+//
+// C++ Implementation: clearcasefileinfoprovider
+//
+// Description:
+//
+//
+// Author: KDevelop Authors <kdevelop-devel at kdevelop.org>, (C) 2005
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#include "clearcasefileinfoprovider.h"
+#include "clearcasepart.h"
+#include "kdevversioncontrol.h"
+
+#include <kprocess.h>
+#include <qapplication.h>
+
+ClearcaseFileinfoProvider::ClearcaseFileinfoProvider(ClearcasePart *parent)
+	: KDevVCSFileInfoProvider( (KDevVersionControl*) parent, "clearcasefileinfoprovider")
+{
+    vcsInfo_ = NULL;
+
+    connect(parent, SIGNAL(statusReady(const VCSFileInfoMap&, void*)), SIGNAL(triggerUpdate(const VCSFileInfoMap&, void*)));
+
+    kdevVCS_ = parent;
+}
+
+
+ClearcaseFileinfoProvider::~ClearcaseFileinfoProvider()
+{
+}
+
+
+const VCSFileInfoMap* ClearcaseFileinfoProvider::status( const QString &dirPath ) {
+
+    if (curDirPath_ == dirPath) return vcsInfo_;
+
+    curDirPath_ = dirPath;
+
+    if (vcsInfo_ != NULL) delete vcsInfo_;
+    
+    vcsInfo_ = ccManipulator_.retreiveFilesInfos(dirPath);
+
+    return vcsInfo_;
+}
+
+bool ClearcaseFileinfoProvider::requestStatus( const QString &dirPath, void *callerData ) {
+ 	
+    VCSFileInfoMap* vcsDirInfos = ccManipulator_.retreiveFilesInfos(dirPath);
+
+    // update the file tree view
+    emit statusReady(*vcsDirInfos, callerData);
+
+    delete vcsDirInfos;
+    return true;
+}
+
+
+
+QStringList ClearcaseFileinfoProvider::registeredEntryList() const
+{
+    QStringList l;
+    return l;
+}
+
diff -rupN kdevelop-3.2.2.ORIG/vcs/clearcase/clearcasefileinfoprovider.h kdevelop-3.2.2.patch/vcs/clearcase/clearcasefileinfoprovider.h
--- kdevelop-3.2.2.ORIG/vcs/clearcase/clearcasefileinfoprovider.h	1970-01-01 01:00:00.000000000 +0100
+++ kdevelop-3.2.2.patch/vcs/clearcase/clearcasefileinfoprovider.h	2005-09-12 22:39:39.000000000 +0200
@@ -0,0 +1,50 @@
+//
+// C++ Interface: clearcasefileinfoprovider
+//
+// Description:
+//
+//
+// Author: KDevelop Authors <kdevelop-devel at kdevelop.org>, (C) 2005
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#ifndef CLEARCASEFILEINFOPROVIDER_H
+#define CLEARCASEFILEINFOPROVIDER_H
+
+#include "clearcasepart.h"
+#include "clearcasemanipulator.h"
+
+
+/**
+ at author KDevelop Authors
+*/
+class ClearcaseFileinfoProvider : public KDevVCSFileInfoProvider
+{
+  Q_OBJECT
+public:
+    ClearcaseFileinfoProvider(ClearcasePart *parent);
+
+    virtual ~ClearcaseFileinfoProvider();
+
+    // -- Sync interface
+    const VCSFileInfoMap *status( const QString &dirPath ) ;
+
+    // -- Async interface for requesting data
+    bool requestStatus( const QString &dirPath, void *callerData );
+
+
+private:
+
+    QStringList ClearcaseFileinfoProvider::registeredEntryList() const;
+
+
+private:
+    ClearcaseManipulator ccManipulator_;
+    QString curDirPath_;
+    VCSFileInfoMap* vcsInfo_;
+    ClearcasePart* kdevVCS_;
+
+};
+
+#endif
diff -rupN kdevelop-3.2.2.ORIG/vcs/clearcase/clearcasemanipulator.cpp kdevelop-3.2.2.patch/vcs/clearcase/clearcasemanipulator.cpp
--- kdevelop-3.2.2.ORIG/vcs/clearcase/clearcasemanipulator.cpp	1970-01-01 01:00:00.000000000 +0100
+++ kdevelop-3.2.2.patch/vcs/clearcase/clearcasemanipulator.cpp	2005-09-12 22:46:39.000000000 +0200
@@ -0,0 +1,87 @@
+//
+// C++ Implementation: ClearcaseManipulator
+//
+// Description:
+//
+//
+// Author: KDevelop Authors <kdevelop-devel at kdevelop.org>, (C) 2005
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#include "clearcasemanipulator.h"
+
+#include <kprocess.h>
+
+#include <qregexp.h>
+#include <qstring.h>
+
+#include <stdlib.h>
+#include <libgen.h>
+
+
+const char ClearcaseManipulator::CT_DESC_SEPARATOR = ';';
+
+
+ClearcaseManipulator::ClearcaseManipulator()
+{
+}
+
+
+ClearcaseManipulator::~ClearcaseManipulator()
+{}
+
+
+bool ClearcaseManipulator::isCCRepository( const QString & directory ) {
+  QString cmd;
+  cmd = "cd " + directory + " && cleartool pwv -root";
+  if ( system(cmd.ascii()) == 0 ) return true;
+
+  return false;
+}
+
+VCSFileInfoMap* ClearcaseManipulator::retreiveFilesInfos(const QString& directory) {
+
+
+  VCSFileInfoMap* fileInfoMap = new VCSFileInfoMap();
+
+  char CCcommand[1024];
+  sprintf(CCcommand, "cleartool desc -fmt \"%%m;%%En;%%Rf;%%Sn;%%PVn\\n\" %s/*", directory.ascii());
+  FILE* outputFile = popen(CCcommand, "r");
+
+  char* line = NULL;
+  size_t numRead;
+  while (!feof(outputFile)) {
+    getline(&line,&numRead,outputFile);
+
+    if (numRead > 0) {
+      int pos = 0;
+      int lastPos = -1;
+
+      QStringList outputList;
+      outputList = outputList.split(CT_DESC_SEPARATOR, QString(line), true );
+      outputList[Name] = QString(basename((char*)outputList[Name].ascii()));
+
+      VCSFileInfo::FileState state;
+      if (outputList[ClearcaseManipulator::State] == "unreserved" || outputList[ClearcaseManipulator::State] == "reserved") {
+	state = VCSFileInfo::Modified;
+      }
+      else if (outputList[ClearcaseManipulator::State] == "") {
+	state = VCSFileInfo::Uptodate;
+      }
+      else {
+	VCSFileInfo::Unknown;
+      }
+
+
+      (*fileInfoMap)[outputList[ClearcaseManipulator::Name]] = VCSFileInfo(outputList[ClearcaseManipulator::Name], outputList[ClearcaseManipulator::Version], outputList[ClearcaseManipulator::RepositoryVersion], state);
+    }
+  }
+
+  pclose(outputFile);
+
+  return fileInfoMap;
+}
+
+
+
diff -rupN kdevelop-3.2.2.ORIG/vcs/clearcase/clearcasemanipulator.h kdevelop-3.2.2.patch/vcs/clearcase/clearcasemanipulator.h
--- kdevelop-3.2.2.ORIG/vcs/clearcase/clearcasemanipulator.h	1970-01-01 01:00:00.000000000 +0100
+++ kdevelop-3.2.2.patch/vcs/clearcase/clearcasemanipulator.h	2005-09-12 22:43:00.000000000 +0200
@@ -0,0 +1,49 @@
+//
+// C++ Interface: ClearcaseManipulator
+//
+// Description: 
+//
+//
+// Author: KDevelop Authors <kdevelop-devel at kdevelop.org>, (C) 2005
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#ifndef CLEARCASEMANIPULATOR_H
+#define CLEARCASEMANIPULATOR_H
+
+#include "kdevversioncontrol.h"
+
+#include <kprocess.h>
+
+#include <qregexp.h>
+
+#include <string>
+
+/**
+  @author KDevelop Authors
+  */
+class ClearcaseManipulator {
+  public:
+    ClearcaseManipulator();
+
+    ~ClearcaseManipulator();
+
+    static bool isCCRepository(const QString& directory);
+
+    VCSFileInfoMap* retreiveFilesInfos(const QString& directory);
+
+  private:
+    enum FileInfosFields {
+      Type = 0,
+      Name,
+      State,
+      Version,
+      RepositoryVersion
+    };
+
+    static const char CT_DESC_SEPARATOR;
+
+};
+
+#endif
diff -rupN kdevelop-3.2.2.ORIG/vcs/clearcase/clearcasepart.cpp kdevelop-3.2.2.patch/vcs/clearcase/clearcasepart.cpp
--- kdevelop-3.2.2.ORIG/vcs/clearcase/clearcasepart.cpp	2005-05-23 14:10:08.000000000 +0200
+++ kdevelop-3.2.2.patch/vcs/clearcase/clearcasepart.cpp	2005-09-12 22:32:06.000000000 +0200
@@ -30,8 +30,13 @@
 #include "execcommand.h"
 #include "domutil.h"
 #include "kdevmainwindow.h"
+#include "kdevproject.h"
 #include "kdevplugininfo.h"
 
+#include "clearcasefileinfoprovider.h"
+#include "clearcasemanipulator.h"
+
+
 static const KDevPluginInfo data("kdevclearcase");
 
 typedef KDevGenericFactory<ClearcasePart> ClearcaseFactory;
@@ -39,36 +44,44 @@ K_EXPORT_COMPONENT_FACTORY( libkdevclear
 
 ClearcasePart::ClearcasePart( QObject *parent, const char *name, const QStringList & )
         : KDevVersionControl( &data, parent, name ? name : "ClearcasePart" ),
-        default_checkin(""),default_checkout(""),default_uncheckout("-rm"),
-        default_create("-ci"),default_remove("-f"),default_diff("-pred -diff")
+          default_checkin(""),
+          default_checkout(""),
+          default_uncheckout("-rm"),
+          default_create("-ci"),
+          default_remove("-f"),
+          default_lshistory(""),
+          default_diff("-pred -diff"),
+          default_lscheckout("-recurse")
 {
+
+    // check if project directory is valid and cache it
+    isValidCCDirectory_ = ClearcaseManipulator::isCCRepository( project()->projectDirectory() );
+
+    fileInfoProvider_ = new ClearcaseFileinfoProvider(this);
+
     setInstance(ClearcaseFactory::instance());
     connect( core(), SIGNAL(contextMenu(QPopupMenu *, const Context *)),
              this, SLOT(contextMenu(QPopupMenu *, const Context *)) );
-
 }
 
 ClearcasePart::~ClearcasePart()
 {}
 
 
+
+bool ClearcasePart::isValidDirectory(const QString &dirPath) const {
+    return isValidCCDirectory_;
+}
+
+
 void ClearcasePart::contextMenu(QPopupMenu *popup, const Context *context)
 {
+
     if (context->hasType( Context::FileContext )) {
         const FileContext *fcontext = static_cast<const FileContext*>(context);
-        popupfile = fcontext->urls().first().path();
-
-        // check if this file belongs to a clearcase directory
-        // i.e. is the file /view/<view_name/vobs/... format?
-       QString s1 = popupfile.section('/', 1, 1);
-       QString s2 = popupfile.section('/', 2, 2);
-       QString s3 = popupfile.section('/', 3, 3);
-       if(s1 == "view" && s3 == "vobs" || s1 == "vobs")
-         viewname = s2;
-       else
-         return;
+        popupfile_ = fcontext->urls().first().path();
 
-        QFileInfo fi(popupfile);
+        QFileInfo fi(popupfile_);
         popup->insertSeparator();
 
         KPopupMenu *sub = new KPopupMenu(popup);
@@ -86,24 +99,31 @@ void ClearcasePart::contextMenu(QPopupMe
         sub->insertItem( i18n("Remove Element"),
                          this, SLOT(slotRemove()) );
         sub->insertSeparator();
+        sub->insertItem( i18n("History"),
+                         this, SLOT(slotListHistory()) );
+        sub->insertSeparator();
         sub->insertItem( i18n("Diff"),
                          this, SLOT(slotDiff()) );
 
+        sub->insertSeparator();
+        sub->insertItem( i18n("List Checkouts"),
+                         this, SLOT(slotListCheckouts()) );
+
         popup->insertItem(i18n("Clearcase"), sub);
+
+	if (!project() || !isValidDirectory( project()->projectDirectory() )) {
+	    sub->setEnabled( false );
+	}
     }
 }
 
+
 void ClearcasePart::slotCheckin()
 {
     QString dir, name;
-    QFileInfo fi(popupfile);
-    if (fi.isDir()) {
-        dir = fi.absFilePath();
-        name = ".";
-    } else {
-        dir = fi.dirPath();
-        name = fi.fileName();
-    }
+    QFileInfo fi(popupfile_);
+    dir = fi.dirPath();
+    name = fi.fileName();
 
     CcaseCommentDlg dlg(FALSE);
     if (dlg.exec() == QDialog::Rejected)
@@ -112,9 +132,9 @@ void ClearcasePart::slotCheckin()
     QDomDocument &dom = *this->projectDom();
     QString message = DomUtil::readEntry(dom,"/kdevclearcase/checkin_options",default_checkin);
     if(dlg.logMessage().isEmpty())
-      message += "-nc ";
+        message += "-nc ";
     else
-      message += "-c \"" + dlg.logMessage() + "\"";
+        message += "-c \"" + dlg.logMessage() + "\"";
 
     QString command("cd ");
     command += KShellProcess::quote(dir);
@@ -132,14 +152,9 @@ void ClearcasePart::slotCheckin()
 void ClearcasePart::slotCheckout()
 {
     QString dir, name;
-    QFileInfo fi(popupfile);
-    if (fi.isDir()) {
-        dir = fi.absFilePath();
-        name = ".";
-    } else {
-        dir = fi.dirPath();
-        name = fi.fileName();
-    }
+    QFileInfo fi(popupfile_);
+    dir = fi.dirPath();
+    name = fi.fileName();
 
     CcaseCommentDlg dlg(TRUE);
     if (dlg.exec() == QDialog::Rejected)
@@ -148,11 +163,11 @@ void ClearcasePart::slotCheckout()
     QDomDocument &dom = *this->projectDom();
     QString message = DomUtil::readEntry(dom,"/kdevclearcase/checkout_options",default_checkout);
     if(!dlg.isReserved())
-      message += "-unres ";
+       message += "-unres ";
     if(dlg.logMessage().isEmpty())
-      message += "-nc ";
+       message += "-nc ";
     else
-      message += "-c \"" + dlg.logMessage() + "\"";
+       message += "-c \"" + dlg.logMessage() + "\"";
 
     QString command("cd ");
     command += KShellProcess::quote(dir);
@@ -163,20 +178,17 @@ void ClearcasePart::slotCheckout()
 
     if (KDevMakeFrontend *makeFrontend = extension<KDevMakeFrontend>("KDevelop/MakeFrontend"))
         makeFrontend->queueCommand(dir, command);
+
+    emit finishedFetching(dir);
 }
 
 
 void ClearcasePart::slotUncheckout()
 {
     QString dir, name;
-    QFileInfo fi(popupfile);
-    if (fi.isDir()) {
-        dir = fi.absFilePath();
-        name = ".";
-    } else {
-        dir = fi.dirPath();
-        name = fi.fileName();
-    }
+    QFileInfo fi(popupfile_);
+    dir = fi.dirPath();
+    name = fi.fileName();
 
     QDomDocument &dom = *this->projectDom();
 
@@ -189,11 +201,13 @@ void ClearcasePart::slotUncheckout()
 
     if (KDevMakeFrontend *makeFrontend = extension<KDevMakeFrontend>("KDevelop/MakeFrontend"))
         makeFrontend->queueCommand(dir, command);
+
+    emit finishedFetching(dir);
 }
 
 void ClearcasePart::slotCreate()
 {
-    QFileInfo fi(popupfile);
+    QFileInfo fi(popupfile_);
     QString dir = fi.dirPath();
     QString name = fi.fileName();
 
@@ -216,12 +230,14 @@ void ClearcasePart::slotCreate()
 
     if (KDevMakeFrontend *makeFrontend = extension<KDevMakeFrontend>("KDevelop/MakeFrontend"))
         makeFrontend->queueCommand(dir, command);
+
+    emit finishedFetching(dir);
 }
 
 
 void ClearcasePart::slotRemove()
 {
-    QFileInfo fi(popupfile);
+    QFileInfo fi(popupfile_);
     QString dir = fi.dirPath();
     QString name = fi.fileName();
 
@@ -241,12 +257,35 @@ void ClearcasePart::slotRemove()
 
     if (KDevMakeFrontend *makeFrontend = extension<KDevMakeFrontend>("KDevelop/MakeFrontend"))
         makeFrontend->queueCommand(dir, command);
+
+    emit finishedFetching(dir);
 }
 
+void ClearcasePart::slotListHistory()
+{
+    QFileInfo fi(popupfile_);
+    QString dir = fi.dirPath();
+    QString name = fi.fileName();
+    QStringList args;
+    QStringList env;
+    QString str;
+
+    QDomDocument &dom = *this->projectDom();
+
+    QString command("cd ");
+    command += KShellProcess::quote(dir);
+    command += " && cleartool lshistory ";
+    command += DomUtil::readEntry(dom, "/kdevclearcase/lshistory_options", default_lshistory);
+    command += " ";
+    command += KShellProcess::quote(name);
+
+    if (KDevMakeFrontend *makeFrontend = extension<KDevMakeFrontend>("KDevelop/MakeFrontend"))
+        makeFrontend->queueCommand(dir, command);
+}
 
 void ClearcasePart::slotDiff()
 {
-    QFileInfo fi(popupfile);
+    QFileInfo fi(popupfile_);
     QString dir = fi.dirPath();
     QString name = fi.fileName();
     QStringList args;
@@ -261,6 +300,7 @@ void ClearcasePart::slotDiff()
         QStringList list = QStringList::split(' ',str);
         for(QStringList::Iterator it = list.begin(); it != list.end(); ++it) args << *it;
     }
+
     args << name;
 
     ExecCommand* cmv = new ExecCommand( "cleartool", args, dir, env, this );
@@ -268,6 +308,7 @@ void ClearcasePart::slotDiff()
              this, SLOT(slotDiffFinished( const QString&, const QString& )) );
 }
 
+
 void ClearcasePart::slotDiffFinished( const QString& diff, const QString& err )
 {
     if ( diff.isNull() && err.isNull() ) {
@@ -296,4 +337,27 @@ void ClearcasePart::slotDiffFinished( co
         diffFrontend->showDiff( diff );
 }
 
+void ClearcasePart::slotListCheckouts()
+{
+    QString dir;
+    QFileInfo fi(popupfile_);
+    if (fi.isDir()) {
+        dir = fi.absFilePath();
+    } else {
+        dir = fi.dirPath();
+    }
+
+    QDomDocument &dom = *this->projectDom();
+
+    QString command("cd ");
+    command += KShellProcess::quote(dir);
+    command += " && cleartool lsco ";
+    command += DomUtil::readEntry(dom, "/kdevclearcase/lscheckout_options", default_lscheckout);
+
+    if (KDevMakeFrontend *makeFrontend = extension<KDevMakeFrontend>("KDevelop/MakeFrontend"))
+        makeFrontend->queueCommand(dir, command);
+
+}
+
+
 #include "clearcasepart.moc"
diff -rupN kdevelop-3.2.2.ORIG/vcs/clearcase/clearcasepart.h kdevelop-3.2.2.patch/vcs/clearcase/clearcasepart.h
--- kdevelop-3.2.2.ORIG/vcs/clearcase/clearcasepart.h	2005-05-23 14:10:08.000000000 +0200
+++ kdevelop-3.2.2.patch/vcs/clearcase/clearcasepart.h	2005-09-12 22:42:02.000000000 +0200
@@ -29,13 +29,14 @@ public:
     const QString default_uncheckout;
     const QString default_create;
     const QString default_remove;
+    const QString default_lshistory;
+    const QString default_lscheckout;
     const QString default_diff;
-//    const QString default_log;
-    
+
     virtual void createNewProject(const QString& dir) {}
     virtual bool fetchFromRepository() { return true; }
-    virtual KDevVCSFileInfoProvider *fileInfoProvider() const { return 0; }
-    virtual bool isValidDirectory(const QString &dirPath) const { return true; }
+    virtual KDevVCSFileInfoProvider *fileInfoProvider() const { return fileInfoProvider_; }
+    virtual bool isValidDirectory(const QString &dirPath) const;
 
 private slots:
     void contextMenu(QPopupMenu *popup, const Context *context);
@@ -46,14 +47,19 @@ private slots:
 
     void slotCreate();
     void slotRemove();
-//    void slotLog();
-
     void slotDiff();
     void slotDiffFinished( const QString& diff, const QString& err );
+    void slotListHistory();
+    void slotListCheckouts();
+
 
 private:
-    QString popupfile;
+
+    bool isValidCCDirectory_;
+    QString popupfile_;
     QString viewname;
+
+    KDevVCSFileInfoProvider *fileInfoProvider_;
 };
 
 #endif
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
URL: <http://mail.kde.org/pipermail/kdevelop-devel/attachments/20050914/6a6a2184/attachment.sig>


More information about the KDevelop-devel mailing list