summarylogtreecommitdiffstats
path: root/codelite-fsw-symlink.patch
blob: bac89f38102be84f7c38c4a794b93beba9109a41 (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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
diff --git CodeLite/clFilesCollector.cpp CodeLite/clFilesCollector.cpp
index 6bbdc24c5..462fcdc13 100644
--- CodeLite/clFilesCollector.cpp
+++ CodeLite/clFilesCollector.cpp
@@ -9,6 +9,12 @@
 #include <wx/filename.h>
 #include <wx/tokenzr.h>
 
+
+static wxString RealPath(const wxString& fullpath)
+{
+    return fullpath;
+}
+
 clFilesScanner::clFilesScanner() {}
 
 clFilesScanner::~clFilesScanner() {}
@@ -102,12 +108,12 @@ size_t clFilesScanner::Scan(const wxString& rootFolder, std::vector<wxString>& f
 #if defined(__FreeBSD__)
                     ((FileUtils::IsSymlink(fullpath) && excludeFolders.count(FileUtils::RealPath(fullpath)))
 #else
-                    (excludeFolders.count(FileUtils::RealPath(fullpath))
+                    (excludeFolders.count(RealPath(fullpath))
 #endif
                      || IsRelPathContainedInSpec(rootFolder, fullpath, excludeFolders)));
             if(isDirectory && !isExcludeDir) {
                 // Traverse into this folder
-                wxString realPath = FileUtils::RealPath(fullpath);
+                wxString realPath = RealPath(fullpath);
                 if(Visited.insert(realPath).second) {
                     Q.push(fullpath);
                 }
@@ -138,8 +144,8 @@ size_t clFilesScanner::Scan(const wxString& rootFolder, const wxString& filespec
     std::queue<wxString> Q;
     std::unordered_set<wxString> Visited;
 
-    Q.push(FileUtils::RealPath(rootFolder));
-    Visited.insert(FileUtils::RealPath(rootFolder));
+    Q.push(RealPath(rootFolder));
+    Visited.insert(RealPath(rootFolder));
 
     size_t nCount = 0;
     while(!Q.empty()) {
@@ -163,7 +169,7 @@ size_t clFilesScanner::Scan(const wxString& rootFolder, const wxString& filespec
             if(isDirectory /* a folder */ &&
                !FileUtils::WildMatch(excludeFoldersSpecArr, filename) /* does not match the exclude folder spec */) {
                 // Traverse into this folder
-                wxString real_path = FileUtils::RealPath(fullpath);
+                wxString real_path = RealPath(fullpath);
                 if(Visited.count(real_path) == 0) {
                     Visited.insert(real_path);
                     Q.push(fullpath);
@@ -244,8 +250,8 @@ void clFilesScanner::ScanWithCallbacks(const wxString& rootFolder, std::function
     std::vector<wxString> Q;
     std::unordered_set<wxString> Visited;
 
-    Q.push_back(FileUtils::RealPath(rootFolder));
-    Visited.insert(FileUtils::RealPath(rootFolder));
+    Q.push_back(RealPath(rootFolder));
+    Visited.insert(RealPath(rootFolder));
 
     while(!Q.empty()) {
         wxString dirpath = Q.front();
@@ -284,7 +290,7 @@ void clFilesScanner::ScanWithCallbacks(const wxString& rootFolder, std::function
 
                 if(on_folder_cb(fullpath)) {
                     // Traverse into this folder
-                    wxString real_path = FileUtils::RealPath(fullpath);
+                    wxString real_path = RealPath(fullpath);
                     if(Visited.insert(real_path).second) {
                         Q.push_back(fullpath);
                     }
@@ -298,4 +304,4 @@ void clFilesScanner::ScanWithCallbacks(const wxString& rootFolder, std::function
         // notify about this batch of files
         on_file_cb(files);
     }
-}
\ No newline at end of file
+}
diff --git LiteEditor/mainbook.cpp LiteEditor/mainbook.cpp
index 9798c7189..e457d8c2d 100644
--- LiteEditor/mainbook.cpp
+++ LiteEditor/mainbook.cpp
@@ -440,7 +440,7 @@ int MainBook::FindEditorIndexByFullPath(const wxString& fullpath)
 
 #ifdef __WXGTK__
     // On gtk either fileName or the editor filepath (or both) may be (or their paths contain) symlinks
-    wxString fileNameDest = CLRealPath(fullpath);
+    wxString fileNameDest = FileUtils::RealPath(fullpath);
 #endif
 
     for(size_t i = 0; i < m_book->GetPageCount(); i++) {
@@ -474,7 +474,7 @@ int MainBook::FindEditorIndexByFullPath(const wxString& fullpath)
 
 #if defined(__WXGTK__)
                 // Try again, dereferencing the editor fpath
-                wxString editorDest = CLRealPath(unixStyleFile);
+                wxString editorDest = FileUtils::RealPath(unixStyleFile);
                 if(editorDest.Cmp(fullpath) == 0 || editorDest.Cmp(fileNameDest) == 0) {
                     return i;
                 }
@@ -568,6 +568,13 @@ clEditor* MainBook::OpenFile(const wxString& file_name, const wxString& projectN
                              int bmp /*= wxNullBitmap*/, const wxString& tooltip /* wxEmptyString */)
 {
     wxFileName fileName(CLRealPath(file_name));
+
+    if (fileName.IsRelative()) {
+        if (clWorkspaceManager::Get().IsWorkspaceOpened()) {
+            wxFileName wsPath = clWorkspaceManager::Get().GetWorkspace()->GetDir();
+            fileName.MakeAbsolute(wsPath.GetFullPath());
+        }
+    }
     fileName.MakeAbsolute();
 
 #ifdef __WXMSW__
@@ -1752,7 +1759,7 @@ WelcomePage* MainBook::GetOrCreateWelcomePage()
 clEditor* MainBook::OpenFileAsync(const wxString& file_name, std::function<void(IEditor*)>&& callback)
 {
     wxString real_path = CLRealPath(file_name);
-    auto editor = FindEditor(real_path);
+    auto editor = FindEditor(FileUtils::RealPath(real_path));
     if(editor) {
         push_callback(std::move(callback), real_path);
         bool is_active = GetActiveEditor() == editor;
diff --git Plugin/globals.cpp Plugin/globals.cpp
index 68e87c0b1..2800d4b44 100644
--- Plugin/globals.cpp
+++ Plugin/globals.cpp
@@ -1220,7 +1220,7 @@ wxFileName wxReadLink(const wxFileName& filename)
     if(wxIsFileSymlink(filename)) {
 #if defined(__WXGTK__)
         // Use 'realpath' on Linux, otherwise this breaks on relative symlinks, and (untested) on symlinks-to-symlinks
-        return wxFileName(CLRealPath(filename.GetFullPath()));
+        return wxFileName(FileUtils::RealPath(filename.GetFullPath()));
 
 #else  // OSX
         wxFileName realFileName;
@@ -1243,7 +1243,7 @@ wxFileName wxReadLink(const wxFileName& filename)
 wxString CLRealPath(const wxString& filepath) // This is readlink on steroids: it also makes-absolute, and dereferences
                                               // any symlinked dirs in the path
 {
-    return FileUtils::RealPath(filepath);
+    return filepath;
 }
 
 int wxStringToInt(const wxString& str, int defval, int minval, int maxval)