You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdevelop/vcs/cvsservice/integrator/integratordlg.cpp

192 lines
7.1 KiB

/***************************************************************************
* Copyright (C) 2004 by Alexander Dymo *
* adymo@tdevelop.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., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
#include "integratordlg.h"
#include <tqfile.h>
#include <tqdir.h>
#include <tqlayout.h>
#include <tqcombobox.h>
#include <tqregexp.h>
#include <tqtextstream.h>
#include <tqcheckbox.h>
#include <kapplication.h>
#include <kdialogbase.h>
#include <kurlrequester.h>
#include <kprocess.h>
#include <klocale.h>
#include <kmessagebox.h>
#include <kdebug.h>
#include <klineedit.h>
#include <cvsservice_stub.h>
#include "initdlg.h"
IntegratorDlg::IntegratorDlg(CVSServiceIntegrator *integrator, TQWidget *parent, const char *name)
:IntegratorDlgBase(parent, name), m_integrator(integrator)
{
TQFile cvspass(TQDir::homeDirPath() + "/.cvspass");
if (cvspass.open(IO_ReadOnly))
{
TQTextStream stream(&cvspass);
while (!stream.atEnd())
{
TQString line = stream.readLine();
TQStringList recs = TQStringList::split(" ", line, false);
repository->insertItem(recs[1]);
}
cvspass.close();
}
}
void IntegratorDlg::init_clicked()
{
KDialogBase dlg(KDialogBase::Plain, i18n("Init CVS Repository"), KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok);
dlg.plainPage()->setMargin(0);
(new TQVBoxLayout(dlg.plainPage(), 0, 0))->setAutoAdd(true);
InitDlg *initDlg = new InitDlg(dlg.plainPage());
initDlg->show();
initDlg->location->setFocus();
initDlg->location->setMode(KFile::Directory);
TQRegExp localrep(":local:(.*)");
if (localrep.search(repository->currentText()) != -1)
initDlg->location->setURL(localrep.cap(1));
if (dlg.exec() == TQDialog::Accepted)
{
TQString url = initDlg->location->url();
KProcess *proc = new KProcess();
*proc << "cvs";
*proc << "-d" << url << "init";
proc->start(KProcess::Block);
if (!proc->normalExit())
KMessageBox::error(this, i18n("cvs init did not exit normally. Please check if cvs is installed and works correctly."), i18n("Init CVS Repository"));
else if (proc->exitStatus() != 0)
KMessageBox::error(this, i18n("cvs init exited with status %1. Please check if the cvs location is correct.").arg(proc->exitStatus()), i18n("Init CVS Repository"));
else
{
repository->insertItem(TQString(":local:%1").arg(url));
repository->setCurrentText(TQString(":local:%1").arg(url));
}
}
}
void IntegratorDlg::login_clicked()
{
TQCString appId;
TQString error;
if (KApplication::startServiceByDesktopName("cvsservice",
TQStringList(), &error, &appId))
{
TQString msg = i18n("Unable to find the Cervisia KPart. \n"
"Cervisia Integration will not be available. Please check your\n"
"Cervisia installation and re-try. Reason was:\n") + error;
KMessageBox::error(this, msg, "DCOP Error");
}
else
{
CvsService_stub *cvsService = new CvsService_stub(appId, "CvsService");
cvsService->login(repository->currentText());
}
}
void IntegratorDlg::accept()
{
if (m_projectLocation.isEmpty())
return;
if (!createModule->isChecked())
return;
KProcess *proc = new KProcess();
proc->setWorkingDirectory(m_projectLocation);
*proc << "cvs";
*proc << "-d" << repository->currentText() << "import"
<< "-m" << TQString("\"%1\"").arg(comment->text()) << module->text()
<< vendorTag->text() << releaseTag->text();
proc->start(KProcess::Block);
if (!proc->normalExit())
KMessageBox::error(this, i18n("cvs import did not exit normally. Please check if cvs is installed and works correctly."), i18n("Init CVS Repository"));
else if (proc->exitStatus() != 0)
KMessageBox::error(this, i18n("cvs import exited with status %1. Please check if the cvs location is correct.").arg(proc->exitStatus()), i18n("Init CVS Repository"));
else
{
kdDebug() << "Project is in: " << m_projectLocation << endl;
KURL url = KURL::fromPathOrURL(m_projectLocation);
TQString up = url.upURL().path();
kdDebug() << "Up is: " << up << endl;
//delete sources in project dir
KProcess *rmproc = new KProcess();
*rmproc << "rm";
*rmproc << "-f" << "-r" << m_projectLocation;
rmproc->start(KProcess::Block);
//checkout sources from cvs
KProcess *coproc = new KProcess();
coproc->setWorkingDirectory(up);
*coproc << "cvs";
*coproc << "-d" << repository->currentText() << "checkout" << "-d" << m_projectName << module->text();
coproc->start(KProcess::Block);
}
/* TQCString appId;
TQString error;
if (KApplication::startServiceByDesktopName("cvsservice",
TQStringList(), &error, &appId))
{
TQString msg = i18n("Unable to find the Cervisia KPart. \n"
"Cervisia Integration will not be available. Please check your\n"
"Cervisia installation and re-try. Reason was:\n") + error;
KMessageBox::error(this, msg, "DCOP Error");
}
else
{
kdDebug() << "!!!!! IMPORT" << endl;
CvsService_stub *cvsService = new CvsService_stub(appId, "CvsService");
cvsService->import(m_projectLocation, repository->currentText(), module->text(),
"", comment->text(), vendorTag->text(), releaseTag->text(), false);
}*/
}
void IntegratorDlg::createModule_clicked()
{
}
TQWidget *IntegratorDlg::self()
{
return const_cast<IntegratorDlg*>(this);
}
void IntegratorDlg::init(const TQString &projectName, const TQString &projectLocation)
{
if( m_projectName != projectName )
module->setText(projectName);
m_projectName = projectName;
m_projectLocation = projectLocation;
}
#include "integratordlg.moc"