#!/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 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())