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

В этом примере показано, как использовать 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)

См. также

Похожие темы