VCS[SVN, CVS, Perforce]: Implement "Annotate Previous" context menu.

in annotation editor, including base infrastructure in
VCSBaseEditor. Pass signals of VCSBaseEditor to opaque
VCSBaseEditable (IEditor) for convenience.

Task-number: QTCREATORBUG-503
This commit is contained in:
Friedemann Kleint
2010-01-06 17:24:40 +01:00
parent 0afaf1f2f1
commit 7c0f4e8f50
16 changed files with 213 additions and 49 deletions

View File

@@ -712,13 +712,25 @@ void SubversionPlugin::annotateCurrentFile()
annotate(state.currentFileTopLevel(), state.relativeCurrentFile());
}
void SubversionPlugin::annotate(const QString &workingDir, const QString &file)
void SubversionPlugin::annotateVersion(const QString &file,
const QString &revision,
int lineNr)
{
const QFileInfo fi(file);
annotate(fi.absolutePath(), fi.fileName(), revision, lineNr);
}
void SubversionPlugin::annotate(const QString &workingDir, const QString &file,
const QString &revision /* = QString() */,
int lineNumber /* = -1 */)
{
QTextCodec *codec = VCSBase::VCSBaseEditor::getCodec(file);
QStringList args(QLatin1String("annotate"));
if (m_settings.spaceIgnorantAnnotation)
args << QLatin1String("-x") << QLatin1String("-uw");
if (!revision.isEmpty())
args << QLatin1String("-r") << revision;
args.push_back(QLatin1String("-v"));
args.append(QDir::toNativeSeparators(file));
@@ -729,8 +741,10 @@ void SubversionPlugin::annotate(const QString &workingDir, const QString &file)
// Re-use an existing view if possible to support
// the common usage pattern of continuously changing and diffing a file
const QString source = workingDir + QLatin1Char('/') + file;
const int lineNumber = VCSBase::VCSBaseEditor::lineNumberOfCurrentEditor(source);
const QString id = VCSBase::VCSBaseEditor::getTitleId(workingDir, QStringList(file));
if (lineNumber <= 0)
lineNumber = VCSBase::VCSBaseEditor::lineNumberOfCurrentEditor(source);
// Determine id
const QString id = VCSBase::VCSBaseEditor::getTitleId(workingDir, QStringList(file), revision);
if (Core::IEditor *editor = locateEditor("annotateFileName", id)) {
editor->createNew(response.stdOut);
@@ -739,6 +753,8 @@ void SubversionPlugin::annotate(const QString &workingDir, const QString &file)
} else {
const QString title = QString::fromLatin1("svn annotate %1").arg(id);
Core::IEditor *newEditor = showOutputInEditor(title, response.stdOut, VCSBase::AnnotateOutput, source, codec);
connect(newEditor, SIGNAL(annotatePreviousRequested(QString,QString,int)),
this, SLOT(annotateVersion(QString,QString,int)));
newEditor->setProperty("annotateFileName", id);
VCSBase::VCSBaseEditor::gotoLineOfEditor(newEditor, lineNumber);
}