Introducing changesummary: A Git Change Summary Script
The changesummary
script is a powerful tool for developers to quickly understand the key changes made between two Git commits. It leverages AI to analyze the diff and provide a concise summary of the modifications.
Functionality
The script takes one or two arguments: the start commit hash and an optional end commit hash. If the end commit hash is not provided, it defaults to HEAD.
Usage
To use changesummary
, simply run it in your Git Bash terminal:
./changesummary <start_commit_hash> [<end_commit_hash>]
Example
./changesummary abc123 def456
Result:
The key changes between the specified commit hashes are:
* Renamed `TrmWithRiaSettlementPricingTask` to `TrmWithRiaDetailsPricingTask` and refactored its logic into a base class `TrmConfigPricingTaskBase`.
* Removed `RiaRawRateDataDecorator` and updated `TrmWithRiaDetailsPricingTask` to use `RiaRate` instead of `RiaRawRate`.
* Updated the `RequiredData` enum to remove `RiaRawRate` and updated the `TrmWithRiaDetailsPricingTask` to require `RiaRate`.
* Updated error codes and messages to reflect the changes.
These changes simplify the pricing task logic and improve maintainability.
Benefits
- Provides a quick and meaningful summary of changes, saving time during code reviews.
- Helps in understanding the impact of changes made between commits.
- Easy to integrate into existing Git workflows.
- Flexible comparison range with optional end commit hash.
By using changesummary
, developers can streamline their code review process and focus on the most important changes.
here's the source code:
#!/bin/bash
# Check if commit hash is provided
if [ -z "$1" ]; then
echo "Error: Commit hash is required as an argument."
exit 1
fi
convert_to_uppercase() {
# Enable case-insensitive matching
shopt -s nocasematch
if [[ $1 =~ ^(HEAD|FETCH_HEAD|ORIG_HEAD|MERGE_HEAD)(\~[0-9]+|\^[0-9]*)* ]]; then
# Convert to uppercase
echo "${1^^}"
else
# Return original string
echo "$1"
fi
# Reset case-sensitivity to default
shopt -u nocasematch
}
start_hash=$(convert_to_uppercase "$1")
end_hash=$(convert_to_uppercase "${2:-HEAD}")
# Define static prompt text
static_prompt=$(cat <<-END
Analyze the following code diff. Generate a concise summary (under 100 words) of the **key changes** made between the specified commit hashes. Present the changes in a bullet-point list format, focusing on the main modifications and their impact.
Code changes:
END
)
# Define model and system message variables
model="meta-llama/llama-4-maverick:free"
system_message="You are a programmer"
# Execute git diff and pipe its output to the AI model
git diff -w -b $start_hash..$end_hash | jq -R -s --arg model "$model" --arg system_content "$system_message" --arg static_prompt "$static_prompt" \
'{
model: $model,
messages: [
{role: "system", content: $system_content},
{role: "user", content: ($static_prompt + .) }
],
max_tokens: 16384,
temperature: 0
}' | curl -s --request POST \
--url https://openrouter.ai/api/v1/chat/completions \
--header "Authorization: Bearer $OR_FOR_CI_API_KEY" \
--header "Content-Type: application/json" \
--data-binary @- | jq -r '.choices[0].message.content'