63 lines
2.4 KiB
Bash
63 lines
2.4 KiB
Bash
|
|
#!/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
|