diff --git a/.gitignore b/.gitignore index 09a3c29..43f54ea 100644 --- a/.gitignore +++ b/.gitignore @@ -4,10 +4,11 @@ # But not these files... !.gitignore !.cursor/ +!.cursor/** !*.sh +!*.bat !*.bash !*.zsh !*.fish -!*.mdc -!.cursor/** +!*.tsv diff --git a/clone_projects.bat b/clone_projects.bat new file mode 100755 index 0000000..0a2e013 --- /dev/null +++ b/clone_projects.bat @@ -0,0 +1,82 @@ +@echo off +setlocal enabledelayedexpansion + +REM Скрипт для клонирования проектов из TSV файла +REM Формат TSV: check, project_name, project_url + +REM Проверяем, что передан аргумент с именем файла +if "%~1"=="" ( + echo Использование: %0 ^ [base_dir] + echo Пример: %0 projects.tsv + echo Пример: %0 projects.tsv C:\Projects + echo Пример: %0 projects.tsv .\projects + echo Пример: %0 projects.tsv ..\workspace + exit /b 1 +) + +set TSV_FILE=%~1 +set BASE_DIR=%~2 + +REM Если base_dir не указан, используем текущую директорию +if "!BASE_DIR!"=="" set BASE_DIR=. + +REM Проверяем существование файла +if not exist "%TSV_FILE%" ( + echo Ошибка: Файл '%TSV_FILE%' не найден + exit /b 1 +) + +REM Создаем базовую директорию, если она не существует +if not exist "!BASE_DIR!" ( + echo Создаем базовую директорию: !BASE_DIR! + mkdir "!BASE_DIR!" +) + +echo Начинаем клонирование проектов из файла: %TSV_FILE% +echo Базовая директория: !BASE_DIR! +echo ================================================ + +REM Читаем TSV файл построчно +for /f "usebackq delims=" %%a in ("%TSV_FILE%") do ( + set "line=%%a" + + REM Пропускаем пустые строки + if not "!line!"=="" ( + REM Разбиваем строку по табуляции + for /f "tokens=1,2,3 delims= " %%b in ("!line!") do ( + set "check=%%b" + set "project_name=%%c" + set "project_url=%%d" + + REM Пропускаем заголовки + if not "!check!"=="check" ( + REM Проверяем, нужно ли клонировать (если check = X) + if /i "!check!"=="X" ( + echo Клонирование: !project_name! + echo URL: !project_url! + + REM Проверяем, что директория не существует + set "PROJECT_PATH=!BASE_DIR!\!project_name!" + if exist "!PROJECT_PATH!" ( + echo Предупреждение: Директория '!PROJECT_PATH!' уже существует, пропускаем + echo --- + ) else ( + REM Выполняем git clone + git clone "!project_url!" "!PROJECT_PATH!" + if !errorlevel! equ 0 ( + echo ✓ Успешно клонирован: !project_name! + ) else ( + echo ✗ Ошибка при клонировании: !project_name! + ) + echo --- + ) + ) else ( + echo Пропускаем: !project_name! (check = '!check!') + ) + ) + ) + ) +) + +echo Клонирование завершено! +pause diff --git a/clone_projects.sh b/clone_projects.sh new file mode 100755 index 0000000..03d4c8f --- /dev/null +++ b/clone_projects.sh @@ -0,0 +1,68 @@ +#!/bin/bash + +# Скрипт для клонирования проектов из TSV файла +# Формат TSV: check, project_name, project_url + +# Проверяем, что передан аргумент с именем файла +if [ $# -eq 0 ]; then + echo "Использование: $0 [base_dir]" + echo "Пример: $0 projects.tsv" + echo "Пример: $0 projects.tsv /path/to/projects" + echo "Пример: $0 projects.tsv ./projects" + echo "Пример: $0 projects.tsv ../workspace" + exit 1 +fi + +TSV_FILE="$1" +BASE_DIR="${2:-.}" # Если base_dir не указан, используем текущую директорию + +# Проверяем существование файла +if [ ! -f "$TSV_FILE" ]; then + echo "Ошибка: Файл '$TSV_FILE' не найден" + exit 1 +fi + +# Создаем базовую директорию, если она не существует +if [ ! -d "$BASE_DIR" ]; then + echo "Создаем базовую директорию: $BASE_DIR" + mkdir -p "$BASE_DIR" +fi + +echo "Начинаем клонирование проектов из файла: $TSV_FILE" +echo "Базовая директория: $BASE_DIR" +echo "================================================" + +# Читаем TSV файл, пропуская заголовок (если есть) +# Ожидаемый формат: check, project_name, project_url +while IFS=$'\t' read -r check project_name project_url; do + # Пропускаем пустые строки и строки с заголовками + if [[ -z "$check" || "$check" == "check" ]]; then + continue + fi + + # Проверяем, нужно ли клонировать (если check = X) + if [[ "$check" == "X" || "$check" == "x" ]]; then + echo "Клонирование: $project_name" + echo "URL: $project_url" + + # Проверяем, что директория не существует + PROJECT_PATH="$BASE_DIR/$project_name" + if [ -d "$PROJECT_PATH" ]; then + echo "Предупреждение: Директория '$PROJECT_PATH' уже существует, пропускаем" + echo "---" + continue + fi + + # Выполняем git clone + if git clone "$project_url" "$PROJECT_PATH"; then + echo "✓ Успешно клонирован: $project_name" + else + echo "✗ Ошибка при клонировании: $project_name" + fi + echo "---" + else + echo "Пропускаем: $project_name (check = '$check')" + fi +done < "$TSV_FILE" + +echo "Клонирование завершено!" diff --git a/projects.tsv b/projects.tsv new file mode 100644 index 0000000..d11052c --- /dev/null +++ b/projects.tsv @@ -0,0 +1,2 @@ +check project_name project_url + diff --git a/test_relative_paths.sh b/test_relative_paths.sh new file mode 100755 index 0000000..30abff6 --- /dev/null +++ b/test_relative_paths.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +# Тестовый скрипт для демонстрации работы с относительными путями + +echo "=== Тест относительных путей ===" +echo "Текущая директория: $(pwd)" +echo "" + +# Создаем тестовый TSV файл +cat > test_projects.tsv << EOF +check project_name project_url +X test-project-1 https://github.com/octocat/Hello-World.git +X test-project-2 https://github.com/octocat/Hello-World.git +EOF + +echo "Создан тестовый файл: test_projects.tsv" +echo "" + +# Тест 1: Без указания base_dir (текущая директория) +echo "Тест 1: Клонирование в текущую директорию" +./clone_projects.sh test_projects.tsv +echo "" + +# Тест 2: Относительный путь ./projects +echo "Тест 2: Клонирование в ./projects" +./clone_projects.sh test_projects.tsv ./projects +echo "" + +# Тест 3: Относительный путь ../test-workspace +echo "Тест 3: Клонирование в ../test-workspace" +./clone_projects.sh test_projects.tsv ../test-workspace +echo "" + +# Тест 4: Относительный путь ./nested/folders +echo "Тест 4: Клонирование в ./nested/folders" +./clone_projects.sh test_projects.tsv ./nested/folders +echo "" + +echo "=== Результаты ===" +echo "Структура директорий после тестов:" +find . -type d -name "test-project-*" 2>/dev/null | head -10 +echo "" + +# Очистка (опционально) +read -p "Удалить тестовые файлы и директории? (y/n): " -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]]; then + rm -rf test_projects.tsv test-project-* projects test-workspace nested + echo "Тестовые файлы удалены" +fi