releasing version 1.1.1
[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
P
4
5Copyright ©2009 Agence universitaire de la Francophonie
6Licence : GPL version 3
7Auteur : Progfou <jean-christophe.andre@auf.org>
8
dbd7f4a1 9Dépendances Debian : python >= 2.5
167a10d9
P
10"""
11
167a10d9 12RUN_USER = 'auf-refer'
167a10d9 13
5b826c54 14__all__ = ( 'RUN_USER' )
167a10d9 15
5b826c54 16USAGE = """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
26L'option -f permet de forcer le rechargement à travers un proxy/cache.
27"""
28
f9dea086 29from sys import argv, exit, stdout, stderr
167a10d9
P
30from getopt import getopt, GetoptError
31from pwd import getpwnam
5b826c54
P
32from os import getuid, setgid, setuid
33import aufrefer
167a10d9
P
34
35if __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