auf-refer-photos : ajout des options -v et -f dans l'aide
[auf-refer.git] / auf-refer
CommitLineData
5b826c54 1#!/usr/bin/python
167a10d9 2# -*- coding: utf-8 -*-
5b826c54 3"""Outil de copie et mise à jour des référentiels AuF.
167a10d9 4
e38bdc22 5Copyright ©2009-2011 Agence universitaire de la Francophonie
167a10d9
P
6Licence : GPL version 3
7Auteur : Progfou <jean-christophe.andre@auf.org>
8
dbd7f4a1 9Dépendances Debian : python >= 2.5
167a10d9 10"""
6604a5cf
P
11from sys import argv, exit, stdout, stderr
12from getopt import getopt, GetoptError
13from pwd import getpwnam
14from os import getuid, setgid, setuid
15import aufrefer
167a10d9 16
167a10d9 17RUN_USER = 'auf-refer'
167a10d9 18
5b826c54 19__all__ = ( 'RUN_USER' )
167a10d9 20
5b826c54 21USAGE = """Usages (nécessite parfois "root", par exemple via "sudo") :
167a10d9 22 auf-refer [-f] -a <ref> - copie un nouveau référentiel
5b826c54 23 auf-refer -r <ref> - supprime un référentiel
dbd7f4a1
P
24 auf-refer -p <ref> - affiche le chemin d'accès à un référentiel
25 auf-refer -c <ref> - affiche le contenu d'un référentiel
167a10d9
P
26 auf-refer [-f] -u - met à jour les référentiels
27 auf-refer -l - liste les référentiels copiés
5b826c54 28 auf-refer [-f] -L - liste les référentiels disponibles
167a10d9
P
29 auf-refer [-f] -A - copie tous les référentiels disponibles
30
31L'option -f permet de forcer le rechargement à travers un proxy/cache.
32"""
33
167a10d9
P
34if __name__ == '__main__':
35 # interdiction formelle de tourner sous 'root'
36 if getuid() == 0:
5b826c54
P
37 try:
38 pw = getpwnam(RUN_USER)
39 except KeyError:
dbd7f4a1 40 raise RuntimeError, "L'utilisateur '%s' n'existe pas." % RUN_USER
5b826c54
P
41 try:
42 setgid(pw.pw_gid)
43 setuid(pw.pw_uid)
44 except OSError:
45 raise RuntimeError, \
dbd7f4a1
P
46 "Impossible de basculer vers l'utilisateur '%s'.\n" \
47 "Réessayez avec 'sudo' !" % RUN_USER
167a10d9
P
48
49 try:
dbd7f4a1
P
50 opts, args = getopt(argv[1:], 'hfa:r:p:c:ulLA', ['help', 'force',
51 'add=', 'remove=', 'path=', 'content=', 'update', 'list',
167a10d9
P
52 'list-available', 'add-available'])
53 except GetoptError:
54 print USAGE
55 exit(1)
56
57 force = False
58 for opt, arg in opts:
59 if opt in ('-h', '--help'):
60 print USAGE
61 exit(0)
62 elif opt in ('-f', '--force'):
63 force = True
64 else:
65 try:
66 if opt in ('-a', '--add'):
5b826c54
P
67 aufrefer.add(arg, force=force)
68 elif opt in ('-r', '--remove'):
69 aufrefer.remove(arg)
dbd7f4a1
P
70 elif opt in ('-p', '--path'):
71 print aufrefer.path(arg)
72 elif opt in ('-c', '--content'):
73 f = file(aufrefer.path(arg), 'rb')
74 stdout.write(f.read())
75 f.close()
167a10d9 76 elif opt in ('-u', '--update'):
5b826c54 77 aufrefer.update(force=force)
167a10d9 78 elif opt in ('-l', '--list'):
e38bdc22 79 for referentiel in aufrefer.list_present():
5b826c54 80 print referentiel
167a10d9 81 elif opt in ('-L', '--list-available'):
e38bdc22
P
82 l = aufrefer.list_available(force=force)
83 for referentiel in sorted(l):
84 print "%-16s : %s" % (referentiel, l[referentiel])
167a10d9 85 elif opt in ('-A', '--add-available'):
5b826c54 86 aufrefer.add_available(force=force)
dbd7f4a1
P
87 except RuntimeError, e:
88 print >>stderr, e
167a10d9
P
89
90 if not opts:
91 print USAGE
92 exit(0)
93