В этом примере показано, как использовать Project API для создания нового проекта и автоматизации задач проекта для манипулирования файлами. В нем описывается, как создать проект из командной строки, добавить файлы и папки, настроить путь проекта, задать ярлыки проекта и создать ссылку на новый проект в другом проекте. Также показано, как программно работать с измененными файлами, зависимостями, ярлыками и метками.
Создайте рабочую копию Таблицы Times Приложения примера файлов проекта и откройте проект. MATLAB ® копирует файлы в папку примеров, чтобы можно было их редактировать. Проект помещает файлы под Git™ систему контроля версий. Использование currentProject
чтобы создать объект проекта из загруженного проекта.
matlab.project.example.timesTable mainProject = currentProject;
Исследуйте файлы в проекте.
files = mainProject.Files
files=1×14 object
1×14 ProjectFile array with properties:
Path
Labels
Revision
SourceControlStatus
Используйте индексацию для доступа к файлам в этом списке. Для примера получите файл номер 10. Каждый файл имеет свойства, описывающие его путь и присоединенные метки.
mainProject.Files(10)
ans = ProjectFile with properties: Path: "C:\workSpace\examples\TimesTableApp1\tests\tNewTimesTable.m" Labels: [1×1 matlab.project.Label] Revision: "51316c67b968d45a17e127003a25143577ec011a" SourceControlStatus: Unmodified
Получите последнюю версию Git десятого файла.
mainProject.Files(10).Revision
ans = "51316c67b968d45a17e127003a25143577ec011a"
Исследуйте метки десятого файла.
mainProject.Files(10).Labels
ans = Label with properties: File: "C:\workSpace\examples\TimesTableApp1\tests\tNewTimesTable.m" DataType: 'none' Data: [] Name: "Test" CategoryName: "Classification"
Получите конкретный файл по имени.
myfile = findFile(mainProject,"source/timestable.mlapp")
myfile = ProjectFile with properties: Path: "C:\workSpace\examples\TimesTableApp1\source\timestable.mlapp" Labels: [1×1 matlab.project.Label] Revision: "51316c67b968d45a17e127003a25143577ec011a" SourceControlStatus: Unmodified
Создайте проект Times Table Game. Этот проект будет хранить игровую логику за приложением Times Table App.Проект Times Table Game будет использоваться проектом Times Table App через ссылку на проект.
Создайте проект и установите имя проекта.
timesTableGameFolder = fullfile(mainProject.RootFolder,"refs","TimesTableGame"); timesTableGame = matlab.project.createProject(timesTableGameFolder); timesTableGame.Name = "Times Table Game";
Переместите игровую логику Таблицы Times Приложения из основной папки проекта в папку нового проекта и добавьте ее к проекту Times Таблицы Game. Затем удалите файл из проекта Times Table App.
movefile("..\..\source\timesTableGame.m"); addFile(timesTableGame,"timesTableGame.m"); reload(mainProject); removeFile(mainProject,"source\timesTableGame.m");
Добавьте корневую папку проекта Times Table Game в путь проекта Times Table Game. Это делает timesTableGame.m
файл, доступный при загрузке проекта Times Table App или любого проекта, ссылающегося на проект Times Table App.
reload(timesTableGame); addPath(timesTableGame,timesTableGame.RootFolder);
Добавьте новый проект Times Table Game в проект Times Table App как ссылку на проект. Это позволяет проекту Time Table App просматривать, редактировать и запускать файлы в проекте Times Table Game.
reload(mainProject); addReference(mainProject,timesTableGame);
Получите все измененные файлы в проекте Times Table App. Сравните этот список с представлением файлы > Modified в проекте. Вы можете увидеть файлы для нового проекта Times Table Game, а также удаленные и измененные файлы в проекте Times Table App.
modifiedfiles = listModifiedFiles(mainProject)
modifiedfiles=1×8 object
1×8 ProjectFile array with properties:
Path
Labels
Revision
SourceControlStatus
Получите второй измененный файл в списке. Заметьте, что SourceControlStatus
свойство Added
. The listModifiedFiles
функция возвращает все файлы, которые добавляются, изменяются, конфликтуют, удаляются и так далее.
modifiedfiles(2)
ans = ProjectFile with properties: Path: "C:\workSpace\examples\TimesTableApp1\refs\TimesTableGame\resources\project\Project.xml" Revision: "" SourceControlStatus: Added
Обновите состояние системы контроля версий перед запросом отдельных файлов. Вам не нужно делать это перед вызовом listModifiedFiles
.
refreshSourceControl(mainProject)
Получите все файлы проекта, которые Unmodified
. Используйте ismember
функция для получения массива логических данных, указывающих, какие файлы в проекте Times Table App не изменены. Используйте массив, чтобы получить список немодифицированных файлов.
unmodifiedStatus = ismember([mainProject.Files.SourceControlStatus],matlab.sourcecontrol.Status.Unmodified); mainProject.Files(unmodifiedStatus)
ans=1×9 object
1×9 ProjectFile array with properties:
Path
Labels
Revision
SourceControlStatus
Запустите анализ зависимостей, чтобы обновить известные зависимости между файлами проекта.
updateDependencies(mainProject)
Получите список зависимостей в проекте Times Table App. The Dependencies
свойство содержит график зависимостей между файлами проекта, сохраненный как MATLAB digraph
объект.
g = mainProject.Dependencies
g = digraph with properties: Edges: [5×1 table] Nodes: [9×1 table]
Получите файлы, необходимые для timestable.mlapp
файл.
requiredFiles = bfsearch(g, which('source/timestable.mlapp'))
requiredFiles = 2×1 cell
{'C:\workSpace\examples\TimesTableApp1\source\timestable.mlapp' }
{'C:\workSpace\examples\TimesTableApp1\refs\TimesTableGame\timesTableGame.m'}
Получите файлы верхнего уровня всех типов в графике. The indegree
функция находит все файлы, которые не зависят от любого другого файла.
top = g.Nodes.Name(indegree(g)==0)
top = 7×1 cell
{'C:\workSpace\examples\TimesTableApp1\requirements\TimesTableRequirements.mlx'}
{'C:\workSpace\examples\TimesTableApp1\tests\tAnswerIsCorrect.m' }
{'C:\workSpace\examples\TimesTableApp1\tests\tCurrentQuestion.m' }
{'C:\workSpace\examples\TimesTableApp1\tests\tNewTimesTable.m' }
{'C:\workSpace\examples\TimesTableApp1\utilities\editTimesTable.m' }
{'C:\workSpace\examples\TimesTableApp1\utilities\openRequirementsDocument.m' }
{'C:\workSpace\examples\TimesTableApp1\utilities\runTheseTests.m' }
Получите файлы верхнего уровня, которые имеют зависимости. The indegree
функция находит все файлы, которые не зависят от любого другого файла, и outdegree
функция находит все файлы, которые имеют зависимости.
top = g.Nodes.Name(indegree(g)==0 & outdegree(g)>0)
top = 4×1 cell
{'C:\workSpace\examples\TimesTableApp1\requirements\TimesTableRequirements.mlx'}
{'C:\workSpace\examples\TimesTableApp1\tests\tAnswerIsCorrect.m' }
{'C:\workSpace\examples\TimesTableApp1\tests\tCurrentQuestion.m' }
{'C:\workSpace\examples\TimesTableApp1\tests\tNewTimesTable.m' }
Найдите затронутые (или «восходящие») файлы путем создания транспонированного график. Используйте flipedge
функция для изменения направления ребер в графике на противоположное.
transposed = flipedge(g)
transposed = digraph with properties: Edges: [5×1 table] Nodes: [9×1 table]
impacted = bfsearch(transposed,which('source/timestable.mlapp'))
impacted = 2×1 cell
{'C:\workSpace\examples\TimesTableApp1\source\timestable.mlapp' }
{'C:\workSpace\examples\TimesTableApp1\requirements\TimesTableRequirements.mlx'}
Получите информацию о файлах проекта, таких как количество зависимостей и сирот.
averageNumDependencies = mean(outdegree(g)); numberOfOrphans = sum(indegree(g)+outdegree(g)==0);
Измените порядок сортировки графика зависимостей, чтобы показать изменения проекта снизу вверх.
ordered = g.Nodes.Name(flip(toposort(g)));
Можно использовать ярлыки для сохранения частых задач и часто получаемых файлов или для автоматизации задач запуска и завершения работы.
Получите ярлыки проекта Times Table App.
shortcuts = mainProject.Shortcuts
shortcuts=1×4 object
1×4 Shortcut array with properties:
Name
Group
File
Исследуйте ярлык в списке.
shortcuts(2)
ans = Shortcut with properties: Name: "Edit Times Table App" Group: "Launch Points" File: "C:\workSpace\examples\TimesTableApp1\utilities\editTimesTable.m"
Получите путь к файлу ярлыка.
shortcuts(3).File
ans = "C:\workSpace\examples\TimesTableApp1\utilities\openRequirementsDocument.m"
Проверьте все файлы в списке ярлыков.
{shortcuts.File}'
ans=4×1 cell array
{["C:\workSpace\examples\TimesTableApp1\source\timestable.mlapp" ]}
{["C:\workSpace\examples\TimesTableApp1\utilities\editTimesTable.m" ]}
{["C:\workSpace\examples\TimesTableApp1\utilities\openRequirementsDocument.m"]}
{["C:\workSpace\examples\TimesTableApp1\utilities\runTheseTests.m" ]}
Создайте новую категорию меток типа char
. В проекте Times Table App новый Engineers
категория появится на панели « Метках».
createCategory(mainProject,'Engineers','char')
ans = Category with properties: Name: "Engineers" SingleValued: 0 DataType: "char" LabelDefinitions: [1×0 matlab.project.LabelDefinition]
Определите новую метку в новой категории.
category = findCategory(mainProject,'Engineers'); createLabel(category,'Bob');
Получите объект определения метки для новой метки.
ld = findLabel(category,'Bob')
ld = LabelDefinition with properties: Name: "Bob" CategoryName: "Engineers"
Прикрепите метку к файлу проекта. Если вы выбираете файл в проекте Times Table App, вы можете увидеть эту метку на панели «Редактор меток».
myfile = findFile(mainProject,"source/timestable.mlapp"); addLabel(myfile,'Engineers','Bob');
Получите конкретную метку и прикрепите к ней текстовые данные.
label = findLabel(myfile,'Engineers','Bob'); label.Data = 'Email: Bob.Smith@company.com'
label = Label with properties: File: "C:\workSpace\examples\TimesTableApp1\source\timestable.mlapp" DataType: 'char' Data: 'Email: Bob.Smith@company.com' Name: "Bob" CategoryName: "Engineers"
Найдите данные метки и сохраните их в переменной.
mydata = label.Data
mydata = 'Email: Bob.Smith@company.com'
Создайте новую категорию меток с типом данных double, тип MATLAB обычно используется для числовых данных.
createCategory(mainProject,'Assessors','double'); category = findCategory(mainProject,'Assessors'); createLabel(category,'Sam');
Присоедините новую метку к указанному файлу и присвойте значение данных 2 метке.
myfile = mainProject.Files(10); addLabel(myfile, 'Assessors', 'Sam', 2)
ans = Label with properties: File: "C:\workSpace\examples\TimesTableApp1\utilities" DataType: 'double' Data: 2 Name: "Sam" CategoryName: "Assessors"
Закройте проект, чтобы запустить скрипты завершения работы и проверить наличие несохраненных файлов.
close(mainProject)