forked from qt-creator/qt-creator
Utils: improve failed file saving behavior
Remove temporary files left after fail. Set error string for locked file. Task-number: QTCREATORBUG-15449 Change-Id: Ibc8b01a4ea47870c29493a69718db929070ac13f Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
This commit is contained in:
@@ -437,8 +437,13 @@ bool FileSaverBase::write(const QByteArray &bytes)
|
|||||||
bool FileSaverBase::setResult(bool ok)
|
bool FileSaverBase::setResult(bool ok)
|
||||||
{
|
{
|
||||||
if (!ok && !m_hasError) {
|
if (!ok && !m_hasError) {
|
||||||
m_errorString = tr("Cannot write file %1. Disk full?").arg(
|
if (!m_file->errorString().isEmpty()) {
|
||||||
QDir::toNativeSeparators(m_fileName));
|
m_errorString = tr("Cannot write file %1: %2").arg(
|
||||||
|
QDir::toNativeSeparators(m_fileName), m_file->errorString());
|
||||||
|
} else {
|
||||||
|
m_errorString = tr("Cannot write file %1. Disk full?").arg(
|
||||||
|
QDir::toNativeSeparators(m_fileName));
|
||||||
|
}
|
||||||
m_hasError = true;
|
m_hasError = true;
|
||||||
}
|
}
|
||||||
return ok;
|
return ok;
|
||||||
|
@@ -113,10 +113,19 @@ bool SaveFile::commit()
|
|||||||
QString finalFileName
|
QString finalFileName
|
||||||
= FileUtils::resolveSymlinks(FileName::fromString(m_finalFileName)).toString();
|
= FileUtils::resolveSymlinks(FileName::fromString(m_finalFileName)).toString();
|
||||||
QString bakname = finalFileName + QLatin1Char('~');
|
QString bakname = finalFileName + QLatin1Char('~');
|
||||||
QFile::remove(bakname); // Kill old backup
|
|
||||||
QFile::rename(finalFileName, bakname); // Backup current file
|
if (QFile::exists(finalFileName)) {
|
||||||
|
QFile::remove(bakname); // Kill old backup
|
||||||
|
// Try to back up current file
|
||||||
|
if (!QFile::rename(finalFileName, bakname)) {
|
||||||
|
remove();
|
||||||
|
setErrorString(tr("File might be locked."));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (!rename(finalFileName)) { // Replace current file
|
if (!rename(finalFileName)) { // Replace current file
|
||||||
QFile::rename(bakname, finalFileName); // Rollback to current file
|
QFile::rename(bakname, finalFileName); // Rollback to current file
|
||||||
|
remove();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!m_backup)
|
if (!m_backup)
|
||||||
|
Reference in New Issue
Block a user