nutools/lib/ulib/support/uinc.py

82 lines
3.0 KiB
Python
Raw Normal View History

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
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 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())