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