diff --git a/src/plugins/remotelinux/maemopackagecreationwidget.cpp b/src/plugins/remotelinux/maemopackagecreationwidget.cpp index bf37c99b3ef..121a5514f9f 100644 --- a/src/plugins/remotelinux/maemopackagecreationwidget.cpp +++ b/src/plugins/remotelinux/maemopackagecreationwidget.cpp @@ -72,7 +72,6 @@ void MaemoPackageCreationWidget::initGui() { m_ui->shortDescriptionLineEdit->setMaxLength(60); updateVersionInfo(); - versionInfoChanged(); const AbstractDebBasedQt4MaemoTarget * const debBasedMaemoTarget = m_step->debBasedMaemoTarget(); if (debBasedMaemoTarget) { @@ -142,9 +141,17 @@ void MaemoPackageCreationWidget::updateVersionInfo() } const QStringList list = versionString.split(QLatin1Char('.'), QString::SkipEmptyParts); + const bool blocked = m_ui->major->signalsBlocked(); + m_ui->major->blockSignals(true); + m_ui->minor->blockSignals(true); + m_ui->patch->blockSignals(true); m_ui->major->setValue(list.value(0, QLatin1String("0")).toInt()); m_ui->minor->setValue(list.value(1, QLatin1String("0")).toInt()); m_ui->patch->setValue(list.value(2, QLatin1String("0")).toInt()); + m_ui->major->blockSignals(blocked); + m_ui->minor->blockSignals(blocked); + m_ui->patch->blockSignals(blocked); + updateSummary(); } void MaemoPackageCreationWidget::handleControlFileUpdate() @@ -249,8 +256,10 @@ void MaemoPackageCreationWidget::versionInfoChanged() const bool success = m_step->setVersionString(m_ui->major->text() + QLatin1Char('.') + m_ui->minor->text() + QLatin1Char('.') + m_ui->patch->text(), &error); - if (!success) + if (!success) { QMessageBox::critical(this, tr("Could Not Set Version Number"), error); + updateVersionInfo(); + } } void MaemoPackageCreationWidget::editDebianFile() diff --git a/src/plugins/remotelinux/qt4maemotarget.cpp b/src/plugins/remotelinux/qt4maemotarget.cpp index 02fd14ed512..3b3e1d3b8a1 100644 --- a/src/plugins/remotelinux/qt4maemotarget.cpp +++ b/src/plugins/remotelinux/qt4maemotarget.cpp @@ -55,6 +55,8 @@ #include #include #include +#include +#include #include #include #include @@ -412,8 +414,50 @@ bool AbstractDebBasedQt4MaemoTarget::setProjectVersionInternal(const QString &ve if (!reader.fetch(filePath, error)) return false; QString content = QString::fromUtf8(reader.data()); - content.replace(QRegExp(QLatin1String("\\([a-zA-Z0-9_\\.]+\\)")), - QLatin1Char('(') + version + QLatin1Char(')')); + if (content.contains(QLatin1Char('(') + version + QLatin1Char(')'))) { + if (error) { + *error = tr("Refusing to update changelog file: Already contains version '%1'.") + .arg(version); + } + return false; + } + + int maintainerOffset = content.indexOf(QLatin1String("\n -- ")); + const int eolOffset = content.indexOf(QLatin1Char('\n'), maintainerOffset+1); + if (maintainerOffset == -1 || eolOffset == -1) { + if (error) { + *error = tr("Cannot update changelog: Invalid format (no maintainer entry found)."); + } + return false; + } + + ++maintainerOffset; + const QDateTime currentDateTime = QDateTime::currentDateTime(); + QDateTime utcDateTime = QDateTime(currentDateTime); + utcDateTime.setTimeSpec(Qt::UTC); + int utcOffsetSeconds = currentDateTime.secsTo(utcDateTime); + QChar sign; + if (utcOffsetSeconds < 0) { + utcOffsetSeconds = -utcOffsetSeconds; + sign = QLatin1Char('-'); + } else { + sign = QLatin1Char('+'); + } + const int utcOffsetMinutes = (utcOffsetSeconds / 60) % 60; + const int utcOffsetHours = utcOffsetSeconds / 3600; + const QString dateString = QString::fromLatin1("%1 %2%3%4") + .arg(currentDateTime.toString(QLatin1String("ddd, dd MMM yyyy hh:mm:ss"))).arg(sign) + .arg(utcOffsetHours, 2, 10, QLatin1Char('0')) + .arg(utcOffsetMinutes, 2, 10, QLatin1Char('0')); + const QString maintainerLine = content.mid(maintainerOffset, eolOffset - maintainerOffset + 1) + .replace(QRegExp(QLatin1String("> [^\\n]*\n")), + QString::fromLocal8Bit("> %1").arg(dateString)); + QString versionLine = content.left(content.indexOf(QLatin1Char('\n'))) + .replace(QRegExp(QLatin1String("\\([a-zA-Z0-9_\\.]+\\)")), + QLatin1Char('(') + version + QLatin1Char(')')); + const QString newEntry = versionLine + QLatin1String("\n * \n\n") + + maintainerLine + QLatin1String("\n\n"); + content.prepend(newEntry); Core::FileChangeBlocker update(filePath); Utils::FileSaver saver(filePath); saver.write(content.toUtf8()); @@ -664,6 +708,7 @@ void AbstractDebBasedQt4MaemoTarget::handleTargetAddedSpecial() if (QFileInfo(iconPath).exists()) setPackageManagerIcon(iconPath); } + m_filesWatcher->addDirectory(debianDirPath(), Utils::FileSystemWatcher::WatchAllChanges); m_controlFile = new WatchableFile(controlFilePath(), this); connect(m_controlFile, SIGNAL(modified()), SIGNAL(controlChanged())); @@ -871,7 +916,6 @@ bool AbstractDebBasedQt4MaemoTarget::setPackageManagerIcon(const QString &iconFi return success; } - AbstractRpmBasedQt4MaemoTarget::AbstractRpmBasedQt4MaemoTarget(Qt4Project *parent, const QString &id) : AbstractQt4MaemoTarget(parent, id) {