\documentclass[]{article}
\usepackage{amsmath,graphicx,supertabular,hyperref,tabularx,ifthen}
\title{TIP \#386: Relocation of Tcl/Tk Source Control Repositories}
\date{March 01, 2011}
\author{Kevin B. Kenny, Kevin Kenny}
\urlstyle{sf}
\setlength{\parskip}{1ex}
\setlength{\parindent}{0pt}
\def\tipversion$#1${\texttt{\$#1\$}}
\def\tiplangle#1{\ensuremath{<}}
\def\tiprangle#1{\ensuremath{>}}
\def\tipbar#1{\ensuremath{|}}
\def\tipmail#1#2{\(\langle\){\small\expandafter\url{#1@#2}}\(\rangle\)}
\ifx\pdfoutput\undefined
\newcommand{\tipimage}[2]{\typeout{Make sure you download #1.eps}\ifthenelse{\lengthtest{0.8\textwidth>#2}\and\lengthtest{0pt<#2}}{\includegraphics{#1.eps}}{\includegraphics[width=0.8\textwidth]{#1.eps}}}
\newcommand{\tipxref}[1]{}
\newcommand{\tipxrefend}{}
\else
\newcommand{\tipimage}[2]{\typeout{Make sure you create #1.pdf}\ifthenelse{\lengthtest{0.8\textwidth>#2}\and\lengthtest{0pt<#2}}{\includegraphics{#1.pdf}}{\includegraphics[width=0.8\textwidth]{#1.pdf}}}
\pdfcatalog{/PageMode /UseOutlines}
\newcommand{\tipxref}[1]{\pdfannotlink attr {/C [0.5 0.5 1.0] /Border [0 0 1]} goto name {#1}}
\newcommand{\tipxrefend}{\pdfendlink}
\fi
\newenvironment{tipabstract}{\begin{abstract}}{\end{abstract}}
\begin{document}\maketitle
\begin{center}\begin{tabularx}{\linewidth}{|r@{: }X|}\hline
\textbf{TIP \#386}&\textbf{Relocation of Tcl/Tk Source Control Repositories}\\\hline
Author&

Kevin B. Kenny \tipmail{kennykb}{acm.org}
\par
Kevin Kenny \tipmail{kevin.b.kenny}{gmail.com}
\\
Created&Tuesday, \(\text{1}^{\text{st}}\) March 2011\\
Type&Informative\\
State&Draft\\
Vote&Pending\\
Version&\tipversion$Revision: 1.4 $\\
Keywords&Fossil, DVCS\\
Post History&\\
\hline\end{tabularx}\end{center}
\thispagestyle{empty}\pagestyle{empty}
\begin{tipabstract}

This TIP describes the changed locations and procedures for source control for Tcl/Tk.
\end{tipabstract}
\tableofcontents\setcounter{page}{0}\clearpage\pagestyle{plain}

\section{Background}

Earlier this year, SourceForge's CVS repositories were attacked by parties unknown, resulting in an outage of several weeks' duration. Although all data were eventually recovered, the aftermath of the attack and outage was that SourceForge staff have formally designated CVS hosting to be a legacy product and offered assistance with migration to Subversion.

Since for some time the Tcl/Tk maintainers have wanted to transfer the version control repository to a distributed version control system (DVCS), the decision has been made to abandon SourceForge and adopt a Fossil repository. A donor who wishes to remain anonymous has given a reasonably powerful machine, \textbf{core.tcl.tk} to the Tcl Community Association and is providing rack space and bandwidth. The donor has also generously offered to make free shell accounts to qualified Tcl/Tk developers for CPU- and bandwidth-intensive tasks such as performance analysis and memory management audits. Interested developers should contact one of the TCT members listed at the end of this document.

Needless to say, given the distributed nature of Fossil, we expect several mirrors to emerge; Richard Hipp of SQLite.org has provided the first one, appropriately named \textbf{mirror1.tcl.tk}.

\section{Repository Locations}

The code base for Tcl itself now resides in a Fossil repository at [\url{http://core.tcl.tk/tcl/}]. The Fossil repository is available for anonymous cloning and for examination of version control history. At present, the bug tracker is disabled. Similarly, the code base for Tk resides at [\url{http://core.tcl.tk/tk}]. Tcl and Tk developers shall be granted 'push' rights to the respective repositories.

Developers who are unfamiliar with Fossil are strongly encouraged to consult the documentation at [\url{http://fossil-scm.org/}], in particular, the 'Fossil Concepts' paper at [\url{http://fossil-scm.org/index.html/doc/trunk/www/concepts.wiki}]. Novices to Fossil may want to work at least temporarily in 'autosync mode', which allows a CVS-like workflow.

At present, the bug, feature request and patch trackers will remain on SourceForge. Any developer hosting a mirror is expected to disable the bug tracker (it suffices to remove 't' permission from the 'anonymous' user). At some point we may use a SourceForge-to-Fossil converter for the existing trackers, and we do not wish to worry about trying to keep SourceForge and Fossil in sync.

\textbf{mirror1.tcl.tk} shall be kept up to date by a periodic automatic synchronization with \textbf{core.tcl.tk}. In order to avoid inadvertent forking, developers are requested not to push to mirrors unless \textbf{core.tcl.tk} suffers an extended outage.

Before using a clone from a mirror, developers should verify that it copies the correct version of the repository at \textbf{core.tcl.tk}. This can be determined by examining the 'project ID', reported by the 'clone' operation. For Tcl, the ID should be
\begingroup\small\begin{verbatim}
    1ec9da4c469c29f4717e2a967fe6b916d9c8c06e
\end{verbatim}
\endgroup

and for Tk, it should be
\begingroup\small\begin{verbatim}
    b5a34cc57b6712927bc5fd34ae98433a14c9fdea 
\end{verbatim}
\endgroup

\textbf{UPDATE, June 2013} The ticket trackers have now also been migrated from SourceForge to \textbf{core.tcl.tk}.

\section{Workflow}

Generally speaking, workflow will follow the description in [\url{http://fossil-scm.org/index.html/doc/trunk/www/concepts.wiki\#workflow}]. 

It is expected that large projects will be conducted on named branches in the Fossil repository; in fact, such a project should most likely be commenced by committing to a branch in your local clone. If you do not wish to share your work with others, you may use a private branch, and Fossil will refrain from synchronizing it when you synchronize your clone.

Simple bug fixes should be developed on the branch of the \textit{earliest} stable release that you intend to fix, and then merged forward onto the later releases' branches. It is expected that such ``dovetail merges'' will be frequent, so as to control the number of nuisance conflicts that will have to be resolved when merging.

Questions about Fossil on the Tcl'ers Chat or in comp.lang.tcl are encouraged; it's essential that all Tcl/Tk developers develop at least some familiarity with the technology, and it's somewhat new to all of us!

\section{Requesting access}

Tcl and Tk maintainers may request repository access by emailing one of the Tcl Core Team members on the following list:

 Joe English, Donal Fellows, Jeff Hobbs, Kevin Kenny, Andreas Kupries, Don Porter

all of whom have the required access to add new users to core.tcl.tk.

\section{Acknowledgments}

Major thanks are due to Roy Keene, for leading the migration effort, to Jörg Sonnenberger (author of cvs2fossil) and D. Richard Hipp (author of fossil itself) for many hours of unpaid support in getting the conversion to go, to Mark Janssen for developing scripts to audit the Fossil content against historical Tcl/Tk distributions, and to the many Tcl/Tk developers who tested and debugged the conversion process.

\section{Copyright}

This document has been placed in the public domain.

\section{Colophon}

\textit{TIP AutoGenerator --- written by Donal K. Fellows}
\end{document}
