devops/bash_scripts/azure/count_repo_files.sh

63 lines
2.4 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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