[GSoC Proposal] Better Version control front-end

Miha Čančula miha.cancula at gmail.com
Mon Apr 5 10:40:56 BST 2010


The link is here:
http://socghop.appspot.com/gsoc/student_proposal/show/google/gsoc2010/noughmad/t127005100494

If you can't see it, I included the proposal, but it might be strangly
formatted by gmail.

Name: Miha Cancula



Email Address: miha.cancula at gmail.com



Freenode IRC Nick: Noughmad



IM Service and Username: Jabber,MSN: miha.cancula at gmail.com



Location (City, Country and/or Time Zone): Ljubljana, Slovenia, GMT+02
during the summer.



Proposal Title: Unified front-end for version control systems in KDevelop



Motivation for Proposal / Goal:

The goal of my project will be to provide a usable plugin-independent
interface for most used VCS functions within the IDE. KDevelop currently has
basic views for some functions, but definately all. A suitable target would
to enable the whole workflow (checkout, modify, review the patch, export or
commit it) without leaving the program.

If I find any additional time during the summer, I would update and improve
the Git plugin to support the interfaces that the new front-end will use.
This will be important because of the planned global switch to Git for the
whole KDE repository.



Implementation Details:

KDevPlatform has a module named vcs that includes interface classes that are
implemented by specific plugins. These classes specify which features a
particular VCS plugin supports. My work will be writing a set of GUI
elements for most commonly used VCS features. They might be implemented
either a dockable Tool Views or separate popup windows. These elements will
be:

- Repository browser / searcher: It will enable the user to browse a remote
subversion repository and automatically checkout and import a project into
the IDE. The goal is to have it work with KDE's repository, but really every
repository should work. It might require an additional interface for the
plugins to implement, in this case I will do so in the svn plugin. I will
try to get it to browse KDE's svn repository and Gitorious, as these are the
two most used sites for KDE development. Due to their differences in
structure, I plan to provide two different widgets.

- Modified files monitor: This is already available in the existing Patch
Review Toolview.

- Integrated inline diff viewer: Again, it's already present. The widget,
however, lacks some useful features, like exporting the patch file

These should be available for any version control system. There are also
some useful features that are only supported or needed for some VCS's.
KDevPlatform provides specific interface classes for them, so the view can
easily tell if the current plugin supports these features.

- Branch manager: Will only show up if the current plugin implements the
IBranchingVersionControl. It will display a list of current branches, with
actions to switch, merge or delete them. It should be able to display diffs
between branches.

- Remote repositories tracker: Distributed VCS, like bzr or git, often have
one local repository (to which you "commit"), but also one or more remote
ones (to which you "push"). This view will list currently setup remote
repositories and will allow the user to pull and push to them. Remote
repositories might have branches as well, so (if supported by the plugin)
the view will allow matching remote and local branches.

If possible, implementing these features in Git would mean implementing
additional virtual functions in the Git plugin, currently in playground.
Some basic functions are already there, I would especially like to add those
related to the last two parts, branches and repositories.



Tentative Timeline: Do you have other obligations from late May to early
August (school, work, vacation, etc.)? Please note that we expect the Summer
of Code to be a full-time, 40-hr a week occupation. It is important to be
clear and upfront about other commitments that you may have during that
time.

I finish school at end of May and have exams in June. However, we have
another exam perion in september, so there will be no problem in postponing
the exams until afther the Summer of Code is completed. Nevertheless, I
won't be able to work full time at the start. The first couple of weeks will
be a little lighter on the timeline.

Before the start: I will go through all the code related to version control
in KDevPlatform and KDevelop. I would discuss with the mentor and other
developers exactly what workflows need the most support. During that time
the general parts of GUI components would be decided. I will try to have the
user interface as consistend as possible. Also, I will study the current svn
plugin and Kdesvn for doing the repo browser.



Week 1: May 24 - May 30

The first stage of the project will be to design the interface of the
missing pieces. It is likely we will have to change it several times, so I
estimate about a week for it. I would begin with the repository browser, so
the work will go in the same order as the workflow I'm trying to support.
During this time I will be somewhat busy with school, that's why I estimated
the entire week for a relatively simple task.



Weeks 2-4: May 31 - June 20

Next come writing of the actual view for the repo browser. During this week
I will still have some school obligation, but I will be able to postpone it
to september. On the back-end side, it will browse the
svn.kde.orgrepository. It will have to be configurable for accounts
and will use the
anonsvn by default. Browsing will be limited to folders-only for folders not
manually imported to minimize bandwidth and disk space space usage.

Before the start date, I will look into both the current kdevsvn in the
KDevPlatform trunk and other svn clients like KdeSvn and decide which one is
most suitable for the task. I will integrate its functionality into the
view. I will still need custom code for checking out and importing the
projects, and for determining how much of the repository will have to be
downloaded.



Weeks 5: June 21 - June 27

With the repo browser hopefully done, I will move on to the modified file
and diff viewer widget. The UI will be updated, and I would add additional
functions, for example exporting a diff file.



Week 6-7: June 28 - July 11

At that time, I would start on the more specific features that are still
pargely supported, particularely branches. A view will have to be created to
monitor branches, view differences between them and merge them. It will have
to be integrated with the diff viewer, especiallly for confilict resolution.

My goal for the mid-term review will be the first three components (the once
that would be used in any VCS) done and the complete "Find, checkout,
modify, review" workflow supported in the IDE. If there are no delays
(wishful thinking, I know) I will proceed to the next task.



Weeks 8-9: July 12 - July 25

Now come the last piece of the plan, a remote repository tracker for
distributed version control plugins. This will be more important if a Git
plugin is also finished. DVCS's store a list of remote repositories to which
to push changes and from which to pull updates. This view will show all the
currently associated repositories, along with information about how
up-to-date they are, differenced between them, and (optionally) branches
contained in them. This part is less significant if there's no usable Git
plugin, so I'm leaving it for the last weeks.



Weeks 10-11: July 26 - August 9

Finally, I plan to add support for as many new interfaces as possible to the
Git plugin. That way the previous weeks' work will be used and tested with a
real implementation. Also, similar to the svn browser, a Gitorious search
function will be implemented here, along with checkout and auto-import
functionality. The search will use a different view, because of the
differences in repository structure between Git and SVN.



Week 12: August 10 - August 16

After the suggested pencils-down date, I will try to fix any remaining
glitches. If the timeline turns out to be too steep, I will try to finish
any uncompleted tasks.



About Me (let us know who you are!):

I'm a second year Physics student from Ljubljana, Slovenia. Even though my
main field is physics, I've always been interested in computers, especially
programming. I attended both the Internation Mathematics and Physics
Olympiads as part of the Slovenian team, as well as several national
programming competitions. As a Physics student, I do a lot of programming at
school, but also for fun, mostly with KDE Development Platform: I am the
author of Opeke
<http://kde-apps.org/content/show.php/Opeke?content=76417>and the new
rewrite of
Knights. <http://kde-apps.org/content/show.php/Knights?content=122046> I
also have an unreleased pet project in Qt called Card Game Table, it's
available on Gitorious <http://gitorious.org/cgtable>. I'm a firm believer
in free software and I've been useing Linux and KDE exclusively for several
years now. As a student have a great interest in education tools, especially
ones for Mathematics and Physics, and I believe education is one of the
major opportunities of free software. I know C++ and KDE libraries quite
well, although so far mostly from outside. I use KDE extensively, but never
really contributed anything to them, so I'd like to give something back.

I should also note that I applied for the Summer of Code last year, also
with KDE, but was not accepted. As a first-year student, I really didn't
have that much programming experience back then, but I believe I learnt a
lot during this year, in school and especially by writing Knights and CGT.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kdevelop/attachments/20100405/0cd56dd9/attachment-0001.html>


More information about the KDevelop mailing list