# Git Configuration Management Plugin for Gerrit ![Gerrit Version](https://img.shields.io/badge/Gerrit-3.8%2B-brightgreen) ![License](https://img.shields.io/badge/License-Apache%202.0-blue) A Gerrit plugin that provides web UI and REST API for managing Git configuration files at both global and repository levels. ## Features - **Dual Configuration Management**: - Global `~/.gitconfig` management - Repository-specific `.git/config` management - **Web UI Features**: - Repository picker with search functionality - Validation of config sections, subsections, variables and values upon submit. - Logs usernames and changes for auditing. - **Security**: - Capability-based access control (`manageGitConfig` capability) - Input sanitization for repository names - Prevention of absolute paths and directory traversal - Automatic backup/restore on invalid configurations - **Validation**: - Section header validation - Variable format checking - Include path security checks - Line continuation validation - **API Support**: - REST endpoints for config retrieval/update - Base64-encoded payloads - Atomic writes with filesystem safety ## Installation 1. **Build the plugin**: Requires building in-tree with Gerrit. `bazelisk build plugins/gerrit-plugin-gitconfig` 2. Deploy to Gerrit: - Copy `target/gerrit-plugin-gitconfig.jar` to `review_site/plugins/gerrit-plugin-gitconfig` ## Testing: `bazel test //plugins/gerrit-plugin-gitconfig:tests` # Configuration No configuration required. # Usage 1. Access UI: - Navigate to Admin > Git Configuration in Gerrit Web UI - Toggle between Global/Repository views 2. Permissions: - Grant manageGitConfig capability to required groups via: `ssh -p 29418 admin@localhost gerrit set-capability manageGitConfig 'Group Administrators'` 3 Editing: - Select repository from picker (or use Global view) - Modify configuration with real-time validation - Save changes with automatic syntax check 4 Error Handling: - Invalid configurations show inline errors - Failed updates automatically roll back - Audit logs track all configuration changes # API Documentation ## Get Configuration GET /a/config/server/gitconfig[?repo=] Parameters: - repo: Optional repository name Response: - Base64-encoded config content - Content-Type: text/plain ## Update Configuration PUT /config/server/gitconfig[?repo=] Body: - Base64-encoded config content Success: - 200 OK with success message Errors: - 400 Bad Request: Invalid syntax/input - 404 Not Found: Repository not exists - 409 Conflict: Invalid config state after update # Limitations - Maximum config file size: 1000 lines - UI requires modern browser (ES2015+ support) - Nested includes not fully validated --- Disclaimer: Use with caution on production systems. Always test configuration changes in staging environments first.