summaryrefslogtreecommitdiff
path: root/patches/rstudio-server-multi-version/0004-handleConnection-Switch-R-version-when-switching-pro.patch
blob: 3531ed6972165daace9dc089ab0dbaabc461e1d5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
From 296b8aa60025f88f34167f35d257cc401352d231 Mon Sep 17 00:00:00 2001
From: Ricardo Wurmus <rekado@elephly.net>
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 01e3ffb12f..133ae4abad 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
@@ -734,6 +735,33 @@ void handleConnection(boost::shared_ptr<HttpConnection> 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;
@@ -789,10 +817,6 @@ void handleConnection(boost::shared_ptr<HttpConnection> 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 b369c97c24..066a0c9db0 100644
--- a/src/gwt/src/org/rstudio/studio/client/projects/Projects.java
+++ b/src/gwt/src/org/rstudio/studio/client/projects/Projects.java
@@ -1184,7 +1184,8 @@ public class Projects implements OpenProjectFileEvent.Handler,
                         {
                            // perform quit
                            applicationQuit_.performQuit(null, saveChanges,
-                                 input.getProjectFile().getPath());
+                                                        input.getProjectFile().getPath(),
+                                                        input.getRVersion());
                         }
                      };
 
-- 
2.54.0