#!/bin/bash . "$(dirname $0)/common.sh" "" [ "$1" = "-n" ] && { shift last=$(tail -n1 $SHA1_FILE | cut -f1 -d$'\t') start_from=$(awk -F '\t' '$3 == "'$last'" { getline; print $3; exit 0; }' $CTRL_FILE) } [ "$1" = "-s" ] && { shift start_from="$1" [ -z "$start_from" ] && { echo "-s requires a start tree" 1>&2 exit 1 } shift } get_field() { grep -v '^#' $CTRL_FILE | awk -F '\t' '$3 == "'$1'" { print $'$2'; }' } fetch_git() { git fetch "$1" } fetch_mmotm() { ( cd ../mmotm || { echo "Cannot chdir to ../mmotm" 1>&2 return } rsync -az --partial --exclude .git\* --exclude broken-out.tar.gz --delete ozlabs.org::akpm/mmotm/. . || { git reset --hard echo "Fetcing mmotm failed" 1>&2 return } git add -A . [ "$(git status --porcelain)" ] && git commit -m "$(head -n 1 .DATE)" ) } fetch_quilt() { ( url=$(get_field "$1" 4) url=${url%/} # strip trailing / if necessary cd ../quilt || { echo "Cannot chdir to ../quilt" 1>&2 return } [ -d "$1" ] || mkdir "$1" || { echo "Cannot create quilt directory for $1" 1>&2 return } cd "$1" || { echo "Cannot chdir to quilt directory for $1" 1>&2 return } wget -N -nv --no-cache "$url/series" || { echo "Wget of $1 series file failed" 1>&2 cd .. rm -rf "$1" git checkout "$1" return } find * -type f | grep -v '^series$' | sort >.series.old if grep -q NEXT_PATCHES series; then sed -n '/NEXT_PATCHES_START/,/NEXT_PATCHES_END/p' series else cat series fi | sed -e 's/[ \t]*#.*$//' -e '/^[ \t]*$/d' | sort >.series.next [ -s .series.next ] && { wget -N -nv --no-cache -B "$url/" -i .series.next || { echo "Wget of series '$1' failed" 1>&2 cd .. rm -rf "$1" git checkout "$1" return } } comm -23 .series.old .series.next | xargs -r rm -f rm -f .series.old .series.next setfattr -x user.xdg.origin.url * >/dev/null 2>&1 ) } trees="$@" [ "$trees" ] || trees=$(grep -v '^#' $CTRL_FILE | awk -F '\t' '{ print $3 }') for name in $trees; do [ -n "$start_from" ] && { if [ "$name" = "$start_from" ]; then start_from="" else continue fi } type=$(get_field "$name" 2) echo $name: $type [ $(type -t "fetch_$type") = "function" ] && fetch_$type "$name" done cd ../quilt git add -A . [ "$(git status --porcelain)" ] && git commit -v -a -m "$(date '+%F-%H:%M')" -e exit 0