deixando os repositórios atualizados

mulatinho - - 4 mins read

Para quem desenvolve ou acompanha um projeto livre e precisa estar sempre atualizado com os últimos commits segue um script que ajuda bastante no processo, por enquanto só deve funcionar no git e no subversion.

Se você tem uma pasta apenas para os repositórios como eu ( /home/mulatinho/repo) basta adicionar o script abaixo e definir as variáveis $subdir (caso tenha subdiretórios com repositórios) e a $nodir (caso não queira incluir arquivos e/ou diretórios na atualização). Segue os exemplos:

$ cat updaterepo.sh
#!/bin/bash
basedir=${HOME}/repo
subdir="github"
nodir="codigolivre.org.br|update.sh"

function do_update()
{
	echo "entrando em '${1}'.."
	cd ${1} 2>/dev/null

	repositorio=`echo ${1} | awk -F'/' '{print $NF}'`
	if git status >/dev/null 2>&1;
	then
		echo "atualizando git repositorio '${repositorio}'"
		git pull
	elif svn status | egrep -i 'not a working copy' >/dev/null 2>&1;
	then
		echo "atualizando svn repositorio '${repositorio}'"
		svn update
	else
		echo "'${repositorio}' nao eh um repositorio git ou svn"
	fi

	echo
	echo
}

#principal
for workdir in ${basedir}/*;
do
	if echo ${workdir} | egrep "${subdir}" >/dev/null 2>&1
	then
		rdir=${workdir}
		for workdir in ${rdir}/*;
		do
			do_update "${workdir}"
		done
	elif echo ${workdir} | egrep "${nodir}" >/dev/null 2>&1
	then
		continue
	else
		do_update "${workdir}"
	fi

done

cd ${basedir}

Rodando o script e vendo o resultado de todos os repositórios listados em (${HOME}/repo) sendo atualizados!

$ ./update.sh
entrando em '/home/mulatinho/repo/gcc'..
atualizando git repositorio 'gcc'
remote: Counting objects: 91, done.
remote: Compressing objects: 100% (41/41), done.
remote: Total 42 (delta 34), reused 0 (delta 0)
Unpacking objects: 100% (42/42), done.
From git://gcc.gnu.org/git/gcc
   3cef9c1..23c6c8a  master     -> origin/master
   0afe1df..03e935b  gcc-4_7-branch -> origin/gcc-4_7-branch
   fe4904a..4ef7667  gcc-4_8-branch -> origin/gcc-4_8-branch
   3cef9c1..23c6c8a  trunk      -> origin/trunk
Updating 3cef9c1..23c6c8a
Fast-forward
 gcc/ChangeLog                           |  28 +++++++++++++
 gcc/DATESTAMP                           |   2 +-
 gcc/config/rs6000/linux64.h             |  30 +++++++-------
 gcc/config/rs6000/rs6000.md             |  34 ++++++++++------
 gcc/config/rs6000/sysv4.h               |  49 +++++++++++------------
 gcc/config/sh/iterators.md              |   3 ++
 gcc/config/sh/predicates.md             |  28 +++++++++++++
 gcc/config/sh/sh.c                      |  16 ++++++++
 gcc/config/sh/sh.md                     | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 gcc/testsuite/ChangeLog                 |   7 ++++
 gcc/testsuite/gcc.target/sh/pr55303-1.c |  87 ++++++++++++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.target/sh/pr55303-2.c |  35 ++++++++++++++++
 gcc/testsuite/gcc.target/sh/pr55303-3.c |  15 +++++++
 13 files changed, 417 insertions(+), 51 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/sh/pr55303-1.c
 create mode 100644 gcc/testsuite/gcc.target/sh/pr55303-2.c
 create mode 100644 gcc/testsuite/gcc.target/sh/pr55303-3.c
 13 files changed, 417 insertions(+), 51 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/sh/pr55303-1.c
 create mode 100644 gcc/testsuite/gcc.target/sh/pr55303-2.c
 create mode 100644 gcc/testsuite/gcc.target/sh/pr55303-3.c

entrando em '/home/mulatinho/repo/geany'..
atualizando git repositorio 'geany'
Already up-to-date.

entrando em '/home/mulatinho/repo/github/bacuri'..
atualizando git repositorio 'bacuri'
Already up-to-date.

entrando em '/home/mulatinho/repo/github/docs'..
atualizando git repositorio 'docs'
Already up-to-date.

entrando em '/home/mulatinho/repo/github/pub'..
atualizando git repositorio 'pub'
Already up-to-date.

entrando em '/home/mulatinho/repo/github/sfm'..
atualizando git repositorio 'sfm'
Already up-to-date.

entrando em '/home/mulatinho/repo/gus-pe'..
atualizando git repositorio 'gus-pe'
Updating '.':
A    teste
A    teste/teste.txt

entrando em '/home/mulatinho/repo/keymouse'..
atualizando git repositorio 'keymouse'
Already up-to-date.

entrando em '/home/mulatinho/repo/linux-stable'..
atualizando git repositorio 'linux-stable'
Already up-to-date.

entrando em '/home/mulatinho/repo/slapt-get'..
updating git repository 'slapt-get'
From http://software.jaos.org/git/slapt-get
   9617037..d1a5737  master     -> origin/master
 * [new branch]      slack13.37 -> origin/slack13.37
Updating 9617037..d1a5737
Fast-forward
 ChangeLog                  |   6 +
 default.slapt-getrc.i386   |  10 +-
 default.slapt-getrc.x86_64 |  10 +-
 example.slapt-getrc        | 116 ++++++++-------
 example.slapt-getrc.i386   | 122 +++++++--------
 example.slapt-getrc.x86_64 | 124 ++++++++--------
 po/bg.po                   |  78 ++--------
 po/cs.po                   |  71 ++-------
 po/{cz.po => da.po}        | 350 +++++++++++++++++++------------------------
 po/de.po                   |  86 ++---------
 po/el.po                   | 105 ++++---------
 po/es.po                   |  96 +++---------
 po/es_AR.po                |  95 +++---------
 po/es_ES.po                | 104 +++----------
 po/fr.po                   | 303 +++++++++++++++----------------------
 po/{en.po => he.po}        | 370 +++++++++++++++++++++-------------------------
 po/hu.po                   |  60 ++++----
 po/id.po                   |  82 ++--------
 po/it.po                   |  78 ++--------
 po/ja.po                   |  84 ++---------
 po/nl.po                   |  76 ++--------
 po/no.po                   |  78 ++--------
 po/pl.po                   |  83 ++---------
 po/pt.po                   | 607 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 po/pt_BR.po                |  95 +++---------
 po/pt_PT.po                |  85 ++---------
 po/ro.po                   |  77 ++--------
 po/ru.po                   |  44 ++----
 po/sk.po                   |  71 ++-------
 po/sl.po                   |  80 ++--------
 po/sv.po                   | 136 ++++++-----------
 po/tr.po                   |  79 ++--------
 po/uk.po                   | 150 ++++++-------------
 po/vi.po                   |  80 ++--------
 po/zh_CN.po                |  66 ++-------
 src/action.c               |   2 +-
 src/main.c                 |   1 +
 37 files changed, 1678 insertions(+), 2482 deletions(-)
 rename po/{cz.po => da.po} (51%)
 rename po/{en.po => he.po} (52%)
 create mode 100644 po/pt.po

entrando em '/home/mulatinho/repo/xf86-video-intel'..
atualizando git repositorio 'xf86-video-intel'
Already up-to-date.

entrando em '/home/mulatinho/repo/xfce4-notes-plugin'..
atualizando git repositorio 'xfce4-notes-plugin'
Already up-to-date.

Okay, mas eu tenho que ficar rodando esse lance toda hora!? Não!

$ crontab -e
0 * * * * /home/mulatinho/repo/updaterepo.sh

Pronto! Agora a toda hora que passa todos os seus repositórios serão atualizados sem bronca! É isso, continue acompanhando!