{"thread":{"id":"59530","subject":"[GSOC][Proposal V1]","startedAt":"2023-04-03T20:00:39Z","lastAt":"2023-04-03T20:00:39Z","messageCount":1,"participants":["RAGHUL NANTH"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"474712","messageId":"CAPnUp-nH=LNJNZZj_V3j-Lehm3JahibzpoN11WY-KO_Jsanz8A@mail.gmail.com","threadId":"59530","inReplyTo":null,"subject":"[GSOC][Proposal V1]","fromName":"RAGHUL NANTH","fromEmail":"nanth.raghul@gmail.com","sentAt":"2023-04-03T20:00:19Z","receivedAt":"2023-04-03T20:00:39Z","isPatch":false,"sender":{"key":"nanth.raghul@gmail.com","avatar":"https://avatars.githubusercontent.com/u/61490162?v=4"},"body":"I am sorry for sending my proposal late. This unfortunately forces\nthis to basically be the final draft. If you have any advice on things\nI could change, I would still appreciate them. Thank you\n\n## More Sparse Index Integrations\n\n### Personal Info\n\nName: Raghul Nanth\n\nEmail: [nanth.raghul@gmail.com](mailto:nanth.raghul@gmail.com)\nMobile No: (+91) 6382298677\n\nEducation: National Institute of Technology, Tiruchirapalli\nMajor: Computer Science\n\nGithub: [NanthR](https://github.com/NanthR)\n\n### Project Synopsis\n\nI would like to work on the \"More Sparse Index Integrations\" from the\n[SOC 2023 Ideas page](https://git.github.io/SoC-2023-Ideas/), which aims\nto integrate \"sparse-index\" with the remaining git commands, wherever\npossible. The project is expected to be of medium difficulty, and take\nup approximately 175 to 350 hours.\n\n**Sparse-index** is a feature that reduces the working directoy's index\n(a Git structure where information about the files tracked by git is\nmaintained), and allows it to work with \"sparse-checkouts\". This makes\ncertain commands like \"git-add\" or \"git-commit\" faster to execute.\n\n**Sparse-checkout** is a feature that allows the user to restrict their\nworking directory with only the files one is working on currently. This\nis useful when the user only has to modify a small subsection of a given\nproject\n\n### About me\n\nI have been involved in development for the better part of 3 years. I\nhave worked on some medium sized projects, but have never really been\ninvolved with open-source.\n\nMy participation in the Git community started fairly late, but in the\nlittle time I had, I have been able to understand the Git workflow, the\ninternals of the project, commonly used functions and test setup. The\ndocumentation, especially the\n[MyFirstContribution.txt](https://github.com/git/git/blob/master/Documentation/MyFirstContribution.txt),\n[MyFirstObjectWalk.txt](https://github.com/git/git/blob/master/Documentation/MyFirstObjectWalk.txt)\nand\n[sparse-index.txt](https://github.com/git/git/blob/master/Documentation/technical/sparse-index.txt)\nhelped me get up to speed on both the technical aspects I needed to\nunderstand and the prerequisites for contribution.\n\nI do anticipate my prior experience with the project will make the\nfurther progress a lot smoother.\n\n### Community benefits\n\nSparse-index aims to provide a better working experience for people\nworking with large monorepos, and my work on this project could enable\nmore commands that people use to work with sparse-index, thus enabling\nspeedups in more of their workflow.\n\n### Related Work\n\n- [Integration with\n  \"grep\"](https://lore.kernel.org/git/20220817075633.217934-1-shaoxuan.yuan02@gmail.com/)\n- [Integration with\n  \"rm\"](https://lore.kernel.org/git/20220803045118.1243087-1-shaoxuan.yuan02@gmail.com/)\n\n### Patches (Current Work)\n\n- [describe: enable\n  sparse-index](https://lore.kernel.org/git/pull.1480.v3.git.git.1680155957146.gitgitgadget@gmail.com/T/#m7bf44d073e179c5715946c00ce805fec23f64c19)\n    - **Status**: In review\n    - **Description**: Add sparse-index integration for describe. Add\n      functional and performance tests for the same.\n\n- [diff-index: enable\n  sparse-index](https://lore.kernel.org/git/20230403190538.361840-1-nanth.raghul@gmail.com/T/#u)\n    - **Status**: WIP\n    - **Description**: Add sparse-index integration for diff-index. Add\n      functional and performance tests for the same.\n\n### Plan\n\nThe general idea of integration remains the all the involved commands,\ndepending on how they are setup, and based on the current logic of the\ncommand involved, we might first have to alter the current logic before\nattempting to add sparse-index support. This is based on Shaoxuan Yuan's\nideas.\n\n1.  Investigate the command's logic and modify it wherever necessary\n(Especially compatibility with sparse-checkouts). Add tests for the\nsame. [7 - 10 days]\n\n2. Disable the command_requires_full_index setting in the building and\nensure that the current intended functionality is intact.\n\n3. Add tests to t1092-sparse-checkout-compatibility.sh for the built-in.\nVerify functionality, and if the command interacts with the working\ntree, make sure to test both in-cone and out-of-cone behavior.\n\n4. Add tests to ensure that the index is not expanded by the command.\n\n5. Add performance tests to demonstrate speedup\n(p2000-sparse-operations.sh)\n\n[Points 2 - 5 should be able to be completed in approximately 8 - 15\ndays ]\n\nThe first step will not be a necessity in all the commands and hence can\nbe skipped if not necessary. Without extending the timeline, 4 - 5\nintegrations are expected to be completed by the end of the GSOC program\nperiod.\n\n### Timeline\n\nI would be able to officially start the project as soon as the start of\nthe Community Bonding Period (May 4). I am confident of this as I\nalready have a basic understanding of the process I would need to follow\nto accomplish the goals of the project.\n\nEven though exact dates are hard, there should roughly be, from my\nestimation, **one sparse-index integration every 20ish days**, starting\non May 4.\n\nIntegration schedule:\n    - git-diff-tree\n    - git-write-tree\n    - git-worktree\n    - git-check-attr\n    - git-am\n\nDepending on the underlying implementation functions that these commands\nuse, they could have already been made sparse index aware. In that case,\nthe time to integration reduces significantly, as the only additions\nwould be to change the command_requires_full_index option and add tests.\n\n### Availability\n\nI will be completely free during the months of May-June and I will be\nable to fully spend my time for the project. I would be starting work\nafter that, so I would need to juggle my time between the two.\n\nI do not have the most free schedule, but I think I can manage my time\nenough to be able to contribute effectively to the project.\n\nI will be able to work on average 6 hours a week for 6 days a week\nduring the initial period. Following that, my contributions during the\nweekdays will decrease, but I believe I can make up for that during the\nweekends.\n\n### Post GSoC\n\nI understand the importance of having GSOC participants who continue to\nbe part of the community after the project ends. And I do intend to\nhonor that idea. Being part of open-source is always a cool idea, and\nhaving the opportunity to help with something as widespread as \"git\"\nwill always be exciting to me. I also feel I will be able to learn and\nmake some important contributions to the project with my continued\nparticipation.\n\nI would also ideally like to create blogs about the development of Git.\nThe methods and systems Git uses for its development is not apparent to\na new developer and giving a more gentler introduction could help more\npeople get into the project.\n\nThanks,\nKind Regards,\nRaghul\n\n### References\n- [Make your monorepo feel small with Git’s sparse\n  index](https://github.blog/2021-11-10-make-your-monorepo-feel-small-with-gits-sparse-index/),\n  Stolee\n- [Bring your monorepo down to size with\n  sparse-checkout](https://github.blog/2020-01-17-bring-your-monorepo-down-to-size-with-sparse-checkout/),\n  Stolee\n"}]}