#!/bin/bash set -euo pipefail function find_workspace_root() { local original_wd=$(pwd) while true; do if [ $(pwd) = "/" ]; then break fi if [ -d ".vscode" ]; then pwd break fi cd .. done cd "$original_wd" } SCRIPT_PATH=$(realpath "$0") SCRIPT_FOLDER=$(dirname "$SCRIPT_PATH") WORKSPACE_ROOT=$(find_workspace_root) if [ -z "$WORKSPACE_ROOT" ]; then echo "Could not find .vscode/ folder. Please create one in the root of your" echo "workspace and re-run this script." exit 1 fi VSCODE_FOLDER="$WORKSPACE_ROOT/.vscode" REPO_FOLDER="$WORKSPACE_ROOT/.repo" if ! [ -d "$REPO_FOLDER" ]; then echo ".repo/ folder is not in the same location as .vscode/ - this will" echo "cause problems." echo "Exiting..." exit 1 fi if ! command -v code > /dev/null; then echo "Could not find 'code' command." echo "" echo "1. Open VSCode" echo "2. Open the command palette (View > Command Palette)" echo "3. Type 'install' and select 'Shell Command: Install code command in PATH'" echo "4. Restart your shell" exit 1 fi echo "Installing LLDB VSCode extension" code --install-extension 'vadimcn.vscode-lldb@1.7.3' function files_equal() { local file_a="$1" local file_b="$2" if ! [ -f "$file_a" ]; then false return fi if ! [ -f "$file_b" ]; then false return fi local md5_a=$(md5sum $file_a | cut -d' ' -f1) local md5_b=$(md5sum $file_b | cut -d' ' -f1) [[ "$md5_a" == "$md5_b" ]] } function copy_file() { local file="$1" local source="$SCRIPT_FOLDER/$file" local dest="$VSCODE_FOLDER/$file" if files_equal "$source" "$dest"; then echo "Skipping copying of $file" return fi if [ -f "$dest" ]; then echo "Backing up previous $file to $file.old" mv "$dest" "$dest.old" fi echo "Copying $file" cp "$source" "$dest" } copy_file 'tasks.json' copy_file 'launch.json' echo "Done!"