v1.0.1:normalisation de la syntaxe
[legraldocs:legralnet.git] / scripts / gitVersion-v2.1.0.sh
1 #!/bin/sh
2 # - configuration - #
3 VERSION="2.1.0";
4 noStatus=0;             # si 1: git status ne sera pas lancer
5 no0Pages=1;             # si 1: ne monte pas /www/0pages
6
7 # - variable interne - #
8 scriptPath=$0;           #chemin complet du script 
9 scriptRep=`dirname $0`;  #repertoire du script
10 #dirname="${1%${1##*/}}" # donne ?
11 localVersionPath="./localVersion.sh";
12 islocalVersionLoad=0;   # le fichjier localVersion existe t'il?
13 isSimulation=0;         # -n ($simulerArg)
14 isMin=0;
15 isStatic=0;             # --static
16 isRemote=0;             # --remote
17 isCommit=0;
18 tag=0;                  # tag du commit (version du programme sous la forme v0.0.0
19 commitFail=0;           # egale a 1 si le commit a echoue
20 isPush=0;
21 isStatus=0;             # faire un git status en fin d'operation ? (et afficher les tags)
22 template="";            # creation de rep et fichier (modele de projet)
23 debug=0;
24 verbosity=0;
25 verboseArg='-v';
26 simulerArg="-n"
27
28 # - chargement des codes couleurs - #
29 . $scriptRep/legralcouleur.sh
30
31 echo "$couleurINFO$repScript gitVersion v$VERSION$couleurNORMAL";
32 echo "gitVersion --help";
33
34
35 #########
36 # usage #
37 #########
38 usage () {
39         echo " ./scripts/gitVersion.sh$couleurINFO options$couleurNORMAL";
40         echo "$couleurINFO --help$couleurNORMAL";
41         echo " $simulerArg | --simule simule les actions";
42         echo "";
43         echo " --template=$couleurINFO template$couleurNORMAL: intialise les fichiers selon le modele:";
44         echo "  sh: le projet est un script shell";
45         echo "  web: le projet est un site web";
46         echo "";
47         echo " --min: concat et minimise les js et css (defini dans ./localVersion.sh)";
48         echo " --static: statifie un site avec wget (lance ./scripts/localStatic.sh)"
49         echo " --remote (lance syncRemote() dans localVersion) ";
50         echo "";
51         echo " --commit=$couleurINFO tag$couleurNORMAL:commit les changements et les tag avec version (active --min)";
52         echo " --push: push les commits et les tag ";
53         echo "";
54         echo " --remote (lance syncRemote() dans localVersion) ";
55         echo " --status: faire un git status en fin d'operation (et afficher les tags)";
56         echo "$couleurINFO exemples:";
57         echo "./scripts/gitVersion.sh --template=modele ";
58         echo "./scripts/gitVersion.sh --simule --commit=tag --push --status";
59         echo "./scripts/gitVersion.sh --simule --min --static --commit=tag --push --status --remote  $couleurNORMAL";
60         exit
61         }       
62
63 ##################
64 # analyse du psp #
65 #$0     Contient le nom du script tel qu'il a été invoqué
66 #$*     L'ensembles des paramètres sous la forme d'un seul argument
67 #$@     L'ensemble des arguments, un argument par paramètre
68 #$#     Le nombre de paramètres passés au script
69 #$?     Le code retour de la dernière commande
70 #$$     Le PID su shell qui exécute le script
71 #$!     Le PID du dernier processus lancé en arrière-plan
72 #
73 # -v:: --verbose:: argument optionnel
74 # -V --version
75 # --in: les cibles (rep/fichiers) provienne de l'entree standart
76 #
77 #TEMP=`getopt \
78 #     --options ab:c:: \
79 #     --long a-long,b-long:,c-long:: \
80 #     -n 'example.bash' \
81 #      -- "$@"
82 #echo "Remaining arguments:"
83 #for arg do echo '--> '"\`$arg'" ; done
84 #
85 ##################
86 TEMP=`getopt \
87      --options v::dVhn \
88      --long verbose::,debug,version,help,status,template::,min,static,remote,commit::,tag::,push \
89      -- "$@"`
90
91 # Note the quotes around `$TEMP': they are essential!
92 eval set -- "$TEMP"
93 #if [ $? -eq 0 ] ; then echo "options requise. Sortie" >&2 ; exit 1 ; fi
94 #echo "$couleurWARN nb: $# $couleurNORMAL";
95 if [ $# -eq 1 ] ; then  usage; exit 1 ; fi #pas de parametre
96
97
98 while true ; do
99         case "$1" in
100                 -h|--help)usage; exit 0; shift ;;
101                 #-v|--verbose) echo "Option b, argument \`$2'" ; shift 2 ;;
102                 -V|--version) echo "$VERSION"; exit 0; shift ;;
103                 -v|--verbose)
104                         case "$2" in
105                                 "") verbosity=1; shift 2 ;;
106                                 *)  #echo "Option c, argument \`$2'" ;
107                                         verbosity=$2; shift 2;;
108                         esac ;;
109                 -d|--debug)
110                         case "$2" in
111                                 "") debug=1;  shift 2 ;;
112                                 *)  debug=$2; shift 2 ;;
113                         esac ;;
114
115                 -n)isSimulation=1; shift ;;
116                 --noStatus) noStatus=1; shift ;;
117                 --template)
118                         case "$2" in
119                                 "") echo "$couleurWARN nom du modele obligatoire$couleurNORMAL"; exit;  shift 2 ;;
120                                 *) template="$2";  shift 2  ;;
121                         esac ;;
122
123
124                 --min) isMin=1; shift ;;
125                 --static) isStatic=1; shift ;;
126
127                 --commit)
128                         case "$2" in
129                                 "") echo "$couleurWARN la version(tag) du commit est obligatoire $couleurINFO gitVersion --commit=tag$couleurNORMAL "; exit ; shift 2;;
130                                 *) isCommit=1;tag="$2";
131                                         isMin=1;        # active la minimisation
132                                         shift 2  ;;
133                         esac ;;
134
135                 --push) isPush=1; shift ;;
136
137                 --status) isStatus=1; shift ;;
138
139                 --remote) isRemote=1; shift ;;
140
141
142                 --) shift ; break ;;
143                 *) echo "option $1 non reconnu"; shift;  exit 1 ;; # sans exit: si la derniere option est inconnu -> boucle sans fin
144         esac
145 done
146
147
148         
149 #############
150 # functions #
151 #############
152 # -- creation du repo git si non existant -- #
153 createRepoGit() {
154 rep="./.git";
155 echo  "$couleurINFO\creation du repo git$couleurNORMAL";
156 if [ -d "$rep" ];
157 then
158         echo "$couleurINFO repertoire $rep existant$couleurNORMAL";
159 else
160         echo "$couleurWARN repertoire $rep NON existant -> creation d'un repo initial$couleurNORMAL";
161         if [ $isSimulation -eq 0 ];then
162                 git init;
163         fi
164         echo "$couleurWARN taper 'git push --set-upstream origin master' pour le positionner sur master $couleurNORMAL";
165         fi
166 }
167
168
169 ########################
170 # creation du template #
171 ########################
172 createTemplate(){
173         case "$template" in
174                 web) createTemplateWeb ;;
175                 shell) createTemplateShell ;;
176         esac
177 }
178
179
180 createTemplateCommun(){
181         echo "$couleurINFO creation du template: Commun$couleurNORMAL";
182         rep="./versions";
183         if [ -d "$rep" ];
184         then
185                 echo "$couleurINFO repertoire $rep existant$couleurNORMAL";
186         else
187                 echo "$couleurWARN repertoire $rep NON existant -> creation$couleurNORMAL";
188                 mkdir $rep
189                 fi
190
191         # -- creation du repertoire des documents (generales) locales -- #
192         rep="./locales";
193         if [ -d "$rep" ];
194         then
195                 echo "$couleurINFO repertoire $rep existant$couleurNORMAL";
196         else
197                 echo "$couleurWARN repertoire $rep NON existant -> creation$couleurNORMAL";
198                 mkdir $rep
199                 fi
200
201 }
202
203
204 createTemplateShell(){
205         createTemplateCommun;
206         echo "$couleurINFO creation du template: Shell$couleurNORMAL";
207         echo "";
208 }
209
210 createTemplateWeb(){
211         createTemplateCommun;
212         echo "$couleurINFO creation du template: Web$couleurNORMAL";
213
214         # -- creation du repertoire des styles -- #
215         rep="./styles";
216         if [ -d "$rep" ];
217         then
218                 echo "$couleurINFO repertoire $rep existant$couleurNORMAL";
219         else
220                 echo "$couleurWARN repertoire $rep NON existant -> creation$couleurNORMAL";
221                 mkdir $rep
222                 fi
223
224         # -- creation du repertoire des pages locales -- #
225         rep="./pagesLocales";
226         if [ -d "$rep" ];
227         then
228                 echo "$couleurINFO repertoire $rep existant$couleurNORMAL";
229         else
230                 echo "$couleurWARN repertoire $rep NON existant -> creation$couleurNORMAL";
231                 mkdir $rep
232                 echo  "pages specifique a ce projet. Les pages communes sont dans ./pages/ (repertoires montes depuis /www/0pages/" > $rep/readme
233                 fi
234
235         # -- creation du repertoire static (recoit les versions staitc de sites -- #
236         rep="./statique";
237         if [ -d "$rep" ];
238         then
239                 echo "$couleurINFO repertoire $rep existant$couleurNORMAL";
240         else
241                 echo "$couleurWARN repertoire $rep NON existant -> creation$couleurNORMAL";
242                 mkdir $rep
243                 fi
244
245
246         # -- creation du repertoire des pages communes et montage -- #
247         rep="./pages";
248         if [ -d "$rep" ];
249         then
250                 echo "$couleurINFO repertoire $rep existant$couleurNORMAL";
251         else
252                 echo "$couleurWARN repertoire $rep NON existant -> creation$couleurNORMAL";
253                 mkdir $rep
254                 fi
255
256         if [ "$no0Pages" -eq 0 ];then
257                 echo "montage de /www/0pages dans $rep";
258                 fichier="$rep/0pages";
259                 if [ -f "$fichier" ];
260                 then
261                         echo "$couleurINFO presence de $fichier detecte: le repertoire est considere comme deja monte";
262                 else
263                         echo "si la fonction ne marche pas modifier /etc/sudoers$couleurWARN";
264                         sudo mount --read-only --bind /www/0pages $rep
265                         echo "$couleurNORMAL";
266                         fi
267         else
268                 echo "$couleurINFO 0Pages non montes suivant configuration$couleurNORMAL";
269                 fi
270
271         # - creation/remise a zero des fichiers locaux - #
272         echo "$couleurINFO creation/remise a zero des fichiers locales $couleurNORMAL";
273         echo "/*! fichier generer automatiquement et compresser avec yuicompressor */" > ./styles/styles.css
274         echo  "/*! fichier generer automatiquement et compresser avec yuicompressor */" > ./locales/scripts.js
275         echo "";
276 }
277
278
279 #########################################################
280 # - generere les fichiers contennue dans ./locales/ ) - #
281 # - generation de script.js et styles.css -             #
282 #########################################################
283 localGenMin() {
284         # - chargement config local - #
285         if [ $islocalVersionLoad -eq 1 ];
286         then
287
288                 # - creation de ./styles/styles.css ./locales/scripts.js - #
289                 echo "$couleurINFO creation de style.css et de ./locales/scripts.js.$couleurNORMAL";
290                 if [ $isSimulation -eq 0 ];then
291                         echo '@charset "utf-8";' > ./styles/styles.css; 
292                         echo '' > ./locales/scripts.js
293                         fi
294
295                 # - concatenation des fichiers css et js - #
296                 echo "$couleurINFO localConcat: concatenation des fichiers css et js.$couleurNORMAL";
297                 if [ $isSimulation -eq 0 ];then localConcat; fi # cette fonction est dans le fichier $localVersionPath 
298
299                 # - minimise scripts.js - # 
300                 # yuicompressor NE rajoute PAS automatiquement l'extention ".js|.css"
301
302                 echo "compression de ./locales/scripts.js .$couleurNORMAL";
303                 if [ $isSimulation -eq 0 ];then
304                         java -jar ${scriptRep}/yuicompressor-2.4.8.jar ./locales/scripts.js -o ./locales/scripts.min.js
305                 fi
306 #               echo "suppression de ./locales/scripts.js .$couleurNORMAL";
307 #               rm ./locales/scripts.js
308
309                 echo "compression de ./locales/styles.css .$couleurNORMAL";
310                 if [ $isSimulation -eq 0 ];then
311                         java -jar ${scriptRep}/yuicompressor-2.4.8.jar ./styles/styles.css -o ./styles/styles.min.css
312                         fi
313 #               echo "suppression de ./locales/styles.css .$couleurNORMAL";
314 #               rm ./locales/styles.css
315                 fi
316 }
317
318 ##########################################
319 # callStatification                          #
320 # appel le fichier ./scripts/statique.sh #
321 ##########################################
322 callStatification (){
323         if [ $isStatic -eq 1 ];then
324                 echo "$couleurINFO # - gitVersion.sh - callStatification - #$couleurNORMAL";
325                 localStatification;
326
327         fi
328 }
329
330
331 ##########
332 # commit #
333 ##########
334 commit() {
335         echo "$couleurINFO preparation du commit...";
336
337         #localGenMin; #activer a l'appel de --commit
338
339         if [ $islocalVersionLoad -eq 0 ];then echo "$couleurWARN pas de fichier $localVersionPath$couleurNORMAL"; fi
340
341         if [ $islocalVersionLoad -eq 1 ];then
342                 # - creation des versions et copies dans ./versions - # 
343                 echo "copie des fichiers versionnees dans ./version";
344                 if [ $isSimulation -eq 0 ];then  localSave; fi
345         fi
346
347         # - mise a jours du fichier contenant la version - #
348         echo "$couleurINFO mise a jours du fichier lastVersion$couleurNORMAL";
349         if [ $isSimulation -eq 0 ];then
350                 echo "$tag" > ./lastVersion
351         fi
352
353         # - On add les fichiers - #
354         echo "$couleurINFO git add .$couleurNORMAL";
355         if [ $isSimulation -eq 0 ];then
356                 git add .
357         fi
358
359         # - on commit  - #
360         echo "$couleurINFO maintenant on commit (copier le texte issue de release)$couleurNORMAL";
361         if [ $isSimulation -eq 0 ];then
362                 git commit
363         fi
364
365         echo "$couleurINFO on tag le commit avec $couleurWARN$tag$couleurNORMAL";
366         if [ $isSimulation -eq 0 ];then
367                 git tag $tag
368         fi
369 }
370
371 ########
372 # push #
373 ########
374 push() {
375         if [ $isSimulation -eq 0 ];then
376                 echo "$couleurINFO on push les commits$couleurNORMAL";
377                 git push;
378                 echo "$couleurINFO on push les tags$couleurNORMAL";
379                 git push --tag
380         else
381                 echo "$couleurWARN mode test: pas de push $couleurNORMAL";
382                 fi              
383
384
385
386 ######################
387 # fonction de sortie #
388 ######################
389 sortie() {
390         echo "--------------------------";
391
392         if [ $isStatus -eq 1 ];then
393
394                 echo "$couleurINFO on affiche le status:$couleurNORMAL"
395                 git status;
396
397                 echo "$couleurINFO on affiche les tags$couleurNORMAL";
398                 git tag;
399         fi
400                 
401         # - postGit : appelle de la function postGit (defini dans localVersion) - #
402         postGit;
403         exit 0; #on quitte le script
404         }
405
406
407 ############################################
408 # - functions utiliser par localesSave() - #
409 ############################################
410
411 # - concatenation de fichier - #
412 catJS() {
413         echo "" >> ./locales/scripts.js
414         echo "/*! - $1 - */" >> ./locales/scripts.js
415         echo "$couleurWARN";
416         cat "$1"            >> ./locales/scripts.js
417         echo "$couleurNORMAL";
418         }
419
420 catCSS() {
421         echo "" >> ./styles/styles.css
422         echo "/*! - $1 - */" >> ./styles/styles.css
423         echo "$couleurWARN";
424         cat "$1"            >> ./styles/styles.css
425         echo "$couleurNORMAL";
426         }
427
428
429 # ----------------------------------------------------------------- #
430 # - creer une copie d'un js|css en ajoutant la version en suffixe - #
431 # %1:fn:fichier nom
432 # %2:fe: fichier extention (sans le point)
433 # (calc)fv: nom du fichier avec la version en suffixe
434 versionSave() {
435         fn=$1;
436         fe=".$2";       # ajout du point 
437         fv="$fn-$tag";
438         echo "creation de la copie $fn$fe vers ./versions/$fv$fe";
439         cp $fn$fe ./versions/$fv$fe
440         if [ "$fe" = "sh" ];then
441                 echo "le fichier est un script -> +x"
442                 chmod +x ./versions/$fv$fe
443         fi
444         }
445
446 # - minimise les fichiers js ou css (selon $2) - #
447
448 # minSuf: suffixe de la minification
449 versionMinimise() {
450         fn=$1;
451         fe=".$2";
452         minSuf=".min";
453         fm="$fn$minSuf-$tag$fe";
454         echo "compression de  $fn$fe vers $fm$fe";
455         java -jar ${scriptRep}/scripts/yuicompressor-2.4.8.jar $fn$fe -o ./versions/$fm
456         }
457
458
459 ########
460 # main #
461 ########
462 #PROGVERSION=$1;
463
464 #if [ $# -eq 0 ];then
465 #       usage;
466 #fi
467
468 # - on se positionne sur la racine du projet - #
469 cd $scriptRep/../
470 echo "$couleurINFO repertoire courant: $couleurNORMAL";
471 pwd;
472
473 # - indique si c'est une simulation - #
474 if [ $isSimulation -eq 1 ];then
475         echo "$couleurWARN simulation aucune action ne sera reelement faite$couleurNORMAL";
476 fi
477
478
479 # - creation du repo git si non existant - #
480 createRepoGit;
481
482
483 # - Creation des templates - #
484 createTemplate;
485
486
487 # - chargement de la configuration utilisateur (fichier: localVersion.sh) - #
488 if [ -f "$localVersionPath" ];
489 then
490         echo "$couleurINFO Chargement de $localVersionPath $couleurNORMAL";
491         . $localVersionPath;
492         islocalVersionLoad=1;
493 else
494         echo "$couleurWARN pas de fichier $localVersionPath$couleurNORMAL";
495         islocalVersionLoad=0;
496         fi
497
498
499 # - minimiser - #
500 if [ $isMin -eq 1 ];then localGenMin; fi
501
502
503 # - statifier - #
504 if [ $isStatic -eq 1 ];then callStatification; fi
505
506
507 # - commit - #
508 if [ $isCommit -eq 1 ];then commit; fi
509
510
511 # - push - #
512 if [ $isPush -eq 1 ];then push; fi
513
514
515 # - remote - #
516 # lance syncRemote (dans localVersion) #
517 if [ $isRemote -eq 1 ];then syncRemote; fi
518
519
520 # - sortie; -#
521 echo "--------------------------";
522
523 if [ $isStatus -eq 1 ];then
524
525         echo "$couleurINFO on affiche le status:$couleurNORMAL"
526         git status;
527
528         echo "$couleurINFO on affiche les tags$couleurNORMAL";
529         git tag;
530 fi
531                 
532 # - postGit : appelle de la function postGit (defini dans localVersion) - #
533 postGit;
534 exit 0; #on quitte le script
535