%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Version Control Systems
%
% Author: FOSSEE 
% Copyright (c) 2009, FOSSEE, IIT Bombay
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\documentclass[12pt,compress]{beamer}

\mode<presentation>
{
  \usetheme{Warsaw}
  \useoutertheme{infolines}
  \setbeamercovered{transparent}
}

\usepackage[english]{babel}
\usepackage[latin1]{inputenc}
%\usepackage{times}
\usepackage[T1]{fontenc}

% Taken from Fernando's slides.
\usepackage{ae,aecompl}
\usepackage{mathpazo,courier,euler}
\usepackage[scaled=.95]{helvet}

\definecolor{darkgreen}{rgb}{0,0.5,0}

\usepackage{listings}
\lstset{language=bash,
    basicstyle=\ttfamily\bfseries,
    commentstyle=\color{red}\itshape,
  stringstyle=\color{darkgreen},
  showstringspaces=false,
  keywordstyle=\color{blue}\bfseries}

\newcommand{\inctime}[1]{\addtocounter{time}{#1}{\tiny \thetime\ m}}

\newcommand{\typ}[1]{\lstinline{#1}}

\newcommand{\kwrd}[1]{ \texttt{\textbf{\color{blue}{#1}}}  }

\setbeamercolor{emphbar}{bg=blue!20, fg=black}
\newcommand{\emphbar}[1]

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% DOCUMENT STARTS
\begin{document}

\begin{frame}

\begin{center}
\vspace{12pt}
\textcolor{blue}{\huge Version Control with hg}
\end{center}
\vspace{18pt}
\begin{center}
\vspace{10pt}
\includegraphics[scale=0.95]{../images/fossee-logo.png}\\
\vspace{5pt}
\scriptsize Developed by FOSSEE Team, IIT-Bombay. \\ 
\scriptsize Funded by National Mission on Education through ICT\\
\scriptsize  MHRD,Govt. of India\\
\includegraphics[scale=0.30]{../images/iitb-logo.jpg}\\
\end{center}
\end{frame}

\begin{frame}
  \frametitle{Objectives}
\label{sec-2}
  At the end of this session, you will be able to:
  \begin{itemize}
  \item Undo changes to your repository,
  \item View the differences between any two states of a repository,
  \item Understand how revisions are numbered and use it as arguments to commands,
  \end{itemize}
\end{frame}

\begin{frame}
\frametitle{Pre-requisite}
\textbf{Version Control Using Hg}
	\begin{itemize}
	\item Part 1
	\item Part 2
	\end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Operational overhead?}
  \begin{itemize}
  \item But why do we \typ{commit}?
  \item Isn't all this just adding to operational costs?
  \item Isn't all this a waste of time?
  \end{itemize}
  \begin{center}
    \emphbar{No! You shall see the benefits, soon!}    
  \end{center}
\end{frame}

\begin{frame}
  \frametitle{Revert Changes}
  \begin{itemize}
  \item Undo all changes; the editor can only do so much.
  \item \typ{hg revert --all}
  \item \typ{hg revert filename}
  \item Present file, with changes --- \typ{filename.orig}
  \end{itemize}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Viewing Changes}
  \begin{itemize}
  \item \typ{hg diff} --- all changes since last commit
  \end{itemize}
  \begin{block}{}
    \begin{lstlisting}
      - this line was deleted
      + this line was added
    \end{lstlisting}
  \end{block}
\end{frame}


\begin{frame}[fragile]
  \frametitle{Revision numbering}
  \begin{itemize}
  \item \typ{changeset:   n:cbf6e2a375b4}
  \item \typ{n} is the revision number
  \item The revision number is local to a repository
  \item \typ{cbf6e2a375b4} is the unique identifier
  \end{itemize}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Using revision numbers}
  \begin{itemize}
  \item \typ{-r n} can be passed as arguments to commands to specify
    the revision number
  \item For instance, \typ{hg diff -r1 -r2}
  \item \typ{m:n} specifies a range of revision numbers
  \item For instance, \typ{hg log -r0:2}
  \end{itemize}
\end{frame}


\begin{frame}
\frametitle{Summary}
In this tutorial, we have learnt to,

\begin{itemize}
\item Undo changes to the repository using hg revert,
\item View changes done to the repository using hg diff
\item Use revision numbers as arguments to different hg commands
\end{itemize}
\end{frame}

\begin{frame}[fragile]
\frametitle{Evaluation}

\begin{enumerate}
\item How to accomplish not saving backup files using hg revert command?
\item Get the history of revisions 2 to 4 without having to list each revision? 
\item Print the description and content of a change. Hint: Use --patch option
\end{enumerate}
\end{frame}

\begin{frame}
\frametitle{Solutions}
\begin{enumerate}
\item hg revert -C --no-backup
\item hg log -r 2:4
\item hg log -v -p -r 2
\end{enumerate}
\end{frame}

\begin{frame}
\begin{block}{}
  \begin{center}
  \textcolor{blue}{\Large THANK YOU!} 
  \end{center}
  \end{block}
\begin{block}{}
  \begin{center}
    For more Information, visit our website\\
    \url{http://fossee.in/}
  \end{center}  
  \end{block}
\end{frame}

\end{document}

