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 |