From 5ac7a8f5f60d0957c935a46229d5570c08cfdaf4 Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Sat, 7 Dec 2024 20:00:31 -0500 Subject: [PATCH] Moved the version incrementer from pre-push to pre-commit. It's a better way that doesn't cause branch divergence. --- pre-commit-version-increment | 105 +++++++++++++++++++++++++++++++++++ pre-push-version-increment | 42 -------------- 2 files changed, 105 insertions(+), 42 deletions(-) create mode 100755 pre-commit-version-increment delete mode 100755 pre-push-version-increment diff --git a/pre-commit-version-increment b/pre-commit-version-increment new file mode 100755 index 0000000..0c36de5 --- /dev/null +++ b/pre-commit-version-increment @@ -0,0 +1,105 @@ +#!/usr/bin/env bash + +# Path to the version file +versionFile="src/fenrirscreenreader/fenrirVersion.py" + +# Colors for output +RED='\033[0;31m' +YELLOW='\033[1;33m' +GREEN='\033[0;32m' +NC='\033[0m' # No Color + +# Check if SKIP_VERSION_UPDATE is set +if [ "${SKIP_VERSION_UPDATE}" = "1" ]; then + echo -e "${YELLOW}Notice: Skipping version update due to SKIP_VERSION_UPDATE=1${NC}" + exit 0 +fi + +# Get current date components +YEAR=$(date +%Y) +MONTH=$(date +%m) +DAY=$(date +%d) + +# Create new version string +newVersion="$YEAR.$MONTH.$DAY" + +# Get current branch name +branchName=$(git rev-parse --abbrev-ref HEAD) + +# Check if we're in the middle of a merge +if [ -f ".git/MERGE_HEAD" ]; then + echo -e "${YELLOW}Warning: In the middle of a merge. Skipping version update.${NC}" + exit 0 +fi + +# Check if file exists +if [ ! -f "$versionFile" ]; then + echo -e "${RED}Error: Version file not found at $versionFile${NC}" + exit 1 +fi + +# Check for uncommitted changes (excluding version file) +if [ -n "$(git diff --name-only | grep -v "$versionFile")" ]; then + echo -e "${YELLOW}Warning: You have unstaged changes in other files.${NC}" + read -p "Do you want to continue with the commit? (y/N) " -n 1 -r + echo + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + exit 1 + fi +fi + +# Check if the branch name contains "temp" or "temporary" +if [[ "$branchName" =~ temp(orary)? ]]; then + echo -e "${YELLOW}Warning: You appear to be on a temporary branch ($branchName).${NC}" + read -p "Do you want to continue with the version update? (y/N) " -n 1 -r + echo + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + exit 1 + fi +fi + +# Store original version file content +originalContent=$(cat "$versionFile") + +# Check if version actually needs updating +if ! grep -q "version = \"$newVersion\"" "$versionFile"; then + # Update the version in the file + sed -i "s/version = [\"']\{0,1\}[0-9.]\+[\"']\{0,1\}/version = \"$newVersion\"/" "$versionFile" +fi + +# Check if codeName exists and isn't "stable" +if grep -q "codeName.*=.*\"stable\"" "$versionFile"; then + # Don't modify stable codeName + : +elif grep -q "codeName.*=.*\"$branchName\"" "$versionFile"; then + # CodeName already matches branch name, no need to update + : +elif grep -q "codeName" "$versionFile"; then + # Update existing codeName + sed -i "s/codeName = [\"']\{0,1\}[^\"']*[\"']\{0,1\}/codeName = \"$branchName\"/" "$versionFile" +else + # Add codeName after the version line + sed -i "/version = / a\codeName = \"$branchName\"" "$versionFile" +fi + +# Check if the file was actually modified +if [ "$(cat "$versionFile")" != "$originalContent" ]; then + echo -e "${GREEN}Notice: Version file has been updated to $newVersion${NC}" + if ! git diff --cached --quiet "$versionFile"; then + echo -e "${YELLOW}Notice: Version file was already staged, updates have been made to staged version${NC}" + else + git add "$versionFile" + echo -e "${YELLOW}Notice: Version file has been staged${NC}" + fi +else + echo -e "${GREEN}Notice: No updates needed to version file${NC}" +fi + +# Check if this is the second commit today +lastCommitVersion=$(git log -1 --format=%cd --date=format:'%Y.%m.%d' 2>/dev/null) +if [ "$lastCommitVersion" = "$newVersion" ]; then + echo -e "${YELLOW}Notice: Multiple commits on version $newVersion${NC}" +fi + +# Print help information +echo -e "\n${GREEN}Note: You can skip version updates by setting SKIP_VERSION_UPDATE=1${NC}" diff --git a/pre-push-version-increment b/pre-push-version-increment deleted file mode 100755 index efc8ef1..0000000 --- a/pre-push-version-increment +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/bash - -# Path to the version file -versionFile="src/fenrirscreenreader/fenrirVersion.py" - -# Get current date components -YEAR=$(date +%Y) -MONTH=$(date +%m) -DAY=$(date +%d) - -# Create new version string -newVersion="$YEAR.$MONTH.$DAY" - -# Get current branch name -branchName=$(git rev-parse --abbrev-ref HEAD) - -# Check if file exists -if [ ! -f "$versionFile" ]; then - echo "Error: Version file not found at $versionFile" - exit 1 -fi - -# Update the version in the file -# This handles different possible formats of the version line -sed -i "s/version = [\"']\{0,1\}[0-9.]\+[\"']\{0,1\}/version = \"$newVersion\"/" "$versionFile" - -# Check if codeName exists in the file -if grep -q "codeName" "$versionFile"; then - # Update existing codeName - sed -i "s/codeName = [\"']\{0,1\}[^\"']*[\"']\{0,1\}/codeName = \"$branchName\"/" "$versionFile" -else - # Add codeName after the version line - sed -i "/version = / a\codeName = \"$branchName\"" "$versionFile" -fi - -# Add the changed file back to the commit -git add "$versionFile" - -# Amend the last commit to include the version update -# Use the original commit message -commitMessage=$(git log -1 --pretty=%B) -git commit --amend -m "$commitMessage"