Mercurial > repos > public > matlab_path_manager
annotate +mpm/MatlabPathManager.m @ 40:4b009d774e1a
Fix crash
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Mon, 23 Jun 2025 15:25:19 +0200 |
parents | 3156ace843f5 |
children |
rev | line source |
---|---|
16
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
1 classdef MatlabPathManager |
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
2 properties |
39
3156ace843f5
Change name of file containing the paths
Jonatan Werpers <jonatan@werpers.com>
parents:
38
diff
changeset
|
3 projectFileName = 'MatlabPaths'; |
38
16d56bf04117
Change place of storage of the state
Jonatan Werpers <jonatan@werpers.com>
parents:
35
diff
changeset
|
4 prefGroup = 'matlabpathmanager'; |
16
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
5 end |
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
6 |
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
7 methods |
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
8 function obj = MatlabPathManager() |
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
9 end |
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
10 |
24
fdad9fe450c5
Move install location function into the MpM class
Jonatan Werpers <jonatan@werpers.com>
parents:
23
diff
changeset
|
11 function p = installLocation(obj) |
fdad9fe450c5
Move install location function into the MpM class
Jonatan Werpers <jonatan@werpers.com>
parents:
23
diff
changeset
|
12 nameCurrentFile = mfilename('fullpath'); |
fdad9fe450c5
Move install location function into the MpM class
Jonatan Werpers <jonatan@werpers.com>
parents:
23
diff
changeset
|
13 pathParts = split(nameCurrentFile, filesep); |
fdad9fe450c5
Move install location function into the MpM class
Jonatan Werpers <jonatan@werpers.com>
parents:
23
diff
changeset
|
14 |
fdad9fe450c5
Move install location function into the MpM class
Jonatan Werpers <jonatan@werpers.com>
parents:
23
diff
changeset
|
15 p = join(pathParts(1:end-2), filesep); |
fdad9fe450c5
Move install location function into the MpM class
Jonatan Werpers <jonatan@werpers.com>
parents:
23
diff
changeset
|
16 p = p{1}; |
fdad9fe450c5
Move install location function into the MpM class
Jonatan Werpers <jonatan@werpers.com>
parents:
23
diff
changeset
|
17 end |
fdad9fe450c5
Move install location function into the MpM class
Jonatan Werpers <jonatan@werpers.com>
parents:
23
diff
changeset
|
18 |
17
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
19 % Load a given subpath into the state file and the matlab path and do savepath(), atomically |
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
20 function loadSubpath(obj, p) |
38
16d56bf04117
Change place of storage of the state
Jonatan Werpers <jonatan@werpers.com>
parents:
35
diff
changeset
|
21 state = mpm.PersistentState(obj.prefGroup); |
17
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
22 |
18
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
23 addpath(p); |
25
e2c18217aee0
Fix some reference errors
Jonatan Werpers <jonatan@werpers.com>
parents:
24
diff
changeset
|
24 state.subpaths(p) = true; |
23
0b4be0d4e207
Use new class for state management
Jonatan Werpers <jonatan@werpers.com>
parents:
19
diff
changeset
|
25 state.saveState(); |
17
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
26 |
27
05a8b30ee4a7
Make loaded paths persistent across matlab restarts
Jonatan Werpers <jonatan@werpers.com>
parents:
25
diff
changeset
|
27 savepath() % after save state to make sure saved paths are always present in the state |
16
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
28 end |
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
29 |
17
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
30 % Unload a given subpath from the state file and the matlab path and do savepath(), atomically |
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
31 function unloadSubpath(obj, p) |
38
16d56bf04117
Change place of storage of the state
Jonatan Werpers <jonatan@werpers.com>
parents:
35
diff
changeset
|
32 state = mpm.PersistentState(obj.prefGroup); |
17
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
33 |
18
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
34 rmpath(p); |
27
05a8b30ee4a7
Make loaded paths persistent across matlab restarts
Jonatan Werpers <jonatan@werpers.com>
parents:
25
diff
changeset
|
35 savepath() % before save state to make sure saved paths are always present in the state |
25
e2c18217aee0
Fix some reference errors
Jonatan Werpers <jonatan@werpers.com>
parents:
24
diff
changeset
|
36 state.subpaths.remove(p); |
23
0b4be0d4e207
Use new class for state management
Jonatan Werpers <jonatan@werpers.com>
parents:
19
diff
changeset
|
37 state.saveState(); |
17
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
38 end |
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
39 |
35
3a28f6de13c2
Add function to test if a folder is project
Jonatan Werpers <jonatan@werpers.com>
parents:
32
diff
changeset
|
40 function b = isProject(obj, projectFolder) |
3a28f6de13c2
Add function to test if a folder is project
Jonatan Werpers <jonatan@werpers.com>
parents:
32
diff
changeset
|
41 b = exist(fullfile(projectFolder, obj.projectFileName), 'file'); |
3a28f6de13c2
Add function to test if a folder is project
Jonatan Werpers <jonatan@werpers.com>
parents:
32
diff
changeset
|
42 end |
3a28f6de13c2
Add function to test if a folder is project
Jonatan Werpers <jonatan@werpers.com>
parents:
32
diff
changeset
|
43 |
17
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
44 % Read project file in a folder and return cell array of all subpaths |
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
45 function sp = projectSubpaths(obj, projectFolder) |
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
46 try |
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
47 fstr = fileread(fullfile(projectFolder, obj.projectFileName)); |
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
48 catch |
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
49 error('Subpath definition file ''%s'' not found.', obj.projectFileName); |
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
50 end |
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
51 sp = splitlines(strtrim(fstr)); |
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
52 end |
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
53 |
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
54 function s = loadedSubpaths(obj) |
38
16d56bf04117
Change place of storage of the state
Jonatan Werpers <jonatan@werpers.com>
parents:
35
diff
changeset
|
55 state = mpm.PersistentState(obj.prefGroup); |
32
cbeef8175d59
Make .loadedSubpath return paths in the order they appear on the matlab path
Jonatan Werpers <jonatan@werpers.com>
parents:
30
diff
changeset
|
56 s_unordered = state.subpaths.keys(); |
cbeef8175d59
Make .loadedSubpath return paths in the order they appear on the matlab path
Jonatan Werpers <jonatan@werpers.com>
parents:
30
diff
changeset
|
57 |
cbeef8175d59
Make .loadedSubpath return paths in the order they appear on the matlab path
Jonatan Werpers <jonatan@werpers.com>
parents:
30
diff
changeset
|
58 mpath = obj.matlabPath(); |
cbeef8175d59
Make .loadedSubpath return paths in the order they appear on the matlab path
Jonatan Werpers <jonatan@werpers.com>
parents:
30
diff
changeset
|
59 [ok, I] = ismember(s_unordered, mpath); |
40 | 60 s = mpath(sort(I(ok))); |
16
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
61 end |
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
62 |
18
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
63 function ps = matlabPath(obj) |
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
64 ps = split(path(), pathsep); |
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
65 end |
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
66 |
16
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
67 % Load all subpaths for a project |
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
68 function checkin(obj, projectFolder) |
17
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
69 sp = obj.projectSubpaths(projectFolder); |
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
70 |
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
71 for i = 1:length(sp) |
18
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
72 fullSubpath = fullfile(projectFolder, sp{i}); |
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
73 obj.loadSubpath(fullSubpath); |
17
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
74 end |
16
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
75 end |
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
76 |
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
77 % Unload all subpaths for a project |
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
78 function checkout(obj, projectFolder) |
17
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
79 sp = obj.projectSubpaths(projectFolder); |
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
80 |
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
81 for i = 1:length(sp) |
18
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
82 fullSubpath = fullfile(projectFolder, sp{i}); |
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
83 obj.unloadSubpath(fullSubpath); |
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
84 end |
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
85 end |
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
86 |
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
87 % Check if the projects settings are correct |
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
88 % Is the project file correct? |
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
89 % The right version is in the matlab path |
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
90 % The right version is at the top of the path |
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
91 function b = verify(obj, projectFolder) |
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
92 mpath = obj.matlabPath(); |
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
93 sp = obj.projectSubpaths(projectFolder); |
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
94 |
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
95 for i = 1:length(sp) |
30
d9f899b1dfd0
Add status command and make subpathIsActive a static method
Jonatan Werpers <jonatan@werpers.com>
parents:
29
diff
changeset
|
96 if ~obj.subpathIsActive(fullfile(projectFolder,sp{i}), mpath) |
18
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
97 b = false; |
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
98 return; |
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
99 end |
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
100 end |
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
101 b = true; |
16
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
102 end |
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
103 |
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
104 % Unload all loaded subpaths. The matlab path should be returned to it's original state |
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
105 function clear(obj) |
17
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
106 sp = obj.loadedSubpaths(); |
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
107 |
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
108 for i = 1:length(sp) |
25
e2c18217aee0
Fix some reference errors
Jonatan Werpers <jonatan@werpers.com>
parents:
24
diff
changeset
|
109 obj.unloadSubpath(sp{i}); |
17
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
110 end |
16
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
111 end |
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
112 end |
24
fdad9fe450c5
Move install location function into the MpM class
Jonatan Werpers <jonatan@werpers.com>
parents:
23
diff
changeset
|
113 |
30
d9f899b1dfd0
Add status command and make subpathIsActive a static method
Jonatan Werpers <jonatan@werpers.com>
parents:
29
diff
changeset
|
114 methods (Static) |
d9f899b1dfd0
Add status command and make subpathIsActive a static method
Jonatan Werpers <jonatan@werpers.com>
parents:
29
diff
changeset
|
115 % Test if the path p is active among folders in path with the same final foldername |
d9f899b1dfd0
Add status command and make subpathIsActive a static method
Jonatan Werpers <jonatan@werpers.com>
parents:
29
diff
changeset
|
116 function b = subpathIsActive(p, paths) |
d9f899b1dfd0
Add status command and make subpathIsActive a static method
Jonatan Werpers <jonatan@werpers.com>
parents:
29
diff
changeset
|
117 pathparts = split(p, filesep); |
d9f899b1dfd0
Add status command and make subpathIsActive a static method
Jonatan Werpers <jonatan@werpers.com>
parents:
29
diff
changeset
|
118 foldername = pathparts{end}; |
28
0842a1b2ac7e
Factor out function for checking if a subpath is active
Jonatan Werpers <jonatan@werpers.com>
parents:
27
diff
changeset
|
119 |
30
d9f899b1dfd0
Add status command and make subpathIsActive a static method
Jonatan Werpers <jonatan@werpers.com>
parents:
29
diff
changeset
|
120 for i = 1:length(paths) |
d9f899b1dfd0
Add status command and make subpathIsActive a static method
Jonatan Werpers <jonatan@werpers.com>
parents:
29
diff
changeset
|
121 if ~endsWith(paths{i}, foldername) |
d9f899b1dfd0
Add status command and make subpathIsActive a static method
Jonatan Werpers <jonatan@werpers.com>
parents:
29
diff
changeset
|
122 % Ignore files with different end foldername |
d9f899b1dfd0
Add status command and make subpathIsActive a static method
Jonatan Werpers <jonatan@werpers.com>
parents:
29
diff
changeset
|
123 continue |
d9f899b1dfd0
Add status command and make subpathIsActive a static method
Jonatan Werpers <jonatan@werpers.com>
parents:
29
diff
changeset
|
124 end |
28
0842a1b2ac7e
Factor out function for checking if a subpath is active
Jonatan Werpers <jonatan@werpers.com>
parents:
27
diff
changeset
|
125 |
30
d9f899b1dfd0
Add status command and make subpathIsActive a static method
Jonatan Werpers <jonatan@werpers.com>
parents:
29
diff
changeset
|
126 b = strcmp(p, paths{i}); |
d9f899b1dfd0
Add status command and make subpathIsActive a static method
Jonatan Werpers <jonatan@werpers.com>
parents:
29
diff
changeset
|
127 return |
d9f899b1dfd0
Add status command and make subpathIsActive a static method
Jonatan Werpers <jonatan@werpers.com>
parents:
29
diff
changeset
|
128 end |
d9f899b1dfd0
Add status command and make subpathIsActive a static method
Jonatan Werpers <jonatan@werpers.com>
parents:
29
diff
changeset
|
129 |
d9f899b1dfd0
Add status command and make subpathIsActive a static method
Jonatan Werpers <jonatan@werpers.com>
parents:
29
diff
changeset
|
130 b = false; |
d9f899b1dfd0
Add status command and make subpathIsActive a static method
Jonatan Werpers <jonatan@werpers.com>
parents:
29
diff
changeset
|
131 end |
28
0842a1b2ac7e
Factor out function for checking if a subpath is active
Jonatan Werpers <jonatan@werpers.com>
parents:
27
diff
changeset
|
132 end |
0842a1b2ac7e
Factor out function for checking if a subpath is active
Jonatan Werpers <jonatan@werpers.com>
parents:
27
diff
changeset
|
133 end |
0842a1b2ac7e
Factor out function for checking if a subpath is active
Jonatan Werpers <jonatan@werpers.com>
parents:
27
diff
changeset
|
134 |
24
fdad9fe450c5
Move install location function into the MpM class
Jonatan Werpers <jonatan@werpers.com>
parents:
23
diff
changeset
|
135 % TODO: Organize order of methods |
25
e2c18217aee0
Fix some reference errors
Jonatan Werpers <jonatan@werpers.com>
parents:
24
diff
changeset
|
136 % TODO: Add flag for being persistent or not? (savepath or not) |