Написание скриптов для Blender 2.49
Шрифт:
Расширение редактора - взаимодействие с Subversion
При активной разработке скриптов может оказаться сложно следить за изменениями или возвращаться к предыдущим версиям. Это не уникально для написания скриптов Питона в Блендере, поэтому системы управления версиями развиваются уже много лет. Одна из хорошо известных, и широко используемых - это Subversion . В этом разделе мы показываем, как может быть дополнен редактор, чтобы отправлять или обновлять текстовые файлы из хранилища.
Взаимодействие с хранилищем Subversion не предусмотрено встроенными модулями Питона, так что мы должны получить эту библиотеку где-нибудь еще. Секция загрузок сайтасодержит и исходные коды и бинарные дистрибутивы для многих платформ. Не забудьте получить правильную версию, так как поддерживаемая версия Subversion и версия Питона могут отличаться. Скрипт, который мы разрабатывали здесь, протестирован на Subversion 1.6.x и Питоне 2.6.x, но должен также работать с более ранними версиями Subversion.
Мы осуществим функциональность отправления (commit) текстового файла в хранилище и обновления (update) файла (то есть, получение самой последней исправленной версии из хранилища). Если мы пытаемся отправить файл, который пока не является частью хранилища, мы добавляем его, но мы не будем разрабатывать инструменты для создания хранилища или проверки рабочей копии. Такие инструменты, как, например, TortoiseSVN в Windows или множество инструментов для открытых платформ значительно лучше это делают. Мы просто принимаем подтверждённый (checked-out) рабочий каталог, где мы храним наши текстовые файлы Блендера. (Этот рабочий каталог может отличаться от вашего каталога проекта Блендера.)
Отправка текстового буфера в хранилище - процесс из двух шагов. Сначала мы должны сохранить содержимое текстового буфера в файл, и затем мы отправляем этот файл в хранилище. Мы должны проверить, имеет ли текстовый блок связанное с ним имя файла, и предложить пользователю сначала сохранить файл, если такого файла пока ещё нет. Пользователь должен сохранить файл в подтверждённый каталог для того, чтобы отправить файл в хранилище.
Так же как и расширение, позволившее нам производить поиск с помощью регулярных выражений, этот скрипт начинается с подходящего заголовка, чтобы идентифицировать его как плугин текстового редактора, и чтобы назначить клавиатурное сокращение. Мы определяем мнемосхему Ctrl + Alt + C для отправки (выделено), так же как мы определим Ctrl + Alt + U для обновления в своем сопровождающем скрипте. Мы также импортируем необходимые модули, особенно модуль pysvn:
Функция run сначала пытается получить активный текстовый буфер и возвращается без брюзжания, если там его нет. Затем она проверяет, существует ли имя файла, определённое для этого текстового буфера (выделено). Если нет, она напоминает пользователю, что надо сначала сохранить файл (таким образом, определяя имя файла и располагая файл в подтвержденном каталоге), и возвращается.
Следующим шагом нужно создать объект клиента pysvn, который позволит нам взаимодействовать с хранилищем. Метод info извлекает информацию о статусе файла в хранилище (выделено). Если нет никакой информации, значит файл пока не был добавлен к хранилищу - ситуация, которую мы исправляем, вызывая метод add:
Затем, мы сводим текущее содержимое текстового буфера, соединяя все строки в нём в единственный блок данных, и записываем его в файловый объект, который мы открыли для файла, связанного с буфером:
Этот файл будет отправлен в хранилище с помощью метода checkin, которому мы передаем довольно неинформативное сообщение отправки. Было бы хорошей идеей предложить пользователю создать более заметное сообщение. Наконец, мы сообщаем пользователю результат отправки.
Полный код доступен как textplugin_commit в файле svn.blend, но должен быть установлен в каталоге скриптов Блендера.
Основная цель хранилища - возможность сотрудничать, что означает, что другие пользователи могут изменить файлы, с которыми мы работаем, и мы должны быть в состоянии получить эти совершенные изменения. Это называется обновление (updating) файла и означает, что мы копируем самую последнюю версию, которая находится в хранилище в наш рабочий каталог.