Mercurial > repos > public > matlab_path_manager
annotate +mpm/MatlabPathManager.m @ 18:1e568093b569
Add verify method. Fix some bugs
| author | Jonatan Werpers <jonatan@werpers.com> |
|---|---|
| date | Mon, 17 Sep 2018 15:44:19 +0200 |
| parents | c37f67ccabac |
| children | 2e29cca20d8a |
| 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 |
|
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
3 projectFileName = '.subpaths'; |
|
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
4 stateFileName = ''; |
|
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 |
|
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
11 function p = stateFilePath(obj) |
|
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
12 p = fullfile(mpm.install_location(), obj.stateFileName); |
|
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
13 end |
|
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
14 |
|
17
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
15 % 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
|
16 function loadSubpath(obj, p) |
|
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
17 state = mpm.load_state(); |
|
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
18 |
|
18
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
19 addpath(p); |
|
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
20 state.added_paths(p) = true; |
|
17
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
21 |
|
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
22 mpm.save_state(state); |
|
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
23 |
|
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
24 % TODO: Make atomic + add savepath() |
|
16
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
25 end |
|
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
26 |
|
17
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
27 % 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
|
28 function unloadSubpath(obj, p) |
|
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
29 state = mpm.load_state(); |
|
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
30 |
|
18
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
31 rmpath(p); |
|
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
32 state.added_paths.remove(p); |
|
17
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
33 |
|
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
34 mpm.save_state(state); |
|
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
35 |
|
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
36 % TODO: Make atomic + add savepath() |
|
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
37 end |
|
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
38 |
|
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
39 % 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
|
40 function sp = projectSubpaths(obj, projectFolder) |
|
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
41 try |
|
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
42 fstr = fileread(fullfile(projectFolder, obj.projectFileName)); |
|
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
43 catch |
|
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
44 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
|
45 end |
|
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
46 sp = splitlines(strtrim(fstr)); |
|
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
47 end |
|
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
48 |
|
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
49 function s = loadedSubpaths(obj) |
|
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
50 state = mpm.load_state(); |
|
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
51 s = state.added_paths.keys(); |
|
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
52 % TODO: Make it respect order from the matlab path |
|
16
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
53 end |
|
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
54 |
|
18
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
55 function ps = matlabPath(obj) |
|
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
56 ps = split(path(), pathsep); |
|
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
57 end |
|
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
58 |
|
16
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
59 % Return all subpaths loaded into the matlab path, mimicing the order they appear there. |
|
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
60 function s = pathStatus(obj) |
|
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 |
|
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
63 % Return all subpaths in the project and if they are active on the matlab path or not. |
|
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
64 function s = projectStatus(obj, projectFolder) |
|
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
65 end |
|
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
66 |
|
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) |
|
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
96 if ~isAtTop(sp{i}, fullfile(projectFolder, sp{i}), mpath) |
|
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; |
|
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
102 |
|
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
103 function b = isAtTop(subpath, fullsubpath, paths) |
|
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
104 for i = 1:length(paths) |
|
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
105 if ~endsWith(paths{i}, subpath) |
|
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
106 continue |
|
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
107 end |
|
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
108 |
|
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
109 b = strcmp(fullsubpath, paths{i}); |
|
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
110 return |
|
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
111 end |
|
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
112 |
|
1e568093b569
Add verify method. Fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
17
diff
changeset
|
113 b = false; |
|
17
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
114 end |
|
16
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
115 end |
|
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
116 |
|
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
117 % 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
|
118 function clear(obj) |
|
17
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
119 sp = obj.loadedSubpaths(); |
|
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
120 |
|
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
121 for i = 1:length(sp) |
|
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
122 obj.unload(sp{i}); |
|
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
123 end |
|
16
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
124 end |
|
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
125 end |
|
4c5d876068c2
Add stub for MatlabPathManager class
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
126 end |
|
17
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
127 |
|
c37f67ccabac
Copy implementations into the MPM class
Jonatan Werpers <jonatan@werpers.com>
parents:
16
diff
changeset
|
128 % TODO: get rid of mpm.load_state and mpm.save_state |
