From: jayesh0104 <jayeshdaga99@gmail.com>
To: git@vger.kernel.org
Cc: gitgitgadget@gmail.com, christian.couder@gmail.com,
karthik.188@gmail.com, jltobler@gmail.com,
ayu.chandekar@gmail.com, siddharthasthana31@gmail.com
Subject: [GSoC][PROPOSAL] Improve the new git repo command
Date: Tue, 24 Mar 2026 04:58:43 +0000 [thread overview]
Message-ID: <20260324045904.44384-1-jayeshdaga99@gmail.com> (raw)
Hi all,
I am Jayesh Daga, a third-year Computer Science undergraduate at VIT Chennai.
I would like to submit my proposal for the GSoC 2026 project: "Improve the new git repo command".
I would greatly appreciate feedback from the community and mentors.
---
== 1. Personal Information
Name: Jayesh Daga
Email: jayeshdaga99@gmail.com
GitHub: https://github.com/jayesh0104
University: Vellore Institute of Technology, India
Timezone: IST (UTC+5:30)
Availability: 35–40 hours/week (May–August 2026)
---
== 2. About Me
I am a systems-oriented developer with a strong interest in developer tools,
version control systems, and backend infrastructure.
I have experience in C, C++, Python, and JavaScript, and have worked on:
- real-time telemetry systems
- CI/CD pipelines
- backend services
I enjoy working close to system internals, where small design decisions
can significantly impact usability and performance.
---
== 3. Contributions to Git
I have actively contributed to the Git project, particularly in improving
test consistency and aligning with Git’s internal testing framework.
- Replaced raw file checks with `test_path_is_missing` to align with
Git’s testing conventions
- Fixed incorrect helper usage that could lead to test failures
One of my patches has been integrated into the `next` branch of Git,
indicating that it has passed initial review and integration stages.
I have participated in the full upstream contribution workflow:
- Sending patches via git-send-email
- Engaging in mailing list discussions
- Responding to maintainer feedback
- Submitting revised versions (v2, v3)
For example, after feedback from a Git contributor, I identified a mismatch
between the commit message and the actual code change and submitted a
corrected v3 patch.
Through this process, I gained a strong understanding of:
- Git’s test framework and helper utilities
- The importance of precise commit messages
- Incremental patch-based development and review cycles
---
== 4. Project Overview
The `git repo` command is a recent addition intended to provide a
structured interface for querying repository metadata and structure.
However, it currently:
- lacks coverage for many commonly used values
- has limited structure in output
- does not yet serve as a unified abstraction over existing commands
This project aims to evolve `git repo` into a complete, consistent,
and script-friendly interface for repository introspection.
---
== 5. Problem Statement
Currently, repository metadata is fragmented across multiple commands:
- `git rev-parse` → paths and repository state
- `git config` → configuration
- external tools like git-sizer → repository metrics
This results in:
- fragmentation (multiple commands required)
- inconsistent output formats
- lack of a unified abstraction
The `git repo` command is intended to address this, but remains incomplete.
---
== 6. Technical Proposal
The implementation will primarily involve extending logic in
`builtin/repo.c`, reusing existing helpers used by commands like
`rev-parse`, and ensuring consistency with Git’s internal APIs.
### 6.1 Path Metadata Expansion
Add support for:
Core paths:
- paths.git_dir
- paths.common_dir
- paths.toplevel
- paths.superproject_working_tree
Git-path equivalents:
- paths.objects
- paths.index
- paths.hooks
- paths.grafts
- paths.prefix
Design:
- Default to relative paths (portable)
- Optional `--absolute` flag
Final decisions will be made through mailing list discussion.
---
### 6.2 Structured Output
Current output is flat key-value.
Proposed:
{
"paths": { ... },
"layout": { ... }
}
Benefits:
- easier machine parsing
- better extensibility
- clearer organization
Backward compatibility will be preserved.
---
### 6.3 Remove Global State
Replace usage of global `the_repository` with explicit:
struct repository *repo
Benefits:
- improved modularity
- better testability
- future extensibility
---
### 6.4 Extend `git repo structure`
Add metrics inspired by git-sizer:
- object counts
- largest blobs
- tree depth
Ensure:
- incremental additions
- performance safety
---
### 6.5 Testing and Documentation
Testing:
- extend tests in `t/`
- cover edge cases (bare repos, worktrees, submodules)
Documentation:
- update `git-repo.txt`
- include examples and usage patterns
---
== 7. Timeline
Community Bonding:
- study relevant code (`builtin/repo.c`, `repository.c`, `setup.c`)
- initiate mailing list discussions (paths, structure)
- submit small patch
Weeks 1–2:
- implement core path metadata
- testing and review
Weeks 3–4:
- implement git-path equivalents
- ensure parity with rev-parse
Weeks 5–6:
- refactor global state usage
- submit incremental patches
Weeks 7–8:
- structured output implementation
- RFC discussion and iteration
Weeks 9–10:
- extend repo structure metrics
- validate performance
Weeks 11–12:
- polishing, documentation, final review
---
== 8. Risks and Mitigation
Design disagreements:
- addressed via early RFC discussions
Performance concerns:
- benchmark before merging
- optional flags for expensive operations
Review delays:
- mitigated through small, incremental patches
---
== 9. Why Me
I have already contributed to Git and worked through its mailing list
development workflow.
Having a patch integrated into the `next` branch and iterating through
v2 and v3 revisions has given me practical experience with Git’s
expectations around correctness, clarity, and incremental changes.
My background in systems programming allows me to reason about API design,
performance trade-offs, and maintainability—key aspects of this project.
---
== 10. Future Work
I intend to continue contributing to Git beyond GSoC, particularly in:
- stabilizing `git repo` as a porcelain command
- improving developer-facing tooling
---
Thank you for your time and consideration. I would greatly appreciate
any feedback on this proposal.
Thanks,
Jayesh Daga
next reply other threads:[~2026-03-24 5:00 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-24 4:58 jayesh0104 [this message]
-- strict thread matches above, loose matches on Subject: below --
2026-03-14 2:54 [GSoC][PROPOSAL] Improve the new git repo command Mansi Singh
2026-03-17 9:37 ` Karthik Nayak
2026-03-01 3:10 JAYATHEERTH K
2026-03-17 10:44 ` Karthik Nayak
2026-03-17 14:47 ` K Jayatheerth
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260324045904.44384-1-jayeshdaga99@gmail.com \
--to=jayeshdaga99@gmail.com \
--cc=ayu.chandekar@gmail.com \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=jltobler@gmail.com \
--cc=karthik.188@gmail.com \
--cc=siddharthasthana31@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox