comparison +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
comparison
equal deleted inserted replaced
17:c37f67ccabac 18:1e568093b569
4 stateFileName = ''; 4 stateFileName = '';
5 end 5 end
6 6
7 methods 7 methods
8 function obj = MatlabPathManager() 8 function obj = MatlabPathManager()
9
10 end 9 end
11 10
12 function p = stateFilePath(obj) 11 function p = stateFilePath(obj)
13 p = fullfile(mpm.install_location(), obj.stateFileName); 12 p = fullfile(mpm.install_location(), obj.stateFileName);
14 end 13 end
15 14
16 % Load a given subpath into the state file and the matlab path and do savepath(), atomically 15 % Load a given subpath into the state file and the matlab path and do savepath(), atomically
17 function loadSubpath(obj, p) 16 function loadSubpath(obj, p)
18 state = mpm.load_state(); 17 state = mpm.load_state();
19 18
20 subpath = fullfile(pwd, p); 19 addpath(p);
21 addpath(subpath); 20 state.added_paths(p) = true;
22 state.added_paths(subpath) = true;
23 21
24 mpm.save_state(state); 22 mpm.save_state(state);
25 23
26 % TODO: Make atomic + add savepath() 24 % TODO: Make atomic + add savepath()
27 end 25 end
28 26
29 % Unload a given subpath from the state file and the matlab path and do savepath(), atomically 27 % Unload a given subpath from the state file and the matlab path and do savepath(), atomically
30 function unloadSubpath(obj, p) 28 function unloadSubpath(obj, p)
31 state = mpm.load_state(); 29 state = mpm.load_state();
32 30
33 subpath = fullfile(pwd, p); 31 rmpath(p);
34 rmpath(subpath); 32 state.added_paths.remove(p);
35 state.added_paths.remove(subpath);
36 33
37 mpm.save_state(state); 34 mpm.save_state(state);
38 35
39 % TODO: Make atomic + add savepath() 36 % TODO: Make atomic + add savepath()
40 end 37 end
53 state = mpm.load_state(); 50 state = mpm.load_state();
54 s = state.added_paths.keys(); 51 s = state.added_paths.keys();
55 % TODO: Make it respect order from the matlab path 52 % TODO: Make it respect order from the matlab path
56 end 53 end
57 54
55 function ps = matlabPath(obj)
56 ps = split(path(), pathsep);
57 end
58
58 % Return all subpaths loaded into the matlab path, mimicing the order they appear there. 59 % Return all subpaths loaded into the matlab path, mimicing the order they appear there.
59 function s = pathStatus(obj) 60 function s = pathStatus(obj)
60 end 61 end
61 62
62 % Return all subpaths in the project and if they are active on the matlab path or not. 63 % Return all subpaths in the project and if they are active on the matlab path or not.
66 % Load all subpaths for a project 67 % Load all subpaths for a project
67 function checkin(obj, projectFolder) 68 function checkin(obj, projectFolder)
68 sp = obj.projectSubpaths(projectFolder); 69 sp = obj.projectSubpaths(projectFolder);
69 70
70 for i = 1:length(sp) 71 for i = 1:length(sp)
71 obj.loadSubpath(sp{i}); 72 fullSubpath = fullfile(projectFolder, sp{i});
73 obj.loadSubpath(fullSubpath);
72 end 74 end
73 end 75 end
74 76
75 % Unload all subpaths for a project 77 % Unload all subpaths for a project
76 function checkout(obj, projectFolder) 78 function checkout(obj, projectFolder)
77 sp = obj.projectSubpaths(projectFolder); 79 sp = obj.projectSubpaths(projectFolder);
78 80
79 for i = 1:length(sp) 81 for i = 1:length(sp)
80 obj.unloadSubpath(sp{i}); 82 fullSubpath = fullfile(projectFolder, sp{i});
83 obj.unloadSubpath(fullSubpath);
84 end
85 end
86
87 % Check if the projects settings are correct
88 % Is the project file correct?
89 % The right version is in the matlab path
90 % The right version is at the top of the path
91 function b = verify(obj, projectFolder)
92 mpath = obj.matlabPath();
93 sp = obj.projectSubpaths(projectFolder);
94
95 for i = 1:length(sp)
96 if ~isAtTop(sp{i}, fullfile(projectFolder, sp{i}), mpath)
97 b = false;
98 return;
99 end
100 end
101 b = true;
102
103 function b = isAtTop(subpath, fullsubpath, paths)
104 for i = 1:length(paths)
105 if ~endsWith(paths{i}, subpath)
106 continue
107 end
108
109 b = strcmp(fullsubpath, paths{i});
110 return
111 end
112
113 b = false;
81 end 114 end
82 end 115 end
83 116
84 % Unload all loaded subpaths. The matlab path should be returned to it's original state 117 % Unload all loaded subpaths. The matlab path should be returned to it's original state
85 function clear(obj) 118 function clear(obj)