#!/bin/bash
# 递归 dump 所有 repo 的 blob_plain 源码
AUTH="andrea:Andre@00"
BASE="http://10.0.30.224/git/"
OUT=/var/www/web/IMG/firstad/src
repos="empweb opd6 opdregapp trainee webreg_server webreg_client localprogram cdcweb outsideweb scy_public scy er opd"

# 递归: 给定 repo + dir 前缀, 抓 tree 页, 对每个子目录递归, 对每个 blob 下载
fetch_dir() {
  local repo=$1 dir=$2 depth=$3
  [ $depth -gt 6 ] && return
  local url="${BASE}?p=${repo};a=tree;hb=HEAD"
  [ -n "$dir" ] && url="${url};f=${dir}"
  local tmp="$OUT/.t.html"
  curl -s -m 8 -u "$AUTH" "$url" -o "$tmp"
  # 子目录
  grep -oE 'a=tree;f=[^;&"]+' "$tmp" | sed 's/^a=tree;f=//' | sort -u | while read -r sub; do
    if [ "$sub" != "$dir" ]; then
      fetch_dir "$repo" "$sub" $((depth+1))
    fi
  done
  # 文件
  grep -oE 'a=blob_plain;f=[^;&"]+' "$tmp" | sed 's/^a=blob_plain;f=//' | sort -u | while read -r f; do
    local rel="$repo/$f"
    local d="${rel%/*}"
    mkdir -p "$OUT/$d"
    if [ ! -s "$OUT/$rel" ]; then
      curl -s -m 10 -u "$AUTH" "${BASE}?p=${repo};a=blob_plain;f=${f};hb=HEAD" -o "$OUT/$rel"
    fi
  done
}

for repo in $repos; do
  echo "== dumping $repo =="
  fetch_dir "$repo" "" 0
done
echo ALLDONE
find $OUT -type f | wc -l