RSS para TAGS do CVS

Publicado por Pedro Robson Leão 06/08/2007

[ Hits: 6.700 ]

Download cvs-rss.sh




O script a seguir analisa a criação de TAGS do CVS e cria um arquivo RSS com estas informações:

Os comentarios podem ajudar com a instalação.

O script é incluído no arquivo taginfo do cvs e sempre que uma TAG é adicionada, movida ou apagada, o arquivo RSS é atualizado.

Para acessar o resultado, você pode usar seu cliente RSS preferido.

Qualquer duvida, mande um email.


  



Esconder código-fonte

#!/usr/bin/bash

# trata interrupcoes
trap 'rm -f .*$$ /tmp/.lockRss${CVS_ROOT}; exit 0' 1 2 3 6 9 13 14 15 16 17 23 24 26;

##
# cvs-rss.sh
#
# Tem por finalidade gerar um arquivo feed para os logs do CVS.
#
# Dependencias:
# cvs
# nawk ou awk
# cut
# cat
# date
# grep
# ftp
# cd
# rm
# touch
# xargs
# bash
# cvsweb
#
# ${CVSROOT}/CVSROOT/users - para pegar email dos usuarios
#
#
#
# Instalacao
#
# incluir no arquivo ${CVSROOT}/CVSROOT/taginfo
# a linha que segue:
#
# DEFAULT $CVSROOT/CVSROOT/cvs-rss.sh
#
# Obs: Meu script esta dentro do CVSROOT
#      O arquivo de saida eh o rssCvs.xml out rssCvs${CVS_ROOT}.xml
#
# @autor Pedro Robson Leao pedro.leao at gmail.com
# @since Jul/2007
#
# $Id: $
##

AWK=nawk;

#
# Os dados a seguir podem ser incluidos no arquivo cvs-rssrc no home do usuario ou no diretorio CVSROOT
#

#parametros globais
# URL cvsweb
CVSWEBURL="http://localhost/cgi-bin/cvsweb-x.cgi";
# ROOT para o cvsweb caso tenha mais de um repositorio configurado
CVS_ROOT="";
# Usuario e senha ftp para o post do rss
FTP_USER="ftpuser";
FTP_PASS="ftppass";
# Host destino ftp
FTP_HOST="localhost";
# Diretorio destino do rss
FTP_DIR="rss";
#------------------------------------------

# importa arquivos rc caso exista - o arquivo do CVSROOT tem maior precedencia
[ -f  ~/.cvs-rssrc ] && source ~/.cvs-rssrc;
[ -f  ${CVSROOT}/CVSROOT/cvs-rssrc ] && source ${CVSROOT}/CVSROOT/cvs-rssrc;


# pesquisa email dos usuarios
LOCAL_USER=$( grep ${USER} ${CVSROOT}/CVSROOT/users 2>/dev/null | cut -d : -f 2 );

if [ -z "${LOCAL_USER}" ] ; then
   LOCAL_USER=${USER};
   LINK_USER=${USER};
else
   LINK_USER="<a href=\"mailto:${LOCAL_USER}\">${USER%%@*}</a>"
fi

# inclui header rss
function putStart() {
   cat <<EOF >>.head.$$
<rss version="2.0"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   >

<channel>
   <title>CVS TAG'S   ${CVS_ROOT}</title>
   <link>${URL}</link>
   <description>Monitor de TAGS do CVS</description>
   <pubDate>$( date )</pubDate>

   <generator>http://wordpress.org/?v=MU</generator>
   <language>pt-br</language>
EOF
}

# inclui end rss
function putEnd() {
   cat <<EOF >>.end.$$
   </channel>
</rss>
EOF
}

# pega rss existente
function getHist() {
   ${AWK} '
/\<item\>/ {
   flg=1
}

flg
   '
}

# envia ftp para a maquina de publicacao
function manda() {
   cd /tmp;
   ftp -in ${FTP_HOST} <<EOF
user ${FTP_USER} ${FTP_PASS}
cd ${FTP_DIR}
put cvsRss${CVS_ROOT}.xml
bye
EOF
   cd -;
}

#junta as partes do rss
function montaRss() {

   day=$( date +%u );

   [ ! -f /tmp/.rss${CVS_ROOT} ] && {
      [ $day -eq 1 ] && {
         rm  -f /tmp/cvsRss${CVS_ROOT}.xml;
         touch /tmp/.rss${CVS_ROOT};
      }
   }

   [ $day -ne 1 ] && rm -f /tmp/.rss${CVS_ROOT};

   putStart;

   if [ -f /tmp/cvsRss${CVS_ROOT}.xml ] ; then
      cat /tmp/cvsRss${CVS_ROOT}.xml | getHist >>.$USER.$$;
   else
      putEnd;
      cat .end.$$ >>.$USER.$$;
   fi

   cat .head.$$ .$USER.$$ >/tmp/cvsRss${CVS_ROOT}.xml;
   manda;
   chmod 777 /tmp/cvsRss${CVS_ROOT}.xml >/dev/null 2>&1;
}

#semaforo - controla geracoes simultaneas
while [ -f /tmp/.lockRss${CVS_ROOT} ] ;do sleep 1;  done
touch /tmp/.lockRss${CVS_ROOT};

# main - processo inicial
parms=${@:-"bMyTestPRL add /Development/Teste/contingencia202 contingencia202.c 1.1 contingenciaCompra.c 1.1 converte.sonda.awk 1.1 makefile 1.1"};

branch=$(  echo ${parms} | cut -d " " -f 1  );
action=$(  echo ${parms} | cut -d " " -f 2  );
cvsroot=$( echo ${parms} | cut -d " " -f 3  );
files=$(   echo ${parms} | cut -d " " -f 4- );


cvsroot=$( echo $cvsroot | sed s/"^\/[a-zA-Z]*\/"// );
URL="${CVSWEBURL}/${cvsroot}";

[ ! -z "${CVS_ROOT}" ] && URL=${URL}/?cvsroot=${CVS_ROOT};

URL="${URL};only_with_tag=${branch}";

echo >>.$$;
echo "<b>$( date ) - ${HOSTNAME} - ${LINK_USER}</b><br>" >>.$$;


# monta links do item
echo ${files} | xargs -n 2 | while read line ; do

   rev=$( echo $line | cut -d " " -f 2 );

   link="${CVSWEBURL}/${cvsroot}/$( echo ${line} | cut -d ' ' -f 1 )?rev=${rev};content-type=text%2Fx-cvsweb-markup";
   [ ! -z "${CVS_ROOT}" ] && link="${link};cvsroot=${CVS_ROOT}";
   link="${link};only_with_tag=${branch}";

   if [ "${action}" == "del" ] ; then
      echo "         <font color=red>${cvsroot}/${line}</font><br>" >>.$$
   else
      echo "         <a href=\"${link}\">${cvsroot}/${line}</a><br>" >>.$$
   fi
done

f=.$$;

CONTENT=$( cat ${f} );

# monta novo item rss
cat <<EOF >>.$USER.$$
   <item>
      <title>${branch} - ${action}</title>
      <link>${URL}</link>

      <dc:creator>${LOCAL_USER}</dc:creator>
      <pubDate>$(date)</pubDate>
      <category><![CDATA[${action}]]></category>
      <description><![CDATA[${CONTENT}<hr>]]></description>
   </item>
EOF

# gera o arquivo
montaRss;

# apaga locks e arquivos temporarios
rm -f .*$$ /tmp/.lockRss${CVS_ROOT};




Scripts recomendados

Firewall com proxy transparente completo

Intervalo de tempo v.2 - Corrigido

SUED for Linux =]

Removendo carácter especial de arquivos recursivamente

"Ipscan" com shell script+dialog+nmap


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts