author | ar <ar> | 2004-03-17 23:00:44 (UTC) |
---|---|---|
committer | ar <ar> | 2004-03-17 23:00:44 (UTC) |
commit | 091236bff19166653278db76082d2735d6059000 (patch) (side-by-side diff) | |
tree | 8c33d0a125779ea6702095fba3a608a6bd766e07 | |
parent | 941e088d13f2193153a75fc81dcf9ea3cd8943d4 (diff) | |
download | opie-091236bff19166653278db76082d2735d6059000.zip opie-091236bff19166653278db76082d2735d6059000.tar.gz opie-091236bff19166653278db76082d2735d6059000.tar.bz2 |
- read old backup files from opie 1.0.x
busybox tar don't feature --label so i abuse Application/backup/exclude file to identifie an backup as a new one. exclude will create by this backup application. see revision 1.28
-rw-r--r-- | noncore/settings/backup/backuprestore.cpp | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/noncore/settings/backup/backuprestore.cpp b/noncore/settings/backup/backuprestore.cpp index 87b7966..58e5c71 100644 --- a/noncore/settings/backup/backuprestore.cpp +++ b/noncore/settings/backup/backuprestore.cpp @@ -207,97 +207,97 @@ void BackupAndRestore::scanForApplicationSettings() if ( ( fi->fileName() != "." ) && ( fi->fileName() != ".." ) ) { QListViewItem *newItem = new QListViewItem(applicationSettings, fi->fileName()); selectItem(newItem); } ++it; } } /** * The "Backup" button has been pressed. Get a list of all of the files that * should be backed up. If there are no files, emit and error and exit. * Determine the file name to store the backup in. Backup the file(s) using * tar and gzip --best. Report failure or success */ void BackupAndRestore::backup() { QString backupFiles; if(getBackupFiles(backupFiles, NULL) == 0) { QMessageBox::critical(this, "Message", "No items selected.",QString("Ok") ); return; } setCaption(tr("Backup and Restore... working...")); QString outputFile = backupLocations[storeToLocation->currentText()]; QDateTime datetime = QDateTime::currentDateTime(); QString dateString = QString::number( datetime.date().year() ) + QString::number( datetime.date().month() ).rightJustify(2, '0') + QString::number( datetime.date().day() ).rightJustify(2, '0'); outputFile += "/" + dateString; QString t = outputFile; int c = 1; while(QFile::exists(outputFile + EXTENSION)) { outputFile = t + QString("%1").arg(c); c++; } // We execute tar and compressing its output with gzip.. // The error output will be written into a temp-file which could be provided // for debugging.. qDebug( "Storing file: %s", outputFile.latin1() ); outputFile += EXTENSION; - QString commandLine = QString( "cd %1 && (tar -X %1 -cz %2 -f %3 ) 2> %4" ).arg( QDir::homeDirPath() ) + QString commandLine = QString( "cd %1 && (tar -X %1 -cz %2 Applications/backup/exclude -f %3 ) 2> %4" ).arg( QDir::homeDirPath() ) .arg( getExcludeFile() ) .arg( backupFiles ) .arg( outputFile.latin1() ) .arg( tempFileName.latin1() ); qDebug( commandLine ); int r = system( commandLine ); if(r != 0) { perror("Error: "); QString errorMsg= tr( "Error from System:\n" ) + (QString)strerror( errno ); switch( QMessageBox::critical(this, tr( "Message" ), tr( "Backup Failed!" ) + "\n" + errorMsg, QString( tr( "Ok" ) ), QString( tr( "Details" ) ) ) ) { case 1: qWarning("Details pressed !"); ErrorDialog* pErrDialog = new ErrorDialog( this, NULL, true ); QFile errorFile( tempFileName ); if ( errorFile.open(IO_ReadOnly) ) { QTextStream t( &errorFile ); QString s; while ( !t.eof() ) { // until end of file... s += t.readLine(); // line of text excluding '\n' } errorFile.close(); pErrDialog->m_textarea->setText( s ); } else { pErrDialog->m_textarea->setText( "Unable to open File: /tmp/backup.er" ); } QPEApplication::execDialog( pErrDialog ); delete pErrDialog; break; } setCaption(tr("Backup and Restore.. Failed !!")); return; } else { QMessageBox::information(this, tr( "Message" ), tr( "Backup Successful." ), QString(tr( "Ok" ) ) ); @@ -376,136 +376,153 @@ void BackupAndRestore::rescanFolder(QString directory) if(!d.exists()) return; d.setFilter( QDir::Files | QDir::Hidden | QDir::Dirs); const QFileInfoList *list = d.entryInfoList(); QFileInfoListIterator it( *list ); QFileInfo *file; while ( (file=it.current()) ) { // for each file... // If it is a dir and not .. or . then add it as a tab and go down. if(file->isDir()) { if(file->fileName() != ".." && file->fileName() != ".") { rescanFolder(directory + "/" + file->fileName()); } } else { // If it is a backup file add to list. if(file->fileName().contains(EXTENSION)) (void)new QListViewItem(restoreList, file->fileName()); } ++it; } } /** * Restore a backup file. * Report errors or success */ void BackupAndRestore::restore() { QListViewItem *restoreItem = restoreList->currentItem(); if(!restoreItem) { QMessageBox::critical(this, tr( "Message" ), tr( "Please select something to restore." ),QString( tr( "Ok") ) ); return; } setCaption(tr("Backup and Restore... working...")); QString restoreFile = backupLocations[restoreSource->currentText()]; restoreFile += "/" + restoreItem->text(0); qDebug( restoreFile ); - QString commandLine = QString( "cd %1 && tar -zxf %2 2> %3" ).arg( QDir::homeDirPath() ) + //check if backup file come from opie 1.0.x + + QString commandLine = QString( "tar -tzf %1 | grep Applications/backup/exclude" ).arg( restoreFile.latin1() ); + + int r = system( commandLine ); + + QString startDir; + + if( r != 0 ) //Applications/backup/exclude not found - old backup file + { + startDir = QString( "/" ); + } else + { + startDir = QDir::homeDirPath(); + } + + //unpack backup file + commandLine = QString( "cd %1 && tar -zxf %2 2> %3" ).arg( startDir ) .arg( restoreFile.latin1() ) .arg( tempFileName.latin1() ); qDebug( commandLine ); - int r = system( commandLine ); + r = system( commandLine ); + //error handling if(r != 0) { QString errorMsg= tr( "Error from System:\n" ) + (QString)strerror( errno ); switch( QMessageBox::critical(this, tr( "Message" ), tr( "Restore Failed." ) + "\n" + errorMsg, QString( tr( "Ok") ), QString( tr( "Details" ) ) ) ) { case 1: qWarning("Details pressed !"); ErrorDialog* pErrDialog = new ErrorDialog( this, NULL, true ); QFile errorFile( tempFileName ); if ( errorFile.open(IO_ReadOnly) ) { QTextStream t( &errorFile ); QString s; while ( !t.eof() ) { // until end of file... s += t.readLine(); // line of text excluding '\n' } errorFile.close(); pErrDialog->m_textarea->setText( s ); } else { pErrDialog->m_textarea->setText( tr( "Unable to open File: %1" ).arg( "/tmp/backup.er" ) ); } QPEApplication::execDialog( pErrDialog ); delete pErrDialog; setCaption(tr("Backup and Restore.. Failed !!")); return; break; } } else { QMessageBox::information(this, tr( "Message" ), tr( "Restore Successful." ), QString( tr( "Ok") ) ); } //write restore-location Config config( "BackupAndRestore" ); config.setGroup( "LastLocation" ); config.writeEntry( "LastRestoreLocation", restoreSource->currentText() ); setCaption(tr("Backup and Restore")); } - /** * Check for exclude in Applications/backup * If it does not exist, the function will create the file with *.bck as content * The exclude_files is read by tar and will provide to exclude special files out from backup. * e.g. alle *.bck files (backup-files) will not be backed up by default */ QString BackupAndRestore::getExcludeFile() { QString excludeFileName = Global::applicationFileName( "backup", "exclude" ); if ( !QFile::exists( excludeFileName ) ) { QFile excludeFile( excludeFileName); if ( excludeFile.open( IO_WriteOnly ) == true ) { QTextStream writeStream( &excludeFile ); writeStream << "*.bck" << "\n"; excludeFile.close(); } else { return QString::null; } } return excludeFileName; } // backuprestore.cpp |