На девелоперской базе очень удобно выгружать весь код и сравнивать его с текущей веткой в системе управления версиями, будь то хоть subversion, git или mercurial. Например, тимлид может каждую пятницу смотреть, что забыли закоммитить и вовремя напомнить программерам описать и закоммитить изменения. К тому же можно там же автоматически сгенерировать документацию по ним для данной ветки с помощью doxygen и положить на девелоперский вебсервер.
Это очень легко реализуется прямо на девелоперской базе выгрузкой кодов в соответствующие директории на сервере и выполнением svn или git status. Для выполнения же команд на сервере есть множество различных функций, но нигде я не нашел функций с возможностью установки таймаута выполнения команды, поэтому написал свою.
Функционала пока маловато, т.к. мало времени и был бы рад, если кто-нибудь присоединился к работе над пакетом, но тем не менее прошу любить и жаловать :)- Пакет для выполнения команд в оси: http://github.com/xtender/xt_shell
- Пакет для выгрузки кода и зачатков работы с svn: http://github.com/xtender/xt_svn
Пакет XT_SHELL
Функция xt_shell.shell_exec(pCommand in varchar2,timeout in number)
Возвращает коллекцию varchar2 (varchar2_table)
Параметры:- pCommand - строка команды
- timeout - таймаут в миллисекундах, после которого выполнение команды прервется
Установка
Для установки выполняем скрипты в следующем порядке:
- @varchar2_table.tps
- @xt_shell.jsp
- @XT_SHELL.spc
Примеры:
declare
output varchar2_table;
begin
output:=xt_shell.shell_exec('/bin/ls -l',100);
for c in output.first..output.last loop
dbms_output.put_line(output(c));
end loop;
end;
select * from table(xt_shell.shell_exec('/bin/ls -l',100))
Пакет XT_SVN
Переменные по умолчанию, которые вы можете переопределить
- REP_PATH varchar2(30):='/var/svn';
- SVN_PATH varchar2(30):='/usr/bin/svn';
Функции:
function export( pPath varchar2 default REP_PATH, pOwner varchar2 default user, pType varchar2 default '%', pName varchar2 default '%') return number;
Выгружает исходные коды соответствующие маскам pOwner,pType,pName в pPath директорию и возвращает количество выгруженных скриптов.
function svn_status(pPath varchar2 default REP_PATH) return varchar2_table;
Возвращает svn status директории pPath в виде коллекции varchar2(varchar2_table)
function svn_statuses(pPath varchar2 default REP_PATH) return svn_status_table pipelined;
Тоже самое, но возвращает в виде коллекции объектов
function svn_checkout( pUrl varchar2, pPath varchar2 default REP_PATH, pUser varchar2 default null, pPass varchar2 default null) return varchar2_table;
Выполняет checkout из svn
function svn_commit( pPath varchar2 default REP_PATH, pUser varchar2 default null, pPass varchar2 default null ) return varchar2_table;
Коммитит изменения в pPath
function svn( command varchar2) return varchar2_table;
Выполняет команду "svn "||command
Примеры:
declare output varchar2_table; begin output:=xt_svn.svn_status(); for c in output.first..output.last loop dbms_output.put_line(output(c)); end loop; end;
select * from table(xt_svn.svn_statuses('/var/svn/project1'))
Установка
- Устанавливаем http://github.com/xtender/xt_shell
- Выполняем скрипты в следующем порядке:
- @svn_types.sql
- @xt_svn.jsp
- @XT_SVN.pck
- Даем гранты на чтение/запись выполнение - примеры в grants.sql
Comments
Еще можете взглянуть на oracle-ddl2svn
Написал специально для того, чтобы выгружать оракловую базу в виде DDL скриптов в SVN автоматически.
@resheto, спасибо, посмотрю :)
Отправить комментарий