172 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			172 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/bash
 | 
						|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
 | 
						|
 | 
						|
function display_help() {
 | 
						|
    uecho "$scriptname: Outil pour gérer des projets
 | 
						|
 | 
						|
USAGE
 | 
						|
    $scriptname cmd [args]
 | 
						|
 | 
						|
COMMANDS
 | 
						|
    getvcs [dir]
 | 
						|
        Afficher le type de VCS pour dir.
 | 
						|
    getroot [dir]
 | 
						|
        Si dir est un répertoire versionné, retourner le répertoire racine du
 | 
						|
        projet versionné.
 | 
						|
    getrepos [dir]
 | 
						|
        Si dir est un répertoire versionné, retourner l'url du repository du
 | 
						|
        projet versionné.
 | 
						|
    geturl [dir]
 | 
						|
        Si dir est un répertoire versionné, retourner son url dans le
 | 
						|
        repository.
 | 
						|
    fold [dir]
 | 
						|
    unfold [dir]
 | 
						|
        Utiliser uinc pour défaire (resp. refaire) toutes les inclusions des
 | 
						|
        fichiers de dir. Cela ne fonctionne que si un fichier .uir est configuré
 | 
						|
        à la racine du projet avec inc=true (ou un fichier .uinst.conf avec
 | 
						|
        update_inc=true
 | 
						|
    vcs [args]
 | 
						|
        Appeler le gestionnaire de gestion approprié avec les arguments donnés.
 | 
						|
    add files...
 | 
						|
        Ajouter les fichiers files dans le gestionnaire de version.
 | 
						|
    remove files...
 | 
						|
        Supprimer les fichiers versionnés files.
 | 
						|
    copy from to
 | 
						|
        Copier le fichier versionné from vers le fichier to.
 | 
						|
    move from to
 | 
						|
        Renommer le fichier versionné from vers le fichier to.
 | 
						|
    mkdir dir
 | 
						|
        Créer un nouveau répertoire versionné.
 | 
						|
    commit message [files...]
 | 
						|
        Enregistrer les modifications (par défaut sur tous les fichiers
 | 
						|
        modifiés) avec le commentaire message.
 | 
						|
    status
 | 
						|
        Afficher l'état des fichiers versionnés et non versionnés.
 | 
						|
    update [-x]
 | 
						|
        Mettre à jour la copie locale avec la copie sur le serveur.
 | 
						|
        -x  Ne pas mettre à jour les références externes (si appliquable)
 | 
						|
    diff [options]
 | 
						|
        Afficher les différences.
 | 
						|
        -l  Afficher les différences non commitées (par défaut)
 | 
						|
        -c  Afficher les différences en passe d'être commitées (si appliquable)
 | 
						|
        -r REV
 | 
						|
            Afficher les différences depuis la révision REV.
 | 
						|
        -R  Afficher les modifications effectuées depuis la dernière release.
 | 
						|
    printml [-t TYPE]
 | 
						|
        Afficher le modeline pour un fichier du type spécifié
 | 
						|
    addml [-t TYPE] file
 | 
						|
        Ajouter un modele pour le fichier spécifié, s'il n'en a pas déjà un.
 | 
						|
        Si nécessaire, forcer le type du fichier au lieu de l'autodétecter
 | 
						|
    new [options] file [template options]
 | 
						|
        Créer un nouveau fichier à partir d'un modèle.
 | 
						|
        Avant le nom du fichier, les options suivantes sont valides:
 | 
						|
        -t TEMPLATE
 | 
						|
            Spécifier le modèle de fichier à utiliser. Par défaut, le modèle
 | 
						|
            à utiliser est déduit de l'extension ou du nom du fichier.
 | 
						|
        -e  Editer le fichier après l'avoir créé.
 | 
						|
        Après le nom du fichier, toutes les options sont spécifiques au modèle
 | 
						|
        utilisé pour créer le nouveau fichier. Utiliser l'option --help pour
 | 
						|
        avoir une description des options disponibles."
 | 
						|
}
 | 
						|
 | 
						|
SCRIPT_ALIASES=(
 | 
						|
    pv:vcs
 | 
						|
    pa:add prm:remove pcp:copy pmv:move pmd:mkdir
 | 
						|
    pci:commit pu:update pp:push pdiff:diff
 | 
						|
    pnew:new
 | 
						|
    pgr:grep
 | 
						|
    paddml:addml
 | 
						|
)
 | 
						|
CMD_ALIASES=(
 | 
						|
    getrepo:getrepos repo:getrepos repos:getrepos
 | 
						|
    url:geturl
 | 
						|
    a:add
 | 
						|
    rm:remove del:remove delete:remove
 | 
						|
    cp:copy
 | 
						|
    mv:move ren:move rename:move
 | 
						|
    md:mkdir
 | 
						|
    ci:commit
 | 
						|
    s:status st:status
 | 
						|
    u:update upd:update
 | 
						|
    p:push
 | 
						|
    gr:grep
 | 
						|
)
 | 
						|
DEFAULT_CMD=status
 | 
						|
PY_CMDS=(new)
 | 
						|
VCS_CMDS=(getvcs getroot getrepos geturl vcs add remove copy move mkdir commit status update push diff tag)
 | 
						|
ML_CMDS=(printml addml)
 | 
						|
 | 
						|
if [ "$#" -eq 1 -a "$1" == --nutools-makelinks ]; then
 | 
						|
    # créer les liens
 | 
						|
    scriptname="$(basename "$0")"
 | 
						|
    for alias in p "${SCRIPT_ALIASES[@]}"; do
 | 
						|
        alias="${alias%:*}"
 | 
						|
        ln -s "$scriptname" "$alias"
 | 
						|
    done
 | 
						|
    exit 0
 | 
						|
fi
 | 
						|
 | 
						|
source "$(dirname "$0")/ulib/ulib" &&
 | 
						|
urequire DEFAULTS modeline vcs ||
 | 
						|
exit 1
 | 
						|
 | 
						|
# Traduire le nom du script
 | 
						|
for script_alias in "${SCRIPT_ALIASES[@]}"; do
 | 
						|
    splitpair "$script_alias" src dest
 | 
						|
    if [ "$scriptname" == "$src" ]; then
 | 
						|
        eval "set -- $dest \"\$@\""
 | 
						|
        break
 | 
						|
    fi
 | 
						|
done
 | 
						|
 | 
						|
# Parser les options de uproject
 | 
						|
parse_opts + "${PRETTYOPTS[@]}" \
 | 
						|
    --help '$exit_with display_help' \
 | 
						|
    @ args -- "$@" && set -- "${args[@]}" || die "$args"
 | 
						|
 | 
						|
# Traduire la commande
 | 
						|
[ -n "$*" ] || set -- "$DEFAULT_CMD"
 | 
						|
CMD=
 | 
						|
found_cmd=
 | 
						|
while [ -z "$found_cmd" ]; do
 | 
						|
    CMD="$1"; shift; found_cmd=1
 | 
						|
    [ -n "$CMD" ] || break
 | 
						|
 | 
						|
    for cmd_alias in "${CMD_ALIASES[@]}"; do
 | 
						|
        splitpair "$cmd_alias" src dest
 | 
						|
        if [ "$CMD" == "$src" ]; then
 | 
						|
            eval "set -- $dest \"\$@\""
 | 
						|
            found_cmd=
 | 
						|
            break
 | 
						|
        fi
 | 
						|
    done
 | 
						|
done
 | 
						|
 | 
						|
################################################################################
 | 
						|
# Traiter les commandes
 | 
						|
 | 
						|
if [ "$CMD" == "grep" ]; then
 | 
						|
    ## grep
 | 
						|
    if [ $# -eq 1 -a "$1" == "--help" ]; then
 | 
						|
        uecho "uproject grep: Lancer une recherche récursive en ignorant les répertoire de controle de version
 | 
						|
 | 
						|
USAGE
 | 
						|
    uproject grep [grep options]"
 | 
						|
        exit 0
 | 
						|
    fi
 | 
						|
    EXCLUDES=(--exclude-dir .svn --exclude-dir CVS --exclude-dir .git --exclude "*.pyc")
 | 
						|
    exec grep -r "${EXCLUDES[@]}" "$@"
 | 
						|
 | 
						|
elif array_contains ML_CMDS "$CMD"; then
 | 
						|
    "$CMD" "$@"
 | 
						|
 | 
						|
elif array_contains VCS_CMDS "$CMD"; then
 | 
						|
    "vcs_$CMD" "$@"
 | 
						|
 | 
						|
elif array_contains PY_CMDS "$CMD"; then
 | 
						|
    exec "$scriptdir/lib/pywrapper" uproject.py "$CMD" "$@"
 | 
						|
 | 
						|
else
 | 
						|
    die "$CMD: commande inconnue"
 | 
						|
fi
 |