File indexing completed on 2024-04-28 09:36:10

0001 /*
0002     SPDX-FileCopyrightText: 2011 Vishesh Yadav <vishesh3y@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "pushdialog.h"
0008 #include "hgconfig.h"
0009 #include "pathselector.h"
0010 #include "fileviewhgpluginsettings.h"
0011 
0012 #include <QStringList>
0013 #include <QString>
0014 #include <QTextCodec>
0015 #include <QGridLayout>
0016 #include <QHeaderView>
0017 #include <QTableWidget>
0018 #include <QCheckBox>
0019 #include <QGroupBox>
0020 #include <KTextEdit>
0021 #include <KLocalizedString>
0022 #include <KMessageBox>
0023 
0024 
0025 HgPushDialog::HgPushDialog(QWidget *parent):
0026     HgSyncBaseDialog(HgSyncBaseDialog::PushDialog, parent)
0027 {
0028     // dialog properties
0029     this->setWindowTitle(xi18nc("@title:window",
0030                 "<application>Hg</application> Push Repository"));
0031     setup();
0032 
0033 }
0034 
0035 void HgPushDialog::setOptions()
0036 {
0037     m_optAllowNewBranch = new QCheckBox(xi18nc("@label:checkbox",
0038                 "Allow pushing a new branch"));
0039     m_optInsecure = new QCheckBox(xi18nc("@label:checkbox",
0040                 "Do not verify server certificate"));
0041     m_optForce = new QCheckBox(xi18nc("@label:checkbox",
0042                 "Force Push"));
0043     m_optionGroup = new QGroupBox(xi18nc("@label:group",
0044                 "Options"));
0045 
0046     m_options << m_optForce;
0047     m_options << m_optAllowNewBranch;
0048     m_options << m_optInsecure;
0049 }
0050 
0051 void HgPushDialog::createChangesGroup()
0052 {
0053     m_changesGroup = new QGroupBox(xi18nc("@label:group",
0054                 "Outgoing Changes"));    
0055     QHBoxLayout *hbox = new QHBoxLayout;
0056     m_outChangesList = new QTableWidget;
0057     m_changesetInfo = new KTextEdit;
0058 
0059     m_outChangesList->setColumnCount(3);
0060     m_outChangesList->verticalHeader()->hide();
0061     m_outChangesList->horizontalHeader()->hide();
0062     m_outChangesList->setSelectionBehavior(QAbstractItemView::SelectRows);
0063     m_outChangesList->setEditTriggers(QAbstractItemView::NoEditTriggers);
0064 
0065     m_changesetInfo->setFontFamily(QLatin1String("Monospace"));
0066 
0067     hbox->addWidget(m_outChangesList);
0068     hbox->addWidget(m_changesetInfo);
0069 
0070     m_changesGroup->setLayout(hbox);
0071     m_changesGroup->setVisible(false);
0072 
0073     connect(m_outChangesList, &QTableWidget::itemSelectionChanged,
0074             this, &HgPushDialog::slotOutSelChanged);
0075     connect(this, &HgSyncBaseDialog::changeListAvailable,
0076             this, &HgPushDialog::slotUpdateChangesGeometry);
0077 }
0078 
0079 void HgPushDialog::slotOutSelChanged()
0080 {
0081     if (m_hgw->isBusy()) {
0082         return;
0083     }
0084 
0085     QString changeset = m_outChangesList->item(m_outChangesList->currentRow(), 0)->text().split(QLatin1Char(' '), Qt::SkipEmptyParts).takeLast();
0086 
0087     const QStringList args{
0088         QStringLiteral("-r"),
0089         changeset,
0090         QStringLiteral("-v"),
0091         QStringLiteral("-p"),
0092     };
0093 
0094     QString output;
0095     m_hgw->executeCommand(QStringLiteral("log"), args, output);
0096     m_changesetInfo->clear();
0097     m_changesetInfo->setText(output);
0098 }
0099 
0100 void HgPushDialog::getHgChangesArguments(QStringList &args)
0101 {
0102     args << QStringLiteral("outgoing");
0103     args << m_pathSelector->remote();
0104     args << QStringLiteral("--config");
0105     args << QStringLiteral("ui.verbose=False");
0106     args << QStringLiteral("--template");
0107     args << QStringLiteral("Commit: {rev}:{node|short}   "
0108                     "{date|isodate}   {desc|firstline}\n");
0109 }
0110 
0111 void HgPushDialog::parseUpdateChanges(const QString &input)
0112 {
0113     QStringList list = input.split(QLatin1String("  "), Qt::SkipEmptyParts);
0114     QTableWidgetItem *changeset = new QTableWidgetItem;
0115     QTableWidgetItem *date = new QTableWidgetItem;
0116     QTableWidgetItem *summary = new QTableWidgetItem;
0117 
0118     changeset->setForeground(Qt::red);
0119     date->setForeground(Qt::blue);
0120 
0121     changeset->setText(list.takeFirst());
0122     date->setText(list.takeFirst());
0123     summary->setText(list.takeFirst());
0124 
0125     int rowCount = m_outChangesList->rowCount();
0126     m_outChangesList->insertRow(rowCount);
0127     m_outChangesList->setItem(rowCount, 0, changeset);
0128     m_outChangesList->setItem(rowCount, 1, date);
0129     m_outChangesList->setItem(rowCount, 2, summary);
0130 }
0131 
0132 void HgPushDialog::appendOptionArguments(QStringList &args)
0133 {
0134     if (m_optForce->isChecked()) {
0135         args << QStringLiteral("--force");
0136     }
0137     if (m_optAllowNewBranch->isChecked()) {
0138         args << QStringLiteral("--new-branch");
0139     }
0140     if (m_optInsecure->isChecked()) {
0141         args << QStringLiteral("--insecure");
0142     }
0143 }
0144 
0145 void HgPushDialog::slotUpdateChangesGeometry()
0146 {
0147     m_outChangesList->resizeColumnsToContents();
0148     m_outChangesList->resizeRowsToContents();
0149     m_outChangesList->horizontalHeader()->setStretchLastSection(true);
0150 }
0151 
0152 void HgPushDialog::readBigSize()
0153 {
0154     FileViewHgPluginSettings *settings = FileViewHgPluginSettings::self();
0155     m_bigSize = QSize(settings->pushDialogBigWidth(), settings->pushDialogBigHeight());
0156 }
0157 
0158 void HgPushDialog::writeBigSize()
0159 {
0160     qDebug() << "Saving geometry";
0161     FileViewHgPluginSettings *settings = FileViewHgPluginSettings::self();
0162     settings->setPushDialogBigWidth(m_bigSize.width());
0163     settings->setPushDialogBigHeight(m_bigSize.height());
0164     settings->save();
0165 }
0166 
0167 void HgPushDialog::noChangesMessage()
0168 {
0169     KMessageBox::information(this, xi18nc("@message:info",
0170                 "No outgoing changes!"));
0171 }
0172 
0173 
0174 
0175 #include "moc_pushdialog.cpp"