. "$(dirname $0)/common.sh" ""
-origwd=$(pwd)
+[ "$1" = "-n" ] && {
+ shift
+ last=$(tail -n1 $SHA1_FILE | cut -f1 -d$'\t')
+ start_from=$(awk -F '\t' '/^[^#]/ && $3 == "'$last'" { do getline; while (/^#/ || $2 == "branch"); 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'; }'
+ awk -F '\t' '/^[^#]/ && $3 == "'$1'" { print $'$2'; }' $CTRL_FILE
}
-trees="$@"
-[ "$trees" ] ||
- trees=$(grep -v '^#' $CTRL_FILE | awk -F '\t' '{ print $3 }')
-
-for name in $trees; do
- type=$(get_field "$name" 2)
-
- echo $name: $type
- if [ "$type" = "git" ]; then
- git fetch "$name"
- continue
- fi
+fetch_git()
+{
+ git fetch "$1"
+}
- if [ "$type" = "mmotm" ]; then
+fetch_mmotm()
+{
+ (
cd ../mmotm || {
echo "Cannot chdir to ../mmotm" 1>&2
- continue
+ 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
}
- rsync -avHPz --exclude .git --exclude broken-out.tar.gz --delete ozlabs.org::akpm/mmotm/. .
- # we only use the fist lines of {origin,linux-next}.patch
- [ -f broken-out/origin.patch ] &&
- sed -i 1q broken-out/origin.patch
- [ -f broken-out/linux-next.patch ] &&
- sed -i 1q broken-out/linux-next.patch
git add -A .
[ "$(git status --porcelain)" ] &&
- git commit -m "$(head -n 1 .DATE)"
- cd "$origwd"
- continue
- fi
+ git commit -m "$(head -n 1 .DATE)"
+ )
+}
- if [ "$type" = "quilt" ]; then
- url=$(get_field "$name" 4)
+fetch_quilt()
+{
+ (
+ url=$(get_field "$1" 4)
url=${url%/} # strip trailing / if necessary
cd ../quilt || {
echo "Cannot chdir to ../quilt" 1>&2
- continue
+ return
}
- [ -d "$name" ] || mkdir "$name" || {
- echo "Cannot create quilt directory for $name" 1>&2
- cd "$origwd"
- continue
+ [ -d "$1" ] || mkdir "$1" || {
+ echo "Cannot create quilt directory for $1" 1>&2
+ return
}
- cd "$name" || {
- echo "Cannot chdir to quilt directory for $name" 1>&2
- cd "$origwd"
- continue
+ cd "$1" || {
+ echo "Cannot chdir to quilt directory for $1" 1>&2
+ return
}
wget -N -nv --no-cache "$url/series" || {
- echo "Wget of $name series file failed" 1>&2
+ echo "Wget of $1 series file failed" 1>&2
cd ..
- rm -rf "$name"
- git checkout "$name"
- cd "$origwd"
- continue
+ rm -rf "$1"
+ git checkout "$1"
+ return
}
find * -type f | grep -v '^series$' | sort >.series.old
if grep -q NEXT_PATCHES series; then
sed -e 's/[ \t]*#.*$//' -e '/^[ \t]*$/d' |
sort >.series.next
[ -s .series.next ] && {
- sed "s|^|$url/|" .series.next |
- wget -N -nv --no-cache -i - || {
- echo "Wget of series '$name' failed" 1>&2
+ wget -N -nv --no-cache -B "$url/" -i .series.next || {
+ echo "Wget of series '$1' failed" 1>&2
cd ..
- rm -rf "$name"
- git checkout "$name"
- cd "$origwd"
- continue
+ rm -rf "$1"
+ git checkout "$1"
+ return
}
}
comm -23 .series.old .series.next | xargs -r rm -f
rm -f .series.old .series.next
- cd "$origwd"
- fi
+ setfattr -x user.xdg.origin.url * >/dev/null 2>&1
+ )
+}
+
+trees="$@"
+[ "$trees" ] ||
+ trees=$(awk -F '\t' '/^[^#]/ && $2 != "branch" { print $3 }' $CTRL_FILE)
+
+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 commit -v -a -m "$(date '+%F-%H:%M')" -e
+[ "$(git status --porcelain)" ] &&
+ git commit -v -a -m "$(date '+%F-%H:%M')" -e
exit 0