1. Title/Summary
Make git-merge Builtin
2. Organization
Git Development Community
3. Abstract
It generally has been found that the C version of a tool is more portable and easier to maintain across systems, not to mention faster.
A lot of scripts have been converted already, but "merge" is the big remaining chunk.
I want to replace git-merge with C versions.
4. Detailed Description
4.1. Project Goals
The goal would be to rewrite git-merge, so that it would be more portable and easier to maintain.
Measuring the success of failure of the project would be (I think) fairly easy:
I don’t know if additional tests are required before touching git-merge, if yes then I would write them first. Then the success would be if the git-merge.sh shell-script would be a builtin and all the tests would pass as well. Additionally the code would be merged to git.git as well.
Failure would be: the code not merged, or even git-merge would not be rewritten.
Description in more detail:
1) I should learn a bit more about git merge, at the moment I have no idea for example what git-merge-stupid does, and internally I don’t know how the git-merge works.
2) Once I understand how the current code works, I want to see if I need to write additional tests, to help testing when I rewrite code in C.
3) I need to learn the git C API, and I need to understand the internal structures git uses.
4) I need to rewrite git-merge itself in C. All tests should pass, then I should ask the mentor’s opinion if the code is basically OK, so that I can continue with the strategies.
5) Optionally, if I have time, I would convert each strategy which is not yet a builtin: If I count correctly, then these are:
git-merge-octopus git-merge-one-file git-merge-resolve git-merge-stupid
Basically this is what I would plan.
4.2. Interfaces
I think I’ll have to use the git API, and maybe I’ll have to improve it, I don’t know too much about this yet.
The parts what I would like to change are: git-merge-octopus.sh, git-merge-resolve.sh, git-merge.sh, git-merge-one-file.sh and git-merge-stupid.sh. But just git-merge.sh, first.
4.3. About Me
A have a page with links to patches I contributed to other FOSS projects:
Mostly minor code and/or documentation fixes. I contributed a few more complex patches to the pacman package manager, the bitlbee IM gateway, MPlayer, and tailor.
I’m generally a bash/C/python guy. I know some perl/Java/PHP as well. I have used CVS/SVN. I used darcs for my projects for a long time and I use git for my projects for about a half year. These are relatively small projects, at last I think the git one is bigger. I used email and/or IRC for communication when I contributed.
About Git experience: I started to use git for about half year ago and (as a user) I think I know a lot about it, as I use to read the mailing list and I’m hanging around on #git, so that I can learn from other people who know Git better than me.
I contributed some trivial patches and some documentation improvements, but I’m not familiar with the internal C API.
Here is a list of patches I contributed: