Jump to content

SVN updater (em perl)


orium
 Share

Recommended Posts

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);

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.