Умное закрепление правки для PhpED


SVN экономит время и труд разработчика — она позволяет возвращаться к любой точке разработки, быть везде и всегда в курсе проводимых работ и многое другое. Но как всякая система экономящая время SVN требует затрат этого времени на свое функционирование. Именно о такой затрате, а именно операции закрепления правки в хранилище, экономии труда в ходе ее, а также расширения возможностей разработчика по хранению данных и пойдет речь.

PhpED, как и приставка Professional, здесь — ключевые моменты. Если вы используете иной редактор кода, то вам придется иной раз совершать дополнительные действия. Вы также можете создать на основе предлагаемого решения расширение и для своей любимой платформы. Что касается Professional, то только эта версия редактора поддерживает возможность связывания редактора с внешними сриптами, т.е. shell handler.

Предпосылки

Самым простым и частым действием при работе с любой рабочей копией является полное закрепление всех внесенных в нее изменений. Делается это чтобы разбивка работы на этапы отражала себя и в хранилище, когда каждая правка является неким законченным результатом работы. Пока никаких сложностей, если вы привыкли использовать SVN.

Сложность первая, главная и последняя — база данных. Мысль, обуславливающая сложность, заключается в том, что необходимо сохранять в хранилище не только код и данные в рабочей копии, но и содержимое базы. Делая «слепок» вашего кода в хранилище, было бы разумным сохранять также и данные базы, иначе не будет возможности вернуться к прошлым правкам полностью — «старый» код будет пытаться работать с «новыми» данными.

Постановка задачи

Немного подумав, приходим к выводу, что нужно реализовать простое, желательно масштабируемое средство, вобравшее в себя все следующие возможности:

  1. Выполнение закрепления правки в хранилище;
  2. получение дампа базы и помещение его поверх существующего в рабочей копии перед закреплением;
  3. обеспечение отката дампа до предыдущего, если закрепление в хранилище не произошло из-за ошибки;
  4. комментарии, описывающие правку, должны браться из файла, куда они помещались во время внесения изменений — хорошая практика аккуратной работы;
  5. логирование происходящего с выдачей всех диагностических сообщений.

Что необходимо для решения

Нам потребуется довольно обширный круг программ, которые будут в отдельности решать поставленные задачи:

  1. Консольный клиент SVN. Вне зависимости от типа установки, если вы уже используете локальную инсталляцию этой системы контроля версий, то такой клиент у вас уже есть — это bin/svn.exe в директории куда вы установили SVN. В ином случае вам необходимо будет его установить, причем совершенно не обязательно для использования в виде интеграции с Apache — просто установить, пусть лежит;
  2. дампер баз данных — утилита конкретная каждая для своей СУБД и призванная, в зависимости от своих опций, создавать набор SQL-инструкций полностью отражающих структуру и/или данные базы;
  3. PhpED Professional;
  4. установленный и настроенный php пятой версии.

Что касается серверов, то трудно представить себе web-разработчика, не имеющего на локальной машине тестовых серверов: http, БД и каких-либо других, по потребностям. Настолько трудно, что и пытаться не будем.

сужаем круг

В случае использования на локальной машине системы подобной denwer ответ на вопрос о СУБД однозначен — MySQL. Вообще, это практически стандарт в области web, таким образом, будем везде подразумевать именно ее. Требование к php пятой версии обусловлена двумя причинами: «давно пора» и «у нас он есть, даже если у нас его нет» о чем чуть позже.

В отношении SVN можно поступить так, как об этом говорилось выше или же установить его полностью для локального использования, о чем уже заходила беседа ранее в статье «Введение в Subversion».

От теории к практике

Для начала следует убедиться, что PhpED установлен с поддержкой как минимум одного php5. Если у вас в директории, куда был установлен редактор, имеется поддиректория с именем php5, то все в порядке. Если это не так, то есть два пути:

  • переустановить PhpED;
  • если вы и так используете для своей работы php5, то ничего не мешает использовать его и в наших целях, т.е. оставить в этом отношении PhpED в покое.

Настройка путей ОС также необходимый шаг. SVN CLI и mysqldump можно, а в нашем случае и нужно, использовать из любой директории, если внести пути, по которым они расположены, в системную переменную PATH.

Установка и настройка скрипта

Получить скрипт можно двумя путями — скачать архив или взять непосредственно из репозитория (websvn).

Поместите директорию smartyCommit из архива в любое место на жестком диске. Можно порекомендовать размещать расширяющие функциональность PhpED скрипты в поддиректорию scripts редактора, но это — дело вкуса.

В настройках PhpED в разделе Tools/Integration одноименной кнопкой создайте меню, задав любое нравящееся вам имя, например ext. В этом меню мы будем хранить наши собственные срипты. Далее нужно создать подменю, которое и будет командой вызываемой из редактора. После создания команды необходима настройка до состояния отраженного на рисунке ниже, однако обратите внимание, что потребуется указать свой путь к скрипту и выбрать нужный вам хоткей, которые могут быть отличными от тех, что приведены.

Настройки команды в PhpED

Команда будет вызываться для активного проекта (в закладке Workspace он выделен жирным), а значит, показывать команду нужно только в Tools/Scripts, что и отражено в установках опций Show this command *. Скрипт не будет логировать никаких данных, кроме ошибок, но Redirect Output stream to log window нужно выбрать все равно.

Выбор shell-обработчика обусловлен тем, что для выбранной работы нам подходят только SRV и Shell, но SRV открывает всегда новую вкладку со своим выводом в то время как решено было использовать log window.

может все же SRV?

Возможно. Я интенсивно использую log window, однако после рецензирования этой статьи пришел к выводу, что многим людям было бы приятнее работать с выводом в виде html, а это SRV. Кстати, переход можно сделать самостоятельно, наследуя класс и переопределяя методы вывода.

Командная строка содержит путь к выполняющему работу скрипту и ряд макропеременных в виде @varName@ справку по которым можно получить посредством кнопки Show macros. Специальной переменной является переменная вида @Proj (varName)@ значение которой берётся на закладке Custom свойств проекта (Project/Project Properties) (имейте ввиду, что на закладке переменной может и не оказаться). С установкой покончено.

В указании на отправную точку работы — директорию рабочей копии мы будем опираться на проекты PhpED. Чаще всего под некий сайт или работу выделяется отдельное рабочее пространство (Workspace) в котором существует один или несколько проектов.

почему несколько?

Иногда удобно располагать все служебные файлы, библиотеки, настройки выше уровня DocumentRoot, что повышает безопасность. Такой подход сказывается на организации удаленной отладки, что и влияет на количество проектов в рабочем пространстве. Подробнее обо всех способах можно узнать из HOWTO: Set project mapping.

В свойства проекта необходимо установить значение переменной svnRoot таким образом, чтобы она содержала путь к рабочей копии. Если у вас несколько проектов, то этот шаг необходимо проделать для каждого проекта т.к. неизвестно какой из них будет активным в любой момент времени.

Время настроек задачи: имя БД, логины, пароли и другие данные, которые меняются от задачи к задаче. Значения таких опций устанавливается посредством конфигурационного файла, располагающимся в корне рабочей копии и обычно находящимся в игнор-листе SVN. Файл имеет имя peScripts.options.php и представляет собой обычный php-скрипт с одним простым массивом. Пример полного массива приведен ниже, причем все указанные значения являются значениями по умолчанию, как если бы опция отсутствовала в вашем варианте массива.

<?php
$smartyCommit = array(
	'db' => array(
		'host'     => 'localhost',
		'user'     => '',
		'password' => '',
		'name'     => ''  //database name
	),
	'dump' => array(
		'params' => '--allow-keywords --no-create-db --quote-names', //dumper command lines additional params
		'file'   => 'dump.sql' //file where dump will store
	),
	'svn' => array(
		'params'         => '--no-auth-cache',  //svn commit command lines additional params
		'fileLogMessage' => 'logs/commit.message', //file with commit messages. Note: path is _relative_ from svnRoot
		'user'           => '',
		'password'       => '',
		'log'            => 'logs/smartyCommit.log' //file where svn commit log will stored. Note: path is _relative_ from svnRoot
	),
	'dirTmp' => 'c:/windows/temp/'
);
?>

По сути это все. Теперь по хоткею команды будет произведено дампирование базы данных, а затем последующая фиксация всей рабочей копии в хранилище. Если на каком-то этапе произойдет ошибка, то будет произведен откат до состояния как если бы команда вообще не была выполнена.

Если у вас возникли какие-либо проблемы, то проверьте все ли правильно вы сделали по установке и настройке, обращая особое внимание на пути, задаваемые в настройках.

Подводные камни и нюансы

  1. Макропеременная @php5@, в отличие от @php@, которая указывает на CLI версию php4, ссылается на CGI вариант. Это следует учитывать, так как в эти версии довольно сильно разнятся;
  2. mysqldump читает конфигурационный файл СУБД, если вы указали в нем кодировки, то нет необходимости сообщать о них mysqldump отдельно;
  3. если команда расширения PhpED не указана как включаемая в Tools, то она не будет выполняться по выбранному для нее хоткею;
  4. означить макропеременную someVar на закладке Custom свойств проекта станет возможно только с использованием @Proj (someVar)@ в командах. Общий принцип — сначала заявите об использовании, затем означьте;
  5. если значение макропеременной оставить пустым, то будет передано ее имя;
  6. при выполнении длительной операции PhpED выдает соответствующее окошко с прогресс баром. Используйте sleep () для отладки;
  7. если в свойствах команды отключено перенаправление потока Output в log window, то даже с активированным перенаправлением потока Error ошибки не будут попадать в log window — возможности писать в это окно не будет вовсе;
  8. только Professional версия редактора поддерживает shell и SRV обработчики;
  9. конечные слэши в путях к различным объектам можно как указывать, так и опускать — скрипт позаботится об их верном количестве;
  10. файл с комментариями для svn commit должен находиться в активном проекте, если вы хотите запускать срипт, находясь на его закладке. Обычно это нечасто at once встречающийся нюанс.

Заключение

Надстройка создавалась из соображения аккуратного ведения работы: тщательное комментирование, необходимость версионирования модели данных. Практически необходимо лишь выполнять первое требование — держать открытым в отдельной закладке файл с комментариями к правке и записывать в него свои действия. Как только это необходимо — делать фиксацию. Остальное возьмет на себя скрипт.

4 комментария на «Умное закрепление правки для PhpED»

  1. wd,

    Случается, что (после переустановки ОС или иных кардинальных изменений) скрипт начинает выдавать ошибки транслитерации. В случае, если текст ошибки выдается в нечитаемом виде, то путь к svn.exe не прописан в переменной окружения PATH. Если же вы столкнетесь с чем-то подобным «svn commit failed. Commit failed (details follow): Safe data 'что-то' was followed by non-ASCII byte какой-то: unable to convert to/from UTF-8.», то необходимо создать переменную окружения APR_ICONV_PATH и задать в качестве ее содержимого путь к устанавливаемому вместе с Subversion пакету iconv (обычно это «C:\Program Files\Subversion\iconv»). Перезагрузка на всякий случай.

  2. timdenice,

    Прикольно конечно, я так поюзал немного но сразу же наткнулся на очень жирную проблему, к базе MySQL подключиться невозможно, значения по умолчанию не катят, где прописывается реально хост и т.п. для базы? Явно не только в аккаунте, так как оттуда прописываю а база все равно не работает, как будто ее и нет.

  3. wd,

    Последний листинг — пример настроек, FILENAME_OPTIONS — имя файла с ними. До листинга есть упоминание об этом. «В аккаунте» вы имеете ввиду в самом редакторе? Нусферовцы не потрудились создать более-менее расширяемой среды по скриптингу в редакторе, приходится все делать самостоятельно — данные по базе не берутся из редактора.

  4. phped fan,

    Отличная статья. Уважуха автору.

Оставить отзыв

 

Февраль 2008
Пн Вт Ср Чт Пт Сб Вс
    Март »
 123
45678910
11121314151617
18192021222324
2526272829