File indexing completed on 2024-03-24 05:43:52
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"