File "svnadmin.sh"

Full path: /www/wwwroot/fabriciovc.eti.br/downloads/scripts/debian/zimbra/html_php/svn/svnadmin.sh
File size: 6.34 KiB (6489 bytes)
MIME-type: text/x-shellscript
Charset: utf-8

Download   Open   Back

#!/bin/bash
#
# svnadmin.shr
# Script de administracao ddo subversion
# http://downloads.fabriciovc.eti.br/svn/svnadmin.sh
#
# Copyright (C) 2011 - Fabricio Vaccari Constanski
# Fabricio Vaccari Constanski | fabriciovc@fabriciovc.eti.br
# 20081022, FabricioVC - Versao inicial
# 20110620, FabricioVC - Correcao do menu, removendo o select.
#
# Creative Commons
# Atribuicao-Compartilhamento pela mesma Licenca 3.0 Brasil.
# http://creativecommons.org/licenses/by/3.0/br/
#
# Voce tem a liberdade de:
# * Compartilhar: copiar, distribuir e transmitir a obra.
# * Remixar: criar obras derivadas.
#
# Sob as seguintes condicoes:
# * Atribuicao: Voce deve creditar a obra da forma especificada ao autor
# * Aviso: Para qualquer reutilizacao ou distribuicao, voce deve deixar claro
#          a terceiros os termos da licenca a que se encontra submetida esta 
#          obra. A melhor maneira de fazer isso e com um link para a pagina
#          http://creativecommons.org/licenses/by/3.0/br/.
#=============================================================================#
# CONFIGURAR AS VARIAVEIS A SEGUIR
SVN_HOME=/srv/svn			# Diretorio onde os repositorios do subversion serao armazenados
USUARIO_APACHE=www-data			# Usuario que executa o apache2
GRUPO_APACHE=www-data			# Grupo do usuario que executa o apache2
SVN_APACHE=/etc/apache2/svn		# Diretorio com as entradas do svn no apache
PAGINA_WEB=/svn				# Endereco web que ficara o repositorio http://servidor/svn
ARQUIVO_SENHA=$SVN_APACHE/passwd	# Local ddos arquivos de senha usuarios do subversion

# Variaveis de comando
SVNADMIN=`which svnadmin`
RM=`which rm`
CAT=`which cat`
CHMOD=`which chmod`
CHOWN=`which chown`

# Funcoes
_MENU () {
echo
echo "1) Criar Repositorio"
echo "2) Listar Repositorio"
echo "3) Reparar Repositorio"
echo "4) Excluir Repositorio"
echo "Q) Sair"
echo
echo "Escolha uma opcao a seguir para gerenciar os repositórios:"
echo -n "#? "
read OPT

case $OPT in
    "1") _CRIAR_REPOSITORIO; _MENU ;;
    "2") _LISTAR_REPOSITORIO; _MENU ;;
    "3") _REPARAR_REPOSITORIO; _MENU ;;
    "4") _EXCLUIR_REPOSITORIO; _MENU ;;
    q|Q) exit 0 ;;
    *) echo -e "\\033[1;33mForneca uma opcao valida.\\033[0;39m" ;_MENU ;;
esac
}

_CHECKOK () {
if [ $? -eq 0 ]; then
  sleep 1
  echo -e " \\033[1;32mOK\\033[0;39m"
else
  sleep 1
  echo -e " \\033[1;31mFALHOU\\033[0;39m"
fi
}

_CRIAR_REPOSITORIO () {
echo
echo -n "Entre com o nome do repositorio a ser criado ..: "
read NOME_PROJETO_ADD
if [ -z $NOME_PROJETO_ADD ]; then
  _CRIAR_REPOSITORIO
else
  # verifica se o repositorio ja existe
  if [ -d ${SVN_HOME}/${NOME_PROJETO_ADD} ]; then
    echo -e "Repositorio \\033[1;34m${NOME_PROJETO_ADD}\\033[0;39m \\033[1;33mja existe\\033[0;39m!!"
  else
    if `${SVNADMIN} create ${SVN_HOME}/${NOME_PROJETO_ADD} 2> /dev/null` ; then
      echo -e "Repositorio \\033[1;34m${NOME_PROJETO_ADD}\\033[0;39m \\033[1;33mcriado\\033[0;39m com sucesso!!"
      echo
      # Mudando as permissoes
      echo -n "Mudando as permissoes de escrita do diretório ${SVN_HOME}/${NOME_PROJETO_ADD} ..:"
      $CHMOD -R g+ws ${SVN_HOME}/${NOME_PROJETO_ADD}
      _CHECKOK
      # Mudando Usuários e Grupos
      echo -n "Mudando as permissões de usuário do diretório ${SVN_HOME}/${NOME_PROJETO_ADD} ..:"
      $CHOWN -R ${USUARIO_APACHE}:${GRUPO_APACHE} ${SVN_HOME}/${NOME_PROJETO_ADD}
      _CHECKOK  
      _APACHE_ADD
    else
      echo -e "\\033[1;31mErro\\033[0;39m na criacao do repositorio \\033[1;34m${NOME_PROJETO_ADD}\\033[0;39m!!"
    fi
  fi
fi
}

_APACHE_ADD () {
#touch $SVN_APACHE/${NOME_PROJETO}
#sleep 1

echo -n "Criando as entradas no apache ..:"
$CAT << EOF > $SVN_APACHE/${NOME_PROJETO_ADD}
<Location $PAGINA_WEB/${NOME_PROJETO_ADD}>
  DAV svn

  SVNPath ${SVN_HOME}/${NOME_PROJETO_ADD}

  AuthType Basic
  AuthName "Repositorio ${NOME_PROJETO_ADD}"

#  <LimitExcept GET PROPFIND OPTIONS REPORT>
#    AuthUserFile ${ARQUIVO_SENHA}
#    AuthzSVNAccessFile $SVN_APACHE/${NOME_PROJETO_ADD}
#    Require valid-user
#  </LimitExcept>
</Location>
EOF
_CHECKOK

echo -n "Relendo as configuracoes do servidor web apache ..:"
/etc/init.d/apache2 reload > /dev/null
_CHECKOK
}

_LISTAR_REPOSITORIO () {
echo
echo "Lista de repositórios existentes:"
for LIST in `ls $SVN_HOME/`
do
  echo -e "-> \\033[1;34m$LIST\\033[0;39m"
done 
}

_REPARAR_REPOSITORIO () {

_LISTAR_REPOSITORIO
echo
echo -n "Qual repositório deseja reparar? "
read NOME_PROJETO_REP
if [ -z $NOME_PROJETO_REP ]; then
  _REPARAR_REPOSITORIO
else
  if [ -d ${SVN_HOME}/$NOME_PROJETO_REP ]; then
    echo -n "Realmente reparar o repositório $NOME_PROJETO_REP ? (s/n) ..: "
    read SN
    if [ -z $SN  ] || [ $SN != s ]; then 
      echo -e "Repositorio \\033[1;34m${NOME_PROJETO_REP}\\033[0;39m \\033[1;31mnao\\033[0;39m reparado!!"
    elif [ $SN = s ]; then
      $SVNADMIN recover ${SVN_HOME}/$NOME_PROJETO_REP
      echo -e "Repositorio \\033[1;34m${NOME_PROJETO_REP}\\033[0;39m \\033[1;33mreparado\\033[0;39m com sucesso!!"
    fi
  else
    echo -e "Repositorio \\033[1;34m${NOME_PROJETO_REP}\\033[0;39m \\033[1;31mnao existe\\033[0;39m!!"
    _REPARAR_REPOSITORIO
  fi
fi  
}

_EXCLUIR_REPOSITORIO () {

_LISTAR_REPOSITORIO
echo
echo -n "Qual repositório deseja excluir ..:"
read NOME_PROJETO_DEL
if [ -z $NOME_PROJETO_DEL ]; then
  _EXCLUIR_REPOSITORIO
else
  if [ -d ${SVN_HOME}/$NOME_PROJETO_DEL ]; then
    echo -n "Realmente remover o repositório $NOME_PROJETO_DEL ? (s/n) ..: "
    read SN
    if [ -z $SN  ] || [ $SN != s ]; then 
      echo -e "Repositorio \\033[1;34m${NOME_PROJETO_DEL}\\033[0;39m \\033[1;31mnao\\033[0;39m removido!!"
    elif [ $SN = s ]; then
      $RM -rf $SVN_HOME/$NOME_PROJETO_DEL
      echo -e "Repositorio \\033[1;34m${NOME_PROJETO_DEL}\\033[0;39m \\033[1;33mremovido\\033[0;39m com sucesso!!"
      echo
      echo -n "Removendo as entradas no apache ..:"
      $RM -f $SVN_APACHE/${NOME_PROJETO_DEL}
      _CHECKOK
      echo -n "Relendo as configuracoes do servidor web apache ..:"
      /etc/init.d/apache2 reload > /dev/null
      _CHECKOK
    fi
  else
    echo -e "Repositorio \\033[1;34m${NOME_PROJETO_DEL}\\033[0;39m \\033[1;31mnao existe\\033[0;39m!!"
    _EXCLUIR_REPOSITORIO
  fi
fi  
}

clear
echo -e "\\033[1;33m--------------------------------------------------------------------\\033[0;39m"
echo -e "\\033[1;33m          SISTEMA DE GERENCIAMENTO DE REPOSITORIO SVN               \\033[0;39m"
echo -e "\\033[1;33m--------------------------------------------------------------------\\033[0;39m"
_MENU

PHP File Manager