%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 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 Clone existing repositories,
  \item Share your repositories with peers,
  \item Use version control for collaborating with your peers,
  \end{itemize}
\end{frame}

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

\section{Collaborating with Mercurial}
\begin{frame}[fragile]
  \frametitle{Cloning Repositories}
  \begin{itemize}
  \item \typ{hg clone SOURCE [DEST]}
  \item All \typ{hg} repositories are self-contained
  \end{itemize}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Sharing Repositories}
  \begin{itemize}
  \item \typ{hg serve}
  \item Can be cloned with \typ{hg clone http://my-ip-address:8000}
  \item We share a central repository; work on our local copies. 
  \item Set write permissions in \typ{.hg/hgrc}
  \end{itemize}
  \begin{lstlisting}
    [web]
    push_ssl=False
    allow_push=*
  \end{lstlisting}
\end{frame}

\begin{frame}
  \frametitle{Sharing Changes}
  \begin{itemize}
  \item Use \typ{hg push} to push your \typ{commits}
    (\typ{changesets}) to the central repository
  \end{itemize}
\end{frame}


\begin{frame}
  \frametitle{Pulling Changes}
  \begin{itemize}
  \item \typ{hg incoming} shows new \typ{changesets} in the server 
  \item To get these \typ{changesets}, we use \typ{hg pull}
  \item These changes do not affect our working directory
  \item \typ{hg parent} shows the parents of the working directory
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Pulling Changes \ldots}
  \begin{itemize}
  \item \typ{hg update} will update the working directory 
    \begin{itemize}
    \item Updates to the \typ{tip} if no revision is specified
    \item \typ{tip} is the most recently added changeset 
    \item Can specify revision number to update to
    \end{itemize}
  \item \typ{hg tip} shows the \typ{tip} of the repository
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Simultaneous Changes}
  \begin{itemize}
  \item The logs of both repositories will be different
  \item The repositories have diverged
  \item \typ{hg push} fails, in such a scenario
  \item \alert{Never, Never, Never, Ever} use \typ{hg push -f}
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Merging}
  \begin{itemize}
  \item Pull and merge, when \typ{abort: push creates new remote
    heads!}
  \item \typ{hg merge} will merge the two diverged heads
  \item \typ{commit} after you have \typ{merged}!
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Simultaneous Changes \ldots}
  \begin{itemize}
  \item \typ{outgoing} shows the \typ{changesets} that will be pushed
  \item \typ{hg push} works!
  \item Look at the `Change graph'!
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Simultaneous Conflicting Changes}
  \begin{itemize}
  \item What if the changes conflict? -- overlapping edits
  \item \typ{hg push} fails; \typ{hg pull}; \typ{hg merge}
  \item You now get a diff view with 3 panes 
    \begin{itemize}
    \item First --- current file
    \item Second --- \typ{changesets} that you pulled
    \item Third --- file before you made your changes
    \end{itemize}
  \item Resolve conflict and save
  \item \typ{hg commit}; \typ{hg push}
  \item Look at the `Change graph'!
  \end{itemize}
\end{frame}

\section{Conclusion}

\begin{frame}
  \frametitle{\alert{Advice}: Work-flow}
  General work-flow
  \begin{itemize}
  \item \typ{pull}; \typ{update}
  \item Make changes
  \item \typ{commit}
  \item If changes on repo, \typ{pull} and \typ{merge}
  \item \typ{push}
  \end{itemize}
  \emphbar{Commit Early, Commit Often}
\end{frame}

\begin{frame}
\frametitle{Summary}
In this tutorial, we have learnt to,
\begin{itemize}
\item Clone repositories, using hg clone,
\item Serve our repositories via http using hg serve,
\item Push changes to a repository using hg push,
\item Use hg incoming
\item Pull changes from a repository using hg pull ,
\item Update the working directory, using hg update,
\item Merge two heads, using hg merge,
\item Resolve conflicts using hg resolve.
\end{itemize}
\end{frame}

\begin{frame}[fragile]
\frametitle{Evaluation}
\begin{enumerate}
\item 
\item 
\item 
\end{enumerate}
\end{frame}


\begin{frame}
\frametitle{Solutions}
\begin{enumerate}
\item 
\item 
\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}

