sync-metadata.sh
1 #!/bin/bash 2 3 # ---------------------------- 4 # Gitfield Metadata Sync Tool 5 # ---------------------------- 6 7 # CONFIGURATION 8 DRIVE_REMOTE="gdrive" 9 GITFIELD_ROOT="$HOME/gdrive/gitfield" 10 SCRIPT_NAME="sync-metadata.sh" 11 12 # Ensure rclone is installed 13 if ! command -v rclone &> /dev/null; then 14 echo "rclone is not installed. Installing..." 15 sudo apt update && sudo apt install -y rclone 16 fi 17 18 # Ensure jq is installed 19 if ! command -v jq &> /dev/null; then 20 echo "jq is not installed. Installing..." 21 sudo apt update && sudo apt install -y jq 22 fi 23 24 # Get Git repo root 25 REPO_DIR=$(git rev-parse --show-toplevel 2>/dev/null) 26 if [ $? -ne 0 ]; then 27 echo "❌ Not inside a Git repository." 28 exit 1 29 fi 30 31 REPO_NAME=$(basename "$REPO_DIR") 32 GDRIVE_PATH="gitfield/$REPO_NAME" 33 SYNC_LOG="$REPO_DIR/.gitfield/sync-log.md" 34 README="$REPO_DIR/README.md" 35 36 echo "🔍 Detecting Google Drive folder: $GDRIVE_PATH..." 37 38 # Mount ~/gdrive if not mounted 39 MOUNTPOINT="$HOME/gdrive" 40 if ! mount | grep -q "$MOUNTPOINT"; then 41 echo "⚙️ Mounting Google Drive to $MOUNTPOINT..." 42 mkdir -p "$MOUNTPOINT" 43 rclone mount "$DRIVE_REMOTE:/" "$MOUNTPOINT" --vfs-cache-mode writes --daemon 44 sleep 3 45 fi 46 47 # Share link generation 48 SHARE_URL=$(rclone link "$DRIVE_REMOTE:$GDRIVE_PATH") 49 if [ -z "$SHARE_URL" ]; then 50 echo "❌ Could not generate Google Drive share link." 51 exit 1 52 fi 53 54 # Optional: Construct drv.tw link (manual fallback example) 55 DRV_URL="https://drv.tw/view/$(basename "$SHARE_URL")" 56 57 # Write metadata to sync log 58 mkdir -p "$(dirname "$SYNC_LOG")" 59 cat <<EOF >> "$SYNC_LOG" 60 61 ## 🔄 Sync Metadata — $(date +%F) 62 63 - 📁 **Google Drive Folder**: [$REPO_NAME]($SHARE_URL) 64 - 🌐 **Published View**: [$DRV_URL]($DRV_URL) 65 66 EOF 67 68 # Append to README if not already present 69 if ! grep -q "$SHARE_URL" "$README"; then 70 echo "📘 Updating README..." 71 cat <<EOF >> "$README" 72 73 --- 74 75 ## 🔍 External Access 76 77 - 🔗 **Google Drive Folder**: [$REPO_NAME]($SHARE_URL) 78 - 🌐 **Published View**: [$DRV_URL]($DRV_URL) 79 80 EOF 81 else 82 echo "✅ README already contains sync links." 83 fi 84 85 echo "✅ Metadata sync complete."