From 5edf5e8facd090359dfa40eaf858b7d40ead3fa4 Mon Sep 17 00:00:00 2001 From: Ricardo Wurmus Date: Sat, 19 Dec 2020 00:57:26 +0100 Subject: [PATCH 4/7] handleConnection: Switch R version when switching projects. * src/cpp/session/SessionHttpMethods.cpp (handleConnection): Switch to the recorded R version when switching to a project; when closing a project switch back to the default. --- src/cpp/session/SessionHttpMethods.cpp | 32 ++++++++++++++++--- .../studio/client/projects/Projects.java | 3 +- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/cpp/session/SessionHttpMethods.cpp b/src/cpp/session/SessionHttpMethods.cpp index a90648c23c..e5d1cabcc2 100644 --- a/src/cpp/session/SessionHttpMethods.cpp +++ b/src/cpp/session/SessionHttpMethods.cpp @@ -2,6 +2,7 @@ * SessionHttpMethods.hpp * * Copyright (C) 2022 by Posit Software, PBC + * Copyright (C) 2020-2025 Ricardo Wurmus * * Unless you have received this program directly from Posit Software pursuant * to the terms of a commercial license agreement with Posit Software, then @@ -692,6 +693,33 @@ void handleConnection(boost::shared_ptr ptrConnection, activeSession().setWorkingDir(projDir); } + RVersionSettings verSettings( + options().userScratchPath(), + FilePath(options().getOverlayOption( + kSessionSharedStoragePath))); + + // Get the project's R version and set it for the active session. + if ((switchToProject != kProjectNone) && + (verSettings.restoreProjectRVersion())) + { + FilePath projFile = resolveAliasedPath(switchToProject); + std::string projDir = createAliasedPath(projFile.getParent()); + std::string version, rHome, label; + verSettings.readProjectLastRVersion(projDir, + module_context::sharedProjectScratchPath(), + &version, + &rHome, + &label); + activeSession().setRVersion(version, rHome, label); + } + // Reset version to default. + else + { + activeSession().setRVersion(verSettings.defaultRVersion(), + verSettings.defaultRVersionHome(), + verSettings.defaultRVersionLabel()); + } + if (options().switchProjectsWithUrl()) { r_util::SessionScope scope; @@ -744,10 +772,6 @@ void handleConnection(boost::shared_ptr ptrConnection, { FilePath projFile = resolveAliasedPath(switchToProject); std::string projDir = createAliasedPath(projFile.getParent()); - RVersionSettings verSettings( - options().userScratchPath(), - FilePath(options().getOverlayOption( - kSessionSharedStoragePath))); verSettings.setProjectLastRVersion(projDir, module_context::sharedProjectScratchPath(), version, diff --git a/src/gwt/src/org/rstudio/studio/client/projects/Projects.java b/src/gwt/src/org/rstudio/studio/client/projects/Projects.java index ec76b2cb55..f8a5b7f3b1 100644 --- a/src/gwt/src/org/rstudio/studio/client/projects/Projects.java +++ b/src/gwt/src/org/rstudio/studio/client/projects/Projects.java @@ -1136,7 +1136,8 @@ public class Projects implements OpenProjectFileEvent.Handler, { // perform quit applicationQuit_.performQuit(null, saveChanges, - input.getProjectFile().getPath()); + input.getProjectFile().getPath(), + input.getRVersion()); } }; -- 2.52.0