RSS para TAGS do CVS
Publicado por Pedro Robson Leão 06/08/2007
[ Hits: 6.932 ]
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.
#!/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};
Instale o driver proprietário Nvidia baixado do site oficial em qualquer distro
SSSR - configure Samba no Damn Small Linux e DSL-N
Calculadora de host de uma rede
Nenhum comentário foi encontrado.
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Problemas com Driver NVIDIA (5)
Warcraft II Remastered no Linux? (8)
Instalação dualboot Windows 11 e Debian 13 (7)









