exponenta event banner

Программное создание и редактирование проектов

В этом примере показано, как использовать API Project для создания нового проекта и автоматизации задач проекта для управления файлами. В нем описывается, как создать проект из командной строки, добавить файлы и папки, настроить путь к проекту, определить ярлыки проекта и создать ссылку на новый проект в другом проекте. В нем также показано, как программно работать с измененными файлами, зависимостями, ярлыками и метками.

Настройка файлов примеров

Создайте рабочую копию файлов проекта примера приложения Times Table и откройте проект. 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. Этот проект сохранит игровую логику за приложением Times Table. Проект Times Table Game будет использоваться проектом Times Table App через ссылку на проект.

Создайте проект и задайте его имя.

timesTableGameFolder = fullfile(mainProject.RootFolder,"refs","TimesTableGame");
timesTableGame = matlab.project.createProject(timesTableGameFolder);
timesTableGame.Name = "Times Table Game";

Переместите игровую логику Times Table App из главной папки проекта в новую папку проекта и добавьте ее в проект Times Table Game. Затем удалите файл из проекта приложения Times Table.

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 или любого проекта, ссылающегося на проект приложения Times Table.

reload(timesTableGame);
addPath(timesTableGame,timesTableGame.RootFolder);

Добавление ссылки на проект

Добавьте новый проект игры Times Table в проект приложения Times Table в качестве ссылки на проект. Это позволяет проекту Time Table App просматривать, редактировать и запускать файлы в проекте Times Table Game.

reload(mainProject);
addReference(mainProject,timesTableGame);

Получить измененные файлы

Получение всех измененных файлов в проекте приложения Times Table. Сравните этот список с видом «Файлы» > «Измененные» в проекте. Можно просмотреть файлы для нового проекта игры 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. 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. 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'}

Получите файлы верхнего уровня всех типов на графике. 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'              }

Получение файлов верхнего уровня с зависимостями. 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.

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, эту метку можно увидеть на панели «Редактор меток».

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'

Создайте новую категорию меток с двойным типом данных, тип 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)

См. также

Связанные темы