127 lines
4.3 KiB
Bash
127 lines
4.3 KiB
Bash
#!/bin/bash
|
|
|
|
# Initialize Blog Repository Setup
|
|
echo "Initializing blog repository setup..."
|
|
|
|
# Set up Git configuration
|
|
git config core.symlinks true
|
|
|
|
# Create necessary directories
|
|
mkdir -p src/content public/blog scripts .git/hooks
|
|
|
|
# Create symbolic links for src/content
|
|
echo "Creating symbolic links for src/content..."
|
|
ln -sf /mnt/synology/obsidian/Public/Blog/posts src/content/posts
|
|
ln -sf /mnt/synology/obsidian/Public/Blog/projects src/content/projects
|
|
ln -sf /mnt/synology/obsidian/Public/Blog/configurations src/content/configurations
|
|
ln -sf /mnt/synology/obsidian/Public/Blog/external-posts src/content/external-posts
|
|
|
|
# Create symbolic links for public/blog
|
|
echo "Creating symbolic links for public/blog..."
|
|
ln -sf /mnt/synology/obsidian/Public/Blog/configs public/blog/configs
|
|
ln -sf /mnt/synology/obsidian/Public/Blog/images public/blog/images
|
|
ln -sf /mnt/synology/obsidian/Public/Blog/infrastructure public/blog/infrastructure
|
|
ln -sf /mnt/synology/obsidian/Public/Blog/posts public/blog/posts
|
|
|
|
# Create the pre-commit hook
|
|
cat > .git/hooks/pre-commit << 'EOF'
|
|
#!/bin/bash
|
|
# Pre-commit hook to process symbolic links
|
|
|
|
echo "Running pre-commit hook for blog content..."
|
|
|
|
# Get the absolute path to the script
|
|
SCRIPT_PATH="$(git rev-parse --show-toplevel)/scripts/process-content-links.sh"
|
|
|
|
# Check if the script exists and is executable
|
|
if [ -x "$SCRIPT_PATH" ]; then
|
|
bash "$SCRIPT_PATH"
|
|
# Add any new or changed files resulting from the script
|
|
git add -A
|
|
else
|
|
echo "Error: Content processing script not found or not executable at $SCRIPT_PATH"
|
|
echo "Please ensure the script exists and has execute permissions"
|
|
exit 1
|
|
fi
|
|
EOF
|
|
|
|
# Create the post-commit hook
|
|
cat > .git/hooks/post-commit << 'EOF'
|
|
#!/bin/bash
|
|
# Post-commit hook to restore symbolic links
|
|
|
|
echo "Running post-commit hook to restore symbolic links..."
|
|
|
|
# Array of content directories and their targets
|
|
declare -A SYMLINK_TARGETS=(
|
|
["src/content/posts"]="/mnt/synology/obsidian/Public/Blog/posts"
|
|
["src/content/projects"]="/mnt/synology/obsidian/Public/Blog/projects"
|
|
["src/content/configurations"]="/mnt/synology/obsidian/Public/Blog/configurations"
|
|
["src/content/external-posts"]="/mnt/synology/obsidian/Public/Blog/external-posts"
|
|
["public/blog/configs"]="/mnt/synology/obsidian/Public/Blog/configs"
|
|
["public/blog/images"]="/mnt/synology/obsidian/Public/Blog/images"
|
|
["public/blog/infrastructure"]="/mnt/synology/obsidian/Public/Blog/infrastructure"
|
|
["public/blog/posts"]="/mnt/synology/obsidian/Public/Blog/posts"
|
|
)
|
|
|
|
for dir_path in "${!SYMLINK_TARGETS[@]}"; do
|
|
target="${SYMLINK_TARGETS[$dir_path]}"
|
|
if [ -d "$target" ]; then
|
|
echo "Restoring symlink for $dir_path -> $target"
|
|
rm -rf "$dir_path"
|
|
mkdir -p "$(dirname "$dir_path")"
|
|
ln -s "$target" "$dir_path"
|
|
else
|
|
echo "Warning: Target directory $target does not exist"
|
|
fi
|
|
done
|
|
|
|
echo "Symbolic links restored!"
|
|
EOF
|
|
|
|
# Make hooks executable
|
|
chmod +x .git/hooks/pre-commit .git/hooks/post-commit
|
|
|
|
# Create process-content-links.sh
|
|
cat > scripts/process-content-links.sh << 'EOF'
|
|
#!/bin/bash
|
|
|
|
# Script to handle symbolic links before commit
|
|
echo "Processing symbolic links for content..."
|
|
|
|
# Array of content directories to process
|
|
declare -A CONTENT_PATHS
|
|
# src/content directories
|
|
CONTENT_PATHS["posts"]="src/content/posts"
|
|
CONTENT_PATHS["projects"]="src/content/projects"
|
|
CONTENT_PATHS["configurations"]="src/content/configurations"
|
|
CONTENT_PATHS["external-posts"]="src/content/external-posts"
|
|
# public/blog directories
|
|
CONTENT_PATHS["configs"]="public/blog/configs"
|
|
CONTENT_PATHS["images"]="public/blog/images"
|
|
CONTENT_PATHS["infrastructure"]="public/blog/infrastructure"
|
|
CONTENT_PATHS["blog-posts"]="public/blog/posts"
|
|
|
|
for dir_name in "${!CONTENT_PATHS[@]}"; do
|
|
dir_path="${CONTENT_PATHS[$dir_name]}"
|
|
if [ -L "$dir_path" ]; then
|
|
echo "Processing $dir_path..."
|
|
target=$(readlink "$dir_path")
|
|
rm "$dir_path"
|
|
mkdir -p "$(dirname "$dir_path")"
|
|
cp -r "$target" "$dir_path"
|
|
git add "$dir_path"
|
|
echo "Processed $dir_path -> $target"
|
|
else
|
|
echo "Skipping $dir_path (not a symbolic link)"
|
|
fi
|
|
done
|
|
|
|
echo "Content processing complete!"
|
|
EOF
|
|
|
|
# Make process-content-links.sh executable
|
|
chmod +x scripts/process-content-links.sh
|
|
|
|
echo "Setup complete! The repository is now configured for automatic symbolic link handling."
|