2 # -*- coding: utf-8 -*-
3 """Outil de copie et mise à jour des référentiels AuF.
5 Copyright ©2009 Agence universitaire de la Francophonie
6 Licence : GPL version 3
7 Auteur : Progfou <jean-christophe.andre@auf.org>
9 Dépendances Debian : python >= 2.5
12 RUN_USER = 'auf-refer'
14 __all__ = ( 'RUN_USER' )
16 USAGE = """Usages (nécessite parfois "root", par exemple via "sudo") :
17 auf-refer [-f] -a <ref> - copie un nouveau référentiel
18 auf-refer -r <ref> - supprime un référentiel
19 auf-refer -p <ref> - affiche le chemin d'accès à un référentiel
20 auf-refer -c <ref> - affiche le contenu d'un référentiel
21 auf-refer [-f] -u - met à jour les référentiels
22 auf-refer -l - liste les référentiels copiés
23 auf-refer [-f] -L - liste les référentiels disponibles
24 auf-refer [-f] -A - copie tous les référentiels disponibles
26 L'option -f permet de forcer le rechargement à travers un proxy/cache.
29 from sys import argv, exit, stdout, stderr
30 from getopt import getopt, GetoptError
31 from pwd import getpwnam
32 from os import getuid, setgid, setuid
35 if __name__ == '__main__':
36 # interdiction formelle de tourner sous 'root'
39 pw = getpwnam(RUN_USER)
41 raise RuntimeError, "L'utilisateur '%s' n'existe pas." % RUN_USER
47 "Impossible de basculer vers l'utilisateur '%s'.\n" \
48 "Réessayez avec 'sudo' !" % RUN_USER
51 opts, args = getopt(argv[1:], 'hfa:r:p:c:ulLA', ['help', 'force',
52 'add=', 'remove=', 'path=', 'content=', 'update', 'list',
53 'list-available', 'add-available'])
60 if opt in ('-h', '--help'):
63 elif opt in ('-f', '--force'):
67 if opt in ('-a', '--add'):
68 aufrefer.add(arg, force=force)
69 elif opt in ('-r', '--remove'):
71 elif opt in ('-p', '--path'):
72 print aufrefer.path(arg)
73 elif opt in ('-c', '--content'):
74 f = file(aufrefer.path(arg), 'rb')
75 stdout.write(f.read())
77 elif opt in ('-u', '--update'):
78 aufrefer.update(force=force)
79 elif opt in ('-l', '--list'):
80 for referentiel in aufrefer.list():
82 elif opt in ('-L', '--list-available'):
83 list = aufrefer.list_available(force=force)
84 for referentiel in sorted(list):
85 print "%-16s : %s" % (referentiel, list[referentiel])
86 elif opt in ('-A', '--add-available'):
87 aufrefer.add_available(force=force)
88 except RuntimeError, e: