Major bugfixes to do-release-upgrade code

ubuntu/noble
Aaron Rainbolt 11 months ago
parent 86c512a2ff
commit 9a41afd011

@ -144,14 +144,15 @@ void AptManager::handleUpdateProcessBuffer()
conffileList.append(confLine); conffileList.append(confLine);
} }
} }
} else if (line == "Lubuntu Update !!! NEW RELEASE") { } else if (line == "Lubuntu Update !!! NEW RELEASE\r\n") {
// Same busy-wait technique, but here we're just getting one extra line, the model code. // Same busy-wait technique, but here we're just getting one extra line, the release code.
while (!aptProcess->canReadLine()) { while (!aptProcess->canReadLine()) {
QThread::msleep(20); QThread::msleep(20);
} }
aptProcess->readLine(lineBuf, 2048); aptProcess->readLine(lineBuf, 2048);
QString ltsReleaseCode = QString(lineBuf); QString releaseCode = QString(lineBuf);
emit newLtsRelease(ltsReleaseCode); releaseCode = releaseCode.left(releaseCode.count() - 2);
emit newRelease(releaseCode);
} }
double percentageDone = (static_cast<double>(internalUpdateProgress) / (((internalUpdateInfo[0].count() + internalUpdateInfo[1].count()) * 4) + internalUpdateInfo[2].count())) * 100; double percentageDone = (static_cast<double>(internalUpdateProgress) / (((internalUpdateInfo[0].count() + internalUpdateInfo[1].count()) * 4) + internalUpdateInfo[2].count())) * 100;

@ -28,8 +28,7 @@ signals:
void progressUpdated(int progress); void progressUpdated(int progress);
void logLineReady(QString logLine); void logLineReady(QString logLine);
void conffileListReady(QStringList conffileList); void conffileListReady(QStringList conffileList);
void newLtsRelease(QString code); void newRelease(QString code);
void newStableRelease(QString code);
private slots: private slots:
void handleUpdateProcessBuffer(); void handleUpdateProcessBuffer();

@ -69,63 +69,66 @@ elif [ "$1" = 'doupdate' ]; then
DEBIAN_FRONTEND='kde' apt-get -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold' -o Apt::Color='0' -o Dpkg::Use-Pty='0' -y dist-upgrade |& tee /run/lubuntu-update-apt-log DEBIAN_FRONTEND='kde' apt-get -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold' -o Apt::Color='0' -o Dpkg::Use-Pty='0' -y dist-upgrade |& tee /run/lubuntu-update-apt-log
# Find all the conffiles # Find all the conffiles
doConffiles='y';
mapfile conffileRawList <<< "$(grep -P "^Configuration file \'.*\'$" '/run/lubuntu-update-apt-log')" mapfile conffileRawList <<< "$(grep -P "^Configuration file \'.*\'$" '/run/lubuntu-update-apt-log')"
if [ "$(echo "${conffileRawList[0]}" | head -c1)" != 'C' ]; then # Empty or invalid list, we're done if [ "$(echo "${conffileRawList[0]}" | head -c1)" != 'C' ]; then # Empty or invalid list, we're done
exit 0 doConffiles='n';
fi fi
conffileList=() if [ "$doConffiles" = 'y' ]; then
counter=0 conffileList=()
while [ "$counter" -lt "${#conffileRawList[@]}" ]; do counter=0
# Cut off "Configuration file '" from the start and "'" plus a couple trailing characters from the end while [ "$counter" -lt "${#conffileRawList[@]}" ]; do
conffileList[counter]="$(echo "${conffileRawList[$counter]}" | tail -c+21 | head -c-3)" # Cut off "Configuration file '" from the start and "'" plus a couple trailing characters from the end
counter=$((counter+1)) conffileList[counter]="$(echo "${conffileRawList[$counter]}" | tail -c+21 | head -c-3)"
done counter=$((counter+1))
done
echo "Lubuntu Update !!! CONFIGURATION FILE LIST START";
counter=0 echo "Lubuntu Update !!! CONFIGURATION FILE LIST START";
while [ "$counter" -lt "${#conffileList[@]}" ]; do counter=0
echo "${conffileList[$counter]}" while [ "$counter" -lt "${#conffileList[@]}" ]; do
counter=$((counter+1)) echo "${conffileList[$counter]}"
done counter=$((counter+1))
echo "Lubuntu Update !!! CONFIGURATION FILE LIST END"; done
echo "Lubuntu Update !!! CONFIGURATION FILE LIST END";
# If we make it this far, there were conffiles to deal with
breakLoop='no' # If we make it this far, there were conffiles to deal with
gotCommand='no' breakLoop='no'
commandName='' gotCommand='no'
while [ "$breakLoop" = 'no' ]; do commandName=''
read -r inputVal while [ "$breakLoop" = 'no' ]; do
if [ "$gotCommand" = 'no' ]; then read -r inputVal
if [ "$inputVal" = 'done' ]; then if [ "$gotCommand" = 'no' ]; then
breakLoop='yes' if [ "$inputVal" = 'done' ]; then
breakLoop='yes'
else
commandName="$inputVal"
gotCommand='yes'
fi
else else
commandName="$inputVal" if [ "$commandName" = 'replace' ]; then # Replace an existing file
gotCommand='yes' counter=0
fi while [ "$counter" -lt "${#conffileList[@]}" ]; do
else if [ "$inputVal" = "${conffileList[$counter]}" ]; then
if [ "$commandName" = 'replace' ]; then # Replace an existing file mv "$inputVal.dpkg-dist" "$inputVal"
counter=0 break
while [ "$counter" -lt "${#conffileList[@]}" ]; do fi
if [ "$inputVal" = "${conffileList[$counter]}" ]; then counter=$((counter+1))
mv "$inputVal.dpkg-dist" "$inputVal" done
break elif [ "$commandName" = 'keep' ]; then # Keep an existing file
fi counter=0
counter=$((counter+1)) while [ "$counter" -lt "${#conffileList[@]}" ]; do
done if [ "$inputVal" = "${conffileList[$counter]}" ]; then
elif [ "$commandName" = 'keep' ]; then # Keep an existing file rm "$inputVal.dpkg-dist"
counter=0 break
while [ "$counter" -lt "${#conffileList[@]}" ]; do fi
if [ "$inputVal" = "${conffileList[$counter]}" ]; then counter=$((counter+1))
rm "$inputVal.dpkg-dist" done
break fi
fi gotCommand='no'
counter=$((counter+1))
done
fi fi
gotCommand='no' done
fi fi
done
echo 'Checking release status...' echo 'Checking release status...'
@ -133,36 +136,52 @@ elif [ "$1" = 'doupdate' ]; then
releaseYear="$(cut -d'.' -f1 <<< "$releaseCode")"; releaseYear="$(cut -d'.' -f1 <<< "$releaseCode")";
releaseMonth="$(cut -d'.' -f2 <<< "$releaseCode")"; releaseMonth="$(cut -d'.' -f2 <<< "$releaseCode")";
metaReleaseData="$(curl https://changelogs.ubuntu.com/meta-release)"; metaReleaseData="$(curl https://changelogs.ubuntu.com/meta-release)";
nextReleaseMonth=''; #nextReleaseMonth='';
nextReleaseYear=''; #nextReleaseYear='';
nextLTSReleaseMonth=''; #nextLTSReleaseMonth='';
nextLTSReleaseYear=''; #nextLTSReleaseYear='';
if ((releaseMonth == 4)); then while true; do
nextReleaseMonth=((releaseMonth + 6)); if ((releaseMonth == 4)); then
nextReleaseYear="$releaseYear"; releaseMonth='10';
if (((releaseYear % 2) == 0)); then else
nextLTSReleaseMonth='04'; releaseMonth='04';
nextLTSReleaseYear=((releaseYear + 2)); ((releaseYear++));
fi fi
else if isReleaseSupported "$releaseYear" "$releaseMonth" "$metaReleaseData"; then
nextReleaseMonth="$releaseMonth";
nextReleaseYear=((releaseYear + 1));
fi
if [ -n "$nextLTSReleaseYear" ]; then
if isReleaseSupported "$nextLTSReleaseYear" "$nextLTSReleaseMonth" "$metaReleaseData"; then
echo 'Lubuntu Update !!! NEW RELEASE'; echo 'Lubuntu Update !!! NEW RELEASE';
echo "$nextLTSReleaseYear.$nextLTSReleaseMonth"; echo "$releaseYear.$releaseMonth";
break;
fi fi
fi done
if ! (((nextReleaseYear == nextLTSReleaseYear) && (nextReleaseMonth == nextLTSReleaseMonth))); then # if ((releaseMonth == 4)); then
if isReleaseSupported "$nextReleaseYear" "$nextReleaseMonth" "$metaReleaseData"; then # nextReleaseMonth=$((releaseMonth + 6));
echo 'Lubuntu Update !!! NEW RELEASE'; # nextReleaseYear="$releaseYear";
echo "$nextReleaseYear.$nextReleaseMonth"; # if (((releaseYear % 2) == 0)); then
fi # nextLTSReleaseMonth='04';
fi # nextLTSReleaseYear=$((releaseYear + 2));
# fi
# else
# nextReleaseMonth="$releaseMonth";
# nextReleaseYear=$((releaseYear + 1));
# fi
#
# if [ -n "$nextLTSReleaseYear" ]; then
# if isReleaseSupported "$nextLTSReleaseYear" "$nextLTSReleaseMonth" "$metaReleaseData"; then
# echo 'Lubuntu Update !!! NEW RELEASE';
# echo "$nextLTSReleaseYear.$nextLTSReleaseMonth";
# fi
# fi
#
# if ! (((nextReleaseYear == nextLTSReleaseYear) && (nextReleaseMonth == nextLTSReleaseMonth))); then
# if isReleaseSupported "$nextReleaseYear" "$nextReleaseMonth" "$metaReleaseData"; then
# echo 'Lubuntu Update !!! NEW RELEASE';
# echo "$nextReleaseYear.$nextReleaseMonth";
# else
# echo "Unsupported release: $nextReleaseYear.$nextReleaseMonth";
# fi
# fi
echo 'Update installation complete.' echo 'Update installation complete.'
elif [ "$1" = 'doReleaseUpgrade' ]; then elif [ "$1" = 'doReleaseUpgrade' ]; then

@ -25,7 +25,7 @@ MainWindow::MainWindow(QWidget *parent)
connect(aptManager, &AptManager::progressUpdated, this, &MainWindow::onProgressUpdate); connect(aptManager, &AptManager::progressUpdated, this, &MainWindow::onProgressUpdate);
connect(aptManager, &AptManager::logLineReady, this, &MainWindow::onLogLineReady); connect(aptManager, &AptManager::logLineReady, this, &MainWindow::onLogLineReady);
connect(aptManager, &AptManager::conffileListReady, this, &MainWindow::onConffileListReady); connect(aptManager, &AptManager::conffileListReady, this, &MainWindow::onConffileListReady);
connect(aptManager, &AptManager::newLtsRelease, this, &MainWindow::onNewRelease); connect(aptManager, &AptManager::newRelease, this, &MainWindow::onNewRelease);
} }
MainWindow::~MainWindow() MainWindow::~MainWindow()
@ -144,7 +144,9 @@ void MainWindow::onUpdateCompleted()
ui->progressBar->setVisible(false); ui->progressBar->setVisible(false);
ui->statLabel->setText(tr("Update installation complete.")); ui->statLabel->setText(tr("Update installation complete."));
emit updatesInstalled(); // this tells the orchestrator to hide the tray icon emit updatesInstalled(); // this tells the orchestrator to hide the tray icon
handleNewReleases(); if (releaseCodes.count() > 0) {
handleNewReleases();
}
} }
void MainWindow::onCheckUpdatesCompleted() void MainWindow::onCheckUpdatesCompleted()

@ -26,7 +26,7 @@ Orchestrator::Orchestrator(QObject *parent)
bool success = configFile.open(QFile::ReadOnly); bool success = configFile.open(QFile::ReadOnly);
if (success) { if (success) {
char lineBuf[2048]; char lineBuf[2048];
while (configFile.canReadLine()) { while (!configFile.atEnd()) {
configFile.readLine(lineBuf, 2048); configFile.readLine(lineBuf, 2048);
QString line(lineBuf); QString line(lineBuf);
line = line.trimmed(); line = line.trimmed();
@ -107,7 +107,7 @@ void Orchestrator::onNewReleaseAvailable(QStringList releaseCodes)
QString druType; QString druType;
if (success) { if (success) {
char lineBuf[2048]; char lineBuf[2048];
while (druTypeFile.canReadLine()) { while (!druTypeFile.atEnd()) {
druTypeFile.readLine(lineBuf, 2048); druTypeFile.readLine(lineBuf, 2048);
QString line(lineBuf); QString line(lineBuf);
line = line.trimmed(); line = line.trimmed();
@ -125,6 +125,9 @@ void Orchestrator::onNewReleaseAvailable(QStringList releaseCodes)
break; break;
} }
} }
} else {
druType="normal";
druTypeFile.close();
} }
for (int i = 0;i < releaseCodes.count();i++) { for (int i = 0;i < releaseCodes.count();i++) {

Loading…
Cancel
Save