summaryrefslogtreecommitdiff
path: root/patches/rstudio-server-multi-version/0001-handleClientInit-Store-R-versions-in-sessionInfo.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/rstudio-server-multi-version/0001-handleClientInit-Store-R-versions-in-sessionInfo.patch')
-rw-r--r--patches/rstudio-server-multi-version/0001-handleClientInit-Store-R-versions-in-sessionInfo.patch75
1 files changed, 75 insertions, 0 deletions
diff --git a/patches/rstudio-server-multi-version/0001-handleClientInit-Store-R-versions-in-sessionInfo.patch b/patches/rstudio-server-multi-version/0001-handleClientInit-Store-R-versions-in-sessionInfo.patch
new file mode 100644
index 0000000..7e64e06
--- /dev/null
+++ b/patches/rstudio-server-multi-version/0001-handleClientInit-Store-R-versions-in-sessionInfo.patch
@@ -0,0 +1,75 @@
1From 6a8348988fcd961a67d709aa37c5defd7159b27b Mon Sep 17 00:00:00 2001
2From: Ricardo Wurmus <rekado@elephly.net>
3Date: Fri, 18 Dec 2020 10:26:44 +0100
4Subject: [PATCH 1/7] handleClientInit: Store R versions in sessionInfo.
5
6This unlocks the multi-version feature needed to initialize version
7selection widgets.
8
9* src/cpp/session/SessionClientInit.cpp (handleClientInit): Read
10version entries from /etc/rstudio/r-versions via the RVersionsScanner.
11Add discovered entries to a JSON array at the sessionInfo object
12r_versions_info->available_r_versions.
13---
14 src/cpp/session/SessionClientInit.cpp | 31 ++++++++++++++++++++++-----
15 1 file changed, 26 insertions(+), 5 deletions(-)
16
17diff --git a/src/cpp/session/SessionClientInit.cpp b/src/cpp/session/SessionClientInit.cpp
18index e4b3b7dd71..52523fc896 100644
19--- a/src/cpp/session/SessionClientInit.cpp
20+++ b/src/cpp/session/SessionClientInit.cpp
21@@ -2,6 +2,7 @@
22 * SessionClientInit.hpp
23 *
24 * Copyright (C) 2021 by RStudio, PBC
25+ * Copyright (C) 2020 Ricardo Wurmus
26 *
27 * Unless you have received this program directly from RStudio pursuant
28 * to the terms of a commercial license agreement with RStudio, then
29@@ -62,6 +63,8 @@
30 #include <core/http/CSRFToken.hpp>
31 #include <core/system/Environment.hpp>
32
33+#include <server_core/RVersionsScanner.hpp>
34+
35 #include <session/SessionConsoleProcess.hpp>
36 #include <session/SessionClientEventService.hpp>
37 #include <session/SessionHttpConnection.hpp>
38@@ -507,11 +510,29 @@ void handleClientInit(const boost::function<void()>& initFunction,
39
40 sessionInfo["multi_session"] = options.multiSession();
41
42- json::Object rVersionsJson;
43- rVersionsJson["r_version"] = module_context::rVersion();
44- rVersionsJson["r_version_label"] = module_context::rVersionLabel();
45- rVersionsJson["r_home_dir"] = module_context::rHomeDir();
46- sessionInfo["r_versions_info"] = rVersionsJson;
47+ // Read versions from /etc/rstudio/r-versions
48+ json::Array availableRVersionsJson;
49+ std::vector<r_util::RVersion> versions = RVersionsScanner().getRVersions();
50+ for (r_util::RVersion& rEntry : versions)
51+ {
52+ json::Object rVersionJson;
53+ rVersionJson["version"] = rEntry.number();
54+ rVersionJson["label"] = rEntry.label();
55+ rVersionJson["r_home"] = rEntry.homeDir().getAbsolutePath();
56+
57+ availableRVersionsJson.push_back(rVersionJson);
58+ }
59+
60+ json::Object rVersionsInfo;
61+ rVersionsInfo["available_r_versions"] = availableRVersionsJson;
62+ rVersionsInfo["r_version"] = module_context::rVersion();
63+ rVersionsInfo["r_version_label"] = module_context::rVersionLabel();
64+ rVersionsInfo["r_home"] = module_context::rHomeDir();
65+ rVersionsInfo["default_r_version"] = module_context::rVersion();
66+ rVersionsInfo["default_r_version_label"] = module_context::rVersionLabel();
67+ rVersionsInfo["default_r_home_dir"] = module_context::rHomeDir();
68+ rVersionsInfo["restore_project_r_version"] = true;
69+ sessionInfo["r_versions_info"] = rVersionsInfo;
70
71 sessionInfo["show_user_home_page"] = options.showUserHomePage();
72 sessionInfo["user_home_page_url"] = json::Value();
73--
742.31.1
75