[tor-commits] [vidalia/master] Automigrate TorExecutable, Torrc and DataDirectory to the new relative path handling

chiiph at torproject.org chiiph at torproject.org
Tue May 29 00:17:55 UTC 2012


commit 6bcd0c1a346fa68e07564c6dc8dde1231f980979
Author: Tomás Touceda <chiiph at torproject.org>
Date:   Mon May 28 20:49:30 2012 -0300

    Automigrate TorExecutable, Torrc and DataDirectory to the new relative path handling
---
 changes/settings_automigration |    2 +
 src/vidalia/MainWindow.cpp     |   46 +++++++++++++++++++++++++++++++++++++--
 2 files changed, 45 insertions(+), 3 deletions(-)

diff --git a/changes/settings_automigration b/changes/settings_automigration
new file mode 100644
index 0000000..b832047
--- /dev/null
+++ b/changes/settings_automigration
@@ -0,0 +1,2 @@
+  o Automigrate TorExecutable, Torrc and DataDirectory config options
+    to the new relative path handling.
\ No newline at end of file
diff --git a/src/vidalia/MainWindow.cpp b/src/vidalia/MainWindow.cpp
index acf7bdd..85bc62e 100644
--- a/src/vidalia/MainWindow.cpp
+++ b/src/vidalia/MainWindow.cpp
@@ -1066,9 +1066,22 @@ MainWindow::start()
   }
 
   QString torrc = settings.getTorrc();
-  if(QDir(QFileInfo(torrc).filePath()).isRelative())
+  QFileInfo torrcInfo(torrc);
+
+  if(QDir(torrcInfo.filePath()).isRelative()) {
     torrc = QCoreApplication::applicationDirPath() + "/" + torrc;
 
+    QFileInfo newTorrcInfo(torrc);
+    if(!newTorrcInfo.exists() and torrcInfo.exists()) {
+      torrc = QDir(QCoreApplication::applicationDirPath()).relativeFilePath(torrcInfo.absoluteFilePath());
+      vWarn("Automigrating configuration for Torrc:\nOld path: %1\nNew path: %2")
+        .arg(newTorrcInfo.filePath())
+        .arg(torrc);
+      settings.setTorrc(torrc);
+      torrc = QCoreApplication::applicationDirPath() + "/" + torrc;
+    }
+  }
+
   if(settings.bootstrap()) {
     QString boottorrc = settings.bootstrapFrom();
     vNotice(tr("Bootstrapping torrc from %1 to %2")
@@ -1089,9 +1102,22 @@ MainWindow::start()
 
   /* Specify Tor's data directory, if different from the default */
   QString dataDirectory = settings.getDataDirectory();
-  if(QDir(dataDirectory).isRelative())
+  QFileInfo dataDirectoryInfo(dataDirectory);
+
+  if(QDir(dataDirectory).isRelative()) {
     dataDirectory = QCoreApplication::applicationDirPath() + "/" + dataDirectory;
 
+    QFileInfo newDataDirectoryInfo(dataDirectory);
+    if(!newDataDirectoryInfo.exists() and dataDirectoryInfo.exists()) {
+      dataDirectory = QDir(QCoreApplication::applicationDirPath()).relativeFilePath(dataDirectoryInfo.absoluteFilePath());
+      vWarn("Automigrating configuration for DataDirectory:\nOld path: %1\nNew path: %2")
+        .arg(newDataDirectoryInfo.absoluteFilePath())
+        .arg(dataDirectory);
+      settings.setDataDirectory(dataDirectory);
+      dataDirectory = QCoreApplication::applicationDirPath() + "/" + dataDirectory;
+    }
+  }
+
   QString expDataDirectory = QDir(expand_filename(dataDirectory)).canonicalPath();
   if (!dataDirectory.isEmpty())
     args << "DataDirectory" << expDataDirectory;
@@ -1147,8 +1173,22 @@ MainWindow::start()
   _isIntentionalExit = true;
   /* Kick off the Tor process */
   QString torExecutable = settings.getExecutable();
-  if(QDir(QFileInfo(torExecutable).filePath()).isRelative())
+  QFileInfo torExecutableInfo(torExecutable);
+
+  if(QDir(torExecutableInfo.filePath()).isRelative()) {
     torExecutable = QCoreApplication::applicationDirPath() + "/" + torExecutable;
+
+    QFileInfo newTorExecutableInfo(torExecutable);
+    if(!newTorExecutableInfo.exists() and torExecutableInfo.exists()) {
+      torExecutable = QDir(QCoreApplication::applicationDirPath()).relativeFilePath(torExecutableInfo.absoluteFilePath());
+      vWarn("Automigrating configuration for TorExecutable:\nOld path: %1\nNew path: %2")
+        .arg(newTorExecutableInfo.filePath())
+        .arg(torExecutable);
+      settings.setExecutable(torExecutable);
+      torExecutable = QCoreApplication::applicationDirPath() + "/" + torExecutable;
+    }
+  }
+
   _torControl->start(torExecutable, args);
 }
 





More information about the tor-commits mailing list