diff options
Diffstat (limited to 'vcs/clearcase')
-rw-r--r-- | vcs/clearcase/Makefile.am | 18 | ||||
-rw-r--r-- | vcs/clearcase/README | 3 | ||||
-rw-r--r-- | vcs/clearcase/README.dox | 42 | ||||
-rw-r--r-- | vcs/clearcase/clearcasefileinfoprovider.cpp | 66 | ||||
-rw-r--r-- | vcs/clearcase/clearcasefileinfoprovider.h | 50 | ||||
-rw-r--r-- | vcs/clearcase/clearcasemanipulator.cpp | 133 | ||||
-rw-r--r-- | vcs/clearcase/clearcasemanipulator.h | 49 | ||||
-rw-r--r-- | vcs/clearcase/clearcasepart.cpp | 363 | ||||
-rw-r--r-- | vcs/clearcase/clearcasepart.h | 65 | ||||
-rw-r--r-- | vcs/clearcase/commentdlg.cpp | 61 | ||||
-rw-r--r-- | vcs/clearcase/commentdlg.h | 32 | ||||
-rw-r--r-- | vcs/clearcase/integrator/Makefile.am | 13 | ||||
-rw-r--r-- | vcs/clearcase/integrator/ccintegratordlg.cpp | 40 | ||||
-rw-r--r-- | vcs/clearcase/integrator/ccintegratordlg.h | 36 | ||||
-rw-r--r-- | vcs/clearcase/integrator/ccintegratordlgbase.ui | 47 | ||||
-rw-r--r-- | vcs/clearcase/integrator/clearcaseintegrator.cpp | 54 | ||||
-rw-r--r-- | vcs/clearcase/integrator/clearcaseintegrator.h | 39 | ||||
-rw-r--r-- | vcs/clearcase/integrator/kdevclearcaseintegrator.desktop | 44 | ||||
-rw-r--r-- | vcs/clearcase/kdevclearcase.desktop | 82 |
19 files changed, 1237 insertions, 0 deletions
diff --git a/vcs/clearcase/Makefile.am b/vcs/clearcase/Makefile.am new file mode 100644 index 00000000..64b70392 --- /dev/null +++ b/vcs/clearcase/Makefile.am @@ -0,0 +1,18 @@ +# Here resides the clearcase part + +INCLUDES = -I$(top_srcdir)/lib/interfaces \ + -I$(top_srcdir)/lib/interfaces/extensions -I$(top_srcdir)/lib/util $(all_includes) + +kde_module_LTLIBRARIES = libkdevclearcase.la +libkdevclearcase_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN) +libkdevclearcase_la_LIBADD = $(top_builddir)/lib/libkdevelop.la $(top_builddir)/lib/interfaces/extensions/libkdevextensions.la + +libkdevclearcase_la_SOURCES = clearcasepart.cpp commentdlg.cpp \ + clearcasefileinfoprovider.cpp clearcasemanipulator.cpp + +METASOURCES = AUTO + +servicedir = $(kde_servicesdir) +service_DATA = kdevclearcase.desktop + +SUBDIRS = integrator diff --git a/vcs/clearcase/README b/vcs/clearcase/README new file mode 100644 index 00000000..731741e1 --- /dev/null +++ b/vcs/clearcase/README @@ -0,0 +1,3 @@ +Please read the on-line, automaticaly updated KDevelop API documentation at: +http://www.kdevelop.org +or read the README.dox file. diff --git a/vcs/clearcase/README.dox b/vcs/clearcase/README.dox new file mode 100644 index 00000000..74f2678b --- /dev/null +++ b/vcs/clearcase/README.dox @@ -0,0 +1,42 @@ +/** \class ClearcasePart +Integrates Clearcase configuration management system into KDevelop. +Based on Perforce (PerforcePart) implementation by Harald Fernengel <harry AT kdevelop.org> + +To use clearcase functions, you need to: + -# Create a view in which you will keep your project files + -# Start the view and open project as a view extended directory.<br> + <b>IMPORTANT:</b> If you have a view test_vu and your project is located + under /vobs/source/project1 you should open the project + from /view/test_vu/vobs/source/project1 rather than + inside the view from /vobs/source/project1. File open + dialog does not show any files if you do otherwise. Who + knows, maybe it will work for you. If so, let me know. + -# 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, 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. + -# 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 Htroy</a> + +\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. + + +\todo Update the tree view when a VCS action is done (checkout, checkin...) +\todo Add a clearcase logging window + +*/ diff --git a/vcs/clearcase/clearcasefileinfoprovider.cpp b/vcs/clearcase/clearcasefileinfoprovider.cpp new file mode 100644 index 00000000..66dec0c8 --- /dev/null +++ b/vcs/clearcase/clearcasefileinfoprovider.cpp @@ -0,0 +1,66 @@ +// +// C++ Implementation: clearcasefileinfoprovider +// +// Description: +// +// +// Author: KDevelop Authors <kdevelop-devel@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, bool recursive, bool checkRepos ) { + + 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 --git a/vcs/clearcase/clearcasefileinfoprovider.h b/vcs/clearcase/clearcasefileinfoprovider.h new file mode 100644 index 00000000..b716d01b --- /dev/null +++ b/vcs/clearcase/clearcasefileinfoprovider.h @@ -0,0 +1,50 @@ +// +// C++ Interface: clearcasefileinfoprovider +// +// Description: +// +// +// Author: KDevelop Authors <kdevelop-devel@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" + + +/** +@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, bool recursive = true, bool checkRepos = true ); + + +private: + + QStringList registeredEntryList() const; + + +private: + ClearcaseManipulator ccManipulator_; + QString curDirPath_; + VCSFileInfoMap* vcsInfo_; + ClearcasePart* kdevVCS_; + +}; + +#endif diff --git a/vcs/clearcase/clearcasemanipulator.cpp b/vcs/clearcase/clearcasemanipulator.cpp new file mode 100644 index 00000000..c51436ba --- /dev/null +++ b/vcs/clearcase/clearcasemanipulator.cpp @@ -0,0 +1,133 @@ +// +// C++ Implementation: ClearcaseManipulator +// +// Description: +// +// +// Author: KDevelop Authors <kdevelop-devel@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> +#include <errno.h> +#ifdef __NetBSD__ +#include <sys/param.h> +#endif + +#if defined(Q_OS_MACX) || defined(MACOSX) || defined(Q_OS_SOLARIS) || defined(Q_OS_FREEBSD) || (defined(__NetBSD__) && (__NetBSD_Version__ < 599001500)) || defined(__DragonFly__) +//this function is taken from GNU libc +//it does not exist on macos +int getline(char **lineptr, size_t *n, FILE *stream) +{ + static char line[256]; + char *ptr; + unsigned int len; + + if (lineptr == NULL || n == NULL) + { + errno = EINVAL; + return -1; + } + + if (ferror (stream)) + return -1; + + if (feof(stream)) + return -1; + + fgets(line,256,stream); + + ptr = strchr(line,'\n'); + if (ptr) + *ptr = '\0'; + + len = strlen(line); + + if ((len+1) < 256) + { + ptr = (char*)realloc(*lineptr, 256); + if (ptr == NULL) + return(-1); + *lineptr = ptr; + *n = 256; + } + + strcpy(*lineptr,line); + return(len); +} +#endif + +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 { + state = VCSFileInfo::Unknown; + } + + + (*fileInfoMap)[outputList[ClearcaseManipulator::Name]] = VCSFileInfo(outputList[ClearcaseManipulator::Name], outputList[ClearcaseManipulator::Version], outputList[ClearcaseManipulator::RepositoryVersion], state); + } + } + + pclose(outputFile); + + return fileInfoMap; +} + + + diff --git a/vcs/clearcase/clearcasemanipulator.h b/vcs/clearcase/clearcasemanipulator.h new file mode 100644 index 00000000..baa7c17f --- /dev/null +++ b/vcs/clearcase/clearcasemanipulator.h @@ -0,0 +1,49 @@ +// +// C++ Interface: ClearcaseManipulator +// +// Description: +// +// +// Author: KDevelop Authors <kdevelop-devel@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 --git a/vcs/clearcase/clearcasepart.cpp b/vcs/clearcase/clearcasepart.cpp new file mode 100644 index 00000000..6c11a4a6 --- /dev/null +++ b/vcs/clearcase/clearcasepart.cpp @@ -0,0 +1,363 @@ +/*************************************************************************** + * Copyright (C) 2003 by Ajay Guleria * + * ajay_guleria at yahoo dot com * + * * + * 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 "clearcasepart.h" +#include "commentdlg.h" + +#include <qfileinfo.h> +#include <qpopupmenu.h> + +#include <kpopupmenu.h> +#include <kdebug.h> +#include <kdevgenericfactory.h> +#include <klocale.h> +#include <kprocess.h> +#include <kmessagebox.h> +#include <kapplication.h> + +#include "kdevcore.h" +#include "kdevmakefrontend.h" +#include "kdevdifffrontend.h" +#include "kdevappfrontend.h" +#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; +K_EXPORT_COMPONENT_FACTORY( libkdevclearcase, ClearcaseFactory( data ) ) + +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_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(); + + QFileInfo fi(popupfile_); + popup->insertSeparator(); + + KPopupMenu *sub = new KPopupMenu(popup); + QString name = fi.fileName(); + sub->insertTitle( i18n("Actions for %1").arg(name) ); + sub->insertItem( i18n("Checkin"), + this, SLOT(slotCheckin()) ); + sub->insertItem( i18n("Checkout"), + this, SLOT(slotCheckout()) ); + sub->insertItem( i18n("Uncheckout"), + this, SLOT(slotUncheckout()) ); + sub->insertSeparator(); + sub->insertItem( i18n("Create Element"), + this, SLOT(slotCreate()) ); + 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_); + dir = fi.dirPath(); + name = fi.fileName(); + + CcaseCommentDlg dlg(FALSE); + if (dlg.exec() == QDialog::Rejected) + return; + + QDomDocument &dom = *this->projectDom(); + QString message = DomUtil::readEntry(dom,"/kdevclearcase/checkin_options",default_checkin); + if(dlg.logMessage().isEmpty()) + message += "-nc "; + else + message += "-c \"" + dlg.logMessage() + "\""; + + QString command("cd "); + command += KShellProcess::quote(dir); + command += " && "; + command += " cleartool checkin "; + command += message; // Already quoted, see above + command += " "; + command += KShellProcess::quote(name); + + if (KDevMakeFrontend *makeFrontend = extension<KDevMakeFrontend>("KDevelop/MakeFrontend")) + makeFrontend->queueCommand(dir, command); +} + + +void ClearcasePart::slotCheckout() +{ + QString dir, name; + QFileInfo fi(popupfile_); + dir = fi.dirPath(); + name = fi.fileName(); + + CcaseCommentDlg dlg(TRUE); + if (dlg.exec() == QDialog::Rejected) + return; + + QDomDocument &dom = *this->projectDom(); + QString message = DomUtil::readEntry(dom,"/kdevclearcase/checkout_options",default_checkout); + if(!dlg.isReserved()) + message += "-unres "; + if(dlg.logMessage().isEmpty()) + message += "-nc "; + else + message += "-c \"" + dlg.logMessage() + "\""; + + QString command("cd "); + command += KShellProcess::quote(dir); + command += " && cleartool checkout "; + command += message; + command += " "; + command += KShellProcess::quote(name); + + if (KDevMakeFrontend *makeFrontend = extension<KDevMakeFrontend>("KDevelop/MakeFrontend")) + makeFrontend->queueCommand(dir, command); + + emit finishedFetching(dir); +} + + +void ClearcasePart::slotUncheckout() +{ + QString dir, name; + QFileInfo fi(popupfile_); + dir = fi.dirPath(); + name = fi.fileName(); + + QDomDocument &dom = *this->projectDom(); + + QString command("cd "); + command += KShellProcess::quote(dir); + command += " && cleartool uncheckout "; + command += DomUtil::readEntry(dom,"/kdevclearcase/uncheckout_options",default_uncheckout); + command += " "; + command += KShellProcess::quote(name); + + if (KDevMakeFrontend *makeFrontend = extension<KDevMakeFrontend>("KDevelop/MakeFrontend")) + makeFrontend->queueCommand(dir, command); + + emit finishedFetching(dir); +} + +void ClearcasePart::slotCreate() +{ + QFileInfo fi(popupfile_); + QString dir = fi.dirPath(); + QString name = fi.fileName(); + + QDomDocument &dom = *this->projectDom(); + + // Checking whether current directory is checked out or not is cumbersome so skip it for now + QString command("cd "); + command += KShellProcess::quote(dir); + QFileInfo di(dir); + if(!di.isWritable()) { // Work-around to check if directory is checked out + command += " && cleartool co -unres -nc "; + command += KShellProcess::quote(dir); + } + command += " && cleartool mkelem "; + if(fi.isDir()) + command += " -elt directory "; + command += DomUtil::readEntry(dom,"/kdevclearcase/create_options",default_create); + command += " "; + command += KShellProcess::quote(name); + + if (KDevMakeFrontend *makeFrontend = extension<KDevMakeFrontend>("KDevelop/MakeFrontend")) + makeFrontend->queueCommand(dir, command); + + emit finishedFetching(dir); +} + + +void ClearcasePart::slotRemove() +{ + QFileInfo fi(popupfile_); + QString dir = fi.dirPath(); + QString name = fi.fileName(); + + QDomDocument &dom = *this->projectDom(); + + QString command("cd "); + command += KShellProcess::quote(dir); + QFileInfo di(dir); + if(!di.isWritable()) { // Work-around to check if directory is checked out + command += " && cleartool co -unres -nc "; + command += KShellProcess::quote(dir); + } + command += " && cleartool rmname "; // Don't use rm command + command += DomUtil::readEntry(dom,"/kdevclearcase/remove_options",default_remove); + command += " "; + command += KShellProcess::quote(name); + + 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_); + QString dir = fi.dirPath(); + QString name = fi.fileName(); + QStringList args; + QStringList env; + QString str; + + QDomDocument &dom = *this->projectDom(); + + args << "diff"; + str = DomUtil::readEntry(dom,"/kdevclearcase/diff_options",default_diff); + if (str.length()) { + 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 ); + connect( cmv, SIGNAL(finished( const QString&, const QString& )), + this, SLOT(slotDiffFinished( const QString&, const QString& )) ); +} + + +void ClearcasePart::slotDiffFinished( const QString& diff, const QString& err ) +{ + if ( diff.isNull() && err.isNull() ) { + kdDebug(9000) << "clearcase diff canceled" << endl; + return; // user pressed cancel or an error occured + } + + if ( diff.isEmpty() && !err.isEmpty() ) { + KMessageBox::detailedError( 0, i18n("Clearcase output errors during diff."), err, i18n("Errors During Diff") ); + return; + } + + if ( !err.isEmpty() ) { + int s = KMessageBox::warningContinueCancelList( 0, i18n("Clearcase outputted errors during diff. Do you still want to continue?"), + QStringList::split( "\n", err, false ), i18n("Errors During Diff") ); + if ( s != KMessageBox::Continue ) + return; + } + + if ( diff.isEmpty() ) { + KMessageBox::information( 0, i18n("There is no difference to the repository."), i18n("No Difference Found") ); + return; + } + + if (KDevDiffFrontend *diffFrontend = extension<KDevDiffFrontend>("KDevelop/DiffFrontend")) + 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 --git a/vcs/clearcase/clearcasepart.h b/vcs/clearcase/clearcasepart.h new file mode 100644 index 00000000..2f82b61d --- /dev/null +++ b/vcs/clearcase/clearcasepart.h @@ -0,0 +1,65 @@ +/*************************************************************************** + * Copyright (C) 2003 by Ajay Guleria * + * ajay_guleria at yahoo dot com * + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef _CLEARCASEPART_H_ +#define _CLEARCASEPART_H_ + +#include <kdevversioncontrol.h> + +class Context; +class QPopupMenu; + +class ClearcasePart : public KDevVersionControl { + Q_OBJECT + +public: + ClearcasePart( QObject *parent, const char *name, const QStringList & ); + ~ClearcasePart(); + + const QString default_checkin; + const QString default_checkout; + const QString default_uncheckout; + const QString default_create; + const QString default_remove; + const QString default_lshistory; + const QString default_lscheckout; + const QString default_diff; + + virtual void createNewProject(const QString& dir) {} + virtual bool fetchFromRepository() { return true; } + virtual KDevVCSFileInfoProvider *fileInfoProvider() const { return fileInfoProvider_; } + virtual bool isValidDirectory(const QString &dirPath) const; + +private slots: + void contextMenu(QPopupMenu *popup, const Context *context); + + void slotCheckin(); + void slotCheckout(); + void slotUncheckout(); + + void slotCreate(); + void slotRemove(); + void slotDiff(); + void slotDiffFinished( const QString& diff, const QString& err ); + void slotListHistory(); + void slotListCheckouts(); + + +private: + + bool isValidCCDirectory_; + QString popupfile_; + QString viewname; + + KDevVCSFileInfoProvider *fileInfoProvider_; +}; + +#endif diff --git a/vcs/clearcase/commentdlg.cpp b/vcs/clearcase/commentdlg.cpp new file mode 100644 index 00000000..36b3bc6f --- /dev/null +++ b/vcs/clearcase/commentdlg.cpp @@ -0,0 +1,61 @@ +/*************************************************************************** + * Copyright (C) 2003 by Ajay Guleria * + * ajay_guleria at yahoo dot com * + * * + * 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 "commentdlg.h" + +#include <qlayout.h> +#include <qlabel.h> +#include <qpushbutton.h> +#include <kapplication.h> +#include <kbuttonbox.h> +#include <klocale.h> +#include <kmessagebox.h> +#include <kstdguiitem.h> + +CcaseCommentDlg::CcaseCommentDlg(bool bCheckin) + : QDialog(0, "", true) +{ + setCaption( i18n("Clearcase Comment") ); + + QBoxLayout *layout = new QVBoxLayout(this, 10); + + QLabel *messagelabel = new QLabel(i18n("Enter log message:"), this); + messagelabel->setMinimumSize(messagelabel->sizeHint()); + layout->addWidget(messagelabel, 0); + + _edit = new QMultiLineEdit(this); + QFontMetrics fm(_edit->fontMetrics()); + _edit->setMinimumSize(fm.width("0")*40, fm.lineSpacing()*3); + layout->addWidget(_edit, 10); + + QBoxLayout *layout2 = new QHBoxLayout(layout); + if(bCheckin) { + _check = new QCheckBox(i18n("Reserve"), this); + layout2->addWidget(_check); + } + + KButtonBox *buttonbox = new KButtonBox(this); + buttonbox->addStretch(); + QPushButton *ok = buttonbox->addButton(KStdGuiItem::ok()); + QPushButton *cancel = buttonbox->addButton(KStdGuiItem::cancel()); + connect(ok, SIGNAL(clicked()), SLOT(accept()) ); + connect(cancel, SIGNAL(clicked()), SLOT(reject()) ); + ok->setDefault(true); + buttonbox->layout(); + layout2->addWidget(buttonbox, 0); + + layout->activate(); + adjustSize(); +} + + + +#include "commentdlg.moc" diff --git a/vcs/clearcase/commentdlg.h b/vcs/clearcase/commentdlg.h new file mode 100644 index 00000000..8ac50a38 --- /dev/null +++ b/vcs/clearcase/commentdlg.h @@ -0,0 +1,32 @@ +/*************************************************************************** + * Copyright (C) 2003 by Ajay Guleria * + * ajay_guleria at yahoo dot com * + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef _CLEARCASECOMMENTDLG_H_ +#define _CLEARCASECOMMENTDLG_H_ + +#include <qcheckbox.h> +#include <qdialog.h> +#include <qmultilineedit.h> + +class CcaseCommentDlg : public QDialog +{ +Q_OBJECT +public: + CcaseCommentDlg(bool = FALSE); + QString logMessage() { return _edit->text(); }; + bool isReserved() { return (_check) ? _check->isChecked() : FALSE; }; + +private: + QMultiLineEdit *_edit; + QCheckBox* _check; +}; + +#endif diff --git a/vcs/clearcase/integrator/Makefile.am b/vcs/clearcase/integrator/Makefile.am new file mode 100644 index 00000000..cd998856 --- /dev/null +++ b/vcs/clearcase/integrator/Makefile.am @@ -0,0 +1,13 @@ +INCLUDES = -I$(top_srcdir)/lib/interfaces \ + -I$(top_srcdir)/lib/interfaces/extensions -I$(top_srcdir)/lib/interfaces/extras -I$(top_srcdir)/lib/util \ + $(all_includes) +METASOURCES = AUTO +kde_module_LTLIBRARIES = libclearcaseintegrator.la +libclearcaseintegrator_la_LDFLAGS = -avoid-version -no-undefined $(all_libraries) +libclearcaseintegrator_la_LIBADD =\ + $(top_builddir)/lib/interfaces/extras/libkdevextras.la\ + $(top_builddir)/lib/libkdevelop.la +kde_services_DATA = kdevclearcaseintegrator.desktop +noinst_HEADERS = clearcaseintegrator.h ccintegratordlg.h +libclearcaseintegrator_la_SOURCES = clearcaseintegrator.cpp \ + ccintegratordlgbase.ui ccintegratordlg.cpp diff --git a/vcs/clearcase/integrator/ccintegratordlg.cpp b/vcs/clearcase/integrator/ccintegratordlg.cpp new file mode 100644 index 00000000..3e58aada --- /dev/null +++ b/vcs/clearcase/integrator/ccintegratordlg.cpp @@ -0,0 +1,40 @@ +/*************************************************************************** + * Copyright (C) 2004 by Alexander Dymo * + * adymo@kdevelop.org * + * * + * 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. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "ccintegratordlg.h" + +CCIntegratorDlg::CCIntegratorDlg(QWidget *parent, const char *name) + :CCIntegratorDlgBase(parent, name) +{ +} + +void CCIntegratorDlg::accept() +{ +} + +void CCIntegratorDlg::init(const QString &/*projectName*/, const QString &/*projectLocation*/) +{ +} + +QWidget *CCIntegratorDlg::self() +{ + return const_cast<CCIntegratorDlg*>(this); +} + +#include "ccintegratordlg.moc" diff --git a/vcs/clearcase/integrator/ccintegratordlg.h b/vcs/clearcase/integrator/ccintegratordlg.h new file mode 100644 index 00000000..0b197437 --- /dev/null +++ b/vcs/clearcase/integrator/ccintegratordlg.h @@ -0,0 +1,36 @@ +/*************************************************************************** + * Copyright (C) 2004 by Alexander Dymo * + * adymo@kdevelop.org * + * * + * 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. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef CCINTEGRATORDLG_H +#define CCINTEGRATORDLG_H + +#include "ccintegratordlgbase.h" +#include <kdevvcsintegrator.h> + +class CCIntegratorDlg: public CCIntegratorDlgBase, public VCSDialog { +Q_OBJECT +public: + CCIntegratorDlg(QWidget *parent = 0, const char *name = 0); + + virtual void accept(); + virtual void init(const QString &projectName, const QString &projectLocation); + virtual QWidget *self(); +}; + +#endif diff --git a/vcs/clearcase/integrator/ccintegratordlgbase.ui b/vcs/clearcase/integrator/ccintegratordlgbase.ui new file mode 100644 index 00000000..ae961a9f --- /dev/null +++ b/vcs/clearcase/integrator/ccintegratordlgbase.ui @@ -0,0 +1,47 @@ +<!DOCTYPE UI><UI version="3.2" stdsetdef="1"> +<class>CCIntegratorDlgBase</class> +<widget class="QWidget"> + <property name="name"> + <cstring>CCIntegratorDlgBase</cstring> + </property> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>600</width> + <height>480</height> + </rect> + </property> + <vbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <widget class="QLabel"> + <property name="name"> + <cstring>textLabel1</cstring> + </property> + <property name="text"> + <string>No options available for this VCS.</string> + </property> + </widget> + <spacer> + <property name="name"> + <cstring>spacer2</cstring> + </property> + <property name="orientation"> + <enum>Vertical</enum> + </property> + <property name="sizeType"> + <enum>Expanding</enum> + </property> + <property name="sizeHint"> + <size> + <width>20</width> + <height>437</height> + </size> + </property> + </spacer> + </vbox> +</widget> +<layoutdefaults spacing="6" margin="11"/> +</UI> diff --git a/vcs/clearcase/integrator/clearcaseintegrator.cpp b/vcs/clearcase/integrator/clearcaseintegrator.cpp new file mode 100644 index 00000000..3ea4295f --- /dev/null +++ b/vcs/clearcase/integrator/clearcaseintegrator.cpp @@ -0,0 +1,54 @@ +/*************************************************************************** + * Copyright (C) 2004 by Alexander Dymo * + * adymo@kdevelop.org * + * * + * 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. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "clearcaseintegrator.h" + +#include <kdevgenericfactory.h> +#include <kdevplugininfo.h> + +#include "ccintegratordlg.h" + +static const KDevPluginInfo data("kdevclearcaseintegrator"); +typedef KDevGenericFactory<ClearcaseIntegrator> ClearcaseIntegratorFactory; +K_EXPORT_COMPONENT_FACTORY( libclearcaseintegrator, ClearcaseIntegratorFactory(data) ) + +ClearcaseIntegrator::ClearcaseIntegrator(QObject* parent, const char* name, + const QStringList // args + ) + :KDevVCSIntegrator(parent, name) +{ +} + +ClearcaseIntegrator::~ClearcaseIntegrator() +{ +} + +VCSDialog* ClearcaseIntegrator::fetcher(QWidget* // parent + ) +{ + return 0; +} + +VCSDialog* ClearcaseIntegrator::integrator(QWidget* parent) +{ + CCIntegratorDlg *dlg = new CCIntegratorDlg(parent); + return dlg; +} + +#include "clearcaseintegrator.moc" diff --git a/vcs/clearcase/integrator/clearcaseintegrator.h b/vcs/clearcase/integrator/clearcaseintegrator.h new file mode 100644 index 00000000..a6aaf396 --- /dev/null +++ b/vcs/clearcase/integrator/clearcaseintegrator.h @@ -0,0 +1,39 @@ +/*************************************************************************** + * Copyright (C) 2004 by Alexander Dymo * + * adymo@kdevelop.org * + * * + * 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. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef CLEARCASEINTEGRATOR_H +#define CLEARCASEINTEGRATOR_H + +#include <kdevvcsintegrator.h> + +#include <qstringlist.h> + +class ClearcaseIntegrator : public KDevVCSIntegrator +{ +Q_OBJECT +public: + ClearcaseIntegrator(QObject* parent, const char* name, const QStringList args = QStringList()); + ~ClearcaseIntegrator(); + + virtual VCSDialog* fetcher(QWidget* parent); + virtual VCSDialog* integrator(QWidget* parent); + +}; + +#endif diff --git a/vcs/clearcase/integrator/kdevclearcaseintegrator.desktop b/vcs/clearcase/integrator/kdevclearcaseintegrator.desktop new file mode 100644 index 00000000..b9957370 --- /dev/null +++ b/vcs/clearcase/integrator/kdevclearcaseintegrator.desktop @@ -0,0 +1,44 @@ +[Desktop Entry] +Type=Service +Name=KDevClearcaseIntegrator +Name[da]=KDevelop Clearcase-integration +Name[nds]=KDevelop-Clearcase-Integreren +Name[sk]=KDev ClearCase integrácia +Name[sv]=KDevelop Clearcase-integration +Name[zh_TW]=KDevelop Clearcase 整合器 +Comment=Clearcase Project Integration Facility +Comment[ca]=Faciliat per a la integració amb projectes Clearcase +Comment[da]=Clearcase projektintegration +Comment[de]=Clearcase-Integration +Comment[el]=Λειτουργία ενσωμάτωσης Clearcase στο έργο +Comment[es]=Facilidad para integración con proyectos Clearcase +Comment[et]=Clearcase projekti põimimisvahend +Comment[eu]=Clearcase proiektu-integraziorako tresna +Comment[fa]=تسهیلات مجتمعسازی پروژۀ Clearcase +Comment[fr]=Fonction d'intégration pour un projet utilisant Clearcase +Comment[gl]=Utilidade para a integración de proxectos ClearCase +Comment[hu]=Integrálás Clearcase-projektekkel +Comment[it]=Funzione di integrazione del progetto ClearCase +Comment[ja]=Clearcase プロジェクト統合ツール +Comment[ms]=Kemudahan Integrasi Projek Clearcase +Comment[nds]=Projektintegreren för Clearcase +Comment[ne]=क्लेयरकेस परियोजना एकिकरण सुविधा +Comment[nl]=Clearcase-projectintegratie +Comment[pl]=Integracja z Clearcase +Comment[pt]=Integração com Projectos Clearcase +Comment[pt_BR]=Facilidade de Integração ao Projeto de Clearcase +Comment[ru]=Интеграция Clearcase +Comment[sk]=Integrácia ClearCase projektu +Comment[sr]=Интеграција Clearcase-а у пројекат +Comment[sr@Latn]=Integracija Clearcase-a u projekat +Comment[sv]=Funktion för integrering av Clearcase i projekt +Comment[tr]=Clearcase Proje Bütünleştirilmesi Aracı +Comment[zh_CN]=Clearcase 工程集成功能 +Comment[zh_TW]=Clearcase 專案整合工具 +Exec=blubb +ServiceTypes=KDevelop/VCSIntegrator +X-KDE-Library=libclearcaseintegrator +X-KDevelop-Default=false +X-KDevelop-VCS=ClearCase +X-KDevelop-VCSPlugin=kdevclearcase +X-KDevelop-Version=5 diff --git a/vcs/clearcase/kdevclearcase.desktop b/vcs/clearcase/kdevclearcase.desktop new file mode 100644 index 00000000..5a691980 --- /dev/null +++ b/vcs/clearcase/kdevclearcase.desktop @@ -0,0 +1,82 @@ +[Desktop Entry] +Type=Service +Exec=blubb +Comment=A plugin that provides support for Rational ClearCase, a large version control and build management system. http://www.rational.com/products/clearcase/index.jsp +Comment[ca]=Un connector que proporciona suport per a ClearCase de Rational, un potent sistema de control de versions i gestió de compilacions. http://www.rational.com/products/clearcase/index.jsp +Comment[da]=Et plugin der sørger for støtte for Rational ClearCase, et stort versionskontrol og byggehåndteringssystem. http://www.rational.com/products/clearcase/index.jsp +Comment[de]=Eine Komponente, die eine Schnittstelle zu Rational ClearCase zur Verfügung stellt, einem umfangreichen Werkzeug zur Verwaltung von Versionen und Erstellungsvorgängen. http://www.rational.com/products/clearcase/index.jsp +Comment[el]=Ένα πρόσθετο που προσφέρει υποστήριξη για το Rational ClearCase, ένα μεγάλο σύστημα διαχείρισης ελέγχου εκδόσεων και κατασκευής. http://www.rational.com/products/clearcase/index.jsp +Comment[es]=Un complemento que proporciona soporte para Rational ClearCase, un potente sistema de control de versiones y administración de compilaciones (http://www.rational.com/products/clearcase/index.jsp) +Comment[et]=See plugin pakub suure versioonikontrolli ja ehitamise haldamise süsteemi Rational ClearCase toetust. http://www.rational.com/products/clearcase/index.jsp +Comment[eu]=Rational ClearCase euskarri plugin bat. ClearCase bertsio kontrol eta eraikuntza kudeaketa sistema handi bat da. http://www.rational.com/products/clearcase/index.jsp +Comment[fa]=وصلهای که پشتیبانی برای Rational ClearCase، یک کنترل نسخۀ بزرگ و سیستم مدیریت ساختن فراهم میکند. http://www.rational.com/products/clearcase/index.jsp +Comment[fr]=Un module externe qui offre une prise en charge pour Rational ClearCase, un puissant système de contrôle de versions et de gestion de compilation. http://www.rational.com/products/clearcase/index.jsp +Comment[gl]=Extensión que proporciona soporte para Rational ClearCase, un gran sistema de control de versións e xestión da compilación. http://www.rational.com/products/clearcase/index.jsp +Comment[hu]=Bővítőmodul a Rational ClearCase komplex verziókövető rendszerhez. http://www.rational.com/products/clearcase/index.jsp +Comment[it]=Un plugin che offre il supporto per Rational ClearCase, un sistema molto vasto per il controllo di versione e la compilazione. http://www.rational.com/products/clearcase/index.jsp +Comment[ja]=大規模なバージョンコントロールやビルド管理システムの合理的な ClearCase の支援を提供するプラグイン。http://www.rational.com/products/clearcase/index.jsp +Comment[ms]=Plugin yang menyediakan sokongan untuk Rational ClearCase, sistem kawalan versi dan pengurus pembinaan yang besar. http://www.rational.com/products/clearcase/index.jsp +Comment[nds]=En Moduul, dat Ünnerstütten för "Rational ClearCase" praatstellt, en groot Verschoonkuntrull- un Opstellen-Pleegsysteem. http://www.rational.com/products/clearcase/index.jsp +Comment[ne]=एउटा प्लगइन जसले र्यासनल क्लेयरकेस, एउटा ठूलो संस्करण नियन्त्रण र निर्माण व्यवस्थापन प्रणालीका लागि समर्थन प्रदान गर्दछ । http://www.rational.com/products/clearcase/index.jsp +Comment[nl]=Een plugin die ondersteuning biedt voor Rational ClearCase, een omvangrijk versiebeheer en buildmanagement-systeem. Zie http://www.rational.com/products/clearcase/index.jsp +Comment[pl]=Wtyczka udostępniająca obsługę Rational ClearCase, dużego systemu kontroli wersji i zarządzania budowaniem. http://www.rational.com/products/clearcase/index.jsp +Comment[pt]=Um 'plugin' que oferece o suporte para o ClearCase da Rational, um sistema grande de controlo de versões e de gestão de compilações. http://www.rational.com/products/clearcase/index.jsp +Comment[pt_BR]=Um plug-in que fornece suporte para o Rational ClearCase, um grande sistema de controle de versão e gerenciamento de compilação. http://www.rational.com/products/clearcase/index.jsp +Comment[ru]=Модуль поддержки Rational ClearCase, мощной системы контроля версий и управления проектом. http://www.rational.com/products/clearcase/index.jsp +Comment[sk]=Modul poskytuje podporu pre Rational ClearCase, riadenie verzií a projektový manažment. +Comment[sl]=Vstavek, ki omogoča podporo za Rational ClearCase, velik sistem za upravljanje z različicami in grajenjem. http://www.rational.com/products/clearcase/index.jsp +Comment[sr]=Прикључак који обезбеђује подршку за Rational-ов ClearCase, велики систем за контролу верзија и управљање градњом. http://www.rational.com/products/clearcase/index.jsp +Comment[sr@Latn]=Priključak koji obezbeđuje podršku za Rational-ov ClearCase, veliki sistem za kontrolu verzija i upravljanje gradnjom. http://www.rational.com/products/clearcase/index.jsp +Comment[sv]=Ett insticksprogram som stöder Rational ClearCase, ett omfattande versions- och bygghanteringssystem. http://www.rational.com/products/clearcase/index.jsp +Comment[ta]=சொருகி ரெஷியனல் தெளிவான எழுத்தை ஆதரிக்கும்,கடைசி பதிப்பை இயக்க மற்றும் மேலாளர் அமைப்பை கட்ட.http://www.rational.com/products/clearcase/index.jsp +Comment[tg]=Модули тарафдори Rational ClearCase, барномаи назораткунандаи калони тафсир ва идоракунии лоиҳаҳо мебошад.http://www.rational.com/products/clearcase/index.jsp +Comment[tr]=Mantıksal ClearCase, büyük bir kontrol ve yapım yönetim sistemi, için destek sağlayan bir eklenti. http://www.rational.com/products/clearcase/index.jsp +Comment[zh_CN]=提供 Rational ClearCase 支持,一个大型的版本控制和编译管理系统。http://www.rational.com/products/clearcase/index.jsp +Comment[zh_TW]=提供支援 Rational ClearCase,大型的版本控制與建立管理系統的外掛程式。http://www.rational.com/products/clearcase/index.jsp +Name=KDevClearCase +Name[da]=KDevelop ClearCase +Name[de]=Unterstützung für ClearCase (KDevelop) +Name[hi]=के-डेव-क्लीयर-केस +Name[nds]=ClearCase-Ünnerstütten för KDevelop +Name[sk]=KDev ClearCase +Name[sv]=KDevelop ClearCase +Name[ta]=KDevதெளிவானஎழுத்து +Name[zh_TW]=KDevelop ClearCase +GenericName=ClearCase Integration +GenericName[ca]=Integració amb ClearClase +GenericName[da]=ClearCase integration +GenericName[de]=ClearCase-Integration +GenericName[el]=Ενσωμάτωση ClearCase +GenericName[es]=Integración con ClearClase +GenericName[et]=ClearCase'i integratsioon +GenericName[eu]=ClearCase integrazioa +GenericName[fa]=مجتمعسازی ClearCase +GenericName[fr]=Intégration de « ClearCase » +GenericName[ga]=Comhtháthú ClearCase +GenericName[gl]=Integración de ClearCase +GenericName[hi]=क्लीयर-केस इंटीग्रेशन +GenericName[hu]=ClearCase-integráció +GenericName[it]=Integrazione di ClearCase +GenericName[ja]=ClearCase 統合 +GenericName[ms]=Intergrasi ClearCase +GenericName[nds]=ClearCase-Integreren +GenericName[ne]=क्लेयरकेस एकिकरण +GenericName[nl]=ClearCase-integratie +GenericName[pl]=Integracja z ClearCase +GenericName[pt]=Integração com o ClearCase +GenericName[pt_BR]=Integração com o ClearCase +GenericName[ru]=Интеграция ClearCase +GenericName[sk]=Integrácia ClearCase +GenericName[sl]=Integracija ClearCase +GenericName[sr]=Интеграција ClearCase-а +GenericName[sr@Latn]=Integracija ClearCase-a +GenericName[sv]=Integrering av ClearCase +GenericName[ta]=தெளிவான எழுத்து ஒருங்கிணைப்பு +GenericName[tg]=Интегратсияи ClearCase +GenericName[tr]=ClearCase Bütünleştirmesi +GenericName[zh_CN]=ClearCase集成 +GenericName[zh_TW]=ClearCase 整合 +ServiceTypes=KDevelop/VersionControl +X-KDE-Library=libkdevclearcase +X-KDevelop-Version=5 +X-KDevelop-Properties=VCS,ClearcaseVCS |