2013-08-27 15:14:44 +04:00
|
|
|
#!/usr/bin/env python
|
|
|
|
# -*- coding: utf-8 mode: python -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
|
|
|
|
|
|
|
u"""%(scriptname)s: Plier/déplier des inclusions dans un fichier
|
2015-08-20 07:58:17 +04:00
|
|
|
|
2013-08-27 15:14:44 +04:00
|
|
|
USAGE
|
|
|
|
%(scriptname)s [[options] dest...]
|
|
|
|
|
|
|
|
OPTIONS
|
|
|
|
-f Plier les inclusions
|
|
|
|
-u Déplier les inclusions (par défaut)
|
|
|
|
-@ Forcer le caractère '@' pour le pliage/dépliage
|
|
|
|
-* Forcer le caractère '*' pour le pliage/dépliage
|
|
|
|
--auto
|
|
|
|
Activer la recherche automatique de paramètres (par défaut)
|
|
|
|
--noauto
|
|
|
|
Désactiver la recherche automatique de paramètres
|
|
|
|
-I SPEC
|
|
|
|
Spécifier des fichiers à inclure dans les répertoires spécifiés
|
|
|
|
-X SPEC
|
|
|
|
Spécifier des fichiers à exclure dans les répertoires spécifiés
|
|
|
|
--refdir REFDIR
|
|
|
|
Spécifier le répertoire de référence. Soit un répertoire DEST spécifié
|
|
|
|
dans les arguments. Si un fichier à inclure *n'est pas* un fils du
|
|
|
|
répertoire DEST, l'emplacement effectif du fichier est calculé en
|
|
|
|
faisant comme si DEST==REFDIR.
|
|
|
|
Par exemple, soit DEST=/dest/path et REFDIR=/refdir/path. Si le fichier
|
|
|
|
/dest/path/file inclue le fichier ../inc, alors c'est le fichier
|
|
|
|
/refdir/inc qui est considéré.
|
|
|
|
Ceci permet de traiter les inclusions dans une copie temporaire d'un
|
|
|
|
répertoire, dans le cas où les fichier font référence à d'autres
|
|
|
|
fichiers situés relativement à l'emplacement original.
|
|
|
|
|
|
|
|
Les spécifications de fichiers sont de types glob: ils peuvent contenir les
|
|
|
|
wildcards * et ?. Ils supportent en plus la chaine '**' qui signifie n'importe
|
|
|
|
quelle profondeur de répertoire. 'dir/' est équivalent à 'dir/**' et signifie
|
|
|
|
tous les fichiers situés dans l'arborescence à partir de dir.
|
|
|
|
|
|
|
|
La variable UINCPATH contient une liste de répertoires qui sont consultés pour
|
|
|
|
trouver les fichiers à inclure."""
|
|
|
|
|
|
|
|
import os, sys
|
|
|
|
from os import path
|
|
|
|
|
|
|
|
from ulib.all import *
|
|
|
|
from ulib.p.uinc import Updater, ConsoleOutput
|
|
|
|
|
|
|
|
def display_help():
|
|
|
|
uprint(__doc__ % globals())
|
|
|
|
|
|
|
|
def run_uinc():
|
|
|
|
action, options, args, params = Updater.parse_options(None)
|
|
|
|
for option, value in options:
|
|
|
|
if option in ('-h', '--help'):
|
|
|
|
display_help()
|
|
|
|
sys.exit(0)
|
|
|
|
|
|
|
|
uincdirs = os.environ.get('UINCPATH', '').split(os.pathsep)
|
|
|
|
uincdirs = filter(None, uincdirs)
|
|
|
|
|
|
|
|
updater = Updater(args, **params)
|
|
|
|
updater.out = ConsoleOutput()
|
|
|
|
updater.uincdirs = uincdirs
|
|
|
|
|
|
|
|
if updater.auto:
|
|
|
|
auto_args = u"\n ".join([relpath(p) for p in updater.args])
|
|
|
|
auto_msg = u"""Les fichiers/répertoires suivants seront traités:
|
|
|
|
%s
|
|
|
|
Cette liste a été calculée automatiquement. Vous pouvez désactiver la
|
|
|
|
configuration automatique avec --noauto. Voulez-vous continuer?""" % auto_args
|
|
|
|
if not ask_yesno(auto_msg, True):
|
|
|
|
return False
|
|
|
|
|
|
|
|
should_update, reason = updater.should_update()
|
|
|
|
if should_update:
|
|
|
|
return updater.update(action)
|
|
|
|
else:
|
|
|
|
ewarn(u"no update because %s" % reason)
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
raise Exit(run_uinc())
|