#!/bin/bash
# 递归 dump 单仓库 via gitweb blob_plain
AUTH="andrea:Andre@00"
BASE="http://10.0.30.224/git/"
OUT=/var/www/web/IMG/firstad/src

fetch_dir() {
  local repo=$1 dir=$2 depth=$3
  [ $depth -gt 7 ] && return
  local url="${BASE}?p=${repo};a=tree;hb=HEAD"
  [ -n "$dir" ] && url="${url};f=${dir}"
  local tmp="$OUT/.t.$$"
  curl -s -m 8 -u "$AUTH" "$url" -o "$tmp"
  local subs=$(grep -oE 'a=tree;f=[^;&"]+' "$tmp" | sed 's/^a=tree;f=//' | sort -u)
  local files=$(grep -oE 'a=blob_plain;f=[^;&"]+' "$tmp" | sed 's/^a=blob_plain;f=//' | sort -u)
  local sub f rel d
  for sub in $subs; do
    if [ "$sub" != "$dir" ]; then fetch_dir "$repo" "$sub" $((depth+1)); fi
  done
  for f in $files; do
    rel="$repo/$f"
    d="${rel%/*}"
    if [ ! -s "$OUT/$rel" ]; then
      mkdir -p "$OUT/$d"
      curl -s -m 10 -u "$AUTH" "${BASE}?p=${repo};a=blob_plain;f=${f};hb=HEAD" -o "$OUT/$rel"
      echo "OK $rel ($(stat -c%s "$OUT/$rel" 2>/dev/null)B)"
    fi
  done
  rm -f "$tmp"
}

echo "START $1"
fetch_dir "$1" "" 0
echo "END $1"