devops/bash_scripts/azure/count_repo_files.sh

63 lines
2.4 KiB
Bash
Raw Normal View History

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