Excellent. I have just put it. Which level do you think it should be  ?   beginner, intermediate or advanced ?<br><br>Cheers<br><br>Mariano<br><br><div class="gmail_quote">On Fri, Mar 12, 2010 at 8:18 AM, George Herolyants <span dir="ltr">&lt;<a href="mailto:george.herolyants@gmail.com">george.herolyants@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Oh, sorry, here it is:<br>
<div><div></div><div class="h5"><br>
<br>
<br>
++ Pharo/Squeak integration with git/mercurial.<br>
<br>
Source code management is highly important aspect of every software<br>
project. Currently in Squeak/Pharo world developer has very limited<br>
choice of such tools. The only available full-featured SCM tool is<br>
Monticello. Other alternatives such as changesets lack in some areas.<br>
Monticello in its own turn has some disadvantages: it can only handle<br>
Smalltalk code while typical software project has many other artefacts<br>
(represented primarily as files) such as documentation, scripts,<br>
diagrams and so on, which would be nice to have in the same<br>
repository. This project aims to get round this and some other<br>
disadvantages by creating a possibility for developers to use modern<br>
distributed source code management tools, which are popular outside of<br>
the Smalltalk community. The most recognized are git and mercurial.<br>
<br>
There is already SqueakSVN project but it aims to SVN integration. SVN<br>
is classic client-server SCM. But nowadays this kind of SCM&#39;s become<br>
less popular, while popularity of distributed SCM&#39;s (such as<br>
git/mercurial) is still growing. It is also crucial for open source<br>
projects like Pharo/Squeak to have distributed SCM to ease development<br>
process. Monticello is highly distributed and the new SCM must be<br>
distributed as well to successfully compete with Monticello. So<br>
git/mercurial fits this goal very well.<br>
<br>
**Technical details**<br>
<br>
This project may go different ways towards it&#39;s goal, depending on<br>
decisions being made during it.<br>
<br>
Initial steps will be:<br>
* Examining git/mercurial and choose one of them considering<br>
simplicity of API and it&#39;s ease of use, supported operating systems on<br>
and other important factors. There&#39;s also pure Smalltalk<br>
</div></div>implementation of Git storage format on SqueakSource, so this step<br>
<div class="im">will require examining it as well.<br>
* Defining and implementing a file mapping format for the Smalltalk<br>
code structure (classes, methods and so on), in order to support<br>
versioning at the level of separate methods (there is already one<br>
defined by SqueakSVN project so this step may require examining it).<br>
Or examining the ability to avoid such a mapping and store code<br>
directly without needing a working copy on disk.<br>
</div><div><div></div><div class="h5">* Studying how Squeak/Pharo handles system changes (changes of<br>
classes, methods). Then implement handlers for such changes to<br>
translate them to working copy using the mapping or through SCM API.<br>
* (optional but desirable) Implementing Smalltalk interface to the<br>
chosen SCM. It can be based on the SCM&#39;s command line interface or on<br>
it&#39;s API. These will require using OSProcess or FFI (or writing a<br>
plugin) respectively.<br>
<br>
Additional steps may include:<br>
* Implementing import/export tool for Monticello repositories.<br>
* Implementing simple user interface for the chosen SCM so that<br>
programmer can work with it from within the Smalltalk environment.<br>
Integration with widely used OmniBrowser would be even better.<br>
<br>
In addition to this a local git/mercurial repository can be used<br>
instead of sources/changes files. This will require:<br>
<br>
* Exploring the current mechanism used in Pharo/Squeak to maintain<br>
method version history.<br>
* Replacing it with the developed system which will write changes to<br>
the local git/mercurial repository.<br>
<br>
**Benefits to the student**<br>
<br>
The student will:<br>
* learn about modern source code management systems;<br>
* study their interfaces, both command line and API;<br>
* study Pharo/Squeak internal mechanisms related to handling of<br>
classes and methods changes and storing of method versions.<br>
* get experience in usage of FFI or writing plugins for Smalltalk VM;<br>
* get experience with making GUI in Pharo/Squeak;<br>
* enjoy writing programs in Smalltalk :)<br>
<br>
**Benefits to the community**<br>
<br>
Developers will be able to choose SCM system grounding this choice on<br>
their own preferences. The community will gain access to some famous<br>
source code hosting services such as GitHub or Bitbucket. Among other<br>
benefits it will increase visibility of the community and the<br>
Smalltalk language in whole. It also will lower the entry barriers to<br>
newcomers and as a consequence will help community grow.<br>
<br>
Getting rid of sources/changes files offers potentially unlimited<br>
method version history and avoids so called &quot;condensing changes&quot;. And<br>
using local git/mercurial repository for this purpose will make<br>
managing changes more natural and uniform in small (every method<br>
accepting) and in large (changes at the project level).<br>
</div></div></blockquote></div><br>