Hooks updated. Added a way to ignore posts to fediverse by creating .git/ignorepost.
This commit is contained in:
parent
5ac7a8f5f6
commit
96f819a8f8
@ -38,16 +38,6 @@ if [ ! -f "$versionFile" ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
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"
|
# Check if the branch name contains "temp" or "temporary"
|
||||||
if [[ "$branchName" =~ temp(orary)? ]]; then
|
if [[ "$branchName" =~ temp(orary)? ]]; then
|
||||||
echo -e "${YELLOW}Warning: You appear to be on a temporary branch ($branchName).${NC}"
|
echo -e "${YELLOW}Warning: You appear to be on a temporary branch ($branchName).${NC}"
|
||||||
|
@ -1,23 +1,104 @@
|
|||||||
#!/bin/bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Requires toot: https://github.com/ihabunek/toot
|
# Requires toot: https://github.com/ihabunek/toot
|
||||||
# remote is $1 e.g. origin
|
# This script posts git commit information to the Fediverse using the toot CLI
|
||||||
# url is $2
|
# To temperarily turn off posting, in project root:
|
||||||
url="${2#*@}"
|
# touch .git/ignorepost
|
||||||
|
|
||||||
|
# Check if .git/ignorepost exists - if so, exit silently
|
||||||
|
if [[ -f ".git/ignorepost" ]]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Do not allow errors
|
||||||
|
set -e
|
||||||
|
|
||||||
|
remote="$1"
|
||||||
|
url="$2"
|
||||||
|
|
||||||
|
# Clean up the repository URL to create a web-friendly link
|
||||||
|
url="${url#*@}"
|
||||||
url="${url%.git}"
|
url="${url%.git}"
|
||||||
url="${url#*://}"
|
url="${url#*://}"
|
||||||
shopt -s extglob
|
shopt -s extglob # Enable extended pattern matching
|
||||||
url="${url/:+([0-9])/}"
|
url="${url/:+([0-9])/}"
|
||||||
url="https://${url}"
|
url="https://${url}"
|
||||||
branch="$(git branch | grep "\* ")"
|
|
||||||
branch="${branch:2}"
|
|
||||||
commit="$(git log -1 --pretty=%B)"
|
|
||||||
project="${2##*/}"
|
|
||||||
project="${project%.git}"
|
|
||||||
pusher="$(git log | grep -m1 "Author: ")"
|
|
||||||
pusher="${pusher#Author: }"
|
|
||||||
pusher="${pusher% <*@*.*>}"
|
|
||||||
|
|
||||||
toot post -v public -p "$project" -t "text/markdown" "$pusher pushed changes to the $branch branch of the [$project project]($url)
|
# Extract project name from repository URL
|
||||||
$commit" &> /dev/null
|
project="${url##*/}"
|
||||||
|
project="${project%.git}"
|
||||||
|
|
||||||
|
# Get pusher's name from git config more safely
|
||||||
|
pusher="$(git config user.name)"
|
||||||
|
if [[ -z "$pusher" ]]; then
|
||||||
|
echo "Error: Could not determine user name from git config"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Initialize message
|
||||||
|
message=""
|
||||||
|
tags=""
|
||||||
|
branches=""
|
||||||
|
|
||||||
|
# Read push information from stdin
|
||||||
|
while read localRef localSha remoteRef remoteSha; do
|
||||||
|
# Skip if no refs are being pushed
|
||||||
|
[[ -z "$localRef" ]] && continue
|
||||||
|
|
||||||
|
# Check if this is a tag push
|
||||||
|
if [[ "$localRef" == refs/tags/* ]]; then
|
||||||
|
tagName="${localRef#refs/tags/}"
|
||||||
|
if [[ -z "$tags" ]]; then
|
||||||
|
tags="$tagName"
|
||||||
|
else
|
||||||
|
tags="$tags, $tagName"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Get current branch name from ref
|
||||||
|
branch="${localRef#refs/heads/}"
|
||||||
|
|
||||||
|
# Verify we can access the commit
|
||||||
|
if ! git cat-file -e "$localSha"; then
|
||||||
|
echo "Error: Cannot access commit $localSha"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Get latest commit message
|
||||||
|
commit="$(git log -1 --pretty=%B $localSha)"
|
||||||
|
|
||||||
|
if [[ -z "$branches" ]]; then
|
||||||
|
branches="$branch"
|
||||||
|
else
|
||||||
|
branches="$branches, $branch"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Construct the final message
|
||||||
|
if [[ "${branches##*,}" != "${branches}" ]]; then
|
||||||
|
branches="${branches%, *} and ${branches##*, }"
|
||||||
|
fi
|
||||||
|
if [[ "${tags##*,}" != "${tags}" ]]; then
|
||||||
|
tags="${tags%, *} and ${tags##*, }"
|
||||||
|
fi
|
||||||
|
if [[ -n "$tags" ]]; then
|
||||||
|
message="$pusher tagged [$project project]($url) with: $tags"
|
||||||
|
elif [[ -n "$branches" ]]; then
|
||||||
|
if [[ "${branches% and }" != "${branches}" ]]; then
|
||||||
|
message="$pusher pushed changes to the $branches branches of the [$project project]($url)"
|
||||||
|
else
|
||||||
|
message="$pusher pushed changes to the $branches branch of the [$project project]($url)"
|
||||||
|
fi
|
||||||
|
if [[ "$branches" != *","* ]]; then
|
||||||
|
# Only add commit message if pushing to a single branch
|
||||||
|
message="$message
|
||||||
|
$commit"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Only post if we have something to say
|
||||||
|
if [[ -n "$message" ]]; then
|
||||||
|
toot post -v public -p "$project" -t "text/markdown" "$message" &> /dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
Loading…
Reference in New Issue
Block a user