Sorry for being late in submitting the proposal. My end semester
examinations were over just yesterday so I somehow made this proposal
during the exam time.
===============
View in Google Docs:
https://docs.google.com/document/d/1qq-Xze6dMGMSx3rPHD0VEc4f0a87KnHgbka1Dzpf8sc/edit?usp=sharing
===============
Proposal
===============
Unify ref-filters with other pretty formats.
Name : Jaydeep Prapanch Das
Email : jaydeepjd.8914@xxxxxxxxx
Contact : +91 6026139802
Github : JDeepD(https://github.com/JDeepD)
Linkedin : https://www.linkedin.com/in/jdeepd
Course : Computer Science and Engineering, 2025
Time Zone : IST(+5:30)
## About me:
I am a first year undergraduate at National Institute of Technology,
Silchar pursuing B.Tech in Computer Science and Engineering. My
interests include FOSS development, Data Science and Robotics. I have
been writing Python, C and shell scripts for about 3 years now. Apart
from that I also blog[1] whenever I find an interesting topic to blog
about. During the GSoC period I also plan to blog about the new things
in git that I hope to learn.
[1]: https://jdeep.me/
## Micro-Project:
I am still a newbie in git development and made my first (minor)
contribution in Feb 2022 [1]. This was a patch I made just to get
familiar with the patching and sending patches to the mailing list. For
my micro project, I worked on adding diff driver for the Kotlin language.[2]
The main objective was to make an xfuncname regex which matches keywords
in Kotlin syntax so that they are considered as a single token
whenever diffs are generated. Along with that, a word_regex regex pattern
was also needed so that variable names, compound operators etc are not
broken into individual tokens by git diff when there is a change in them.
For ex, if a == b is changed to a != b , then the diff should show
that entire
`==` token is replaced with the token `!=`. While working on this micro
project, I learned a lot about the contribution and review workflow of
git. It took 7 patches to incorporate all the reviews and suggestions so
yeah, It did require some patience :-).
Minor patch(merged in master)
[1]:
https://public-inbox.org/git/20220208092339.651761-2-jaydeepjd.8914@xxxxxxxxx/
Micro Project(merged in master)
[2]:
https://public-inbox.org/git/20220312044832.718356-1-jaydeepjd.8914@xxxxxxxxx/
## Proposal:
Git has an old problem of duplicated implementations of some logic. For
example, Git has at least 4 implementations to format commands for
different commands. Previously, Olga Telezhnaya[1] and Hariom Verma[2]
worked on this and eliminated most of the duplicate logic. But still,
there are still some things left to do. Current task is to reuse
ref-filter logic in pretty.
[1]: https://github.com/telezhnaya/git/commits/format
[2]:
https://public-inbox.org/git/pull.707.git.1597841551.gitgitgadget@xxxxxxxxx/
## Previous Work:
Previous GSoC mentee Hariom Verma worked on this[1]. He worked on
removing duplicate logic and reuse ref-filter’s logic in pretty.
However, as per his report, some tasks are still left to do.
-> Around 30% log related tests are failing
-> Teach pretty-lib.{c,h} to handle incorrect formatting option
-> Email/MBoxed commit format needs work
[1]: https://harry-hov.github.io/blogs/posts/the-final-report
## GSoC Planning:
The main objective would be to start from where Hariom left and make
further improvements in the related field if time permits.
Currently, because my end sems were just over yesterday, I am yet to do
a full reading/understanding of the pretty and ref-filter code. I plan
to first read the documentation of git-log and study the pretty formats
and their implementation. Next would be to read the code and understand
how it is working under the hood and try to find possible bugs and edge
cases where the tests fail. I have already gone through the various
must-read documentations suggested in the Hacking git[1] section of the
git-scm website:
My First Contribution Tutorial[2]
My First Object Walk[3]
Apart from that, I also have a decent understanding of git internals,
objects and porcelain commands from the Git Internals[4] documentation.
I want to start as early as possible since my main motivation for
contributing to git is to improve something that millions of people,
including me, use everyday in their day to day life.
[1]: https://git.github.io/Hacking-Git/
[2]: http://git-scm.com/docs/MyFirstContribution
[3]:
https://github.com/git/git/blob/master/Documentation/MyFirstObjectWalk.txt
[4]: https://git-scm.com/book/en/v2/Git-Internals-Plumbing-and-Porcelain
Estimated Timeline:
-> April 20 - May 14
Read the docs and go through the codebase. Make small code contribution
if possible.
-> May 14 - May 21
Inactive Period
The covid lockdown is almost lifted and I would need to report back
offline to college. So I would probably be busy for a week to get
settled there.
-> May 22 - June 5
Community Bonding Period
Get in touch with the possible mentors(Christian Couder and Hariom
Verma) and discuss the possible solutions.
-> June 6 - June 11
Inactive Period
Will be inactive for the week due to mid semester examinations
-> June 11 - July 24
Coding Phase 1
Fix the test cases that are failing
Eliminate more duplicate logic in pretty.{c,h}.
Update the documentation
July 25 - August 20
Coding Phase 2 (part 1)
Teach pretty.{c,h} to handle incorrect formatting options.
Make improvements in email/mboxed commit formats.
Update documentation
August 22 - August 27
Inactive Period
Will be inactive for the week due to end semester examinations.
August 27 - September 19
Coding Phase 2 (part 2)
Start where it left off in part 1 of coding phase 2.
During the coding phase 1, I would be able to dedicate 4 - 5 hours every
working day. On weekends, I could dedicate the entire day or take a
break depending upon the number of assignments I get. During the coding
phase 2 part 1, I will be able to dedicate 4 - 5 hours easily except the
hours may decrease some days before the end semester examinations.
## Blogging during the contribution period:
I plan to write bi monthly/monthly blogs during the contribution period
which I would post on my personal website[1]. I would write about my
progress and the new things that I will learn when I contribute to git.
I also plan to make a complete video tutorial after the GSoC period
about the contribution workflow in the git codebase since I believe it
would have greatly helped newcomers (like me) to get started quickly.
[1]: https://jdeep.me/posts/
## Post GSoC:
I would love to explore the git codebase and I am particularly
interested in the sparse index feature of git. I would also love to
co-mentor someone someday when I get more experience in the codebase. I
have also noticed that there are some lesser known/underrated features
of git ( like partial clones, sparse checkout, worktrees) and I plan to
make video tutorials on these topics too.
## Closing Remarks:
As a whole, I feel it would be a great learning experience for me as
this would be the first “really” big open source project where I would
be contributing to. I am really excited about being a part of the git
community.
Eagerly waiting for review.
Thanks,
Jaydeep