diff --git a/plugins/cvs/CMakeLists.txt b/plugins/cvs/CMakeLists.txt index 52b9b89095..0fa2735a78 100644 --- a/plugins/cvs/CMakeLists.txt +++ b/plugins/cvs/CMakeLists.txt @@ -1,50 +1,49 @@ add_definitions(-DTRANSLATION_DOMAIN=\"kdevcvs\") add_subdirectory(tests) ########### next target ############### set(kdevcvs_PART_SRCS cvsplugin.cpp cvsmainview.cpp cvsgenericoutputview.cpp cvsjob.cpp cvsproxy.cpp editorsview.cpp commitdialog.cpp importmetadatawidget.cpp importdialog.cpp checkoutdialog.cpp cvsannotatejob.cpp cvslogjob.cpp cvsdiffjob.cpp cvsstatusjob.cpp ) set(kdevcvs_PART_UI cvsmainview.ui cvsgenericoutputview.ui editorsview.ui commitdialog.ui importmetadatawidget.ui checkoutdialog.ui ) ki18n_wrap_ui(kdevcvs_PART_SRCS ${kdevcvs_PART_UI}) kdevplatform_add_plugin(kdevcvs JSON kdevcvs.json SOURCES ${kdevcvs_PART_SRCS}) target_link_libraries(kdevcvs KF5::KIOWidgets KF5::Parts - KF5::KDELibs4Support KDev::Util KDev::Interfaces KDev::Vcs KDev::Project KDev::Language ) ########### install files ############### install( FILES kdevcvs.rc DESTINATION ${KXMLGUI_INSTALL_DIR}/kdevcvs ) diff --git a/plugins/cvs/checkoutdialog.cpp b/plugins/cvs/checkoutdialog.cpp index ba9acd42a6..421f5ad788 100644 --- a/plugins/cvs/checkoutdialog.cpp +++ b/plugins/cvs/checkoutdialog.cpp @@ -1,86 +1,86 @@ /*************************************************************************** * Copyright 2007 Robert Gruber * * * * 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 "checkoutdialog.h" +#include #include -#include #include #include #include "cvsplugin.h" #include "cvsjob.h" #include "cvsproxy.h" #include "debug.h" CheckoutDialog::CheckoutDialog(CvsPlugin* plugin, QWidget *parent) - : KDialog(parent), Ui::CheckoutDialogBase(), m_plugin(plugin) + : QDialog(parent), Ui::CheckoutDialogBase(), m_plugin(plugin) { Ui::CheckoutDialogBase::setupUi(this); localWorkingDir->setMode(KFile::Directory); } CheckoutDialog::~CheckoutDialog() { } void CheckoutDialog::accept() { CvsJob *job = m_plugin->proxy()->checkout( localWorkingDir->url(), serverPath->text(), module->currentText(), "", tag->text()); if (job) { connect(job, &CvsJob::result, this, &CheckoutDialog::jobFinished); KDevelop::ICore::self()->runController()->registerJob(job); } } void CheckoutDialog::jobFinished(KJob * job) { if (job->error()) { KMessageBox::error(this, i18n("Error on checkout"), i18n("Checkout Error")); return; } // The job finished, now let's check the output is everything was OK CvsJob* cvsjob = dynamic_cast(job); static QRegExp re_file("^.\\s(.*)"); bool error = false; QStringList lines = cvsjob->output().split('\n'); foreach(const QString &line, lines) { if (line.isEmpty()) { // ignore empty lines continue; } else if (re_file.exactMatch(line)) { // line that tell us that a file has been checkedout continue; } else { // any other line must mean that an error occurred qCDebug(PLUGIN_CVS) << line; error = true; } } if (error) { KMessageBox::error(this, i18n("Some errors occurred while checking out into %1", localWorkingDir->url().toLocalFile()), i18n("Checkout Error")); } else { - KDialog::accept(); + QDialog::accept(); } } diff --git a/plugins/cvs/checkoutdialog.h b/plugins/cvs/checkoutdialog.h index 9f87752797..c1bfeb1422 100644 --- a/plugins/cvs/checkoutdialog.h +++ b/plugins/cvs/checkoutdialog.h @@ -1,42 +1,42 @@ /*************************************************************************** * Copyright 2007 Robert Gruber * * * * 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 KDEVPLATFORM_PLUGIN_CHECKOUTDIALOG_H #define KDEVPLATFORM_PLUGIN_CHECKOUTDIALOG_H +#include #include -#include #include #include "ui_checkoutdialog.h" class CvsPlugin; /** * Allows the user to define from where to checkout * @author Robert Gruber */ -class CheckoutDialog : public KDialog, private Ui::CheckoutDialogBase +class CheckoutDialog : public QDialog, private Ui::CheckoutDialogBase { Q_OBJECT public: explicit CheckoutDialog(CvsPlugin* plugin, QWidget *parent=0); virtual ~CheckoutDialog(); public slots: virtual void accept() override; void jobFinished(KJob* job); private: CvsPlugin* m_plugin; }; #endif diff --git a/plugins/cvs/checkoutdialog.ui b/plugins/cvs/checkoutdialog.ui index 24f01c34b1..ffa6dc9036 100644 --- a/plugins/cvs/checkoutdialog.ui +++ b/plugins/cvs/checkoutdialog.ui @@ -1,161 +1,161 @@ CheckoutDialogBase - + 0 0 400 252 Checkout &Local destination directory: false localWorkingDir 0 0 &Server path (e.g. :pserver:username@cvs.example.com:/cvsroot): false serverPath &Module: module true Tag/Branch: Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok KComboBox QComboBox
kcombobox.h
QLineEdit QLineEdit
klineedit.h
KUrlRequester QFrame
kurlrequester.h
buttonBox accepted() CheckoutDialogBase accept() 248 254 157 274 buttonBox rejected() CheckoutDialogBase reject() 316 260 286 274
diff --git a/plugins/cvs/cvsplugin.cpp b/plugins/cvs/cvsplugin.cpp index 35e763af30..519f20bf47 100644 --- a/plugins/cvs/cvsplugin.cpp +++ b/plugins/cvs/cvsplugin.cpp @@ -1,490 +1,490 @@ /*************************************************************************** * Copyright 2007 Robert Gruber * * * * 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 "cvsplugin.h" #include #include #include #include #include #include -#include +#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "cvsmainview.h" #include "cvsproxy.h" #include "cvsjob.h" #include "editorsview.h" #include "commitdialog.h" #include "cvsgenericoutputview.h" #include "checkoutdialog.h" #include "importdialog.h" #include "importmetadatawidget.h" #include "debug.h" #include #include #include Q_LOGGING_CATEGORY(PLUGIN_CVS, "kdevplatform.plugins.cvs") K_PLUGIN_FACTORY(KDevCvsFactory, registerPlugin();) // K_EXPORT_PLUGIN(KDevCvsFactory(KAboutData("kdevcvs", "kdevcvs", ki18n("CVS"), "0.1", ki18n("Support for CVS version control system"), KAboutData::License_GPL))) class KDevCvsViewFactory: public KDevelop::IToolViewFactory { public: KDevCvsViewFactory(CvsPlugin *plugin): m_plugin(plugin) {} virtual QWidget* create(QWidget *parent = 0) override { return new CvsMainView(m_plugin, parent); } virtual Qt::DockWidgetArea defaultPosition() override { return Qt::BottomDockWidgetArea; } virtual QString id() const override { return "org.kdevelop.CVSView"; } private: CvsPlugin *m_plugin; }; class CvsPluginPrivate { public: explicit CvsPluginPrivate(CvsPlugin *pThis) : m_factory(new KDevCvsViewFactory(pThis)) , m_proxy(new CvsProxy(pThis)) , m_common(new KDevelop::VcsPluginHelper(pThis, pThis)) {} KDevCvsViewFactory* m_factory; QPointer m_proxy; QScopedPointer m_common; }; CvsPlugin::CvsPlugin(QObject *parent, const QVariantList &) : KDevelop::IPlugin("kdevcvs", parent) , d(new CvsPluginPrivate(this)) { KDEV_USE_EXTENSION_INTERFACE(KDevelop::IBasicVersionControl) KDEV_USE_EXTENSION_INTERFACE(KDevelop::ICentralizedVersionControl) core()->uiController()->addToolView(i18n("CVS"), d->m_factory); setXMLFile("kdevcvs.rc"); setupActions(); } CvsPlugin::~CvsPlugin() { } void CvsPlugin::unload() { core()->uiController()->removeToolView( d->m_factory ); } CvsProxy* CvsPlugin::proxy() { return d->m_proxy; } void CvsPlugin::setupActions() { QAction *action; action = actionCollection()->addAction("cvs_import"); action->setText(i18n("Import Directory...")); connect(action, &QAction::triggered, this, &CvsPlugin::slotImport); action = actionCollection()->addAction("cvs_checkout"); action->setText(i18n("Checkout...")); connect(action, &QAction::triggered, this, &CvsPlugin::slotCheckout); action = actionCollection()->addAction("cvs_status"); action->setText(i18n("Status...")); connect(action, &QAction::triggered, this, &CvsPlugin::slotStatus); } const QUrl CvsPlugin::urlFocusedDocument() const { KParts::ReadOnlyPart *plugin = dynamic_cast(core()->partController()->activePart()); if (plugin) { if (plugin->url().isLocalFile()) { return plugin->url(); } } return QUrl(); } void CvsPlugin::slotImport() { QUrl url = urlFocusedDocument(); ImportDialog dlg(this, url); dlg.exec(); } void CvsPlugin::slotCheckout() { ///@todo don't use proxy directly; use interface instead CheckoutDialog dlg(this); dlg.exec(); } void CvsPlugin::slotStatus() { QUrl url = urlFocusedDocument(); QList urls; urls << url; KDevelop::VcsJob* j = status(urls, KDevelop::IBasicVersionControl::Recursive); CvsJob* job = dynamic_cast(j); if (job) { CvsGenericOutputView* view = new CvsGenericOutputView(job); emit addNewTabToMainView(view, i18n("Status")); KDevelop::ICore::self()->runController()->registerJob(job); } } KDevelop::ContextMenuExtension CvsPlugin::contextMenuExtension(KDevelop::Context* context) { d->m_common->setupFromContext(context); QList const & ctxUrlList = d->m_common->contextUrlList(); bool hasVersionControlledEntries = false; foreach(const QUrl &url, ctxUrlList) { if (d->m_proxy->isValidDirectory(url)) { hasVersionControlledEntries = true; break; } } qCDebug(PLUGIN_CVS) << "version controlled?" << hasVersionControlledEntries; if (!hasVersionControlledEntries) return IPlugin::contextMenuExtension(context); QMenu* menu = d->m_common->commonActions(); menu->addSeparator(); QAction *action; // Just add actions which are not covered by the cvscommon plugin action = new QAction(i18n("Edit"), this); connect(action, &QAction::triggered, this, &CvsPlugin::ctxEdit); menu->addAction(action); action = new QAction(i18n("Unedit"), this); connect(action, &QAction::triggered, this, &CvsPlugin::ctxUnEdit); menu->addAction(action); action = new QAction(i18n("Show Editors"), this); connect(action, &QAction::triggered, this, &CvsPlugin::ctxEditors); menu->addAction(action); KDevelop::ContextMenuExtension menuExt; menuExt.addAction(KDevelop::ContextMenuExtension::VcsGroup, menu->menuAction()); return menuExt; } void CvsPlugin::ctxEdit() { QList const & urls = d->m_common->contextUrlList(); Q_ASSERT(!urls.empty()); KDevelop::VcsJob* j = edit(urls.front()); CvsJob* job = dynamic_cast(j); if (job) { connect(job, &CvsJob::result, this, &CvsPlugin::jobFinished); KDevelop::ICore::self()->runController()->registerJob(job); } } void CvsPlugin::ctxUnEdit() { QList const & urls = d->m_common->contextUrlList(); Q_ASSERT(!urls.empty()); KDevelop::VcsJob* j = unedit(urls.front()); CvsJob* job = dynamic_cast(j); if (job) { connect(job, &CvsJob::result, this, &CvsPlugin::jobFinished); KDevelop::ICore::self()->runController()->registerJob(job); } } void CvsPlugin::ctxEditors() { QList const & urls = d->m_common->contextUrlList(); Q_ASSERT(!urls.empty()); CvsJob* job = d->m_proxy->editors(findWorkingDir(urls.front()), urls); if (job) { KDevelop::ICore::self()->runController()->registerJob(job); EditorsView* view = new EditorsView(job); emit addNewTabToMainView(view, i18n("Editors")); } } QString CvsPlugin::findWorkingDir(const QUrl& location) { QFileInfo fileInfo(location.toLocalFile()); // find out correct working directory if (fileInfo.isFile()) { return fileInfo.absolutePath(); } else { return fileInfo.absoluteFilePath(); } } // Begin: KDevelop::IBasicVersionControl bool CvsPlugin::isVersionControlled(const QUrl & localLocation) { return d->m_proxy->isVersionControlled(localLocation); } KDevelop::VcsJob * CvsPlugin::repositoryLocation(const QUrl & localLocation) { Q_UNUSED(localLocation); return NULL; } KDevelop::VcsJob * CvsPlugin::add(const QList & localLocations, KDevelop::IBasicVersionControl::RecursionMode recursion) { CvsJob* job = d->m_proxy->add(findWorkingDir(localLocations[0]), localLocations, (recursion == KDevelop::IBasicVersionControl::Recursive) ? true : false); return job; } KDevelop::VcsJob * CvsPlugin::remove(const QList & localLocations) { CvsJob* job = d->m_proxy->remove(findWorkingDir(localLocations[0]), localLocations); return job; } KDevelop::VcsJob * CvsPlugin::localRevision(const QUrl & localLocation, KDevelop::VcsRevision::RevisionType) { Q_UNUSED(localLocation) return NULL; } KDevelop::VcsJob * CvsPlugin::status(const QList & localLocations, KDevelop::IBasicVersionControl::RecursionMode recursion) { CvsJob* job = d->m_proxy->status(findWorkingDir(localLocations[0]), localLocations, (recursion == KDevelop::IBasicVersionControl::Recursive) ? true : false); return job; } KDevelop::VcsJob * CvsPlugin::unedit(const QUrl& localLocation) { CvsJob* job = d->m_proxy->unedit(findWorkingDir(localLocation), QList() << localLocation); return job; } KDevelop::VcsJob * CvsPlugin::edit(const QUrl& localLocation) { CvsJob* job = d->m_proxy->edit(findWorkingDir(localLocation), QList() << localLocation); return job; } KDevelop::VcsJob * CvsPlugin::copy(const QUrl & localLocationSrc, const QUrl & localLocationDstn) { bool ok = QFile::copy(localLocationSrc.toLocalFile(), localLocationDstn.path()); if (!ok) { return NULL; } QList listDstn; listDstn << localLocationDstn; CvsJob* job = d->m_proxy->add(findWorkingDir(localLocationDstn), listDstn, true); return job; } KDevelop::VcsJob * CvsPlugin::move(const QUrl &, const QUrl &) { return NULL; } KDevelop::VcsJob * CvsPlugin::revert(const QList & localLocations, KDevelop::IBasicVersionControl::RecursionMode recursion) { KDevelop::VcsRevision rev; CvsJob* job = d->m_proxy->update(findWorkingDir(localLocations[0]), localLocations, rev, "-C", (recursion == KDevelop::IBasicVersionControl::Recursive) ? true : false, false, false); return job; } KDevelop::VcsJob * CvsPlugin::update(const QList & localLocations, const KDevelop::VcsRevision & rev, KDevelop::IBasicVersionControl::RecursionMode recursion) { CvsJob* job = d->m_proxy->update(findWorkingDir(localLocations[0]), localLocations, rev, "", (recursion == KDevelop::IBasicVersionControl::Recursive) ? true : false, false, false); return job; } KDevelop::VcsJob * CvsPlugin::commit(const QString & message, const QList & localLocations, KDevelop::IBasicVersionControl::RecursionMode recursion) { Q_UNUSED(recursion); QString msg = message; if (msg.isEmpty()) { CommitDialog dlg; if (dlg.exec() == QDialog::Accepted) { msg = dlg.message(); } } CvsJob* job = d->m_proxy->commit(findWorkingDir(localLocations[0]), localLocations, msg); return job; } KDevelop::VcsJob * CvsPlugin::diff(const QUrl & fileOrDirectory, const KDevelop::VcsRevision & srcRevision, const KDevelop::VcsRevision & dstRevision, KDevelop::VcsDiff::Type, KDevelop::IBasicVersionControl::RecursionMode) { CvsJob* job = d->m_proxy->diff(fileOrDirectory, srcRevision, dstRevision, "-uN"/*always unified*/); return job; } KDevelop::VcsJob * CvsPlugin::log(const QUrl & localLocation, const KDevelop::VcsRevision & rev, unsigned long limit) { Q_UNUSED(limit) CvsJob* job = d->m_proxy->log(localLocation, rev); return job; } KDevelop::VcsJob * CvsPlugin::log(const QUrl & localLocation, const KDevelop::VcsRevision & rev, const KDevelop::VcsRevision & limit) { Q_UNUSED(limit) return log(localLocation, rev, 0); } KDevelop::VcsJob * CvsPlugin::annotate(const QUrl & localLocation, const KDevelop::VcsRevision & rev) { CvsJob* job = d->m_proxy->annotate(localLocation, rev); return job; } KDevelop::VcsJob * CvsPlugin::resolve(const QList & localLocations, KDevelop::IBasicVersionControl::RecursionMode recursion) { Q_UNUSED(localLocations); Q_UNUSED(recursion); return NULL; } KDevelop::VcsJob * CvsPlugin::import(const QString& commitMessage, const QUrl& sourceDirectory, const KDevelop::VcsLocation& destinationRepository) { if (commitMessage.isEmpty() || !sourceDirectory.isLocalFile() || !destinationRepository.isValid() || destinationRepository.type() != KDevelop::VcsLocation::RepositoryLocation) { return 0; } qCDebug(PLUGIN_CVS) << "CVS Import requested " << "src:" << sourceDirectory.toLocalFile() << "srv:" << destinationRepository.repositoryServer() << "module:" << destinationRepository.repositoryModule(); CvsJob* job = d->m_proxy->import(sourceDirectory, destinationRepository.repositoryServer(), destinationRepository.repositoryModule(), destinationRepository.userData().toString(), destinationRepository.repositoryTag(), commitMessage); return job; } KDevelop::VcsJob * CvsPlugin::createWorkingCopy(const KDevelop::VcsLocation & sourceRepository, const QUrl & destinationDirectory, KDevelop::IBasicVersionControl::RecursionMode recursion) { Q_UNUSED(recursion); if (!destinationDirectory.isLocalFile() || !sourceRepository.isValid() || sourceRepository.type() != KDevelop::VcsLocation::RepositoryLocation) { return 0; } qCDebug(PLUGIN_CVS) << "CVS Checkout requested " << "dest:" << destinationDirectory.toLocalFile() << "srv:" << sourceRepository.repositoryServer() << "module:" << sourceRepository.repositoryModule() << "branch:" << sourceRepository.repositoryBranch() << endl; CvsJob* job = d->m_proxy->checkout(destinationDirectory, sourceRepository.repositoryServer(), sourceRepository.repositoryModule(), "", sourceRepository.repositoryBranch(), true, true); return job; } QString CvsPlugin::name() const { return i18n("CVS"); } KDevelop::VcsImportMetadataWidget* CvsPlugin::createImportMetadataWidget(QWidget* parent) { return new ImportMetadataWidget(parent); } KDevelop::VcsLocationWidget* CvsPlugin::vcsLocation(QWidget* parent) const { return new KDevelop::StandardVcsLocationWidget(parent); } // End: KDevelop::IBasicVersionControl #include "cvsplugin.moc" diff --git a/plugins/cvs/importdialog.cpp b/plugins/cvs/importdialog.cpp index 2be84eaf2f..23cd9f3b13 100644 --- a/plugins/cvs/importdialog.cpp +++ b/plugins/cvs/importdialog.cpp @@ -1,90 +1,96 @@ /*************************************************************************** * Copyright 2007 Robert Gruber * * * * 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 "importdialog.h" +#include #include -#include #include #include #include "cvsplugin.h" #include "cvsproxy.h" #include "cvsjob.h" #include "debug.h" #include #include "importmetadatawidget.h" ImportDialog::ImportDialog(CvsPlugin* plugin, const QUrl &url, QWidget *parent) - : KDialog(parent), m_url(url), m_plugin(plugin) + : QDialog(parent), m_url(url), m_plugin(plugin) { m_widget = new ImportMetadataWidget(this); m_widget->setSourceLocation( KDevelop::VcsLocation(m_url) ); m_widget->setSourceLocationEditable( true ); - setMainWidget(m_widget); + auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + auto layout = new QVBoxLayout(); + setLayout(layout); + layout->addWidget(m_widget); + layout->addWidget(buttonBox); + connect(buttonBox, &QDialogButtonBox::accepted, this, &ImportDialog::accept); + connect(buttonBox, &QDialogButtonBox::rejected, this, &ImportDialog::reject); } ImportDialog::~ImportDialog() { } void ImportDialog::accept() { KDevelop::VcsJob *job = m_plugin->import(m_widget->message(), m_widget->source(), m_widget->destination()); if (job) { connect(job, &KDevelop::VcsJob::result, this, &ImportDialog::jobFinished); KDevelop::ICore::self()->runController()->registerJob(job); } } void ImportDialog::jobFinished(KJob * job) { if (job->error()) { KMessageBox::error(this, i18n("Error on importing"), i18n("Import Error")); return; } // The job finished, now let's check the output is everything was OK CvsJob* cvsjob = dynamic_cast(job); static QRegExp re_file("^[IN]\\s(.*)"); bool error = false; QStringList lines = cvsjob->output().split('\n'); foreach(const QString &line, lines) { if (line.isEmpty()) { // ignore empty lines continue; } else if (re_file.exactMatch(line)) { // line that tell us that a file has been added are OK continue; // this normaly should be the last line } else if (line.contains("No conflicts created by this import")) { continue; } else { // any other line must mean that an error occurred qCDebug(PLUGIN_CVS) <<"ERR: "<< line; error = true; } } if (error) { KMessageBox::error(this, i18n("Some errors occurred while importing %1", m_url.toLocalFile()), i18n("Import Error")); } else { - KDialog::accept(); + QDialog::accept(); } } diff --git a/plugins/cvs/importdialog.h b/plugins/cvs/importdialog.h index 1e4ec6b88e..bab17144cb 100644 --- a/plugins/cvs/importdialog.h +++ b/plugins/cvs/importdialog.h @@ -1,44 +1,44 @@ /*************************************************************************** * Copyright 2007 Robert Gruber * * * * 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 KDEVPLATFORM_PLUGIN_IMPORTDIALOG_H #define KDEVPLATFORM_PLUGIN_IMPORTDIALOG_H -#include +#include #include #include class ImportMetadataWidget; class CvsPlugin; /** * Asks the user for all options needed to import an existing directory into * a CVS repository * @author Robert Gruber */ -class ImportDialog : public KDialog +class ImportDialog : public QDialog { Q_OBJECT public: ImportDialog(CvsPlugin *plugin, const QUrl &url, QWidget* parent=0); virtual ~ImportDialog(); public slots: virtual void accept() override; void jobFinished(KJob* job); private: QUrl m_url; CvsPlugin* m_plugin; ImportMetadataWidget* m_widget; }; #endif