133 lines
4.3 KiB
TeX
133 lines
4.3 KiB
TeX
\begin{frame}
|
||
\frametitle{Inspection}
|
||
\framesubtitle{log}
|
||
Comparer les branches du dépôt \emph{exercices} en explorant les différentes options de git log (--graph, --all, --decorate, .., ...)
|
||
|
||
\commande{git log}
|
||
% contenu (pas trop long) de la diapositive
|
||
\end{frame}
|
||
|
||
\begin{frame}
|
||
\frametitle{Inspection}
|
||
\framesubtitle{log}
|
||
\begin{tikzpicture}
|
||
\begin{pgflowlevelscope}{\pgftransformscale{0.5}}
|
||
\gitDAG[grow right sep=1em]{
|
||
fcacc8a -- a3a980c -- {6d7f839 -- {d221665 -- 841f693 -- f5965df -- a12f94b -- 5464ee7, fe0c2b7 -- 6212e29 -- 0f13577 -- a60f3ed, f81ca5c, 7e54de0},
|
||
30a5821, b13bcf2, 902ae87}
|
||
};
|
||
\gitbranch
|
||
{master}
|
||
{above=of 6d7f839}
|
||
{6d7f839}
|
||
\gitbranch
|
||
{brancheindiscrete}
|
||
{right=of 902ae87}
|
||
{902ae87}
|
||
\gitbranch
|
||
{merge/conflit}
|
||
{right=of 30a5821}
|
||
{30a5821}
|
||
\gitbranch
|
||
{merge/automatique}
|
||
{right=of b13bcf2}
|
||
{b13bcf2}
|
||
\gitbranch
|
||
{merge/rebase}
|
||
{right=of 7e54de0}
|
||
{7e54de0}
|
||
\gitbranch
|
||
{branche/perdue}
|
||
{right=of f81ca5c}
|
||
{f81ca5c}
|
||
\gitbranch
|
||
{branche/minee}
|
||
{above=of 5464ee7}
|
||
{5464ee7}
|
||
\gitbranch
|
||
{histoire/confuse}
|
||
{right=of a60f3ed}
|
||
{a60f3ed}
|
||
\end{pgflowlevelscope}
|
||
\end{tikzpicture}
|
||
\end{frame}
|
||
|
||
\begin{frame}
|
||
\frametitle{Inspection}
|
||
\framesubtitle{bisect}
|
||
\begin{minipage}{\textwidth}
|
||
\begin{tikzpicture}
|
||
%\begin{pgflowlevelscope}{\pgftransformscale{0.5}}
|
||
\begin{pgflowlevel}{\pgftransformscale{0.6}}
|
||
\gitDAG[grow right sep=1em]{
|
||
fcacc8a -- a3a980c -- {6d7f839 -- {d221665 -- 841f693 -- f5965df -- a12f94b -- 5464ee7}}
|
||
};
|
||
\gitbranch
|
||
{master}
|
||
{above=of 6d7f839}
|
||
{6d7f839}
|
||
\gitbranch
|
||
{branche/minee}
|
||
{above=of 5464ee7}
|
||
{5464ee7}
|
||
%\end{pgflowlevelscope}
|
||
\end{pgflowlevel}
|
||
\end{tikzpicture}
|
||
\end{minipage}
|
||
|
||
La branche minee schématise une situation dans laquelle un dysfonctionnement a été introduit mais pas détecté
|
||
aussitôt.
|
||
Un script \emph{test.sh} a été ajouté pour simuler le test du code.
|
||
Il retourne \emph{0} lorsque le code est bon, \emph{1} lorsque le code est mauvais.
|
||
|
||
L'exercice consiste donc à utiliser la commande \commande{git bisect} pour repérer le commit ayant introduit l'erreur, c'est-à-dire à partir duquel le script retourne \emph{1}.
|
||
|
||
\end{frame}
|
||
\begin{frame}
|
||
\frametitle{Inspection}
|
||
\framesubtitle{bisect}
|
||
Conditions de départ :
|
||
\begin{itemize}
|
||
\item dernier \emph{commit} de la branche \emph{branche/minee}
|
||
\item dernier état du code fonctionnel : dernier \emph{commit} de la branche \emph{master}.
|
||
\end{itemize}
|
||
\begin{enumerate}[<+->]
|
||
\item \commande{git checkout branche/minee}
|
||
\item \commande{git bisect start} \# démarrage de la session de recherche
|
||
\item \commande{git bisect bad} \# déclaration de l'état du dernier \emph{commit}
|
||
\item \commande{git bisect good \$(git log --oneline -1 --format=\%h master)} \# déclaration du dernier état fonctionnel connu
|
||
\end{enumerate}
|
||
% contenu (pas trop long) de la diapositive
|
||
\end{frame}
|
||
|
||
\begin{frame}
|
||
\frametitle{Inspection}
|
||
\framesubtitle{bisect}
|
||
À chaque déplacement contrôlé par \commande{git bisect}, exécuter \emph{test.sh} et indiquer si l'état est fonctionnel :
|
||
|
||
\commande{./test.sh; [[ \$? -eq 0 ]] \&\& git bisect good || git bisect bad}
|
||
\end{frame}
|
||
\begin{frame}
|
||
\frametitle{Inspection}
|
||
\framesubtitle{bisect}
|
||
\commande{a12f94b62f617417f4b1f8c5317bc2f033c92f5a is the first bad commit}
|
||
|
||
Terminer la session de recherche :
|
||
\commande{git bisect reset}
|
||
\end{frame}
|
||
|
||
\begin{frame}
|
||
\frametitle{Inspection}
|
||
\framesubtitle{blame}
|
||
La conclusion précédente, vu la simplicité du code en cause, aurait pu être tirée grâce à \commande{git blame} et \commande{git log}.
|
||
% contenu (pas trop long) de la diapositive
|
||
\end{frame}
|
||
\begin{frame}
|
||
\frametitle{Inspection}
|
||
\framesubtitle{blame}
|
||
\begin{itemize}
|
||
\item \commande{git blame test.sh}
|
||
\item \commande{git log -S"exit 1" test.sh}
|
||
\end{itemize}
|
||
\end{frame}
|