Easier sync
This commit is contained in:
6
MANUAL
6
MANUAL
@@ -11,6 +11,11 @@ DESCRIPTION
|
|||||||
scripts for ongoing synchronization. Uses tar for initial sync and rsync
|
scripts for ongoing synchronization. Uses tar for initial sync and rsync
|
||||||
for subsequent syncs.
|
for subsequent syncs.
|
||||||
|
|
||||||
|
Server project path defaults to ~/public_leo if left empty. Paths starting
|
||||||
|
with ~ are automatically resolved to full paths via SSH.
|
||||||
|
|
||||||
|
New servers are automatically trusted (StrictHostKeyChecking=accept-new).
|
||||||
|
|
||||||
OPTIONS
|
OPTIONS
|
||||||
-h, --help
|
-h, --help
|
||||||
Display this help and exit.
|
Display this help and exit.
|
||||||
@@ -26,6 +31,7 @@ OPTIONS
|
|||||||
|
|
||||||
MODES
|
MODES
|
||||||
Default mode:
|
Default mode:
|
||||||
|
- Syncs terminal info (xterm-ghostty or xterm-kitty)
|
||||||
- Downloads all project files
|
- Downloads all project files
|
||||||
- Creates .vscode/sftp.json
|
- Creates .vscode/sftp.json
|
||||||
- Generates all helper scripts
|
- Generates all helper scripts
|
||||||
|
|||||||
@@ -15,6 +15,9 @@ SCRIPT_PATH="$(realpath "$0")"
|
|||||||
SCRIPT_DIR="$(dirname "$SCRIPT_PATH")"
|
SCRIPT_DIR="$(dirname "$SCRIPT_PATH")"
|
||||||
ARCHIVE_NAME="sync.tar.gz"
|
ARCHIVE_NAME="sync.tar.gz"
|
||||||
|
|
||||||
|
# SSH options - auto-accept new host keys
|
||||||
|
SSH_OPTS="-o StrictHostKeyChecking=accept-new"
|
||||||
|
|
||||||
# Parse command line arguments
|
# Parse command line arguments
|
||||||
SFTP_ONLY=false
|
SFTP_ONLY=false
|
||||||
FILES_ONLY=false
|
FILES_ONLY=false
|
||||||
@@ -55,15 +58,31 @@ echo ""
|
|||||||
if [ -f ".sync-credentials" ]; then
|
if [ -f ".sync-credentials" ]; then
|
||||||
source ".sync-credentials"
|
source ".sync-credentials"
|
||||||
else
|
else
|
||||||
# Prompt for configuration
|
# Prompt for configuration (password before path for SSH resolution)
|
||||||
read -p "Server user@host (e.g., leo@server.com): " SERVER_HOST
|
read -p "Server user@host (e.g., leo@server.com): " SERVER_HOST
|
||||||
read -p "Server project path (e.g., /home/leo/public_leo): " SERVER_PROJECT_PATH
|
|
||||||
read -p "Local folder path (e.g., Delta Pharmacy): " LOCAL_FOLDER
|
|
||||||
read -sp "SSH Password: " SSH_PASSWORD
|
read -sp "SSH Password: " SSH_PASSWORD
|
||||||
echo ""
|
echo ""
|
||||||
|
read -p "Server project path (default: ~/public_leo): " SERVER_PROJECT_PATH
|
||||||
|
read -p "Local folder path (e.g., Delta Pharmacy): " LOCAL_FOLDER
|
||||||
echo ""
|
echo ""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Default path to ~/public_leo if empty
|
||||||
|
if [ -z "$SERVER_PROJECT_PATH" ]; then
|
||||||
|
SERVER_PROJECT_PATH="~/public_leo"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Resolve ~ to full path via SSH
|
||||||
|
if [[ "$SERVER_PROJECT_PATH" == ~* ]]; then
|
||||||
|
echo "Resolving path..."
|
||||||
|
SERVER_PROJECT_PATH=$(sshpass -p "${SSH_PASSWORD}" ssh $SSH_OPTS ${SERVER_HOST} "cd ${SERVER_PROJECT_PATH} && pwd")
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo -e "${RED}Failed to resolve path${NC}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo -e "${GREEN}Resolved to: ${SERVER_PROJECT_PATH}${NC}"
|
||||||
|
fi
|
||||||
|
|
||||||
# Validate required variables (all except password)
|
# Validate required variables (all except password)
|
||||||
if [ -z "$SERVER_HOST" ]; then
|
if [ -z "$SERVER_HOST" ]; then
|
||||||
echo -e "${RED}Error: SERVER_HOST is not set${NC}"
|
echo -e "${RED}Error: SERVER_HOST is not set${NC}"
|
||||||
@@ -80,15 +99,35 @@ if [ -z "$LOCAL_FOLDER" ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Sync terminal info on full sync (no flags)
|
||||||
|
if [ "$SFTP_ONLY" = false ] && [ "$FILES_ONLY" = false ]; then
|
||||||
|
# Detect terminal type
|
||||||
|
if [[ "$TERM" == *"ghostty"* ]]; then
|
||||||
|
TERM_TYPE="xterm-ghostty"
|
||||||
|
elif [[ "$TERM" == *"kitty"* ]]; then
|
||||||
|
TERM_TYPE="xterm-kitty"
|
||||||
|
else
|
||||||
|
TERM_TYPE=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$TERM_TYPE" ]; then
|
||||||
|
echo "Syncing terminal info ($TERM_TYPE)..."
|
||||||
|
infocmp -x "$TERM_TYPE" | sshpass -p "${SSH_PASSWORD}" ssh $SSH_OPTS ${SERVER_HOST} -- tic -x -
|
||||||
|
echo -e "${GREEN}Terminal info synced${NC}"
|
||||||
|
else
|
||||||
|
echo -e "${YELLOW}Warning: Unknown terminal ($TERM), skipping terminfo sync${NC}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# Start sync process
|
# Start sync process
|
||||||
echo "Starting project sync..."
|
echo "Starting project sync..."
|
||||||
|
|
||||||
# Step 1: SSH into server and create tar archive
|
# Step 1: SSH into server and create tar archive
|
||||||
echo "Creating archive on server..."
|
echo "Creating archive on server..."
|
||||||
if [ "$FILES_ONLY" = true ]; then
|
if [ "$FILES_ONLY" = true ]; then
|
||||||
sshpass -p "${SSH_PASSWORD}" ssh ${SERVER_HOST} "cd ${SERVER_PROJECT_PATH} && tar -czf ../${ARCHIVE_NAME} --exclude='node_modules' --exclude='vendor' ."
|
sshpass -p "${SSH_PASSWORD}" ssh $SSH_OPTS ${SERVER_HOST} "cd ${SERVER_PROJECT_PATH} && tar -czf ../${ARCHIVE_NAME} --exclude='node_modules' --exclude='vendor' ."
|
||||||
else
|
else
|
||||||
sshpass -p "${SSH_PASSWORD}" ssh ${SERVER_HOST} "cd ${SERVER_PROJECT_PATH} && tar -czf ../${ARCHIVE_NAME} ."
|
sshpass -p "${SSH_PASSWORD}" ssh $SSH_OPTS ${SERVER_HOST} "cd ${SERVER_PROJECT_PATH} && tar -czf ../${ARCHIVE_NAME} ."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
@@ -103,7 +142,7 @@ mkdir -p "${LOCAL_FOLDER}"
|
|||||||
|
|
||||||
# Step 3: Copy archive from server to local
|
# Step 3: Copy archive from server to local
|
||||||
echo "Copying archive to local machine..."
|
echo "Copying archive to local machine..."
|
||||||
sshpass -p "${SSH_PASSWORD}" scp ${SERVER_HOST}:~/${ARCHIVE_NAME} "${LOCAL_FOLDER}/"
|
sshpass -p "${SSH_PASSWORD}" scp $SSH_OPTS ${SERVER_HOST}:~/${ARCHIVE_NAME} "${LOCAL_FOLDER}/"
|
||||||
|
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo -e "${RED}Failed to copy archive${NC}"
|
echo -e "${RED}Failed to copy archive${NC}"
|
||||||
@@ -130,7 +169,7 @@ rm ${ARCHIVE_NAME}
|
|||||||
|
|
||||||
# Step 6: Clean up - delete server archive
|
# Step 6: Clean up - delete server archive
|
||||||
echo "Cleaning up server archive..."
|
echo "Cleaning up server archive..."
|
||||||
sshpass -p "${SSH_PASSWORD}" ssh ${SERVER_HOST} "rm ~/${ARCHIVE_NAME}"
|
sshpass -p "${SSH_PASSWORD}" ssh $SSH_OPTS ${SERVER_HOST} "rm ~/${ARCHIVE_NAME}"
|
||||||
|
|
||||||
echo -e "${GREEN}File sync complete!${NC}"
|
echo -e "${GREEN}File sync complete!${NC}"
|
||||||
|
|
||||||
@@ -209,7 +248,7 @@ done
|
|||||||
if [ "$SFTP_ONLY" = false ]; then
|
if [ "$SFTP_ONLY" = false ]; then
|
||||||
echo "Uploading lazygit to server..."
|
echo "Uploading lazygit to server..."
|
||||||
|
|
||||||
sshpass -p "${SSH_PASSWORD}" scp "${SCRIPT_DIR}/lazygit" ${SERVER_HOST}:${SERVER_PROJECT_PATH}
|
sshpass -p "${SSH_PASSWORD}" scp $SSH_OPTS "${SCRIPT_DIR}/lazygit" ${SERVER_HOST}:${SERVER_PROJECT_PATH}
|
||||||
echo -e "${GREEN}lazygit uploaded successfully${NC}"
|
echo -e "${GREEN}lazygit uploaded successfully${NC}"
|
||||||
|
|
||||||
# Add lazygit to .gitignore
|
# Add lazygit to .gitignore
|
||||||
|
|||||||
Reference in New Issue
Block a user