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 b31dfc6f120c01ff6612b682b56d92449eb82ef8 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 2b313f2b77..19669a3623 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
@@ -711,6 +712,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;
@@ -763,10 +791,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 0ab01f9945..26c332b58d 100644
--- a/src/gwt/src/org/rstudio/studio/client/projects/Projects.java
+++ b/src/gwt/src/org/rstudio/studio/client/projects/Projects.java
@@ -1131,7 +1131,8 @@ public class Projects implements OpenProjectFileEvent.Handler,
{
// perform quit
applicationQuit_.performQuit(null, saveChanges,
- input.getProjectFile().getPath());
+ input.getProjectFile().getPath(),
+ input.getRVersion());
}
};
--
2.52.0
|