Projet mkd/mkddocu.sh
De Wiki EELL.
(Différences entre les versions)
												
			
		| m  (→Directive des tests :  copie) | m  (→Test de la boucle des sauvegardes :  copie) | ||
| Ligne 313 : | Ligne 313 : | ||
| == Test de la boucle des sauvegardes == | == Test de la boucle des sauvegardes == | ||
| {{Boîte déroulante/début|titre=doc mkddocu.sh créé le 28 février 2014}} | {{Boîte déroulante/début|titre=doc mkddocu.sh créé le 28 février 2014}} | ||
| - | <pre style="color:blue> | + | <pre style="color:blue"> | 
| + | #!/bin/bash | ||
| + | # Tests_boucle_dans_mkddocu | ||
| + | # | ||
| + | # Help | ||
| + | # | ||
| + | if test $1; then | ||
| + |    if [ $1 = "?" ] | ||
| + |    then | ||
| + |       echo " Syntax : " | ||
| + |       echo " mkddocu [target_dir]" | ||
| + |       echo "    → without target_dir, name of target dir is 'project' " | ||
| + |       echo " mkddocu ? for help" | ||
| + |       exit 1 # Used by  | ||
| + |    fi | ||
| + | fi | ||
| + | # | ||
| + | # Target dir | ||
| + | # | ||
| + | BACKUPSMAX=3 # | ||
| + | let i=1 | ||
| + | if test $1; then project=$1; else project="project"; fi | ||
| + | #   then | ||
| + |    # echo "Test files : $project.* for backup" #T debug | ||
| + |    # echo "BACKUPSMAX=$BACKUPSMAX" #T | ||
| + |    while ((i<=BACKUPSMAX));  | ||
| + |    do | ||
| + |       # echo "$i" #T | ||
| + |       if test -d $project.$i #T | ||
| + |       then  | ||
| + |          # echo "$project.$i exist" #T | ||
| + | ##################### | ||
| + |          if [ $i = $BACKUPSMAX ] | ||
| + |          then  | ||
| + |             echo "Last backup $project.$i Make backup in backup dir, yes ?" | ||
| + |             echo -n "your choice : y ? " | ||
| + |             read char | ||
| + |             if test $char &&  [ $char = "y" ] | ||
| + |             then  | ||
| + |                echo "create Backups dir if not exist" | ||
| + |                install -d Backups | ||
| + |                # echo "cp -rf $project.* Backups/." #T | ||
| + |                cp -rf  $project.* Backups/. | ||
| + |                rm -rf $project.* | ||
| + |                clear | ||
| + |                echo "Files in dir Backups" | ||
| + |                ls -al Backups | ||
| + |             else  | ||
| + |                echo "exit -1" | ||
| + |                exit -1 | ||
| + |             fi | ||
| + |          # else echo "Continue" | ||
| + |          fi | ||
| + | ##################### | ||
| + |       else  | ||
| + |          # echo "$project.$i does not exist" #T  | ||
| + |          if test -d $project  | ||
| + |          then | ||
| + |             # echo "$project exist and move dir $project to $project.$i"; #T | ||
| + |             mv $project $project.$i | ||
| + |          fi | ||
| + |          #break | ||
| + |       fi | ||
| + |       let i++ | ||
| + |       #break | ||
| + |    done | ||
| + | rm -Rf $project | ||
| + | install -d $project | ||
| + | # echo "Projet actuel : $project" | ||
| + | echo "blabla" > $project/fichiertest | ||
| + | echo "" | ||
| + | # ls | ||
| </pre> | </pre> | ||
| {{Boîte déroulante fin}} | {{Boîte déroulante fin}} | ||
Version du 26 février 2014 à 15:58
|   | Cette page n'est pas finie. Veuillez considérer le plan et le contenu comme incomplets et en préparation, temporaires et sujets à caution. Si vous souhaitez participer, il vous est recommandé de consulter sa page de discussion au préalable. | 
Retour aux fichiers en développement →
| Sommaire | 
mkddocu.sh
Dans sa version finale le fichier sera renommé mkddocu et copié dans les répertoires /usr/bin (ou /usr/local/bin)
Document initial
doc mkddocu.sh créé le 28 février 2014
#!/bin/bash #P File mkddocu writed by Clara Jimenez 2013-12-15 #P Fichier modifié par JPL le 22/02/2014 pour une version plus universelle #P Util : Create any debian package for mkd for multi-lang programming languages # #D Fichier mkddocu.sh #D ----------------------------------------------------------------------------- #D Documentation : Manuel mkddocu(1) #D Cette commande doit être placée dans le répertoire /usr/bin #D #D NOM #D mkddocu - Cette commande shell génère la documentation informatique de tout fichier de #D projet reconnu par la commande mkd #D #D SYNOPSYS #D mkddocu [nom] [-s] #D #D DESCRIPTION #D La commande mkd associée à mkddocu, extrait les commentaires dotés d'un caractère de #D repère. #D Si des fichiers de langage C sont présents, mkddocu génère un fichier d'entête global #D (header) du projet informatique. #D #D Caractère de repère #D D - Extrait la documentation générale. #D T - Extrait le document des directives de tests. #D P - Extrait un document utile aux mainteneurs. #D #D OPTIONS #D nom Cette option permet de choisir un nom de projet différent du nom par défaut #D project. Si nom est le caractère '?' la commande affiche la syntaxe. #D #D -s Cette option génère le fichier des chaînes de caractères et le fichier des #D chaînes de caractères utiles aux traductions avec gettext et poedit. #D #D VALEURS RETOURNÉES #D 0 : Fin normale à la fin de l'exécution de la commande. #D 1 : Fin normale après l'affichage de la syntaxe de la commande. #D -1 : Sortie sans sauvegarde de la série de documents dans Backups. #D #D EXEMPLES : #D L'auto documentation de cette commande se crée en renommant pour l'usage mkddocu.sh #D L'extension importe peu, la commande sera gérée par bash. Les fichiers sans extension ou #D avec l'extension .bash ne sont pas pris en compte. #D compte. #D Lancer la commande 'mkddocu.sh mkddocu -s' #D Le répertoire maintenance/mkddocu contiendra la documentation #D Les répertoires de projet sont générés par séries et peuvent avoir été sauvegardés dans #D un répertoire Backups si le nombre de fichiers de projet de la série ont atteind la lim‐ #D ite BACKUPSMAX #D Pour les essais on peut se limiter à BACKUPSMAX=2 (3 'backups' par série.) #D #D REMARQUES #D BACKUPSMAX est normalement fixé à 9 mais peut être modifié par édition du fichier. #D #D VOIR AUSSI #D mkd(1) gettext(1) poedit(1) #D #D TÉLÉCHARGEMENTS #D http://edeulo.free.fr #D #D AUTEURS #D Clara, JPL #D Email : http://edeulo.free.fr/contacts/formmail.php #D #D BUGS #D Rapports de bugs : http://edeulo.free.fr/phpBB3/index.php #D
La commande shell
commande shell mkddocu.sh créé le 28 février 2014
#!#/bin/bash
#P Fichier mkddocu.sh
#P -----------------------------------------------------------------------------
#P Menu d'aide sommaire obtenu par la commande 'mkddocu ?'
#
if test $1; then
   if [ $1 = "?" ]
   then
      echo " Syntax : "
      echo " mkddocu [target_dir] [-s]"
      echo "    → example series with date : mkddocu 2014-02-22 "
      echo "    → without target_dir, name of target dir is 'project' "
      echo "    → with '-s' mkddocu make complete documentation. "
      echo " target dir is writed in 'maintenance' directory : "
      echo "    → ./maintenance/2014-02-22/ "
      echo " mkddocu ? for help "
      echo " Note : "
      echo " This command dépends on mkd command "
      exit 1 #P Fin normale de l'utilisateur (ce n'est pas une erreur)
   fi
fi
#P Affecttion des macros et des variables
#P    BACKUPSMAX : Définition du nombre de sauvegardes d'une série avant la 
#P     sauvegarde globale dans un répertoire 'Backup'. (Valeur modifiable)
BACKUPSMAX=3 
let i=1           #P compteur
str="false"       #P false ou true
project="project" #P nom du fichier de projet .prj
#
#P -----------------------------------------------------------------------------
#P Gestion des paramètres d'entrée
#
if test $1
then
   if test $2
   then
      if test $1 && [ $1 != "-s" ]
      then 
         project=$1; 
         if [ $2 = "-s" ]; then str="true"; fi
      else 
         if [ $1 = "-s" ]; then str="true"; project=$2; fi
      fi
   else
      if test $1 && [ $1 != "-s" ] ; then project=$1; fi
      if [ $1 = "-s" ]; then str="true"; fi
   fi
fi
#
#P -----------------------------------------------------------------------------
#P Gestion de sauvegarde des séries (Transfert dans maintenance/Backup)
#
#P Créer la fonction 'sauvegarde'. (Noter que la varable i est globale)
function sauvegarde
{
   if test -d maintenance/$project 
   then
   mv maintenance/$project maintenance/$project.$i
   fi
}
#Po Tant que l'on n'a pas atteind BACKUPSMAX
    while ((i<=BACKUPSMAX)); 
    do
#Po   Si le répertoire de projet.i existe
      if test -d maintenance/$project.$i
#Po   alors:
      then 
#Po      Si le nombre de répertoires projet.i de la série dépasse BACKUPSMAX
         if [ $i = $BACKUPSMAX ]
         then 
#Po         demander si il faut transférer la série dans de répertoire 'Backup'
            echo "Last backup before maintenance : "
            echo -n "Make backup in 'Backup' dir, yes ? Your choice : y ? "
            read char
#Po         si 'y' (yes)
            if test $char &&  [ $char = "y" ]
#Po         alors:
            then 
#Po            Créer le répertoir Backup s'il y alieu et transférer la série .*
               echo "create Backups dir if not exist"
               install -d Backups
               ((i++))
               sauvegarde
               cp -rf  maintenance/$project.* Backups/.
               rm -rf maintenance/$project.*
               clear
               echo "Files in dir Backups"
               ls -al Backups
            else 
               echo "exit -1"
               exit -1 #P En cas dappel par une commande : Fin sur erreur
            fi
         fi
#Po    sinon: Sauvegarder le dernier répertoire par incrément d'extension
      else 
         sauvegarde
      fi
      let i++
      #break
   done
#
#P -----------------------------------------------------------------------------
#P Préparation des répertoires de travail, maintenance et fichier de projet .prj
#
#P    Clean, nettoyage des fichiers d'éditions *~
      rm *.c~ #w ATTENTION ! à exécuter avec précaution
#P    Créer du répertoire ./maintenance si il n'existe pas
      install -d maintenance/$project
#P    Créer le fichier de projet .prj pour tout langage de programmation
      rm -f *.prj
      ls -1 *.asm *.s *.bas *.vb *.bat *.c *.C *.h *.H *.D *.cc *.hh *.cp *.cs \
      *.c# *.c++ *.h++ *.c-- *.h-- *.cpp *.hpp  *.css *.pr *.pl *.php *.jav \
      *.jse *.js  *.f99 *.f *.pas *.p *.sh *.csh *.pl, *.rb *.py *.pyw *.pj \
      *.prj > $project.prj
#
#P -----------------------------------------------------------------------------
#P Génération de la documentation :
#
#P    Générer le fichier d'entête global .h si il existe des fichiers .c??
if test -r *.c* ; then cfiles="true"; fi
if test -r *.C* ; then cfiles="true"; fi
if test $cfiles; then
   echo " → make header file, to ./maintenance/$project/$project.h, benchmark H"
   mkd -Cjt H $project.prj ./maintenance/$project/$project.h 
#Pw   → Remarque d'ATTENTION pour copier manuellement le fichier d'entête .h
   echo " → Warning : Copy manually header file in current source directory " 
#Pw   → ATTENTION ligne non validée : cp -f ./maintenance/$project/$project.h . 
else 
   echo " C files not found "
fi
#
#en   Make documentation with benchmark 'D'
#P    Générer la 'documentation' avec le repère 'D'
#
echo " make documentation, find the programming style, benchmark 'D' "
echo " → ./maintenance/$project/$project-documentation.txt' "
mkd -fjt D $project.prj ./maintenance/$project/$project-documentation.txt
#
#en   Make individuals tests directives document; style find add number of lines
#P    Générer le fichier des directives des tests; avec numéro de ligne repère 'T'
#
echo " make tests document and tests directives with benchmark 'T' "
echo " → './maintenance/$project/$project-tests-directives.txt' "
mkd -fjnt T $project.prj ./maintenance/$project/$project-tests-directives.txt
#
#en   Make maintainers documentation, add line number, benchmark 'P'
#P    Générer le fichier destiné aux mainteneurs avec le repère 'P'
#
echo " make functions maintainers documentation with benchmark 'P' "
echo "→ '/maintenance/$project-maintainers-doc.txt' "
mkd -fjnt P $project.prj ./maintenance/$project/$project-maintainers-doc.txt
#
#P Si le paramètre '-s' est entrée à la commande:
#P    Créer les fichiers : chaînes de caractères et chaînes pour gettext
#en If second parametre is "-s" then
#en   Get all strings and select strings for translations
#
if [ $str = "true" ]; then
   echo " make list of strings for tranlations benchmark '**' "
   mkd -fpnjs '**' $project.prj ./maintenance/$project/strings.txt | \
   grep gettext > ./maintenance/$project/strings-2-translations.txt 
fi
#
#P -----------------------------------------------------------------------------
#P Afficher les recommandations de lecture des fichiers de maintenance
#
echo "  See in working directory: ./maintenance/$project/$project/* "
ls -l ./maintenance/$project
#P Quitter avec un retour à la valeur 0
exit 0 #P Fin correcte normale
Directive des tests
doc mkddocu.sh créé le 28 février 2014
#T Fichier mkddocu.sh #T ----------------------------------------------------------------------------- #T Tests : Ne peut fonctionner que si la commande mkd est installée. #T #T Test unitaire : #T --------------- #T Renommer mkddocu mkddocu.sh ou .csh #T Editer le fichier mkddocu.sh et modifier la valeur de BACKUPSMAX limiter #T cette valeur à 3 (4 sauvegardes indicées) #T #T La commande s'autoteste #T 1. Lancer 4 fois la commande ./mkddoccu (sans paramètre) #T 2. Vérifier la commande de boucle à chaque fois, elle doit incrémenter les #T répertoires de projets project (le dernier), puis project.1, etc. #T Après project.3 on doit vous demander si vous désirez préserver ces #T fichiers dans un répertoire .Backups. Répondez oui : 'y' (yes) #T 3. Vérifier que le fichier .prj prend bien en charge tous les fichiers de #T langages de programmation de la commande mkd. Pour cela il faut évidemment #T disposer des fichiers nécessaires. On peut en trouver sur le site EELL #T http://edeulo.free.fr/wiki/index.php/Projet_mkd/Fichiers_en_développement #T Les fichiers en développement sont accompagnés de leurs tests unitaires, #T notamment le fichier find.inc.c très sollicité par la commande mkddocu. #T Trouver des exemples aussi sur wikipedia, wikibooks. #T 4. Essayer les commandes : (dans un 'Terminal' ou une 'Konsoke') #T ./mkddocu.sh -s #T ./mkddocu.sh mkddocu #T ./mkddocu.sh mkddocu -s #T ./mkddocu.sh -s mkddocu #T Les commandes mkd ont été éprouvées par ailleurs. Vérifiez tout de même #T que les fichiers générés sont bien conformes. #T 5. Vérifiez que les fichiers en langage C sont pris en compte quand ils sont #T présents. les fichiers d'entête (.h) n'ont pas à être pris en compte. #T #T #T Tests d'intégration : #T --------------------- #T Pour ces tests il faut évidemment disposer de vrais fichiers de programmation #T dans différent langages mais cela a déjà été fait lors des tests #T d'intégration de la commande mkd. #T On peut trouver ces fichiers dans chaqu'un des fichiers de tests unitaires de #T la page wiki 'fichiers' en développement citée plus haut. #T
Test des paramètres d'entrée
doc mkddocu.sh créé le 28 février 2014
Test de la boucle des sauvegardes
doc mkddocu.sh créé le 28 février 2014
#!/bin/bash
# Tests_boucle_dans_mkddocu
#
# Help
#
if test $1; then
   if [ $1 = "?" ]
   then
      echo " Syntax : "
      echo " mkddocu [target_dir]"
      echo "    → without target_dir, name of target dir is 'project' "
      echo " mkddocu ? for help"
      exit 1 # Used by 
   fi
fi
#
# Target dir
#
BACKUPSMAX=3 #
let i=1
if test $1; then project=$1; else project="project"; fi
#   then
   # echo "Test files : $project.* for backup" #T debug
   # echo "BACKUPSMAX=$BACKUPSMAX" #T
   while ((i<=BACKUPSMAX)); 
   do
      # echo "$i" #T
      if test -d $project.$i #T
      then 
         # echo "$project.$i exist" #T
#####################
         if [ $i = $BACKUPSMAX ]
         then 
            echo "Last backup $project.$i Make backup in backup dir, yes ?"
            echo -n "your choice : y ? "
            read char
            if test $char &&  [ $char = "y" ]
            then 
               echo "create Backups dir if not exist"
               install -d Backups
               # echo "cp -rf $project.* Backups/." #T
               cp -rf  $project.* Backups/.
               rm -rf $project.*
               clear
               echo "Files in dir Backups"
               ls -al Backups
            else 
               echo "exit -1"
               exit -1
            fi
         # else echo "Continue"
         fi
#####################
      else 
         # echo "$project.$i does not exist" #T 
         if test -d $project 
         then
            # echo "$project exist and move dir $project to $project.$i"; #T
            mv $project $project.$i
         fi
         #break
      fi
      let i++
      #break
   done
rm -Rf $project
install -d $project
# echo "Projet actuel : $project"
echo "blabla" > $project/fichiertest
echo ""
# ls
Test de la reconnaissance des fichiers C
doc mkddocu.sh créé le 28 février 2014

