File indexing completed on 2024-05-12 04:38:56

0001 /*
0002     SPDX-FileCopyrightText: 2007 Andreas Pakulat <apaku@gmx.de>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "vcsdiffwidget.h"
0008 
0009 #include <KLocalizedString>
0010 
0011 #include <interfaces/icore.h>
0012 #include <interfaces/iruncontroller.h>
0013 
0014 #include "../vcsjob.h"
0015 #include "../vcsrevision.h"
0016 #include "../vcsdiff.h"
0017 #include "debug.h"
0018 
0019 #include "ui_vcsdiffwidget.h"
0020 #include "vcsdiffpatchsources.h"
0021 
0022 namespace KDevelop
0023 {
0024 
0025 class VcsDiffWidgetPrivate
0026 {
0027 public:
0028     Ui::VcsDiffWidget* m_ui;
0029     VcsJob* m_job;
0030     VcsDiffWidget* q;
0031 
0032     explicit VcsDiffWidgetPrivate(VcsDiffWidget* _q) : q(_q) {
0033     }
0034 
0035     void diffReady( KDevelop::VcsJob* job )
0036     {
0037         if( job != m_job )
0038             return;
0039         KDevelop::VcsDiff diff = m_job->fetchResults().value<KDevelop::VcsDiff>();
0040 
0041         // Try using the patch-review plugin if possible
0042         auto* patch = new VCSDiffPatchSource(diff);
0043 
0044         if(showVcsDiff(patch))
0045         {
0046             q->deleteLater();
0047             return;
0048         }else{
0049             delete patch;
0050         }
0051 
0052         qCDebug(VCS) << "diff:" << diff.diff();
0053         m_ui->diffDisplay->setPlainText( diff.diff() );
0054         m_ui->diffDisplay->setReadOnly( true );
0055 
0056     }
0057 
0058 };
0059 
0060 VcsDiffWidget::VcsDiffWidget( KDevelop::VcsJob* job, QWidget* parent )
0061     : QWidget(parent)
0062     , d_ptr(new VcsDiffWidgetPrivate(this))
0063 {
0064     Q_D(VcsDiffWidget);
0065 
0066     d->m_job = job;
0067     d->m_ui = new Ui::VcsDiffWidget();
0068     d->m_ui->setupUi( this );
0069     connect( d->m_job, &VcsJob::resultsReady,
0070              this, [this] (VcsJob* job) { Q_D(VcsDiffWidget); d->diffReady(job); } );
0071     ICore::self()->runController()->registerJob( d->m_job );
0072 }
0073 
0074 VcsDiffWidget::~VcsDiffWidget()
0075 {
0076     Q_D(VcsDiffWidget);
0077 
0078     delete d->m_ui;
0079 }
0080 
0081 void VcsDiffWidget::setRevisions( const KDevelop::VcsRevision& first,
0082                                   const KDevelop::VcsRevision& second )
0083 {
0084     Q_D(VcsDiffWidget);
0085 
0086     d->m_ui->revLabel->setText( i18nc("@label", "Difference between revision %1 and %2:",
0087                        first.prettyValue(),
0088                        second.prettyValue() ) );
0089 }
0090 
0091 }
0092 
0093 #include "moc_vcsdiffwidget.cpp"