• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

orium

SVN updater (em perl)

1 mensagem neste tópico

Uma das coisas bastante chatas que pode acontecer a quem usa svn e' começar a editar um ficheiro e ao fazer commit lembrar-se que não faz svn update e alguem andou a editar precisamente o mesmo ficheiro, isso pode ser muito frustante.

Alem disso muita gente (EU) gosta de manter uma working copy dos seus projectos favoritos, actualizada.

O script que escrevi faz precisamente isso, faz svn update ao ser chamado, de uma lista de ficheiros.

O script so' faz update se não ouver modificações locais para evitar problemas (verifica com svn status).

Para o usarem basta modificarem o valor da variavel $svn_wcopy_owner_username (so' se o pretenderem correr como root (para actualizar repositorios de varios users, por exemplo)).

Devem chamar o script com o ficheiro como argumento, esse ficheiro deve ter, por linha, os caminhos das working copies.

Ja' agora, ponho aqui também um exemplo (que eu pessoalmente uso) de /etc/crontab

/etc/crontab:

30 3 * * * root /root/scripts/svnupdate.pl /root/scripts/config/svn_online_repos # Todas as 3:30 da manha...

svnupdate.pl:

#! /usr/bin/perl -W

#  GPL
#
#  codestats - Written by Diogo Sousa aka orium
#  Copyright (C) 2008 Diogo Sousa
# 
#  This program is free software: you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation, either version 3 of the License, or
#  (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program.  If not, see <http://www.gnu.org/licenses/>.


use strict;

sub update_svn_path
{
my $svnpath=shift;
my $username=shift;
my @status;
my $whoami;

unless (chdir($svnpath))
{
	print(STDERR "$svnpath: $!\n");
	return;
}

@status=`svn --non-interactive status`;

if (!($#status+1)) # Only update when there is nothing new
{
	$whoami=`whoami`;
	chomp($whoami);

	if ($whoami eq "root")
	{
		system("su $username -c 'svn --non-interactive update'");
	}
	else
	{
		system("svn --non-interactive update");
	}
}
}

my $svn_wcopy_owner_username='orium'; # Por aqui o vosso username
my $svnpath;
my $wd=`pwd`;

while ($svnpath=<>)
{
chomp($svnpath);
update_svn_path($svnpath,$svn_wcopy_owner_username);
}

chdir($wd);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora