diff --git a/bash_scripts/azure/count_repo_files.sh b/bash_scripts/azure/count_repo_files.sh new file mode 100644 index 0000000..5499f53 --- /dev/null +++ b/bash_scripts/azure/count_repo_files.sh @@ -0,0 +1,63 @@ +#!/bin/bash + +# === Настройки === +SERVER="http://mytfs.mycompany.com:8080/tfs" # URL сервера +COLLECTION="DefaultCollection" # Имя коллекции +PROJECT="MyProject" # Имя проекта +PAT="abc123xyzabcdef1234567890" # Personal Access Token +REPO_DIR="./repos" # Локальная папка для репозиториев + +# === Формирование URL === +REPOS_URL="${SERVER}/${COLLECTION}/${PROJECT}/_apis/git/repositories?api-version=5.0" + +# === Создание директории для репозиториев === +mkdir -p "$REPO_DIR" + +# === Получение списка репозиториев через REST API === +echo "Получение списка репозиториев из проекта '$PROJECT'..." +AUTH_HEADER=$(echo -n ":$PAT" | base64) + +response=$(curl -s -H "Authorization: Basic $AUTH_HEADER" "$REPOS_URL") +repo_names=$(echo "$response" | jq -r '.value[].name') + +if [ -z "$repo_names" ]; then + echo "Не удалось получить список репозиториев. Проверь URL, PAT и имя проекта." + exit 1 +fi + +# === Вывод заголовков таблицы === +printf "| %-30s | %-12s | %-12s |\n" "Репозиторий" "Файлов" "Размер" +printf "|--------------------------------|--------------|--------------|\n" + +# === Обход каждого репозитория === +for repo in $repo_names; do + echo "Обработка репозитория: $repo" + + # URL репозитория + GIT_URL="${SERVER}/${COLLECTION}/_git/${repo}" + + # Путь к локальному репозиторию + local_path="${REPO_DIR}/${repo}" + + # Клонируем, если ещё не существует + if [ ! -d "$local_path" ]; then + echo "Клонирование репозитория $repo..." + git clone "$GIT_URL" "$local_path" --quiet + else + echo "Репозиторий уже существует: $repo" + fi + + # Переход в директорию + cd "$local_path" || continue + + # Подсчёт файлов + file_count=$(find . -type f | wc -l) + + # Подсчёт размера + size=$(du -sh . | awk '{print $1}') + + # Вывод информации + printf "| %-30s | %-12s | %-12s |\n" "$repo" "$file_count" "$size" + + cd - > /dev/null +done \ No newline at end of file