jlong CommitEditor::createInstance(jobject jsession, jobject jrevprops, jobject jcommit_callback, jobject jlock_tokens, jboolean jkeep_locks, jobject jget_base_cb, jobject jget_props_cb, jobject jget_kind_cb) { RemoteSession* session = RemoteSession::getCppObject(jsession); CPPADDR_NULL_PTR(session, 0); CommitEditor* editor = new CommitEditor(session, jrevprops, jcommit_callback, jlock_tokens, jkeep_locks, jget_base_cb, jget_props_cb, jget_kind_cb); if (JNIUtil::isJavaExceptionThrown()) { delete editor; return 0; } return editor->getCppAddr(); }
void BazaarPlugin::showCommitWidget(const QList<VCSBase::VCSBaseClient::StatusItem> &status) { VCSBase::VCSBaseOutputWindow *outputWindow = VCSBase::VCSBaseOutputWindow::instance(); //Once we receive our data release the connection so it can be reused elsewhere disconnect(m_client, SIGNAL(parsedStatus(QList<VCSBase::VCSBaseClient::StatusItem>)), this, SLOT(showCommitWidget(QList<VCSBase::VCSBaseClient::StatusItem>))); if (status.isEmpty()) { outputWindow->appendError(tr("There are no changes to commit.")); return; } deleteCommitLog(); // Open commit log QString changeLogPattern = QDir::tempPath(); if (!changeLogPattern.endsWith(QLatin1Char('/'))) changeLogPattern += QLatin1Char('/'); changeLogPattern += QLatin1String("qtcreator-bzr-XXXXXX.msg"); m_changeLog = new QTemporaryFile(changeLogPattern, this); if (!m_changeLog->open()) { outputWindow->appendError(tr("Unable to generate a temporary file for the commit editor.")); return; } Core::IEditor *editor = m_core->editorManager()->openEditor(m_changeLog->fileName(), Constants::COMMIT_ID, Core::EditorManager::ModeSwitch); if (!editor) { outputWindow->appendError(tr("Unable to create an editor for the commit.")); return; } CommitEditor *commitEditor = qobject_cast<CommitEditor *>(editor); if (!commitEditor) { outputWindow->appendError(tr("Unable to create a commit editor.")); return; } commitEditor->registerActions(m_editorUndo, m_editorRedo, m_editorCommit, m_editorDiff); connect(commitEditor, SIGNAL(diffSelectedFiles(QStringList)), this, SLOT(diffFromEditorSelected(QStringList))); commitEditor->setCheckScriptWorkingDirectory(m_submitRepository); const QString msg = tr("Commit changes for \"%1\"."). arg(QDir::toNativeSeparators(m_submitRepository)); commitEditor->setDisplayName(msg); const BranchInfo branch = m_client->synchronousBranchQuery(m_submitRepository); commitEditor->setFields(m_submitRepository, branch, m_bazaarSettings.stringValue(BazaarSettings::userNameKey), m_bazaarSettings.stringValue(BazaarSettings::userEmailKey), status); }
bool BazaarPlugin::submitEditorAboutToClose() { CommitEditor *commitEditor = qobject_cast<CommitEditor *>(submitEditor()); QTC_ASSERT(commitEditor, return true); Core::IDocument *editorDocument = commitEditor->document(); QTC_ASSERT(editorDocument, return true); bool dummyPrompt = false; const VcsBase::VcsBaseSubmitEditor::PromptSubmitResult response = commitEditor->promptSubmit(tr("Close Commit Editor"), tr("Do you want to commit the changes?"), tr("Message check failed. Do you want to proceed?"), &dummyPrompt, !m_submitActionTriggered); m_submitActionTriggered = false; switch (response) { case VcsBase::VcsBaseSubmitEditor::SubmitCanceled: return false; case VcsBase::VcsBaseSubmitEditor::SubmitDiscarded: return true; default: break; } QStringList files = commitEditor->checkedFiles(); if (!files.empty()) { //save the commit message if (!Core::DocumentManager::saveDocument(editorDocument)) return false; //rewrite entries of the form 'file => newfile' to 'newfile' because //this would mess the commit command for (QStringList::iterator iFile = files.begin(); iFile != files.end(); ++iFile) { const QStringList parts = iFile->split(QLatin1String(" => "), QString::SkipEmptyParts); if (!parts.isEmpty()) *iFile = parts.last(); } BazaarCommitWidget *commitWidget = commitEditor->commitWidget(); QStringList extraOptions; // Author if (!commitWidget->committer().isEmpty()) extraOptions.append(QLatin1String("--author=") + commitWidget->committer()); // Fixed bugs foreach (const QString &fix, commitWidget->fixedBugs()) { if (!fix.isEmpty()) extraOptions << QLatin1String("--fixes") << fix; } // Whether local commit or not if (commitWidget->isLocalOptionEnabled()) extraOptions += QLatin1String("--local"); m_client->commit(m_submitRepository, files, editorDocument->filePath(), extraOptions); } return true; }
void MercurialPlugin::showCommitWidget(const QList<QPair<QString, QString> > &status) { VCSBase::VCSBaseOutputWindow *outputWindow = VCSBase::VCSBaseOutputWindow::instance(); //Once we receive our data release the connection so it can be reused elsewhere disconnect(m_client, SIGNAL(parsedStatus(QList<QPair<QString,QString> >)), this, SLOT(showCommitWidget(QList<QPair<QString,QString> >))); if (status.isEmpty()) { outputWindow->appendError(tr("There are no changes to commit.")); return; } deleteCommitLog(); // Open commit log QString changeLogPattern = QDir::tempPath(); if (!changeLogPattern.endsWith(QLatin1Char('/'))) changeLogPattern += QLatin1Char('/'); changeLogPattern += QLatin1String("qtcreator-hg-XXXXXX.msg"); changeLog = new QTemporaryFile(changeLogPattern, this); if (!changeLog->open()) { outputWindow->appendError(tr("Unable to generate a temporary file for the commit editor.")); return; } Core::IEditor *editor = core->editorManager()->openEditor(changeLog->fileName(), QLatin1String(Constants::COMMIT_ID), Core::EditorManager::ModeSwitch); if (!editor) { outputWindow->appendError(tr("Unable to create an editor for the commit.")); return; } QTC_ASSERT(qobject_cast<CommitEditor *>(editor), return) CommitEditor *commitEditor = static_cast<CommitEditor *>(editor); const QString msg = tr("Commit changes for \"%1\"."). arg(QDir::toNativeSeparators(m_submitRepository)); commitEditor->setDisplayName(msg); QString branch = m_client->branchQuerySync(m_submitRepository); commitEditor->setFields(m_submitRepository, branch, mercurialSettings.userName(), mercurialSettings.email(), status); commitEditor->registerActions(editorUndo, editorRedo, editorCommit, editorDiff); connect(commitEditor, SIGNAL(diffSelectedFiles(QStringList)), this, SLOT(diffFromEditorSelected(QStringList))); commitEditor->setCheckScriptWorkingDirectory(m_submitRepository); }
void BazaarPlugin::showCommitWidget(const QList<VcsBase::VcsBaseClient::StatusItem> &status) { VcsBase::VcsBaseOutputWindow *outputWindow = VcsBase::VcsBaseOutputWindow::instance(); //Once we receive our data release the connection so it can be reused elsewhere disconnect(m_client, SIGNAL(parsedStatus(QList<VcsBase::VcsBaseClient::StatusItem>)), this, SLOT(showCommitWidget(QList<VcsBase::VcsBaseClient::StatusItem>))); if (status.isEmpty()) { outputWindow->appendError(tr("There are no changes to commit.")); return; } // Start new temp file Utils::TempFileSaver saver; // Keep the file alive, else it removes self and forgets its name saver.setAutoRemove(false); if (!saver.finalize()) { VcsBase::VcsBaseOutputWindow::instance()->append(saver.errorString()); return; } Core::IEditor *editor = Core::EditorManager::openEditor(saver.fileName(), Constants::COMMIT_ID, Core::EditorManager::ModeSwitch); if (!editor) { outputWindow->appendError(tr("Unable to create an editor for the commit.")); return; } CommitEditor *commitEditor = qobject_cast<CommitEditor *>(editor); if (!commitEditor) { outputWindow->appendError(tr("Unable to create a commit editor.")); return; } commitEditor->registerActions(m_editorUndo, m_editorRedo, m_editorCommit, m_editorDiff); connect(commitEditor, SIGNAL(diffSelectedFiles(QStringList)), this, SLOT(diffFromEditorSelected(QStringList))); commitEditor->setCheckScriptWorkingDirectory(m_submitRepository); const QString msg = tr("Commit changes for \"%1\"."). arg(QDir::toNativeSeparators(m_submitRepository)); commitEditor->setDisplayName(msg); const BranchInfo branch = m_client->synchronousBranchQuery(m_submitRepository); commitEditor->setFields(m_submitRepository, branch, m_bazaarSettings.stringValue(BazaarSettings::userNameKey), m_bazaarSettings.stringValue(BazaarSettings::userEmailKey), status); }
void MercurialPlugin::showCommitWidget(const QList<VcsBaseClient::StatusItem> &status) { //Once we receive our data release the connection so it can be reused elsewhere disconnect(m_client, &MercurialClient::parsedStatus, this, &MercurialPlugin::showCommitWidget); if (status.isEmpty()) { VcsOutputWindow::appendError(tr("There are no changes to commit.")); return; } // Start new temp file TempFileSaver saver; // Keep the file alive, else it removes self and forgets its name saver.setAutoRemove(false); if (!saver.finalize()) { VcsOutputWindow::appendError(saver.errorString()); return; } Core::IEditor *editor = Core::EditorManager::openEditor(saver.fileName(), Constants::COMMIT_ID); if (!editor) { VcsOutputWindow::appendError(tr("Unable to create an editor for the commit.")); return; } QTC_ASSERT(qobject_cast<CommitEditor *>(editor), return); CommitEditor *commitEditor = static_cast<CommitEditor *>(editor); setSubmitEditor(commitEditor); commitEditor->registerActions(editorUndo, editorRedo, editorCommit, editorDiff); connect(commitEditor, &VcsBaseSubmitEditor::diffSelectedFiles, this, &MercurialPlugin::diffFromEditorSelected); commitEditor->setCheckScriptWorkingDirectory(m_submitRepository); const QString msg = tr("Commit changes for \"%1\"."). arg(QDir::toNativeSeparators(m_submitRepository)); commitEditor->document()->setPreferredDisplayName(msg); QString branch = versionControl()->vcsTopic(m_submitRepository); commitEditor->setFields(m_submitRepository, branch, m_client->settings().stringValue(MercurialSettings::userNameKey), m_client->settings().stringValue(MercurialSettings::userEmailKey), status); }
bool MercurialPlugin::submitEditorAboutToClose(VCSBase::VCSBaseSubmitEditor *submitEditor) { if (!changeLog) return true; Core::IFile *editorFile = submitEditor->file(); CommitEditor *commitEditor = qobject_cast<CommitEditor *>(submitEditor); if (!editorFile || !commitEditor) return true; bool dummyPrompt = mercurialSettings.prompt(); const VCSBase::VCSBaseSubmitEditor::PromptSubmitResult response = commitEditor->promptSubmit(tr("Close Commit Editor"), tr("Do you want to commit the changes?"), tr("Message check failed. Do you want to proceed?"), &dummyPrompt, mercurialSettings.prompt()); switch (response) { case VCSBase::VCSBaseSubmitEditor::SubmitCanceled: return false; case VCSBase::VCSBaseSubmitEditor::SubmitDiscarded: deleteCommitLog(); return true; default: break; } const QStringList files = commitEditor->checkedFiles(); if (!files.empty()) { //save the commit message if (!core->fileManager()->saveFile(editorFile)) return false; QStringList extraOptions; if (!commitEditor->committerInfo().isEmpty()) extraOptions << QLatin1String("-u") << commitEditor->committerInfo(); m_client->commit(m_submitRepository, files, editorFile->fileName(), extraOptions); } return true; }
bool MercurialPlugin::submitEditorAboutToClose() { CommitEditor *commitEditor = qobject_cast<CommitEditor *>(submitEditor()); QTC_ASSERT(commitEditor, return true); Core::IDocument *editorFile = commitEditor->document(); QTC_ASSERT(editorFile, return true); bool dummyPrompt = false; const VcsBaseSubmitEditor::PromptSubmitResult response = commitEditor->promptSubmit(tr("Close Commit Editor"), tr("Do you want to commit the changes?"), tr("Message check failed. Do you want to proceed?"), &dummyPrompt, !m_submitActionTriggered); m_submitActionTriggered = false; switch (response) { case VcsBaseSubmitEditor::SubmitCanceled: return false; case VcsBaseSubmitEditor::SubmitDiscarded: return true; default: break; } const QStringList files = commitEditor->checkedFiles(); if (!files.empty()) { //save the commit message if (!Core::DocumentManager::saveDocument(editorFile)) return false; QStringList extraOptions; if (!commitEditor->committerInfo().isEmpty()) extraOptions << QLatin1String("-u") << commitEditor->committerInfo(); m_client->commit(m_submitRepository, files, editorFile->filePath().toString(), extraOptions); } return true; }
const BazaarCommitWidget *CommitEditor::commitWidget() const { CommitEditor *nonConstThis = const_cast<CommitEditor *>(this); return static_cast<const BazaarCommitWidget *>(nonConstThis->widget()); }