Difference between revisions of "VMS IDE How does it work"

From VSI OpenVMS Wiki
Jump to: navigation, search
(Quick uploading)
 
(17 intermediate revisions by one other user not shown)
Line 2: Line 2:
  
 
=== Synchronization ===
 
=== Synchronization ===
1. Из VMS загружается список файлов, начиная с '''root''' папки, соответствующих маскам '''source''', '''headers''', '''builders''', '''resource''', и не попадающих в исключение '''exclude'''.
+
1. Из VMS загружается список файлов, начиная с '''root''' папки, соответствующих маскам '''source''', '''headers''', '''builders''', '''resource''', и не попадающих в исключение '''exclude'''.<br>
2. Такой-же список подоготавливается на стороне PC.
+
2. Такой-же список подоготавливается на стороне PC.<br>
3. Сравниваются времена изменения соответсвующих файлов и создаются два списка: '''A''' - файлы, которые новее на PC, и '''B''' - файлы, которые новее на VMS. Учитывается разница во времени не менее секунды.
+
3. Сравниваются времена изменения соответсвующих файлов и создаются два списка: '''A''' - файлы, которые новее на PC, и '''B''' - файлы, которые новее на VMS. Учитывается разница во времени не менее секунды.<br>
4. Проверяется значение '''downloadNewFiles''':
+
4. Проверяется значение '''downloadNewFiles''':<br>
    4.1. Если '''downloadNewFiles''' равен '''skip''', то список '''B''' игнорируется.
+
4.1. Если '''downloadNewFiles''' равен '''skip''', то список '''B''' игнорируется.<br>
    4.2. Если '''downloadNewFiles''' равен '''edit''', то файлы из списка '''B''' загружаются в память PC и отрываются окна для сравнения с версией на PC, редактирования и сохранения изменений.
+
4.2. Если '''downloadNewFiles''' равен '''edit''', то файлы из списка '''B''' загружаются в память PC и отрываются окна для сравнения с версией на PC, редактирования и сохранения изменений.<br>
    4.3. Если '''downloadNewFiles''' равен '''overwrite''', то файлы из списка '''B''' загружаются на PC поверх старых.
+
4.3. Если '''downloadNewFiles''' равен '''overwrite''', то файлы из списка '''B''' загружаются на PC поверх старых.<br>
5. Файлы из списка '''A''' выгружаются на VMS и для них выставляется время, которое было у файлов на PC:
+
5. Файлы из списка '''A''' выгружаются на VMS и для них выставляется время, которое было у файлов на PC:<br>
    5.1. Если в настройках SSH установлено '''supportSetFileTime''', то установка времени файла будет осуществляться посредством команд SSH
+
5.1. Если в настройках SSH установлено '''supportSetFileTime''', то установка времени файла будет осуществляться посредством команд SSH<br>
    5.2. В противном случае запускается SSH Shell и время файлам устанавливается командами DCL '''set file FILE.EXT /attribute(mod=DATE,att=DATE)'''
+
5.2. В противном случае запускается SSH Shell и время файлам устанавливается командами DCL '''set file FILE.EXT /attribute(mod=DATE,att=DATE)'''<br>
6. После этого выставляется флаг синхронизированности проекта.
+
6. После этого выставляется флаг синхронизированности проекта.<br>
 +
 
 +
=== Upload using ZIP ===
 +
Все файлы на стороне PC, соответствующие маскам '''source''', '''headers''', '''builders''', '''resource''', и не попадающих в исключение '''exclude''', архивируются и архив выгружается на VMS. <br>
 +
 
 +
1. Если задано '''unzipCmd''', то для разархивации будет послана команда '''unzipCmd''' + имя архива. Команда для разархивации должна учитывать следующие факторы: времена файлов должны выставляться по текущему времени на компьютере, и разархиватор не должен ничего запрашивать от пользователя, т.е. всегда разархиваировать поверх или наоборот.<br>
 +
2. Если '''unzipCmd''' пуст, то для разархивации будет послана команда '''unzip -oo "-D" ''' + имя архива<br>
 +
 
 +
Если всё прошло успешно выставляется флаг синхронизированности проекта.
  
 
=== Uploading ===
 
=== Uploading ===
 +
1. Если '''preferZip''' установлен в true, то будет выполнено Upload using ZIP.<br>
 +
 +
2. Если '''preferZip''' не установлен, то Uploading выполняется как Synchronization, только список '''B''' всегда игнорируется.
  
 
=== Quick uploading ===
 
=== Quick uploading ===
На удалённую машину будут загружены файлы, соответствующие маскам '''source''', '''headers''', '''builders''', '''resource''', и не соответствующие исключению '''exclude''', которые были изменены с момента последней синхронизации, аплоада или с начала работы программы. Если файл был удалён на PC, он также будет удалён и на VMS.
+
Работает для проекта, на котором стоит курсор в закладке '''PROJECT DEPENDENCIES'''.<br>
 +
 
 +
На удалённую машину будут загружены файлы, соответствующие маскам '''source''', '''headers''', '''builders''', '''resource''', и не соответствующие исключению '''exclude''', которые были изменены с момента последней синхронизации, аплоада или с начала работы программы. Если файл был удалён на PC, он также будет удалён и на VMS.<br>
 +
 
 
Если проект до начала изменений файлов был синхронизирован, то после Quick uploading он будет считаться синхронизированным. Иначе флаг синхронизации не изменится.
 
Если проект до начала изменений файлов был синхронизирован, то после Quick uploading он будет считаться синхронизированным. Иначе флаг синхронизации не изменится.
  
Line 35: Line 49:
  
 
=== Building ===
 
=== Building ===
 +
Первым делом определяется конфигурация сборки. Все возможные конфигурации описываются в сеции настроек '''Project settings/builds/configurations'''. Выбор текущей конфигурации происходит в окне '''PROJECT DESCRIPTION''' нажатием правой кнопки мыши на строке '''buildName'''.<br>
 +
 +
Если поле '''command''' конфигурации пустое, то для сборки использеутся автоматически сгенерированный MMS файл. Для его создания нужно выбрать команду (по F1) '''Create MMS''', при этом проект, для которго нужно создать MMS, должен быть выбран в окне '''PROJECT DEPENDENCIES'''.<br>
 +
 +
Если поле '''command''' содержит COM файл, то он будет запущен с параметром, заданным в '''parameter'''.<br>
 +
 +
Если поле '''command''' содержит MMS файл, то он будет запущен командой '''MMS/EXTENDED_SYNTAX/DESCR=имя_mms_файла _параметр_'''. То есть '''parameter''' будет использован как target.<br>
 +
 +
После сборки файлы, соответствующие маске '''listing''', будут загружены из папки '''outdir''' на VMS в паку '''outdir''' на PC с помощью команды '''"Prepare to debug"''' из контекстного меню "PROJECT EXPLORER" для выбранного проекта. Поэтому, если пользователь использует собственный скрипт сборки, он должен позаботиться о том, чтобы файлы листинга после сборки лежали в '''root/outdir'''. Также команда "Prepare to debug" создаёт JSON файл в папке .vscode с соответствиями имён модулей исходным файлам; при желании этот файл можно будет отредактировать, но не стоит забывать, что он перезапишется после следующей такой команды. <br>
 +
 +
Не забываем, что '''outdir''' это не путь, а имя для папки, которая будет создана внутри '''root''' для хранения промежуточных результатов различных операций. '''outdir''' должен состоять только из латинских букв и не должен быть пустым.<br>
  
 
=== Debugging ===
 
=== Debugging ===
  
[[Category:VMS IDE]]
+
Первым делом нужно сформировать конфигурацию для отладки в VS Code. Для этого нужно создать или отредактировать launch.json файл, чтогбы в нём появилась '''vms_dbg''' конфигурация, и затем настроить её. Если имя программы оставить пустым, то оно будет заполнено на момент запуска отладки из настроек проекта. Этот вариант удобен, если всё остальное тоже делается по умолчанию (создание MMS, компиляция).<br>
 +
Если же программа собирается с помощью заранее подготовленного скрипта (COM или MMS), то пользователь также должен будет указать отладчику путь до запускаемого файла в формате VMS. Необходимо учитывать, что отладчик начинает работать в '''home''' папке пользователя.<br>
 +
Правильная работа отладчика зависит от того, есть ли соответсвующие файлы листинга для исходных файлов. Отладчик работает в терминах '''модуль''', и для того, чтобы найти исхолдный файл модуля, как раз нужны файлы листинга. Также номер строки кода в отладчике не соответствует номеру строки в исходном файле. И опять же вся информация по номерам строк находится в файлах листинга. Поэтому очень важно, чтобы на этапе компиляции нужные файлы листинга были закачаны на PC.<br>
 +
Подробнее про сам процесс отладки можно прочитать в соответствующей документации по VS Code.

Latest revision as of 12:59, 29 May 2020

How does it work

Synchronization

1. Из VMS загружается список файлов, начиная с root папки, соответствующих маскам source, headers, builders, resource, и не попадающих в исключение exclude.
2. Такой-же список подоготавливается на стороне PC.
3. Сравниваются времена изменения соответсвующих файлов и создаются два списка: A - файлы, которые новее на PC, и B - файлы, которые новее на VMS. Учитывается разница во времени не менее секунды.
4. Проверяется значение downloadNewFiles:
4.1. Если downloadNewFiles равен skip, то список B игнорируется.
4.2. Если downloadNewFiles равен edit, то файлы из списка B загружаются в память PC и отрываются окна для сравнения с версией на PC, редактирования и сохранения изменений.
4.3. Если downloadNewFiles равен overwrite, то файлы из списка B загружаются на PC поверх старых.
5. Файлы из списка A выгружаются на VMS и для них выставляется время, которое было у файлов на PC:
5.1. Если в настройках SSH установлено supportSetFileTime, то установка времени файла будет осуществляться посредством команд SSH
5.2. В противном случае запускается SSH Shell и время файлам устанавливается командами DCL set file FILE.EXT /attribute(mod=DATE,att=DATE)
6. После этого выставляется флаг синхронизированности проекта.

Upload using ZIP

Все файлы на стороне PC, соответствующие маскам source, headers, builders, resource, и не попадающих в исключение exclude, архивируются и архив выгружается на VMS.

1. Если задано unzipCmd, то для разархивации будет послана команда unzipCmd + имя архива. Команда для разархивации должна учитывать следующие факторы: времена файлов должны выставляться по текущему времени на компьютере, и разархиватор не должен ничего запрашивать от пользователя, т.е. всегда разархиваировать поверх или наоборот.
2. Если unzipCmd пуст, то для разархивации будет послана команда unzip -oo "-D" + имя архива

Если всё прошло успешно выставляется флаг синхронизированности проекта.

Uploading

1. Если preferZip установлен в true, то будет выполнено Upload using ZIP.

2. Если preferZip не установлен, то Uploading выполняется как Synchronization, только список B всегда игнорируется.

Quick uploading

Работает для проекта, на котором стоит курсор в закладке PROJECT DEPENDENCIES.

На удалённую машину будут загружены файлы, соответствующие маскам source, headers, builders, resource, и не соответствующие исключению exclude, которые были изменены с момента последней синхронизации, аплоада или с начала работы программы. Если файл был удалён на PC, он также будет удалён и на VMS.

Если проект до начала изменений файлов был синхронизирован, то после Quick uploading он будет считаться синхронизированным. Иначе флаг синхронизации не изменится.

File masks

Example Meaning
**/folder/** All files which have this folder in path
*.ext All files with extension ext
*. All files without extension
**/build/**/*.com All files with com extension which have build in path

Building

Первым делом определяется конфигурация сборки. Все возможные конфигурации описываются в сеции настроек Project settings/builds/configurations. Выбор текущей конфигурации происходит в окне PROJECT DESCRIPTION нажатием правой кнопки мыши на строке buildName.

Если поле command конфигурации пустое, то для сборки использеутся автоматически сгенерированный MMS файл. Для его создания нужно выбрать команду (по F1) Create MMS, при этом проект, для которго нужно создать MMS, должен быть выбран в окне PROJECT DEPENDENCIES.

Если поле command содержит COM файл, то он будет запущен с параметром, заданным в parameter.

Если поле command содержит MMS файл, то он будет запущен командой MMS/EXTENDED_SYNTAX/DESCR=имя_mms_файла _параметр_. То есть parameter будет использован как target.

После сборки файлы, соответствующие маске listing, будут загружены из папки outdir на VMS в паку outdir на PC с помощью команды "Prepare to debug" из контекстного меню "PROJECT EXPLORER" для выбранного проекта. Поэтому, если пользователь использует собственный скрипт сборки, он должен позаботиться о том, чтобы файлы листинга после сборки лежали в root/outdir. Также команда "Prepare to debug" создаёт JSON файл в папке .vscode с соответствиями имён модулей исходным файлам; при желании этот файл можно будет отредактировать, но не стоит забывать, что он перезапишется после следующей такой команды.

Не забываем, что outdir это не путь, а имя для папки, которая будет создана внутри root для хранения промежуточных результатов различных операций. outdir должен состоять только из латинских букв и не должен быть пустым.

Debugging

Первым делом нужно сформировать конфигурацию для отладки в VS Code. Для этого нужно создать или отредактировать launch.json файл, чтогбы в нём появилась vms_dbg конфигурация, и затем настроить её. Если имя программы оставить пустым, то оно будет заполнено на момент запуска отладки из настроек проекта. Этот вариант удобен, если всё остальное тоже делается по умолчанию (создание MMS, компиляция).
Если же программа собирается с помощью заранее подготовленного скрипта (COM или MMS), то пользователь также должен будет указать отладчику путь до запускаемого файла в формате VMS. Необходимо учитывать, что отладчик начинает работать в home папке пользователя.
Правильная работа отладчика зависит от того, есть ли соответсвующие файлы листинга для исходных файлов. Отладчик работает в терминах модуль, и для того, чтобы найти исхолдный файл модуля, как раз нужны файлы листинга. Также номер строки кода в отладчике не соответствует номеру строки в исходном файле. И опять же вся информация по номерам строк находится в файлах листинга. Поэтому очень важно, чтобы на этапе компиляции нужные файлы листинга были закачаны на PC.
Подробнее про сам процесс отладки можно прочитать в соответствующей документации по VS Code.