% Copyright (C) 2020 Mohammad Akhlaghi <mohammad@akhlaghi.org>
%
%% This LaTeX source is free software: you can redistribute it and/or
%% modify it under the terms of the GNU General Public License as published
%% by the Free Software Foundation, either version 3 of the License, or (at
%% your option) any later version.
%
%% This LaTeX source is distributed in the hope that it will be useful, but
%% WITHOUT ANY WARRANTY; without even the implied warranty of
%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
%% General Public License for more details.
%
%% You should have received a copy of the GNU General Public License along
%% with this LaTeX source.  If not, see <https://www.gnu.org/licenses/>.





%% To simplify the adding of new commits.
\newcommand{\branchcommit}[4]{
  \draw [fill=#1, opacity=0.8] (#2,#3) circle [x radius=5.5mm, y radius=2.1mm];
  \draw [anchor=center] (#2,#3) node {\textcolor{white}{\scriptsize\texttt{#4}}};
}





\begin{tikzpicture}

  %% Just for a reference (so the image size always remains fixed). It also
  %% helps in defining easy coordinates for all the other elements.
  \draw [white] (0,0) -- (0,10cm);
  \draw [white] (0,0) -- (\linewidth,0);

  %% Maneage branch line.
  \draw [black!40!white, dashed, line width=2mm] (2cm,0) -- (2cm,0.6cm);
  \draw [->, black!40!white, line width=2mm] (2cm,0.6cm) -- (2cm,7.9cm);
  \draw [anchor=south, black!20!white] (2cm,4cm) node [rotate=90, scale=2]
        {\bf Maneage branch};

  %% Project branch line.
  \draw [->, black!40!white, rounded corners, line width=2mm]
        (2cm,2cm) -- (3.5cm,2.5cm) -- (3.5cm,7.9cm);
  \draw [black!40!white, line width=2mm] (2cm,5cm) -- (3.5cm,5.5cm);
  \draw [anchor=south, black!20!white] (3.5cm,5cm) node [rotate=90, scale=2]
        {\bf Project branch};

  %% Derivative project
  \draw [black!40!white, rounded corners, line width=2mm]
        (3.5cm,4.5cm) -- (5cm,5cm) -- (5cm,6cm) -- (3.5cm,6.5cm);

  %% Maneage commits.
  \branchcommit{green!70!blue}{2cm}{1cm}{1d72e26}
  \branchcommit{green!70!blue}{2cm}{2cm}{0c120cb}
  \branchcommit{green!70!blue}{2cm}{3cm}{5781173}
  \branchcommit{green!70!blue}{2cm}{4cm}{0774aac}
  \branchcommit{green!70!blue}{2cm}{5cm}{3c05235}
  \branchcommit{green!70!blue}{2cm}{6cm}{6ec4881}
  \branchcommit{green!70!blue}{2cm}{7cm}{852d996}

  %% Project commits.
  \branchcommit{red!60!green}{3.5cm}{2.5cm}{4483a81}
  \branchcommit{red!60!green}{3.5cm}{3.5cm}{5e830f5}
  \branchcommit{red!60!green}{3.5cm}{4.5cm}{01dd812}
  \branchcommit{red!60!green}{3.5cm}{5.5cm}{2ed0c82}
  \branchcommit{red!60!green}{3.5cm}{6.5cm}{f62596e}

  %% Derivate project commits.
  \branchcommit{red!60!green}{5cm}{5cm}{f69e1f4}
  \branchcommit{red!60!green}{5cm}{6cm}{716b56b}
  \node[inner sep=0pt] at (4.5cm,7cm)
       {\includegraphics[width=9mm]{tex/img/collaboration-icon.pdf}};


  %% Description of this scenario:
  \draw [anchor=west, black] (2.7cm,1.5cm) node {\textbf{Scenario 1} (pre-publication):};
  \draw [anchor=west, black] (2.8cm,1.1cm) node {\small Collaborating on a project while};
  \draw [anchor=west, black] (2.8cm,0.7cm) node {\small working in parallel, then merging.};



  %% Middle line.
  \draw [black] (8cm,0.5) -- (8cm,7.5cm);




  %% Maneage branch line.
  \draw [black!40!white, dashed, line width=2mm] (10cm,0) -- (10cm,0.6cm);
  \draw [->, black!40!white, line width=2mm] (10cm,0.6cm) -- (10cm,9.9cm);
  \draw [anchor=south, black!20!white] (10cm,4cm) node [rotate=90, scale=2]
        {\bf Maneage branch};

  %% Project branch line.
  \draw [black!40!white, rounded corners, line width=2mm]
        (10cm,2cm) -- (11.5cm,2.5cm) -- (11.5cm,6.9cm);
  \draw [black!40!white, line width=2mm] (10cm,5cm) -- (11.5cm,5.5cm);
  \draw [anchor=south, black!20!white] (11.5cm,5cm) node [rotate=90, scale=2]
        {\bf Project branch};

  %% Derivative project
  \draw [->, black!40!white, rounded corners, line width=2mm]
        (11.5cm,6.5cm) -- (13cm,7cm) -- (13cm,9.9cm);
  \draw [black!40!white, line width=2mm] (10cm,8cm) -- (13cm,9cm);
  \draw [anchor=south, black!20!white] (13cm,6.5cm) node [rotate=90, scale=2]
        {\bf Derivative branch};

  %% Maneage commits.
  \branchcommit{green!70!blue}{10cm}{1cm}{1d72e26}
  \branchcommit{green!70!blue}{10cm}{2cm}{0c120cb}
  \branchcommit{green!70!blue}{10cm}{3cm}{5781173}
  \branchcommit{green!70!blue}{10cm}{4cm}{0774aac}
  \branchcommit{green!70!blue}{10cm}{5cm}{3c05235}
  \branchcommit{green!70!blue}{10cm}{6cm}{6ec4881}
  \branchcommit{green!70!blue}{10cm}{7cm}{852d996}
  \branchcommit{green!70!blue}{10cm}{8cm}{13a1881}
  \branchcommit{green!70!blue}{10cm}{9cm}{61b6b01}

  %% Project commits.
  \branchcommit{red!60!green}{11.5cm}{2.5cm}{4483a81}
  \branchcommit{red!60!green}{11.5cm}{3.5cm}{5e830f5}
  \branchcommit{red!60!green}{11.5cm}{4.5cm}{01dd812}
  \branchcommit{red!60!green}{11.5cm}{5.5cm}{2ed0c82}
  \branchcommit{red!60!green}{11.5cm}{6.5cm}{f62596e}
  \node[inner sep=0pt] at (11.5cm,7.2cm) {\includegraphics[width=9mm]{tex/img/paper-icon.pdf}};
  \draw [anchor=north, black] (11.5cm,8cm) node {\scriptsize Published};

  %% Derivate project commits.
  \branchcommit{purple!60!yellow}{13cm}{7cm}{b177c7e}
  \branchcommit{purple!60!yellow}{13cm}{8cm}{5ae1fdc}
  \branchcommit{purple!60!yellow}{13cm}{9cm}{bcf4512}

  %% Description of this scenario:
  \draw [anchor=west, black] (10.7cm,1.5cm) node {\textbf{Scenario 2} (post-publication):};
  \draw [anchor=west, black] (10.8cm,1.1cm) node {\small Other researchers building upon};
  \draw [anchor=west, black] (10.8cm,0.7cm) node {\small previously published work.};

\end{tikzpicture}
