diff --git a/shared.sh b/shared.sh new file mode 100644 index 0000000..3b1ec4f --- /dev/null +++ b/shared.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +# Shared variables and configuration for sync scripts + +# Colors for output +GREEN='\033[0;32m' +RED='\033[0;31m' +BLUE='\033[0;34m' +YELLOW='\033[0;33m' +NC='\033[0m' # No Color + +# SSH options - auto-accept new host keys +SSH_OPTS="-o StrictHostKeyChecking=accept-new" diff --git a/sync-git-project.sh b/sync-git-project.sh new file mode 100644 index 0000000..dfeb744 --- /dev/null +++ b/sync-git-project.sh @@ -0,0 +1,85 @@ +#!/bin/bash + +# This script is used to clone a project from a remote server +# and setup lazygit for remote git operations. +# Called by sync-project.sh with --git flag. + +# Get current script real directory (follow symlinks) +SCRIPT_PATH="$(realpath "$0")" +SCRIPT_DIR="$(dirname "$SCRIPT_PATH")" + +# Source shared variables +source "$SCRIPT_DIR/shared.sh" + +# Arguments: SERVER_HOST SSH_PASSWORD SERVER_PROJECT_PATH LOCAL_FOLDER +SERVER_HOST="$1" +SSH_PASSWORD="$2" +SERVER_PROJECT_PATH="$3" +LOCAL_FOLDER="$4" + +# Validate arguments +if [ -z "$SERVER_HOST" ] || [ -z "$SSH_PASSWORD" ] || [ -z "$SERVER_PROJECT_PATH" ] || [ -z "$LOCAL_FOLDER" ]; then + echo -e "${RED}Usage: sync-git-project.sh SERVER_HOST SSH_PASSWORD SERVER_PROJECT_PATH LOCAL_FOLDER${NC}" + exit 1 +fi + +# Clone repository +echo "Cloning repository..." +GIT_SSH_COMMAND="sshpass -p '${SSH_PASSWORD}' ssh $SSH_OPTS" \ + git clone ${SERVER_HOST}:${SERVER_PROJECT_PATH} "${LOCAL_FOLDER}" + +if [ $? -ne 0 ]; then + echo -e "${RED}Failed to clone repository${NC}" + exit 1 +fi + +echo -e "${GREEN}Repository cloned successfully${NC}" + +# Extract username and host from SERVER_HOST +USERNAME="${SERVER_HOST%@*}" +HOST="${SERVER_HOST#*@}" + +cd "${LOCAL_FOLDER}" + +# Upload lazygit to server +echo "Uploading lazygit to server..." +sshpass -p "${SSH_PASSWORD}" scp $SSH_OPTS "${SCRIPT_DIR}/lazygit" ${SERVER_HOST}:${SERVER_PROJECT_PATH} + +if [ $? -ne 0 ]; then + echo -e "${RED}Failed to upload lazygit${NC}" + exit 1 +fi + +echo -e "${GREEN}lazygit uploaded successfully${NC}" + +# Mark lazygit as assume-unchanged on server +echo "Marking lazygit as assume-unchanged on server..." +sshpass -p "${SSH_PASSWORD}" ssh $SSH_OPTS ${SERVER_HOST} \ + "cd ${SERVER_PROJECT_PATH} && git update-index --assume-unchanged lazygit" + +# Pull to get lazygit locally, then mark as assume-unchanged +echo "Syncing and marking lazygit as assume-unchanged locally..." +GIT_SSH_COMMAND="sshpass -p '${SSH_PASSWORD}' ssh $SSH_OPTS" git pull +git update-index --assume-unchanged lazygit + +echo -e "${GREEN}lazygit configured successfully${NC}" + +# Generate ssh.sh script +echo " +#!/bin/bash +set -e + +# Configuration +SERVER_USER=\"${USERNAME}\" +SERVER_HOST=\"${HOST}\" +SERVER_PASSWORD=\"${SSH_PASSWORD}\" +SERVER_PATH=\"${SERVER_PROJECT_PATH}/\" +REMOTE_PROGRESS=\".remote-in-progress\" +" > "ssh.sh" + +# Append the ssh.sh template +cat "${SCRIPT_DIR}/scripts/ssh.sh" >> "ssh.sh" +echo -e "${GREEN}ssh.sh created successfully${NC}" + +echo -e "${GREEN}Git clone complete!${NC}" +exit 0 diff --git a/sync-project.sh b/sync-project.sh index 7cac3c7..9e3532f 100755 --- a/sync-project.sh +++ b/sync-project.sh @@ -3,20 +3,14 @@ # This script is used to sync a project from # a remote server to a local machine. -# Colors for output -GREEN='\033[0;32m' -RED='\033[0;31m' -BLUE='\033[0;34m' -YELLOW='\033[0;33m' -NC='\033[0m' # No Color - # Get current script real directory (follow symlinks) SCRIPT_PATH="$(realpath "$0")" SCRIPT_DIR="$(dirname "$SCRIPT_PATH")" -ARCHIVE_NAME="sync.tar.gz" -# SSH options - auto-accept new host keys -SSH_OPTS="-o StrictHostKeyChecking=accept-new" +# Source shared variables +source "$SCRIPT_DIR/shared.sh" + +ARCHIVE_NAME="sync.tar.gz" # Parse command line arguments SFTP_ONLY=false @@ -104,67 +98,14 @@ if [ -z "$LOCAL_FOLDER" ]; then exit 1 fi -# Git clone mode - clone repository and setup lazygit +# Git clone mode - delegate to sync-git-project.sh if [ "$GIT_ONLY" = true ]; then - echo "Cloning repository..." - GIT_SSH_COMMAND="sshpass -p '${SSH_PASSWORD}' ssh $SSH_OPTS" \ - git clone ${SERVER_HOST}:${SERVER_PROJECT_PATH} "${LOCAL_FOLDER}" - - if [ $? -ne 0 ]; then - echo -e "${RED}Failed to clone repository${NC}" - exit 1 - fi - - echo -e "${GREEN}Repository cloned successfully${NC}" - - # Extract username and host from SERVER_HOST - USERNAME="${SERVER_HOST%@*}" - HOST="${SERVER_HOST#*@}" - - cd "${LOCAL_FOLDER}" - - # Upload lazygit to server - echo "Uploading lazygit to server..." - sshpass -p "${SSH_PASSWORD}" scp $SSH_OPTS "${SCRIPT_DIR}/lazygit" ${SERVER_HOST}:${SERVER_PROJECT_PATH} - - if [ $? -ne 0 ]; then - echo -e "${RED}Failed to upload lazygit${NC}" - exit 1 - fi - - echo -e "${GREEN}lazygit uploaded successfully${NC}" - - # Mark lazygit as assume-unchanged on server - echo "Marking lazygit as assume-unchanged on server..." - sshpass -p "${SSH_PASSWORD}" ssh $SSH_OPTS ${SERVER_HOST} \ - "cd ${SERVER_PROJECT_PATH} && git update-index --assume-unchanged lazygit" - - # Pull to get lazygit locally, then mark as assume-unchanged - echo "Syncing and marking lazygit as assume-unchanged locally..." - GIT_SSH_COMMAND="sshpass -p '${SSH_PASSWORD}' ssh $SSH_OPTS" git pull - git update-index --assume-unchanged lazygit - - echo -e "${GREEN}lazygit configured successfully${NC}" - - # Generate ssh.sh script - echo " - #!/bin/bash - set -e - - # Configuration - SERVER_USER=\"${USERNAME}\" - SERVER_HOST=\"${HOST}\" - SERVER_PASSWORD=\"${SSH_PASSWORD}\" - SERVER_PATH=\"${SERVER_PROJECT_PATH}/\" - REMOTE_PROGRESS=\".remote-in-progress\" - " > "ssh.sh" - - # Append the ssh.sh template - cat "${SCRIPT_DIR}/scripts/ssh.sh" >> "ssh.sh" - echo -e "${GREEN}ssh.sh created successfully${NC}" - - echo -e "${GREEN}Git clone complete!${NC}" - exit 0 + "$SCRIPT_DIR/sync-git-project.sh" \ + "$SERVER_HOST" \ + "$SSH_PASSWORD" \ + "$SERVER_PROJECT_PATH" \ + "$LOCAL_FOLDER" + exit $? fi # Sync terminal info on full sync (no flags)