Hello Git Team,
I'm a student interested participating in egit/jgit project for this
year GSoC. Here I'm trying to investigate what can and need to be done
for egit plugin and jgit library -> I'm asking you kindly for some
comments or answers. That's somehow pre-proposal, as I'd like to know on
which part should I do more research before preparing more detailed
proposal.
[my git-awareness status]
To this time, I've used mainly SVN as version control. Last days were my
first days with git, and I'm excited :) I've been doing some intensive
learning: now I feel quite confident as a git user, also have done
overview of git's internals (.git/ structure, data structures: DAG of
objects, branches, tags, index etc.) and workflow of main operations.
I've also downloaded and tested egit plugin on my Eclipse instance, and
looked over jgit and egit code (nice!).
[/my git-awareness status]
Let's start from some clean-up:
http://git.or.cz/gitwiki/EclipsePluginWishlist - isn't this site a
little outdated? It appears that tasks: Commit, Switch Branch (without
dirty workspace/merge support) are already done, aren't they?
Some operations look for me as rather straight-forward to implement -
not appropriate for a whole GSoC project (or do I underestimate?).
Namely: Create/Delete Branch, Create/Delete Tag, Gitignore, Checkout(?).
GSoC2008 site states, that most wanted tasks are (that's reasonable)
Push and Merge implementation. Fetch operation also looks to be not
implemented yet? Do you agree that is also one of most important
operation not yet supported? It seems that Pull and Clone are tasks for
future, because of Merge or Fetch dependencies.
So what can I do:
I think that 1-2 from 3 main jgit+egit tasks (Push, Fetch, Merge) appear
to be well-sized for a GSoC project. IMO, there is also need for a lot
of smaller improvements in egit itself: preferences, preference page,
user-friendliness related: more icons and information, help in dialogs,
wizards, menus etc. I'm thinking of taking 1 main task - implementing
first jgit part, then egit part. And if I finish it before time, I could
work on set of such smaller improvements in egit itself, to make it
easier/nicer for user.
I'm particulary interested in protocol implementation (Fetch or Push
operation) as main-task, but Merge also looks interesting. What is more,
I perceive Merge and Fetch operations as most wanted, because being on
project critical-path, blocking implementation of other tasks. Merge
seems also to be used very often itself.
Current implementation status:
There is currently no Eclipse (GUI, workspace logic) code directly for
each of main tasks.
What about jgit? I haven't looked at details of implementation yet
(sorry, I'm starting), but...
For Fetch or Push: I'll need to implement protocol(s) for sure: git, ssh
protocols first as wiki-recommends - wisely, I think. What about support
from jgit internals: do I need to add some git structures implementation
to accomplish Fetch or Push: like object packing, needed objects
tracking? Or is almost everything available, so I just need to use this
structures and concentrate on upload/receive operation and protocol
implementation? In case of Fetch, I guess that Create Branch (easy?)
implementation is also needed. Is local Fetch or Push already supported
in jgit? If not, I'd start from this. I've got also some doubts
concerning SSH vs git access protocols. Are git-receive-pack and
git-upload-pack used by both of these access protocols? If so, it make
things easier:)
For Merge: I'll need to implement 3-way merge algorithm. Wiki says that
one can look at Eclipse, if it is already implemented there. IMHO it's
better to implement it at jgit level, independently of egit, basing on
original git implementation, don't you think (I've seen that there are
some efforts to implement git plugin for NetMeans, basing on jgit
library)? I wonder how laborious this task is, i.e. as for Fetch/Push:
does translation of this algorithm written in C to Java requires
significant changes or improvements to existing jgit code?
What do you think about importance of each task and what is your feeling
about time needed to implement each?
At the end, few words about me, what you could expect:
I'm a BSc/MSc undergraduate of a Computer Science course at Poznan
University of Technology (Poland). My main areas of interests are
distributed systems and software engineering, especially quality of
software. I'm quite experienced Java developer; and C is my "second"
language, so I can analyze existing git implementation. I've finished
Eclipse Summer School workshop some time ago - on Eclipse plugins
development, so I've got some knowledge on Eclipse internals. I'm ready
to implement protocol or algorithm when needed.
I've got some experiences with JSch (bad experience...) and Trilead SSH
(much more postive) - BSD-licensed SSH implementations for Java.
To this time I was working on many smaller projects, and one bigger (>1
year, BSc and grids related), mostly in small teams, sometimes
distributed. It seems to be great experience if I can join git community:)
Thank you for your attention, I'd appreciate any comments, expectations
or info (answers)! If you want I can move to private discussion.
PS BTW: I've wonder what "Checkpoint project" in Eclipse Team menu
stands for?
--
Marek Zawirski [zawir]
marek.zawirski@xxxxxxxxx
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html