11#! /bin/bash
22
3- echo " Bienvenue sur Sendgit ! Que voulez-vous faire ? "
3+ # Ajout de sécurité Bash : arrête le script sur erreur, référence non définie ou pipe cassée
4+ set -euo pipefail
5+
6+ # Réglage du séparateur de champs pour éviter les erreurs avec les espaces et retours à la ligne
7+ IFS=$' \n\t '
8+
9+ if ! command -v git & > /dev/null; then
10+ echo " ❌ Git n'est pas installé. Veuillez l'installer avant d'utiliser Sendgit."
11+ exit 1
12+ fi
13+
14+ echo " Bienvenue sur Sendgit ! Que voulez-vous faire ?"
415echo " 1: Envoyer mes modifications sur GitHub"
516echo " 2: Récupérer les modifications"
617echo " 3: Voir le log complet des historiques"
@@ -14,63 +25,93 @@ echo ""
1425
1526case " $action " in
1627 1)
17- echo " Fichiers modifiés "
18- git status -s
28+ echo " Fichiers modifiés :"
29+ git status -s || { echo " Erreur lors de l'affichage du status Git" ; exit 1; }
30+ # Ajout d'une vérification de sortie de la commande Git
31+
1932 echo " "
2033
2134 read -rp " Message du commit : " commit
35+ [[ -z " $commit " ]] && { echo " Le message de commit est obligatoire." ; exit 1; }
36+ # Empêche les commits sans message (sécurité + bonne pratique)
37+
2238 read -rp " Fichier à envoyer (ou '.' pour tous) : " name
39+ [[ -z " $name " ]] && { echo " Nom de fichier requis." ; exit 1; }
40+ # Évite d'exécuter git add sans fichier défini
41+
2342 read -rp " Branche (laisser vide pour 'main') : " branch
24- branch=${branch:- main}
43+ branch=${branch:- main} # Valeur par défaut sécurisée
2544
2645 echo " Ajout des fichiers..."
27- git add " $name "
46+ git add -- " $name " || { echo " Erreur lors de l'ajout des fichiers." ; exit 1; }
47+ # Ajout du double tiret pour bloquer les options malicieuses dans le nom de fichier
48+ # Vérification de l’exécution de git add
2849
2950 echo " Création du commit..."
30- git commit -m " $commit "
51+ git commit -m " $commit " || { echo " Erreur lors du commit." ; exit 1; }
52+ # Vérifie que le commit s’est bien effectué
3153
3254 echo " Envoi vers la branche '$branch '..."
33- git push origin " $branch "
55+ git push origin " $branch " || { echo " Échec du push." ; exit 1; }
56+ # Empêche que le script continue si le push échoue
3457 ;;
3558
3659 2)
3760 echo " Récupération des dernières modifications..."
38- git pull
61+ git pull || { echo " Échec du pull." ; exit 1; }
62+ # Sécurisation de git pull
3963 ;;
4064
4165 3)
42- echo " Log complet "
43- git log
66+ echo " Log complet :"
67+ git log || { echo " Impossible d'afficher le log." ; exit 1; }
68+ # Vérifie que git log ne plante pas
4469 ;;
4570
4671 4)
47- echo " Résumé des commits "
48- git log --oneline
72+ echo " Résumé des commits :"
73+ git log --oneline || { echo " Impossible d'afficher le résumé." ; exit 1; }
74+ # Vérifie aussi pour git log --oneline
4975 ;;
5076
5177 5)
52- git log --oneline
78+ git log --oneline || { echo " Erreur lors de l'affichage du log. " ; exit 1 ; }
5379 echo " "
54- read -rp " ID du commit (voir ci-dessus) : " commitname
80+
81+ read -rp " ID du commit : " commitname
82+ [[ -z " $commitname " ]] && { echo " ID de commit requis." ; exit 1; }
83+ # Évite un checkout vide
84+
5585 read -rp " Nom du fichier à restaurer : " filename
86+ [[ -z " $filename " ]] && { echo " Nom de fichier requis." ; exit 1; }
87+ # Empêche les noms vides
5688
5789 if git checkout " $commitname " -- " $filename " ; then
58- echo " Fichier '$filename ' restauré depuis le commit $commitname ."
90+ echo " Fichier '$filename ' restauré depuis le commit $commitname ."
5991 else
60- echo " Erreur : impossible de restaurer le fichier."
92+ echo " Erreur : impossible de restaurer le fichier."
93+ exit 1
6194 fi
95+ # Ajout de la vérification pour sécuriser git checkout
6296 ;;
6397
6498 6)
65- echo " Branches disponibles "
66- git branch
99+ echo " Branches disponibles :"
100+ git branch || { echo " Erreur lors de la lecture des branches." ; exit 1; }
101+ # Vérifie git branch
102+
67103 echo " "
68104 read -rp " Branche à rejoindre : " branch
69- git switch " $branch "
105+ [[ -z " $branch " ]] && { echo " Nom de branche requis." ; exit 1; }
106+ # Évite le switch sans nom
107+
108+ git switch " $branch " || { echo " Erreur lors du changement de branche." ; exit 1; }
109+ # Sécurise le changement de branche
70110 ;;
71111
72112 * )
73113 echo " Choix invalide. Veuillez entrer un nombre entre 1 et 6."
74114 exit 1
115+ # Meilleure gestion des choix incorrects
75116 ;;
76117esac
0 commit comments