forked from qt-creator/qt-creator
Add a CVS plugin for use with UNIX cvs or Tortoise CVS.
This commit is contained in:
7
src/plugins/cvs/CVS.mimetypes.xml
Normal file
7
src/plugins/cvs/CVS.mimetypes.xml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
|
||||||
|
<mime-type type="application/vnd.nokia.text.cvs.submit">
|
||||||
|
<comment>CVS submit template</comment>
|
||||||
|
<sub-class-of type="text/plain"/>
|
||||||
|
</mime-type>
|
||||||
|
</mime-info>
|
||||||
27
src/plugins/cvs/CVS.pluginspec
Normal file
27
src/plugins/cvs/CVS.pluginspec
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
<plugin name="CVS" version="1.2.80" compatVersion="1.2.80">
|
||||||
|
<vendor>Nokia Corporation</vendor>
|
||||||
|
<copyright>(C) 2008-2009 Nokia Corporation</copyright>
|
||||||
|
<license>
|
||||||
|
Commercial Usage
|
||||||
|
|
||||||
|
Licensees holding valid Qt Commercial licenses may use this plugin in
|
||||||
|
accordance with the Qt Commercial License Agreement provided with the
|
||||||
|
Software or, alternatively, in accordance with the terms contained in
|
||||||
|
a written agreement between you and Nokia.
|
||||||
|
|
||||||
|
GNU Lesser General Public License Usage
|
||||||
|
|
||||||
|
Alternatively, this plugin may be used under the terms of the GNU Lesser
|
||||||
|
General Public License version 2.1 as published by the Free Software
|
||||||
|
Foundation. Please review the following information to
|
||||||
|
ensure the GNU Lesser General Public License version 2.1 requirements
|
||||||
|
will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
|
||||||
|
<description>CVS integration.</description>
|
||||||
|
<url>http://www.qtsoftware.com</url>
|
||||||
|
<dependencyList>
|
||||||
|
<dependency name="TextEditor" version="1.2.80"/>
|
||||||
|
<dependency name="ProjectExplorer" version="1.2.80"/>
|
||||||
|
<dependency name="Core" version="1.2.80"/>
|
||||||
|
<dependency name="VCSBase" version="1.2.80"/>
|
||||||
|
</dependencyList>
|
||||||
|
</plugin>
|
||||||
46
src/plugins/cvs/annotationhighlighter.cpp
Normal file
46
src/plugins/cvs/annotationhighlighter.cpp
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
/**************************************************************************
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
|
**
|
||||||
|
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||||
|
**
|
||||||
|
** Commercial Usage
|
||||||
|
**
|
||||||
|
** Licensees holding valid Qt Commercial licenses may use this file in
|
||||||
|
** accordance with the Qt Commercial License Agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and Nokia.
|
||||||
|
**
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
|
** General Public License version 2.1 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||||
|
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** If you are unsure which license is appropriate for your use, please
|
||||||
|
** contact the sales department at http://www.qtsoftware.com/contact.
|
||||||
|
**
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
#include "annotationhighlighter.h"
|
||||||
|
|
||||||
|
using namespace CVS;
|
||||||
|
using namespace CVS::Internal;
|
||||||
|
|
||||||
|
CVSAnnotationHighlighter::CVSAnnotationHighlighter(const ChangeNumbers &changeNumbers,
|
||||||
|
QTextDocument *document) :
|
||||||
|
VCSBase::BaseAnnotationHighlighter(changeNumbers, document),
|
||||||
|
m_blank(QLatin1Char(' '))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CVSAnnotationHighlighter::changeNumber(const QString &block) const
|
||||||
|
{
|
||||||
|
const int pos = block.indexOf(m_blank);
|
||||||
|
return pos > 1 ? block.left(pos) : QString();
|
||||||
|
}
|
||||||
55
src/plugins/cvs/annotationhighlighter.h
Normal file
55
src/plugins/cvs/annotationhighlighter.h
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
/**************************************************************************
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
|
**
|
||||||
|
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||||
|
**
|
||||||
|
** Commercial Usage
|
||||||
|
**
|
||||||
|
** Licensees holding valid Qt Commercial licenses may use this file in
|
||||||
|
** accordance with the Qt Commercial License Agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and Nokia.
|
||||||
|
**
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
|
** General Public License version 2.1 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||||
|
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** If you are unsure which license is appropriate for your use, please
|
||||||
|
** contact the sales department at http://www.qtsoftware.com/contact.
|
||||||
|
**
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
#ifndef ANNOTATIONHIGHLIGHTER_H
|
||||||
|
#define ANNOTATIONHIGHLIGHTER_H
|
||||||
|
|
||||||
|
#include <vcsbase/baseannotationhighlighter.h>
|
||||||
|
|
||||||
|
namespace CVS {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
|
// Annotation highlighter for cvs triggering on 'changenumber '
|
||||||
|
class CVSAnnotationHighlighter : public VCSBase::BaseAnnotationHighlighter
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit CVSAnnotationHighlighter(const ChangeNumbers &changeNumbers,
|
||||||
|
QTextDocument *document = 0);
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual QString changeNumber(const QString &block) const;
|
||||||
|
|
||||||
|
const QChar m_blank;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace Internal
|
||||||
|
} // namespace CVS
|
||||||
|
|
||||||
|
#endif // ANNOTATIONHIGHLIGHTER_H
|
||||||
36
src/plugins/cvs/cvs.pro
Normal file
36
src/plugins/cvs/cvs.pro
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
TEMPLATE = lib
|
||||||
|
TARGET = CVS
|
||||||
|
|
||||||
|
include(../../qtcreatorplugin.pri)
|
||||||
|
include(../../plugins/projectexplorer/projectexplorer.pri)
|
||||||
|
include(../../plugins/texteditor/texteditor.pri)
|
||||||
|
include(../../plugins/coreplugin/coreplugin.pri)
|
||||||
|
include(../../plugins/vcsbase/vcsbase.pri)
|
||||||
|
include(../../libs/utils/utils.pri)
|
||||||
|
|
||||||
|
HEADERS += annotationhighlighter.h \
|
||||||
|
cvsplugin.h \
|
||||||
|
cvscontrol.h \
|
||||||
|
cvsoutputwindow.h \
|
||||||
|
settingspage.h \
|
||||||
|
cvseditor.h \
|
||||||
|
cvssubmiteditor.h \
|
||||||
|
cvssettings.h \
|
||||||
|
cvsutils.h \
|
||||||
|
cvsconstants.h
|
||||||
|
|
||||||
|
SOURCES += annotationhighlighter.cpp \
|
||||||
|
cvsplugin.cpp \
|
||||||
|
cvscontrol.cpp \
|
||||||
|
cvsoutputwindow.cpp \
|
||||||
|
settingspage.cpp \
|
||||||
|
cvseditor.cpp \
|
||||||
|
cvssubmiteditor.cpp \
|
||||||
|
cvssettings.cpp \
|
||||||
|
cvsutils.cpp
|
||||||
|
|
||||||
|
FORMS += settingspage.ui
|
||||||
|
|
||||||
|
RESOURCES += cvs.qrc
|
||||||
|
|
||||||
|
OTHER_FILES += CVS.pluginspec
|
||||||
5
src/plugins/cvs/cvs.qrc
Normal file
5
src/plugins/cvs/cvs.qrc
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<RCC>
|
||||||
|
<qresource prefix="/trolltech.cvs" >
|
||||||
|
<file>CVS.mimetypes.xml</file>
|
||||||
|
</qresource>
|
||||||
|
</RCC>
|
||||||
48
src/plugins/cvs/cvsconstants.h
Normal file
48
src/plugins/cvs/cvsconstants.h
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
/**************************************************************************
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
|
**
|
||||||
|
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||||
|
**
|
||||||
|
** Commercial Usage
|
||||||
|
**
|
||||||
|
** Licensees holding valid Qt Commercial licenses may use this file in
|
||||||
|
** accordance with the Qt Commercial License Agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and Nokia.
|
||||||
|
**
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
|
** General Public License version 2.1 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||||
|
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** If you are unsure which license is appropriate for your use, please
|
||||||
|
** contact the sales department at http://www.qtsoftware.com/contact.
|
||||||
|
**
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
#ifndef CVS_CONSTANTS_H
|
||||||
|
#define CVS_CONSTANTS_H
|
||||||
|
|
||||||
|
namespace CVS {
|
||||||
|
namespace Constants {
|
||||||
|
|
||||||
|
const char * const CVS_SUBMIT_MIMETYPE = "application/vnd.nokia.text.cvs.submit";
|
||||||
|
const char * const CVSEDITOR = "CVS Editor";
|
||||||
|
const char * const CVSEDITOR_KIND = "CVS Editor";
|
||||||
|
const char * const CVSCOMMITEDITOR = "CVS Commit Editor";
|
||||||
|
const char * const CVSCOMMITEDITOR_KIND = "CVS Commit Editor";
|
||||||
|
const char * const SUBMIT_CURRENT = "CVS.SubmitCurrentLog";
|
||||||
|
const char * const DIFF_SELECTED = "CVS.DiffSelectedFilesInLog";
|
||||||
|
enum { debug = 0 };
|
||||||
|
|
||||||
|
} // namespace Constants
|
||||||
|
} // namespace SubVersion
|
||||||
|
|
||||||
|
#endif // CVS_CONSTANTS_H
|
||||||
98
src/plugins/cvs/cvscontrol.cpp
Normal file
98
src/plugins/cvs/cvscontrol.cpp
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
/**************************************************************************
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
|
**
|
||||||
|
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||||
|
**
|
||||||
|
** Commercial Usage
|
||||||
|
**
|
||||||
|
** Licensees holding valid Qt Commercial licenses may use this file in
|
||||||
|
** accordance with the Qt Commercial License Agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and Nokia.
|
||||||
|
**
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
|
** General Public License version 2.1 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||||
|
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** If you are unsure which license is appropriate for your use, please
|
||||||
|
** contact the sales department at http://www.qtsoftware.com/contact.
|
||||||
|
**
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
#include "cvscontrol.h"
|
||||||
|
#include "cvsplugin.h"
|
||||||
|
|
||||||
|
using namespace CVS;
|
||||||
|
using namespace CVS::Internal;
|
||||||
|
|
||||||
|
CVSControl::CVSControl(CVSPlugin *plugin) :
|
||||||
|
m_enabled(true),
|
||||||
|
m_plugin(plugin)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CVSControl::name() const
|
||||||
|
{
|
||||||
|
return QLatin1String("cvs");
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CVSControl::isEnabled() const
|
||||||
|
{
|
||||||
|
return m_enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CVSControl::setEnabled(bool enabled)
|
||||||
|
{
|
||||||
|
if (m_enabled != enabled) {
|
||||||
|
m_enabled = enabled;
|
||||||
|
emit enabledChanged(m_enabled);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CVSControl::supportsOperation(Operation operation) const
|
||||||
|
{
|
||||||
|
bool rc = true;
|
||||||
|
switch (operation) {
|
||||||
|
case AddOperation:
|
||||||
|
case DeleteOperation:
|
||||||
|
break;
|
||||||
|
case OpenOperation:
|
||||||
|
rc = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CVSControl::vcsOpen(const QString & /* fileName */)
|
||||||
|
{
|
||||||
|
// Open for edit: N/A
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CVSControl::vcsAdd(const QString &fileName)
|
||||||
|
{
|
||||||
|
return m_plugin->vcsAdd(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CVSControl::vcsDelete(const QString &fileName)
|
||||||
|
{
|
||||||
|
return m_plugin->vcsDelete(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CVSControl::managesDirectory(const QString &directory) const
|
||||||
|
{
|
||||||
|
return m_plugin->managesDirectory(directory);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CVSControl::findTopLevelForDirectory(const QString &directory) const
|
||||||
|
{
|
||||||
|
return m_plugin->findTopLevelForDirectory(directory);
|
||||||
|
}
|
||||||
70
src/plugins/cvs/cvscontrol.h
Normal file
70
src/plugins/cvs/cvscontrol.h
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
/**************************************************************************
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
|
**
|
||||||
|
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||||
|
**
|
||||||
|
** Commercial Usage
|
||||||
|
**
|
||||||
|
** Licensees holding valid Qt Commercial licenses may use this file in
|
||||||
|
** accordance with the Qt Commercial License Agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and Nokia.
|
||||||
|
**
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
|
** General Public License version 2.1 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||||
|
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** If you are unsure which license is appropriate for your use, please
|
||||||
|
** contact the sales department at http://www.qtsoftware.com/contact.
|
||||||
|
**
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
#ifndef CVSCONTROL_H
|
||||||
|
#define CVSCONTROL_H
|
||||||
|
|
||||||
|
#include <coreplugin/iversioncontrol.h>
|
||||||
|
|
||||||
|
namespace CVS {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
|
class CVSPlugin;
|
||||||
|
|
||||||
|
// Just a proxy for CVSPlugin
|
||||||
|
class CVSControl : public Core::IVersionControl
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit CVSControl(CVSPlugin *plugin);
|
||||||
|
virtual QString name() const;
|
||||||
|
|
||||||
|
virtual bool isEnabled() const;
|
||||||
|
virtual void setEnabled(bool enabled);
|
||||||
|
|
||||||
|
virtual bool managesDirectory(const QString &directory) const;
|
||||||
|
virtual QString findTopLevelForDirectory(const QString &directory) const;
|
||||||
|
|
||||||
|
virtual bool supportsOperation(Operation operation) const;
|
||||||
|
virtual bool vcsOpen(const QString &fileName);
|
||||||
|
virtual bool vcsAdd(const QString &fileName);
|
||||||
|
virtual bool vcsDelete(const QString &filename);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void enabledChanged(bool);
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool m_enabled;
|
||||||
|
CVSPlugin *m_plugin;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace Internal
|
||||||
|
} // namespace CVS
|
||||||
|
|
||||||
|
#endif // CVSCONTROL_H
|
||||||
159
src/plugins/cvs/cvseditor.cpp
Normal file
159
src/plugins/cvs/cvseditor.cpp
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
/**************************************************************************
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
|
**
|
||||||
|
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||||
|
**
|
||||||
|
** Commercial Usage
|
||||||
|
**
|
||||||
|
** Licensees holding valid Qt Commercial licenses may use this file in
|
||||||
|
** accordance with the Qt Commercial License Agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and Nokia.
|
||||||
|
**
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
|
** General Public License version 2.1 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||||
|
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** If you are unsure which license is appropriate for your use, please
|
||||||
|
** contact the sales department at http://www.qtsoftware.com/contact.
|
||||||
|
**
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
#include "cvseditor.h"
|
||||||
|
|
||||||
|
#include "annotationhighlighter.h"
|
||||||
|
#include "cvsconstants.h"
|
||||||
|
|
||||||
|
#include <utils/qtcassert.h>
|
||||||
|
#include <vcsbase/diffhighlighter.h>
|
||||||
|
|
||||||
|
#include <QtCore/QDebug>
|
||||||
|
#include <QtGui/QTextCursor>
|
||||||
|
|
||||||
|
namespace CVS {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
|
// Match a CVS revision ("1.1.1.1")
|
||||||
|
#define CVS_REVISION_PATTERN "[\\d\\.]+"
|
||||||
|
#define CVS_REVISION_AT_START_PATTERN "^("CVS_REVISION_PATTERN") "
|
||||||
|
|
||||||
|
CVSEditor::CVSEditor(const VCSBase::VCSBaseEditorParameters *type,
|
||||||
|
QWidget *parent) :
|
||||||
|
VCSBase::VCSBaseEditor(type, parent),
|
||||||
|
m_revisionPattern(QLatin1String(CVS_REVISION_AT_START_PATTERN".*$"))
|
||||||
|
{
|
||||||
|
QTC_ASSERT(m_revisionPattern.isValid(), return);
|
||||||
|
}
|
||||||
|
|
||||||
|
QSet<QString> CVSEditor::annotationChanges() const
|
||||||
|
{
|
||||||
|
QSet<QString> changes;
|
||||||
|
const QString txt = toPlainText();
|
||||||
|
if (txt.isEmpty())
|
||||||
|
return changes;
|
||||||
|
// Hunt for first change number in annotation: "1.1 (author)"
|
||||||
|
QRegExp r(QLatin1String(CVS_REVISION_AT_START_PATTERN));
|
||||||
|
QTC_ASSERT(r.isValid(), return changes);
|
||||||
|
if (r.indexIn(txt) != -1) {
|
||||||
|
changes.insert(r.cap(1));
|
||||||
|
r.setPattern(QLatin1String("\n("CVS_REVISION_PATTERN") "));
|
||||||
|
QTC_ASSERT(r.isValid(), return changes);
|
||||||
|
int pos = 0;
|
||||||
|
while ((pos = r.indexIn(txt, pos)) != -1) {
|
||||||
|
pos += r.matchedLength();
|
||||||
|
changes.insert(r.cap(1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (CVS::Constants::debug)
|
||||||
|
qDebug() << "CVSEditor::annotationChanges() returns #" << changes.size();
|
||||||
|
return changes;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CVSEditor::changeUnderCursor(const QTextCursor &c) const
|
||||||
|
{
|
||||||
|
|
||||||
|
// Check for a revision number at the beginning of the line.
|
||||||
|
// Note that "cursor.select(QTextCursor::WordUnderCursor)" will
|
||||||
|
// only select the part up until the dot.
|
||||||
|
// Check if we are at the beginning of a line within a reasonable offset.
|
||||||
|
const QTextBlock block = c.block();
|
||||||
|
if (c.atBlockStart() || (c.position() - block.position() < 3)) {
|
||||||
|
const QString line = block.text();
|
||||||
|
if (m_revisionPattern.exactMatch(line))
|
||||||
|
return m_revisionPattern.cap(1);
|
||||||
|
}
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* \code
|
||||||
|
cvs diff -d -u -r1.1 -r1.2:
|
||||||
|
--- mainwindow.cpp<\t>13 Jul 2009 13:50:15 -0000 <\t>1.1
|
||||||
|
+++ mainwindow.cpp<\t>14 Jul 2009 07:09:24 -0000<\t>1.2
|
||||||
|
@@ -6,6 +6,5 @@
|
||||||
|
\endcode
|
||||||
|
*/
|
||||||
|
|
||||||
|
VCSBase::DiffHighlighter *CVSEditor::createDiffHighlighter() const
|
||||||
|
{
|
||||||
|
const QRegExp filePattern(QLatin1String("^[-+][-+][-+] .*1\\.[\\d\\.]+$"));
|
||||||
|
QTC_ASSERT(filePattern.isValid(), /**/);
|
||||||
|
return new VCSBase::DiffHighlighter(filePattern);
|
||||||
|
}
|
||||||
|
|
||||||
|
VCSBase::BaseAnnotationHighlighter *CVSEditor::createAnnotationHighlighter(const QSet<QString> &changes) const
|
||||||
|
{
|
||||||
|
return new CVSAnnotationHighlighter(changes);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CVSEditor::fileNameFromDiffSpecification(const QTextBlock &inBlock) const
|
||||||
|
{
|
||||||
|
// "+++ mainwindow.cpp<\t>13 Jul 2009 13:50:15 -0000 1.1"
|
||||||
|
// Go back chunks
|
||||||
|
const QString diffIndicator = QLatin1String("+++ ");
|
||||||
|
for (QTextBlock block = inBlock; block.isValid() ; block = block.previous()) {
|
||||||
|
QString diffFileName = block.text();
|
||||||
|
if (diffFileName.startsWith(diffIndicator)) {
|
||||||
|
diffFileName.remove(0, diffIndicator.size());
|
||||||
|
const int tabIndex = diffFileName.indexOf(QLatin1Char('\t'));
|
||||||
|
if (tabIndex != -1)
|
||||||
|
diffFileName.truncate(tabIndex);
|
||||||
|
// Add base dir
|
||||||
|
if (!m_diffBaseDir.isEmpty()) {
|
||||||
|
diffFileName.insert(0, QLatin1Char('/'));
|
||||||
|
diffFileName.insert(0, m_diffBaseDir);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CVS::Constants::debug)
|
||||||
|
qDebug() << "fileNameFromDiffSpecification" << m_diffBaseDir << diffFileName;
|
||||||
|
return diffFileName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CVSEditor::diffBaseDir() const
|
||||||
|
{
|
||||||
|
return m_diffBaseDir;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CVSEditor::setDiffBaseDir(const QString &d)
|
||||||
|
{
|
||||||
|
m_diffBaseDir = d;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CVSEditor::setDiffBaseDir(Core::IEditor *editor, const QString &db)
|
||||||
|
{
|
||||||
|
if (CVSEditor *cvsEditor = qobject_cast<CVSEditor*>(editor->widget()))
|
||||||
|
cvsEditor->setDiffBaseDir(db);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
69
src/plugins/cvs/cvseditor.h
Normal file
69
src/plugins/cvs/cvseditor.h
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
/**************************************************************************
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
|
**
|
||||||
|
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||||
|
**
|
||||||
|
** Commercial Usage
|
||||||
|
**
|
||||||
|
** Licensees holding valid Qt Commercial licenses may use this file in
|
||||||
|
** accordance with the Qt Commercial License Agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and Nokia.
|
||||||
|
**
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
|
** General Public License version 2.1 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||||
|
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** If you are unsure which license is appropriate for your use, please
|
||||||
|
** contact the sales department at http://www.qtsoftware.com/contact.
|
||||||
|
**
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
#ifndef CVSEDITOR_H
|
||||||
|
#define CVSEDITOR_H
|
||||||
|
|
||||||
|
#include <vcsbase/vcsbaseeditor.h>
|
||||||
|
|
||||||
|
#include <QtCore/QRegExp>
|
||||||
|
|
||||||
|
namespace CVS {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
|
class CVSEditor : public VCSBase::VCSBaseEditor
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit CVSEditor(const VCSBase::VCSBaseEditorParameters *type,
|
||||||
|
QWidget *parent);
|
||||||
|
|
||||||
|
// Diff mode requires a base directory since CVS commands
|
||||||
|
// are run with relative paths (see plugin).
|
||||||
|
QString diffBaseDir() const;
|
||||||
|
void setDiffBaseDir(const QString &d);
|
||||||
|
|
||||||
|
static void setDiffBaseDir(Core::IEditor *editor, const QString &db);
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual QSet<QString> annotationChanges() const;
|
||||||
|
virtual QString changeUnderCursor(const QTextCursor &) const;
|
||||||
|
virtual VCSBase::DiffHighlighter *createDiffHighlighter() const;
|
||||||
|
virtual VCSBase::BaseAnnotationHighlighter *createAnnotationHighlighter(const QSet<QString> &changes) const;
|
||||||
|
virtual QString fileNameFromDiffSpecification(const QTextBlock &diffFileName) const;
|
||||||
|
|
||||||
|
const QRegExp m_revisionPattern;
|
||||||
|
QString m_diffBaseDir;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace Internal
|
||||||
|
} // namespace CVS
|
||||||
|
|
||||||
|
#endif // CVSEDITOR_H
|
||||||
127
src/plugins/cvs/cvsoutputwindow.cpp
Normal file
127
src/plugins/cvs/cvsoutputwindow.cpp
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
/**************************************************************************
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
|
**
|
||||||
|
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||||
|
**
|
||||||
|
** Commercial Usage
|
||||||
|
**
|
||||||
|
** Licensees holding valid Qt Commercial licenses may use this file in
|
||||||
|
** accordance with the Qt Commercial License Agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and Nokia.
|
||||||
|
**
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
|
** General Public License version 2.1 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||||
|
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** If you are unsure which license is appropriate for your use, please
|
||||||
|
** contact the sales department at http://www.qtsoftware.com/contact.
|
||||||
|
**
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
#include "cvsoutputwindow.h"
|
||||||
|
#include "cvsplugin.h"
|
||||||
|
|
||||||
|
#include <QtGui/QListWidget>
|
||||||
|
#include <QtCore/QDebug>
|
||||||
|
|
||||||
|
using namespace CVS::Internal;
|
||||||
|
|
||||||
|
CVSOutputWindow::CVSOutputWindow(CVSPlugin *cvsPlugin)
|
||||||
|
: m_cvsPlugin(cvsPlugin)
|
||||||
|
{
|
||||||
|
m_outputListWidget = new QListWidget;
|
||||||
|
m_outputListWidget->setFrameStyle(QFrame::NoFrame);
|
||||||
|
m_outputListWidget->setWindowTitle(tr("CVS Output"));
|
||||||
|
m_outputListWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
|
||||||
|
}
|
||||||
|
|
||||||
|
CVSOutputWindow::~CVSOutputWindow()
|
||||||
|
{
|
||||||
|
delete m_outputListWidget;
|
||||||
|
}
|
||||||
|
|
||||||
|
QWidget *CVSOutputWindow::outputWidget(QWidget *parent)
|
||||||
|
{
|
||||||
|
m_outputListWidget->setParent(parent);
|
||||||
|
return m_outputListWidget;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CVSOutputWindow::name() const
|
||||||
|
{
|
||||||
|
return tr("CVS");
|
||||||
|
}
|
||||||
|
|
||||||
|
void CVSOutputWindow::clearContents()
|
||||||
|
{
|
||||||
|
m_outputListWidget->clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
int CVSOutputWindow::priorityInStatusBar() const
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CVSOutputWindow::visibilityChanged(bool b)
|
||||||
|
{
|
||||||
|
if (b)
|
||||||
|
m_outputListWidget->setFocus();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CVSOutputWindow::append(const QString &txt, bool doPopup)
|
||||||
|
{
|
||||||
|
const QStringList lines = txt.split(QLatin1Char('\n'));
|
||||||
|
foreach (const QString &s, lines)
|
||||||
|
m_outputListWidget->addItem(s);
|
||||||
|
m_outputListWidget->scrollToBottom();
|
||||||
|
|
||||||
|
if (doPopup)
|
||||||
|
popup();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CVSOutputWindow::canFocus()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CVSOutputWindow::hasFocus()
|
||||||
|
{
|
||||||
|
return m_outputListWidget->hasFocus();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CVSOutputWindow::setFocus()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CVSOutputWindow::canNext()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CVSOutputWindow::canPrevious()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CVSOutputWindow::goToNext()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void CVSOutputWindow::goToPrev()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CVSOutputWindow::canNavigate()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
84
src/plugins/cvs/cvsoutputwindow.h
Normal file
84
src/plugins/cvs/cvsoutputwindow.h
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
/**************************************************************************
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
|
**
|
||||||
|
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||||
|
**
|
||||||
|
** Commercial Usage
|
||||||
|
**
|
||||||
|
** Licensees holding valid Qt Commercial licenses may use this file in
|
||||||
|
** accordance with the Qt Commercial License Agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and Nokia.
|
||||||
|
**
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
|
** General Public License version 2.1 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||||
|
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** If you are unsure which license is appropriate for your use, please
|
||||||
|
** contact the sales department at http://www.qtsoftware.com/contact.
|
||||||
|
**
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
#ifndef CVSOUTPUTWINDOW_H
|
||||||
|
#define CVSOUTPUTWINDOW_H
|
||||||
|
|
||||||
|
#include <coreplugin/ioutputpane.h>
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
class QListWidget;
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
namespace CVS {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
|
class CVSPlugin;
|
||||||
|
|
||||||
|
class CVSOutputWindow : public Core::IOutputPane
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
CVSOutputWindow(CVSPlugin *cvsPlugin);
|
||||||
|
~CVSOutputWindow();
|
||||||
|
|
||||||
|
QWidget *outputWidget(QWidget *parent);
|
||||||
|
QList<QWidget*> toolBarWidgets() const {
|
||||||
|
return QList<QWidget *>();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString name() const;
|
||||||
|
void clearContents();
|
||||||
|
int priorityInStatusBar() const;
|
||||||
|
void visibilityChanged(bool visible);
|
||||||
|
|
||||||
|
bool canFocus();
|
||||||
|
bool hasFocus();
|
||||||
|
void setFocus();
|
||||||
|
|
||||||
|
bool canNext();
|
||||||
|
bool canPrevious();
|
||||||
|
void goToNext();
|
||||||
|
void goToPrev();
|
||||||
|
bool canNavigate();
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void append(const QString &txt, bool popup = false);
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
CVSPlugin *m_cvsPlugin;
|
||||||
|
QListWidget *m_outputListWidget;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace CVS
|
||||||
|
} // namespace Internal
|
||||||
|
|
||||||
|
#endif // CVSOUTPUTWINDOW_H
|
||||||
1228
src/plugins/cvs/cvsplugin.cpp
Normal file
1228
src/plugins/cvs/cvsplugin.cpp
Normal file
File diff suppressed because it is too large
Load Diff
208
src/plugins/cvs/cvsplugin.h
Normal file
208
src/plugins/cvs/cvsplugin.h
Normal file
@@ -0,0 +1,208 @@
|
|||||||
|
/**************************************************************************
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
|
**
|
||||||
|
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||||
|
**
|
||||||
|
** Commercial Usage
|
||||||
|
**
|
||||||
|
** Licensees holding valid Qt Commercial licenses may use this file in
|
||||||
|
** accordance with the Qt Commercial License Agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and Nokia.
|
||||||
|
**
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
|
** General Public License version 2.1 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||||
|
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** If you are unsure which license is appropriate for your use, please
|
||||||
|
** contact the sales department at http://www.qtsoftware.com/contact.
|
||||||
|
**
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
#ifndef CVSPLUGIN_H
|
||||||
|
#define CVSPLUGIN_H
|
||||||
|
|
||||||
|
#include "cvssettings.h"
|
||||||
|
#include "cvsutils.h"
|
||||||
|
|
||||||
|
#include <coreplugin/icorelistener.h>
|
||||||
|
#include <extensionsystem/iplugin.h>
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
class QDir;
|
||||||
|
class QAction;
|
||||||
|
class QTemporaryFile;
|
||||||
|
class QTextCodec;
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
namespace Core {
|
||||||
|
class IEditorFactory;
|
||||||
|
class IVersionControl;
|
||||||
|
namespace Utils {
|
||||||
|
class ParameterAction;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace ProjectExplorer {
|
||||||
|
class ProjectExplorerPlugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace CVS {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
|
class CVSOutputWindow;
|
||||||
|
class CVSSubmitEditor;
|
||||||
|
|
||||||
|
struct CVSResponse
|
||||||
|
{
|
||||||
|
enum Result { Ok, NonNullExitCode, OtherError };
|
||||||
|
CVSResponse() : result(Ok) {}
|
||||||
|
|
||||||
|
Result result;
|
||||||
|
QString stdOut;
|
||||||
|
QString stdErr;
|
||||||
|
QString message;
|
||||||
|
QString workingDirectory;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* This plugin differs from the other VCS plugins in that it
|
||||||
|
* runs CVS commands from a working directory using relative
|
||||||
|
* path specifications, which is a requirement imposed by
|
||||||
|
* Tortoise CVS. This has to be taken into account; for example,
|
||||||
|
* the diff editor has an additional property specifying the
|
||||||
|
* base directory for its interaction to work. */
|
||||||
|
|
||||||
|
class CVSPlugin : public ExtensionSystem::IPlugin
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
CVSPlugin();
|
||||||
|
~CVSPlugin();
|
||||||
|
|
||||||
|
virtual bool initialize(const QStringList &arguments, QString *error_message);
|
||||||
|
virtual void extensionsInitialized();
|
||||||
|
virtual bool editorAboutToClose(Core::IEditor *editor);
|
||||||
|
|
||||||
|
void cvsDiff(const QStringList &files, QString diffname = QString());
|
||||||
|
|
||||||
|
CVSSubmitEditor *openCVSSubmitEditor(const QString &fileName);
|
||||||
|
|
||||||
|
CVSSettings settings() const;
|
||||||
|
void setSettings(const CVSSettings &s);
|
||||||
|
|
||||||
|
// IVersionControl
|
||||||
|
bool vcsAdd(const QString &fileName);
|
||||||
|
bool vcsDelete(const QString &fileName);
|
||||||
|
bool managesDirectory(const QString &directory) const;
|
||||||
|
QString findTopLevelForDirectory(const QString &directory) const;
|
||||||
|
|
||||||
|
static CVSPlugin *cvsPluginInstance();
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void updateActions();
|
||||||
|
void addCurrentFile();
|
||||||
|
void deleteCurrentFile();
|
||||||
|
void revertCurrentFile();
|
||||||
|
void diffProject();
|
||||||
|
void diffCurrentFile();
|
||||||
|
void startCommitAll();
|
||||||
|
void startCommitCurrentFile();
|
||||||
|
void filelogCurrentFile();
|
||||||
|
void annotateCurrentFile();
|
||||||
|
void projectStatus();
|
||||||
|
void slotDescribe(const QString &source, const QString &changeNr);
|
||||||
|
void updateProject();
|
||||||
|
void submitCurrentLog();
|
||||||
|
void diffFiles(const QStringList &);
|
||||||
|
|
||||||
|
private:
|
||||||
|
QString currentFileName() const;
|
||||||
|
Core::IEditor * showOutputInEditor(const QString& title, const QString &output,
|
||||||
|
int editorType, const QString &source,
|
||||||
|
QTextCodec *codec);
|
||||||
|
CVSResponse runCVS(const QStringList &arguments,
|
||||||
|
QStringList fileArguments,
|
||||||
|
int timeOut,
|
||||||
|
bool showStdOutInOutputWindow, QTextCodec *outputCodec = 0,
|
||||||
|
bool mergeStderr = false);
|
||||||
|
|
||||||
|
CVSResponse runCVS(const QString &workingDirectory,
|
||||||
|
const QStringList &arguments,
|
||||||
|
int timeOut,
|
||||||
|
bool showStdOutInOutputWindow, QTextCodec *outputCodec = 0,
|
||||||
|
bool mergeStderr = false);
|
||||||
|
|
||||||
|
void showOutput(const QString &output, bool bringToForeground = true);
|
||||||
|
void annotate(const QString &file);
|
||||||
|
bool describe(const QString &source, const QString &changeNr, QString *errorMessage);
|
||||||
|
bool describe(const QString &repository, QList<CVS_LogEntry> entries, QString *errorMessage);
|
||||||
|
void filelog(const QString &file);
|
||||||
|
bool managesDirectory(const QDir &directory) const;
|
||||||
|
QString findTopLevelForDirectoryI(const QString &directory) const;
|
||||||
|
QStringList currentProjectsTopLevels(QString *name = 0) const;
|
||||||
|
void startCommit(const QString &file);
|
||||||
|
bool commit(const QString &messageFile, const QStringList &subVersionFileList);
|
||||||
|
void cleanChangeTmpFile();
|
||||||
|
|
||||||
|
CVSSettings m_settings;
|
||||||
|
Core::IVersionControl *m_versionControl;
|
||||||
|
QTemporaryFile *m_changeTmpFile;
|
||||||
|
|
||||||
|
CVSOutputWindow *m_cvsOutputWindow;
|
||||||
|
ProjectExplorer::ProjectExplorerPlugin *m_projectExplorer;
|
||||||
|
|
||||||
|
Core::Utils::ParameterAction *m_addAction;
|
||||||
|
Core::Utils::ParameterAction *m_deleteAction;
|
||||||
|
Core::Utils::ParameterAction *m_revertAction;
|
||||||
|
QAction *m_diffProjectAction;
|
||||||
|
Core::Utils::ParameterAction *m_diffCurrentAction;
|
||||||
|
QAction *m_commitAllAction;
|
||||||
|
Core::Utils::ParameterAction *m_commitCurrentAction;
|
||||||
|
Core::Utils::ParameterAction *m_filelogCurrentAction;
|
||||||
|
Core::Utils::ParameterAction *m_annotateCurrentAction;
|
||||||
|
QAction *m_statusAction;
|
||||||
|
QAction *m_updateProjectAction;
|
||||||
|
|
||||||
|
QAction *m_submitCurrentLogAction;
|
||||||
|
QAction *m_submitDiffAction;
|
||||||
|
QAction *m_submitUndoAction;
|
||||||
|
QAction *m_submitRedoAction;
|
||||||
|
bool m_submitActionTriggered;
|
||||||
|
|
||||||
|
static CVSPlugin *m_cvsPluginInstance;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Just a proxy for CVSPlugin
|
||||||
|
class CoreListener : public Core::ICoreListener
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
CoreListener(CVSPlugin *plugin) : m_plugin(plugin) { }
|
||||||
|
|
||||||
|
// Start commit when submit editor closes
|
||||||
|
bool editorAboutToClose(Core::IEditor *editor) {
|
||||||
|
return m_plugin->editorAboutToClose(editor);
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: how to handle that ???
|
||||||
|
bool coreAboutToClose() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
CVSPlugin *m_plugin;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace CVS
|
||||||
|
} // namespace Internal
|
||||||
|
|
||||||
|
#endif // CVSPLUGIN_H
|
||||||
108
src/plugins/cvs/cvssettings.cpp
Normal file
108
src/plugins/cvs/cvssettings.cpp
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
/**************************************************************************
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
|
**
|
||||||
|
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||||
|
**
|
||||||
|
** Commercial Usage
|
||||||
|
**
|
||||||
|
** Licensees holding valid Qt Commercial licenses may use this file in
|
||||||
|
** accordance with the Qt Commercial License Agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and Nokia.
|
||||||
|
**
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
|
** General Public License version 2.1 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||||
|
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** If you are unsure which license is appropriate for your use, please
|
||||||
|
** contact the sales department at http://www.qtsoftware.com/contact.
|
||||||
|
**
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
#include "cvssettings.h"
|
||||||
|
|
||||||
|
#include <QtCore/QSettings>
|
||||||
|
#include <QtCore/QTextStream>
|
||||||
|
|
||||||
|
static const char *groupC = "CVS";
|
||||||
|
static const char *commandKeyC = "Command";
|
||||||
|
static const char *rootC = "Root";
|
||||||
|
static const char *promptToSubmitKeyC = "PromptForSubmit";
|
||||||
|
static const char *diffOptionsKeyC = "DiffOptions";
|
||||||
|
static const char *describeByCommitIdKeyC = "DescribeByCommitId";
|
||||||
|
static const char *defaultDiffOptions = "-du";
|
||||||
|
|
||||||
|
static QString defaultCommand()
|
||||||
|
{
|
||||||
|
QString rc;
|
||||||
|
rc = QLatin1String("cvs");
|
||||||
|
#if defined(Q_OS_WIN32)
|
||||||
|
rc.append(QLatin1String(".exe"));
|
||||||
|
#endif
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace CVS {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
|
CVSSettings::CVSSettings() :
|
||||||
|
cvsCommand(defaultCommand()),
|
||||||
|
cvsDiffOptions(QLatin1String(defaultDiffOptions)),
|
||||||
|
promptToSubmit(true),
|
||||||
|
describeByCommitId(true)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void CVSSettings::fromSettings(QSettings *settings)
|
||||||
|
{
|
||||||
|
settings->beginGroup(QLatin1String(groupC));
|
||||||
|
cvsCommand = settings->value(QLatin1String(commandKeyC), defaultCommand()).toString();
|
||||||
|
promptToSubmit = settings->value(QLatin1String(promptToSubmitKeyC), true).toBool();
|
||||||
|
cvsRoot = settings->value(QLatin1String(rootC), QString()).toString();
|
||||||
|
cvsDiffOptions = settings->value(QLatin1String(diffOptionsKeyC), QLatin1String(defaultDiffOptions)).toString();
|
||||||
|
describeByCommitId = settings->value(QLatin1String(describeByCommitIdKeyC), true).toBool();
|
||||||
|
settings->endGroup();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CVSSettings::toSettings(QSettings *settings) const
|
||||||
|
{
|
||||||
|
settings->beginGroup(QLatin1String(groupC));
|
||||||
|
settings->setValue(QLatin1String(commandKeyC), cvsCommand);
|
||||||
|
settings->setValue(QLatin1String(promptToSubmitKeyC), promptToSubmit);
|
||||||
|
settings->setValue(QLatin1String(rootC), cvsRoot);
|
||||||
|
settings->setValue(QLatin1String(diffOptionsKeyC), cvsDiffOptions);
|
||||||
|
settings->setValue(QLatin1String(describeByCommitIdKeyC), describeByCommitId);
|
||||||
|
settings->endGroup();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CVSSettings::equals(const CVSSettings &s) const
|
||||||
|
{
|
||||||
|
return promptToSubmit == promptToSubmit
|
||||||
|
&& describeByCommitId == s.describeByCommitId
|
||||||
|
&& cvsCommand == s.cvsCommand
|
||||||
|
&& cvsRoot == s.cvsRoot
|
||||||
|
&& cvsDiffOptions == s.cvsDiffOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringList CVSSettings::addOptions(const QStringList &args) const
|
||||||
|
{
|
||||||
|
if (cvsRoot.isEmpty())
|
||||||
|
return args;
|
||||||
|
|
||||||
|
QStringList rc;
|
||||||
|
rc.push_back(QLatin1String("-d"));
|
||||||
|
rc.push_back(cvsRoot);
|
||||||
|
rc.append(args);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
70
src/plugins/cvs/cvssettings.h
Normal file
70
src/plugins/cvs/cvssettings.h
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
/**************************************************************************
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
|
**
|
||||||
|
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||||
|
**
|
||||||
|
** Commercial Usage
|
||||||
|
**
|
||||||
|
** Licensees holding valid Qt Commercial licenses may use this file in
|
||||||
|
** accordance with the Qt Commercial License Agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and Nokia.
|
||||||
|
**
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
|
** General Public License version 2.1 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||||
|
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** If you are unsure which license is appropriate for your use, please
|
||||||
|
** contact the sales department at http://www.qtsoftware.com/contact.
|
||||||
|
**
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
#ifndef CVSSETTINGS_H
|
||||||
|
#define CVSSETTINGS_H
|
||||||
|
|
||||||
|
#include <QtCore/QStringList>
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
class QSettings;
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
namespace CVS {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
|
// Todo: Add user name and password?
|
||||||
|
struct CVSSettings
|
||||||
|
{
|
||||||
|
CVSSettings();
|
||||||
|
|
||||||
|
void fromSettings(QSettings *);
|
||||||
|
void toSettings(QSettings *) const;
|
||||||
|
|
||||||
|
// Add common options to the command line
|
||||||
|
QStringList addOptions(const QStringList &args) const;
|
||||||
|
|
||||||
|
bool equals(const CVSSettings &s) const;
|
||||||
|
|
||||||
|
QString cvsCommand;
|
||||||
|
QString cvsRoot;
|
||||||
|
QString cvsDiffOptions;
|
||||||
|
bool promptToSubmit;
|
||||||
|
bool describeByCommitId;
|
||||||
|
};
|
||||||
|
|
||||||
|
inline bool operator==(const CVSSettings &p1, const CVSSettings &p2)
|
||||||
|
{ return p1.equals(p2); }
|
||||||
|
inline bool operator!=(const CVSSettings &p1, const CVSSettings &p2)
|
||||||
|
{ return !p1.equals(p2); }
|
||||||
|
|
||||||
|
} // namespace Internal
|
||||||
|
} // namespace CVS
|
||||||
|
|
||||||
|
#endif // CVSSETTINGS_H
|
||||||
70
src/plugins/cvs/cvssubmiteditor.cpp
Normal file
70
src/plugins/cvs/cvssubmiteditor.cpp
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
/**************************************************************************
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
|
**
|
||||||
|
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||||
|
**
|
||||||
|
** Commercial Usage
|
||||||
|
**
|
||||||
|
** Licensees holding valid Qt Commercial licenses may use this file in
|
||||||
|
** accordance with the Qt Commercial License Agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and Nokia.
|
||||||
|
**
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
|
** General Public License version 2.1 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||||
|
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** If you are unsure which license is appropriate for your use, please
|
||||||
|
** contact the sales department at http://www.qtsoftware.com/contact.
|
||||||
|
**
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#include "cvssubmiteditor.h"
|
||||||
|
|
||||||
|
#include <utils/submiteditorwidget.h>
|
||||||
|
#include <vcsbase/submitfilemodel.h>
|
||||||
|
|
||||||
|
using namespace CVS::Internal;
|
||||||
|
|
||||||
|
CVSSubmitEditor::CVSSubmitEditor(const VCSBase::VCSBaseSubmitEditorParameters *parameters,
|
||||||
|
QWidget *parentWidget) :
|
||||||
|
VCSBase::VCSBaseSubmitEditor(parameters, new Core::Utils::SubmitEditorWidget(parentWidget)),
|
||||||
|
m_msgAdded(tr("Added")),
|
||||||
|
m_msgRemoved(tr("Removed")),
|
||||||
|
m_msgModified(tr("Modified"))
|
||||||
|
{
|
||||||
|
setDisplayName(tr("CVS Submit"));
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CVSSubmitEditor::stateName(State st) const
|
||||||
|
{
|
||||||
|
switch (st) {
|
||||||
|
case LocallyAdded:
|
||||||
|
return m_msgAdded;
|
||||||
|
case LocallyModified:
|
||||||
|
return m_msgModified;
|
||||||
|
case LocallyRemoved:
|
||||||
|
return m_msgRemoved;
|
||||||
|
}
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CVSSubmitEditor::setStateList(const QList<StateFilePair> &statusOutput)
|
||||||
|
{
|
||||||
|
typedef QList<StateFilePair>::const_iterator ConstIterator;
|
||||||
|
VCSBase::SubmitFileModel *model = new VCSBase::SubmitFileModel(this);
|
||||||
|
|
||||||
|
const ConstIterator cend = statusOutput.constEnd();
|
||||||
|
for (ConstIterator it = statusOutput.constBegin(); it != cend; ++it)
|
||||||
|
model->addFile(it->second, stateName(it->first), true);
|
||||||
|
setFileModel(model);
|
||||||
|
}
|
||||||
64
src/plugins/cvs/cvssubmiteditor.h
Normal file
64
src/plugins/cvs/cvssubmiteditor.h
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
/**************************************************************************
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
|
**
|
||||||
|
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||||
|
**
|
||||||
|
** Commercial Usage
|
||||||
|
**
|
||||||
|
** Licensees holding valid Qt Commercial licenses may use this file in
|
||||||
|
** accordance with the Qt Commercial License Agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and Nokia.
|
||||||
|
**
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
|
** General Public License version 2.1 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||||
|
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** If you are unsure which license is appropriate for your use, please
|
||||||
|
** contact the sales department at http://www.qtsoftware.com/contact.
|
||||||
|
**
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
#ifndef CVSSUBMITEDITOR_H
|
||||||
|
#define CVSSUBMITEDITOR_H
|
||||||
|
|
||||||
|
#include <QtCore/QPair>
|
||||||
|
#include <QtCore/QStringList>
|
||||||
|
|
||||||
|
#include <vcsbase/vcsbasesubmiteditor.h>
|
||||||
|
|
||||||
|
namespace CVS {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
|
class CVSSubmitEditor : public VCSBase::VCSBaseSubmitEditor
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
enum State { LocallyAdded, LocallyModified, LocallyRemoved };
|
||||||
|
// A list of state indicators and file names.
|
||||||
|
typedef QPair<State, QString> StateFilePair;
|
||||||
|
|
||||||
|
CVSSubmitEditor(const VCSBase::VCSBaseSubmitEditorParameters *parameters,
|
||||||
|
QWidget *parentWidget = 0);
|
||||||
|
|
||||||
|
void setStateList(const QList<StateFilePair> &statusOutput);
|
||||||
|
|
||||||
|
private:
|
||||||
|
inline QString stateName(State st) const;
|
||||||
|
const QString m_msgAdded;
|
||||||
|
const QString m_msgRemoved;
|
||||||
|
const QString m_msgModified;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace Internal
|
||||||
|
} // namespace CVS
|
||||||
|
|
||||||
|
#endif // CVSSUBMITEDITOR_H
|
||||||
238
src/plugins/cvs/cvsutils.cpp
Normal file
238
src/plugins/cvs/cvsutils.cpp
Normal file
@@ -0,0 +1,238 @@
|
|||||||
|
/**************************************************************************
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
|
**
|
||||||
|
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||||
|
**
|
||||||
|
** Commercial Usage
|
||||||
|
**
|
||||||
|
** Licensees holding valid Qt Commercial licenses may use this file in
|
||||||
|
** accordance with the Qt Commercial License Agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and Nokia.
|
||||||
|
**
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
|
** General Public License version 2.1 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||||
|
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** If you are unsure which license is appropriate for your use, please
|
||||||
|
** contact the sales department at http://www.qtsoftware.com/contact.
|
||||||
|
**
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
#include "cvsutils.h"
|
||||||
|
|
||||||
|
#include <QtCore/QDebug>
|
||||||
|
#include <QtCore/QRegExp>
|
||||||
|
#include <QtCore/QStringList>
|
||||||
|
|
||||||
|
namespace CVS {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
|
CVS_Revision::CVS_Revision(const QString &rev) :
|
||||||
|
revision(rev)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
CVS_LogEntry::CVS_LogEntry(const QString &f) :
|
||||||
|
file(f)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
QDebug operator<<(QDebug d, const CVS_LogEntry &e)
|
||||||
|
{
|
||||||
|
QDebug nospace = d.nospace();
|
||||||
|
nospace << "File: " << e.file << e.revisions.size() << '\n';
|
||||||
|
foreach(const CVS_Revision &r, e.revisions)
|
||||||
|
nospace << " " << r.revision << ' ' << r.date << ' ' << r.commitId << '\n';
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Parse:
|
||||||
|
\code
|
||||||
|
RCS file: /repo/foo.h
|
||||||
|
Working file: foo.h
|
||||||
|
head: 1.2
|
||||||
|
...
|
||||||
|
----------------------------
|
||||||
|
revision 1.2
|
||||||
|
date: 2009-07-14 13:30:25 +0200; author: <author>; state: dead; lines: +0 -0; commitid: <id>;
|
||||||
|
<message>
|
||||||
|
----------------------------
|
||||||
|
revision 1.1
|
||||||
|
...
|
||||||
|
=============================================================================
|
||||||
|
\endcode */
|
||||||
|
|
||||||
|
QList<CVS_LogEntry> parseLogEntries(const QString &o,
|
||||||
|
const QString &directory,
|
||||||
|
const QString filterCommitId)
|
||||||
|
{
|
||||||
|
enum ParseState { FileState, RevisionState, StatusLineState };
|
||||||
|
|
||||||
|
QList<CVS_LogEntry> rc;
|
||||||
|
const QStringList lines = o.split(QString(QLatin1Char('\n')), QString::SkipEmptyParts);
|
||||||
|
ParseState state = FileState;
|
||||||
|
|
||||||
|
const QString workingFilePrefix = QLatin1String("Working file: ");
|
||||||
|
const QString revisionPrefix = QLatin1String("revision ");
|
||||||
|
const QString statusPrefix = QLatin1String("date: ");
|
||||||
|
const QString commitId = QLatin1String("commitid: ");
|
||||||
|
const QRegExp statusPattern = QRegExp(QLatin1String("^date: ([\\d\\-]+) .*commitid: ([^;]+);$"));
|
||||||
|
const QRegExp revisionPattern = QRegExp(QLatin1String("^revision ([\\d\\.]+)$"));
|
||||||
|
const QChar slash = QLatin1Char('/');
|
||||||
|
Q_ASSERT(statusPattern.isValid() && revisionPattern.isValid());
|
||||||
|
const QString fileSeparator = QLatin1String("=============================================================================");
|
||||||
|
|
||||||
|
// Parse using a state enumeration and regular expressions as not to fall for weird
|
||||||
|
// commit messages in state 'RevisionState'
|
||||||
|
foreach(const QString &line, lines) {
|
||||||
|
switch (state) {
|
||||||
|
case FileState:
|
||||||
|
if (line.startsWith(workingFilePrefix)) {
|
||||||
|
QString file = directory;
|
||||||
|
if (!file.isEmpty())
|
||||||
|
file += slash;
|
||||||
|
file += line.mid(workingFilePrefix.size()).trimmed();
|
||||||
|
rc.push_back(CVS_LogEntry(file));
|
||||||
|
state = RevisionState;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RevisionState:
|
||||||
|
if (revisionPattern.exactMatch(line)) {
|
||||||
|
rc.back().revisions.push_back(CVS_Revision(revisionPattern.cap(1)));
|
||||||
|
state = StatusLineState;
|
||||||
|
} else {
|
||||||
|
if (line == fileSeparator)
|
||||||
|
state = FileState;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case StatusLineState:
|
||||||
|
if (statusPattern.exactMatch(line)) {
|
||||||
|
const QString commitId = statusPattern.cap(2);
|
||||||
|
if (filterCommitId.isEmpty() || filterCommitId == commitId) {
|
||||||
|
rc.back().revisions.back().date = statusPattern.cap(1);
|
||||||
|
rc.back().revisions.back().commitId = commitId;
|
||||||
|
} else {
|
||||||
|
rc.back().revisions.pop_back();
|
||||||
|
}
|
||||||
|
state = RevisionState;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Purge out files with no matching commits
|
||||||
|
if (!filterCommitId.isEmpty()) {
|
||||||
|
for (QList<CVS_LogEntry>::iterator it = rc.begin(); it != rc.end(); ) {
|
||||||
|
if (it->revisions.empty()) {
|
||||||
|
it = rc.erase(it);
|
||||||
|
} else {
|
||||||
|
++it;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString fixDiffOutput(QString d)
|
||||||
|
{
|
||||||
|
if (d.isEmpty())
|
||||||
|
return d;
|
||||||
|
// Kill all lines starting with '?'
|
||||||
|
const QChar questionMark = QLatin1Char('?');
|
||||||
|
const QChar newLine = QLatin1Char('\n');
|
||||||
|
for (int pos = 0; pos < d.size(); ) {
|
||||||
|
const int endOfLinePos = d.indexOf(newLine, pos);
|
||||||
|
if (endOfLinePos == -1)
|
||||||
|
break;
|
||||||
|
const int nextLinePos = endOfLinePos + 1;
|
||||||
|
if (d.at(pos) == questionMark) {
|
||||||
|
d.remove(pos, nextLinePos - pos);
|
||||||
|
} else {
|
||||||
|
pos = nextLinePos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parse "cvs status" output for added/modified/deleted files
|
||||||
|
// "File: <foo> Status: Up-to-date"
|
||||||
|
// "File: <foo> Status: Locally Modified"
|
||||||
|
// "File: no file <foo> Status: Locally Removed"
|
||||||
|
// "File: hup Status: Locally Added"
|
||||||
|
// Not handled for commit purposes: "Needs Patch/Needs Merge"
|
||||||
|
// In between, we might encounter "cvs status: Examining subdir"...
|
||||||
|
// As we run the status command from the repository directory,
|
||||||
|
// we need to add the full path, again.
|
||||||
|
// stdout/stderr need to be merged to catch directories.
|
||||||
|
|
||||||
|
// Parse out status keywords, return state enum or -1
|
||||||
|
inline int stateFromKeyword(const QString &s)
|
||||||
|
{
|
||||||
|
if (s == QLatin1String("Up-to-date"))
|
||||||
|
return -1;
|
||||||
|
if (s == QLatin1String("Locally Modified"))
|
||||||
|
return CVSSubmitEditor::LocallyModified;
|
||||||
|
if (s == QLatin1String("Locally Added"))
|
||||||
|
return CVSSubmitEditor::LocallyAdded;
|
||||||
|
if (s == QLatin1String("Locally Removed"))
|
||||||
|
return CVSSubmitEditor::LocallyRemoved;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
StateList parseStatusOutput(const QString &directory, const QString &output)
|
||||||
|
{
|
||||||
|
StateList changeSet;
|
||||||
|
const QString fileKeyword = QLatin1String("File: ");
|
||||||
|
const QString statusKeyword = QLatin1String("Status: ");
|
||||||
|
const QString noFileKeyword = QLatin1String("no file ");
|
||||||
|
const QString directoryKeyword = QLatin1String("cvs status: Examining ");
|
||||||
|
const QString dotDir = QString(QLatin1Char('.'));
|
||||||
|
const QChar slash = QLatin1Char('/');
|
||||||
|
|
||||||
|
const QStringList list = output.split(QLatin1Char('\n'), QString::SkipEmptyParts);
|
||||||
|
|
||||||
|
QString path = directory;
|
||||||
|
if (!path.isEmpty())
|
||||||
|
path += slash;
|
||||||
|
foreach (const QString &l, list) {
|
||||||
|
// Status line containing file
|
||||||
|
if (l.startsWith(fileKeyword)) {
|
||||||
|
// Parse state
|
||||||
|
const int statusPos = l.indexOf(statusKeyword);
|
||||||
|
if (statusPos == -1)
|
||||||
|
continue;
|
||||||
|
const int state = stateFromKeyword(l.mid(statusPos + statusKeyword.size()).trimmed());
|
||||||
|
if (state == -1)
|
||||||
|
continue;
|
||||||
|
// Concatenate file name, Correct "no file <foo>"
|
||||||
|
QString fileName = l.mid(fileKeyword.size(), statusPos - fileKeyword.size()).trimmed();
|
||||||
|
if (state == CVSSubmitEditor::LocallyRemoved && fileName.startsWith(noFileKeyword))
|
||||||
|
fileName.remove(0, noFileKeyword.size());
|
||||||
|
changeSet.push_back(CVSSubmitEditor::StateFilePair(static_cast<CVSSubmitEditor::State>(state), path + fileName));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// Examining a new subdirectory
|
||||||
|
if (l.startsWith(directoryKeyword)) {
|
||||||
|
path = directory;
|
||||||
|
if (!path.isEmpty())
|
||||||
|
path += slash;
|
||||||
|
const QString newSubDir = l.mid(directoryKeyword.size()).trimmed();
|
||||||
|
if (newSubDir != dotDir) { // Skip Examining '.'
|
||||||
|
path += newSubDir;
|
||||||
|
path += slash;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return changeSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace Internal
|
||||||
|
} // namespace CVS
|
||||||
86
src/plugins/cvs/cvsutils.h
Normal file
86
src/plugins/cvs/cvsutils.h
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
/**************************************************************************
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
|
**
|
||||||
|
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||||
|
**
|
||||||
|
** Commercial Usage
|
||||||
|
**
|
||||||
|
** Licensees holding valid Qt Commercial licenses may use this file in
|
||||||
|
** accordance with the Qt Commercial License Agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and Nokia.
|
||||||
|
**
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
|
** General Public License version 2.1 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||||
|
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** If you are unsure which license is appropriate for your use, please
|
||||||
|
** contact the sales department at http://www.qtsoftware.com/contact.
|
||||||
|
**
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
#ifndef CVSUTILS_H
|
||||||
|
#define CVSUTILS_H
|
||||||
|
|
||||||
|
#include "cvssubmiteditor.h"
|
||||||
|
|
||||||
|
#include <QtCore/QString>
|
||||||
|
#include <QtCore/QList>
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
class QDebug;
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
namespace CVS {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
|
// Utilities to parse output of a CVS log.
|
||||||
|
|
||||||
|
// A revision of a file.
|
||||||
|
struct CVS_Revision
|
||||||
|
{
|
||||||
|
CVS_Revision(const QString &rev);
|
||||||
|
|
||||||
|
QString revision;
|
||||||
|
QString date; // ISO-Format (YYYY-MM-DD)
|
||||||
|
QString commitId;
|
||||||
|
};
|
||||||
|
|
||||||
|
// A log entry consisting of the file and its revisions.
|
||||||
|
struct CVS_LogEntry
|
||||||
|
{
|
||||||
|
CVS_LogEntry(const QString &file);
|
||||||
|
|
||||||
|
QString file;
|
||||||
|
QList<CVS_Revision> revisions;
|
||||||
|
};
|
||||||
|
|
||||||
|
QDebug operator<<(QDebug d, const CVS_LogEntry &);
|
||||||
|
|
||||||
|
// Parse. Pass on a directory to obtain full paths when
|
||||||
|
// running from the repository directory.
|
||||||
|
QList<CVS_LogEntry> parseLogEntries(const QString &output,
|
||||||
|
const QString &directory = QString(),
|
||||||
|
const QString filterCommitId = QString());
|
||||||
|
|
||||||
|
// Tortoise CVS outputs unknown files with question marks in
|
||||||
|
// the diff output on stdout ('? foo'); remove
|
||||||
|
QString fixDiffOutput(QString d);
|
||||||
|
|
||||||
|
// Parse the status output of CVS (stdout/stderr merged
|
||||||
|
// to catch directories).
|
||||||
|
typedef QList<CVSSubmitEditor::StateFilePair> StateList;
|
||||||
|
StateList parseStatusOutput(const QString &directory, const QString &output);
|
||||||
|
|
||||||
|
} // namespace Internal
|
||||||
|
} // namespace CVS
|
||||||
|
|
||||||
|
#endif // CVSUTILS_H
|
||||||
107
src/plugins/cvs/settingspage.cpp
Normal file
107
src/plugins/cvs/settingspage.cpp
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
/**************************************************************************
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
|
**
|
||||||
|
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||||
|
**
|
||||||
|
** Commercial Usage
|
||||||
|
**
|
||||||
|
** Licensees holding valid Qt Commercial licenses may use this file in
|
||||||
|
** accordance with the Qt Commercial License Agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and Nokia.
|
||||||
|
**
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
|
** General Public License version 2.1 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||||
|
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** If you are unsure which license is appropriate for your use, please
|
||||||
|
** contact the sales department at http://www.qtsoftware.com/contact.
|
||||||
|
**
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
#include "settingspage.h"
|
||||||
|
#include "cvssettings.h"
|
||||||
|
#include "cvsplugin.h"
|
||||||
|
|
||||||
|
#include <coreplugin/icore.h>
|
||||||
|
#include <extensionsystem/pluginmanager.h>
|
||||||
|
#include <vcsbase/vcsbaseconstants.h>
|
||||||
|
#include <utils/pathchooser.h>
|
||||||
|
|
||||||
|
#include <QtCore/QCoreApplication>
|
||||||
|
#include <QtGui/QFileDialog>
|
||||||
|
|
||||||
|
using namespace CVS::Internal;
|
||||||
|
using namespace Core::Utils;
|
||||||
|
|
||||||
|
SettingsPageWidget::SettingsPageWidget(QWidget *parent) :
|
||||||
|
QWidget(parent)
|
||||||
|
{
|
||||||
|
m_ui.setupUi(this);
|
||||||
|
m_ui.commandPathChooser->setExpectedKind(PathChooser::Command);
|
||||||
|
m_ui.commandPathChooser->setPromptDialogTitle(tr("CVS Command"));
|
||||||
|
}
|
||||||
|
|
||||||
|
CVSSettings SettingsPageWidget::settings() const
|
||||||
|
{
|
||||||
|
CVSSettings rc;
|
||||||
|
rc.cvsCommand = m_ui.commandPathChooser->path();
|
||||||
|
rc.cvsRoot = m_ui.rootLineEdit->text();
|
||||||
|
rc.cvsDiffOptions = m_ui.diffOptionsLineEdit->text();
|
||||||
|
rc.promptToSubmit = m_ui.promptToSubmitCheckBox->isChecked();
|
||||||
|
rc.describeByCommitId = m_ui.describeByCommitIdCheckBox->isChecked();
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SettingsPageWidget::setSettings(const CVSSettings &s)
|
||||||
|
{
|
||||||
|
m_ui.commandPathChooser->setPath(s.cvsCommand);
|
||||||
|
m_ui.rootLineEdit->setText(s.cvsRoot);
|
||||||
|
m_ui.diffOptionsLineEdit->setText(s.cvsDiffOptions);
|
||||||
|
m_ui.promptToSubmitCheckBox->setChecked(s.promptToSubmit);
|
||||||
|
m_ui.describeByCommitIdCheckBox->setChecked(s.describeByCommitId);
|
||||||
|
}
|
||||||
|
|
||||||
|
SettingsPage::SettingsPage()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
QString SettingsPage::id() const
|
||||||
|
{
|
||||||
|
return QLatin1String("CVS");
|
||||||
|
}
|
||||||
|
|
||||||
|
QString SettingsPage::trName() const
|
||||||
|
{
|
||||||
|
return tr("CVS");
|
||||||
|
}
|
||||||
|
|
||||||
|
QString SettingsPage::category() const
|
||||||
|
{
|
||||||
|
return QLatin1String(VCSBase::Constants::VCS_SETTINGS_CATEGORY);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString SettingsPage::trCategory() const
|
||||||
|
{
|
||||||
|
return QCoreApplication::translate("VCSBase", VCSBase::Constants::VCS_SETTINGS_CATEGORY);
|
||||||
|
}
|
||||||
|
|
||||||
|
QWidget *SettingsPage::createPage(QWidget *parent)
|
||||||
|
{
|
||||||
|
m_widget = new SettingsPageWidget(parent);
|
||||||
|
m_widget->setSettings(CVSPlugin::cvsPluginInstance()->settings());
|
||||||
|
return m_widget;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SettingsPage::apply()
|
||||||
|
{
|
||||||
|
CVSPlugin::cvsPluginInstance()->setSettings(m_widget->settings());
|
||||||
|
}
|
||||||
86
src/plugins/cvs/settingspage.h
Normal file
86
src/plugins/cvs/settingspage.h
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
/**************************************************************************
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
|
**
|
||||||
|
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||||
|
**
|
||||||
|
** Commercial Usage
|
||||||
|
**
|
||||||
|
** Licensees holding valid Qt Commercial licenses may use this file in
|
||||||
|
** accordance with the Qt Commercial License Agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and Nokia.
|
||||||
|
**
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
|
** General Public License version 2.1 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||||
|
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** If you are unsure which license is appropriate for your use, please
|
||||||
|
** contact the sales department at http://www.qtsoftware.com/contact.
|
||||||
|
**
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
#ifndef SETTINGSPAGE_H
|
||||||
|
#define SETTINGSPAGE_H
|
||||||
|
|
||||||
|
#include "ui_settingspage.h"
|
||||||
|
|
||||||
|
#include <coreplugin/dialogs/ioptionspage.h>
|
||||||
|
|
||||||
|
#include <QtGui/QWidget>
|
||||||
|
#include <QtCore/QPointer>
|
||||||
|
#include <QtCore/QString>
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
class QSettings;
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
namespace CVS {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
|
struct CVSSettings;
|
||||||
|
|
||||||
|
class SettingsPageWidget : public QWidget {
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit SettingsPageWidget(QWidget *parent = 0);
|
||||||
|
|
||||||
|
CVSSettings settings() const;
|
||||||
|
void setSettings(const CVSSettings &);
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::SettingsPage m_ui;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class SettingsPage : public Core::IOptionsPage
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
SettingsPage();
|
||||||
|
|
||||||
|
QString id() const;
|
||||||
|
QString trName() const;
|
||||||
|
QString category() const;
|
||||||
|
QString trCategory() const;
|
||||||
|
|
||||||
|
QWidget *createPage(QWidget *parent);
|
||||||
|
void apply();
|
||||||
|
void finish() { }
|
||||||
|
|
||||||
|
private:
|
||||||
|
SettingsPageWidget* m_widget;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace CVS
|
||||||
|
} // namespace Internal
|
||||||
|
|
||||||
|
#endif // SETTINGSPAGE_H
|
||||||
130
src/plugins/cvs/settingspage.ui
Normal file
130
src/plugins/cvs/settingspage.ui
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>CVS::Internal::SettingsPage</class>
|
||||||
|
<widget class="QWidget" name="CVS::Internal::SettingsPage">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>575</width>
|
||||||
|
<height>437</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<layout class="QFormLayout" name="formLayout_3">
|
||||||
|
<item row="0" column="0" colspan="2">
|
||||||
|
<widget class="QCheckBox" name="promptToSubmitCheckBox">
|
||||||
|
<property name="text">
|
||||||
|
<string>Prompt to submit</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="describeByCommitIdCheckBox">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>When checked, all files touched by a commit will be displayed when clicking on a revision number in the annotation view (retrieved via commit id). Otherwise, only the respective file will be displayed.</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Describe by commit id</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="topverticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeType">
|
||||||
|
<enum>QSizePolicy::Fixed</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QFormLayout" name="formLayout_2">
|
||||||
|
<property name="margin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="commandLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>CVS Command:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="Core::Utils::PathChooser" name="commandPathChooser"/>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="rootLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>CVS Root:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QLineEdit" name="rootLineEdit"/>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QLabel" name="diffOptionsLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Diff Options:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QLineEdit" name="diffOptionsLineEdit"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>105</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>Core::Utils::PathChooser</class>
|
||||||
|
<extends>QWidget</extends>
|
||||||
|
<header location="global">utils/pathchooser.h</header>
|
||||||
|
<container>1</container>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
||||||
@@ -14,6 +14,7 @@ SUBDIRS = plugin_coreplugin \
|
|||||||
plugin_perforce \
|
plugin_perforce \
|
||||||
plugin_subversion \
|
plugin_subversion \
|
||||||
plugin_git \
|
plugin_git \
|
||||||
|
plugin_cvs \
|
||||||
plugin_cpptools \
|
plugin_cpptools \
|
||||||
plugin_qt4projectmanager \
|
plugin_qt4projectmanager \
|
||||||
# plugin_snippets \ # buggy and annoying
|
# plugin_snippets \ # buggy and annoying
|
||||||
@@ -73,6 +74,12 @@ plugin_git.depends = plugin_vcsbase
|
|||||||
plugin_git.depends += plugin_projectexplorer
|
plugin_git.depends += plugin_projectexplorer
|
||||||
plugin_git.depends += plugin_coreplugin
|
plugin_git.depends += plugin_coreplugin
|
||||||
|
|
||||||
|
plugin_cvs.subdir = cvs
|
||||||
|
plugin_cvs.depends = plugin_texteditor
|
||||||
|
plugin_cvs.depends = plugin_vcsbase
|
||||||
|
plugin_cvs.depends += plugin_projectexplorer
|
||||||
|
plugin_cvs.depends += plugin_coreplugin
|
||||||
|
|
||||||
plugin_subversion.subdir = subversion
|
plugin_subversion.subdir = subversion
|
||||||
plugin_subversion.depends = plugin_vcsbase
|
plugin_subversion.depends = plugin_vcsbase
|
||||||
plugin_subversion.depends += plugin_projectexplorer
|
plugin_subversion.depends += plugin_projectexplorer
|
||||||
|
|||||||
Reference in New Issue
Block a user