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