From e38cd005b4b9482c627f34c00e516043bd5240c3 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Thu, 25 Jun 2026 13:41:54 +0000 Subject: [PATCH] docs: update documentation, CHANGELOG and README for Phase 5 completion This commit finalizes the Phase 5 implementation by updating all relevant documentation. Changes include: - Updated the status badge in README.md to Phase_5_Complete. - Bumped the crate version in Cargo.toml and Cargo.lock to 0.3.0. - Added a comprehensive entry to CHANGELOG.md documenting the new porcelain commit command, refs management, and configurable author information features. - Re-wrote documentation phrasing in `docs/04_commit_object_and_commit_tree.md` and `docs/05_dag_and_commit_serialization.md` to reflect that Phase 5 is now complete. Co-authored-by: fadyphil <227748259+fadyphil@users.noreply.github.com> --- CHANGELOG.md | 8 ++++++++ Cargo.lock | 2 +- Cargo.toml | 2 +- README.md | 2 +- docs/04_commit_object_and_commit_tree.md | 2 +- docs/05_dag_and_commit_serialization.md | 4 ++-- 6 files changed, 14 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f9eab5c..81aac42 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,14 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.3.0] - 2026-06-25 + +### Added + +- **Porcelain `commit` command:** Added high-level `commit` command bridging the gap from plumbing to porcelain. +- **Refs Management:** Implemented branch pointer mutation and HEAD resolution. +- **Configurable Author:** Modified `commit` logic to read author and committer data from the `.git/config` file. + ## [0.2.0] - 2026-06-24 ### Added diff --git a/Cargo.lock b/Cargo.lock index d221598..0be7398 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -252,7 +252,7 @@ dependencies = [ [[package]] name = "git-rs" -version = "0.2.0" +version = "0.3.0" dependencies = [ "anyhow", "assert_cmd", diff --git a/Cargo.toml b/Cargo.toml index 9c0f7d2..4a8d045 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "git-rs" -version = "0.2.0" +version = "0.3.0" edition = "2021" authors = ["Fady Philip "] description = "A from-scratch implementation of Git's core object storage engine in Rust." diff --git a/README.md b/README.md index 31722f0..e0b2a67 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@

- Status + Status License

diff --git a/docs/04_commit_object_and_commit_tree.md b/docs/04_commit_object_and_commit_tree.md index f6de66d..55b643f 100644 --- a/docs/04_commit_object_and_commit_tree.md +++ b/docs/04_commit_object_and_commit_tree.md @@ -242,7 +242,7 @@ graph LR E --> F["History (DAG)"] ``` -The `commit-tree` command in `git-rs` currently uses hardcoded author/committer information for simplicity. In Phase 5, this will be configurable through Git's standard configuration mechanism (user.name, user.email) or environment variables. +The `commit-tree` command in `git-rs` used hardcoded author/committer information for simplicity in Phase 4. In Phase 5, this is configurable through Git's standard configuration mechanism (user.name, user.email). --- diff --git a/docs/05_dag_and_commit_serialization.md b/docs/05_dag_and_commit_serialization.md index 5b87437..0f7a2da 100644 --- a/docs/05_dag_and_commit_serialization.md +++ b/docs/05_dag_and_commit_serialization.md @@ -276,7 +276,7 @@ Fady 1718000000 +0000 | Cherry-pick | Alice (original author) | Bob (performed the cherry-pick) | | Rebase | Alice (original author) | Bob (performed the rebase) | -In `git-rs` Phase 4, author and committer are identical for simplicity. Phase 5 will support reading these from Git configuration or environment variables. +In `git-rs` Phase 4, author and committer are identical for simplicity. Phase 5 supports reading these from Git configuration. --- @@ -309,7 +309,7 @@ Even though there are 3 commits, `blob-a` and `blob-c` are each stored only once The `commit-tree` command in `git-rs` implements the following: 1. **Parses arguments** (tree hash, `-m` flag, message) -2. **Constructs a Commit struct** with hardcoded author info (Phase 5 will make this configurable) +2. **Constructs a Commit struct** with hardcoded author info (Phase 5 makes this configurable) 3. **Generates timestamp** using Unix epoch seconds 4. **Serializes the commit** to text with proper line endings 5. **Calls `write_object("commit", ...)`** to hash, compress, store, and return the hash