Пакет для выполнения команд операционной системы в Oracle с таймаутом, пакет для экспорта исходных кодов функций, процедур, пакетов и тд и работы с SVN, GIT etc


На девелоперской базе очень удобно выгружать весь код и сравнивать его с текущей веткой в системе управления версиями, будь то хоть subversion, git или mercurial. Например, тимлид может каждую пятницу смотреть, что забыли закоммитить и вовремя напомнить программерам описать и закоммитить изменения. К тому же можно там же автоматически сгенерировать документацию по ним для данной ветки с помощью doxygen и положить на девелоперский вебсервер.

Это очень легко реализуется прямо на девелоперской базе выгрузкой кодов в соответствующие директории на сервере и выполнением svn или git status. Для выполнения же команд на сервере есть множество различных функций, но нигде я не нашел функций с возможностью установки таймаута выполнения команды, поэтому написал свою.

Функционала пока маловато, т.к. мало времени и был бы рад, если кто-нибудь присоединился к работе над пакетом, но тем не менее прошу любить и жаловать :)

Пакет 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'))

Установка

  1. Устанавливаем http://github.com/xtender/xt_shell
  2. Выполняем скрипты в следующем порядке:
    • @svn_types.sql
    • @xt_svn.jsp
    • @XT_SVN.pck
  3. Даем гранты на чтение/запись выполнение - примеры в grants.sql
* This source code was highlighted with Source Code Highlighter.

Comments

resheto комментирует...

Еще можете взглянуть на oracle-ddl2svn
Написал специально для того, чтобы выгружать оракловую базу в виде DDL скриптов в SVN автоматически.

Sayan Malakshinov комментирует...

@resheto, спасибо, посмотрю :)

Отправить комментарий