/ dev / sync-metadata.sh
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."