Hello Git Community, I hope you are doing well. ## Introduction: My name is Abraham Samuel, I am participating in the December 2024 Outreachy internship program and this is my proposal for the project "Finish adding os-version capability to Git protocol v2". ## Contribution to the Git Community: I have participated in contributions to Git’s codebase after getting accepted into the contribution phase in October 2024, working on what I found doable and within my reach. Below is the list of my contributions: - [PATCH v4] t7300-clean.sh: use test_path* helper functions for error logging. List thread: https://lore.kernel.org/git/pull.1811.v4.git.1728498122419.gitgitgadget@xxxxxxxxx/ Status: merged into master Merge Commit: 77af53f56f100b49fdcf294f687b36064d16feca Description: The patch converted instances of “test - [def]” in test cases to test_path_* functions to get error logs when the test case fails when testing for the existence of a file or directory after “git clean” or “git clean -d” is called as the case may be. - [PATCH v4] notes: teach the -e option to edit messages in the editor Status: integrated into Seen List thread: https://lore.kernel.org/git/pull.1817.git.1729296853800.gitgitgadget@xxxxxxxxx/ Description: The patch worked on a #leftover bit which added the “-e” option to “git notes add” and “git notes append” subcommands when the message is supplied with the -F and/or -m options. The patch enables fine-tuning the message by invoking the user’s default editor prefilling the message in the editor to allow editing the message to the required taste before adding the note to the commit ## Project Overview: This proposal outlines a plan to complete the work on the os-version capability patch series for Git's protocol v2. Initially introduced in June 2024, this feature intends to enhance communication by allowing Git clients and servers to share their operating system (OS) information. The capability aims to provide metadata that can improve issues diagnosis and enable statistical insights. This project will involve refining the original patch which already started the process of adding this feature, addressing Windows compatibility issues, and implementing configuration options to customise how the OS is shared. ## Intern objectives: The key objectives of this project are; 1. Finalize 'os-version' Capability: Modify the existing patch series to meet community requirements and improve functionality, ensuring compatibility with different OS environments. 2. Add configuration options: Create options that allow users to: - Share only the OS name by default (eg, "Linux", "Windows") - Disable OS information sharing completely - Include a more verbose OS version display using commands like uname -srvm on Linux 3. Fix Windows Compatibility: Review and resolve issues with the current tests on Windows, ensuring full cross-platform support 4. Ensure Tests Coverage and Reliability: Create robust tests to verify the feature's functionality across supported platforms, incorporating community feedback to refine and improve the patch series. ## Approach and Methodology 1. Analyze and retrieve the existing patch series: - Retrieve patches from the Git mailing list - Review the current code and community feedback to understand necessary improvements and privacy concerns 2. Apply and test the patch on a new branch: - Set up a new branch based on master to isolate the work on the os-version feature - Apply the patches and perform an initial round of tests to determine specific errors and how to address them 3. Address Community concerns and implement improvements - Implement feedback on sending only the OS name (eg, "Windows")by default using uname or equivalent method on different OSes - Add configuration options for users to adjust the level of detail in OS information sharing - Allow toggling the feature off for privacy or preference - Ensure that configuration changes are well-documented and user-friendly 4. Resolve Windows Compatibility issues: - Address current test failures on Windows, working closely with community inputs to meet compatibility standards - Modify any OS-specific code or test as needed, to work across environments 5. Develop and refine tests: - Ensure the test case covers all functionality: OS name sharing, version details and disabled state - Conduct platform-specific tests on Linux, Windows and other environments to confirm accuracy - Incorporate feedback from mentors and the community to finalize the feature's functionality and robustness. 6. Document the feature and prepare for submission: - Write documentation and examples for configuring the os-version capability, explaining options and use cases - Prepare the final patch series, following Git's contribution guidelines for submission to the Git mailing list ## Timeline 1. Community Onboarding: (Week 1 -2): Tasks: - Retrieve patches and create a dedicated branch - Study past discussions and understand the improvements required - Set up blog post to write about internship experience 2. Initial Testing and Patching (Week 3 - 4): Tasks: - Apply Patches - Run Initial tests - Identify current issues, especially Windows compatibility 3. Implement OS version configuration option (Week 5 - 7): Tasks: - Add options for OS name, detailed OS version and disabled state - submit the initial patch series to the Git mailing list for review 4. Windows Compatibility (Week 8 - 9): Tasks: - Review, debug and resolve Windows-specific issues - Perform cross-platform testing and verify functionality 5. Test Expansion (Week 9 - 11): Tasks: - Write comprehensive tests for OS version capabilities. - Integrate tests to cover each configuration option. - Submit initial patches for tests to the Git mailing list - Implement community feedback and reviews on submitted test patches 6. Finalizing and Documentation:( Week 12 - 14): Tasks: - Finalize code based on community inputs - Prepare final patch patch submission with full documentation - Complete my blog on internship experience ## Availability: I will be available to work for a minimum of 30 hours per week and I am not currently enrolled in any academic activities or have any jobs. ## Post Outreachy: The Git community fosters proper and effective communication, regardless of one’s level of experience. The patience, guidance and explanation of technical concepts shown by community members are wonderful and this has made me grow not just technically but also behaviorally. Due to this, I plan to continue actively participating the in Git community and be part next generation of those saddled with sustaining this great project and preserving its legacy. ## Appreciation: A special appreciation to everyone on the mailing list for reviewing my patches, the mentorship and guidance I am grateful to you all. Thanks Abraham Samuel