#!/bin/bash
-while read name url ref; do
- [[ -z "$ref" ]] && ref="master"
- echo $name $ref
- git merge -n $name/$ref
- [[ -f .git/MERGE_HEAD ]] && {
- echo $name $ref >>Next/conflicts
- git reset --hard
+LOG_FILE="../merge.log"
+build_host="sprygo"
+build_dir="/scatch/sfr/next"
+build_cmd="bin/build_next"
+
+no_build=false
+[ "$1" = "-n" ] && {
+ shift
+ no_build=true
+}
+[ -n "$1" ] && build_host="$1"
+
+cp /dev/null $LOG_FILE
+
+log()
+{
+ echo "$@" | tee -a $LOG_FILE
+}
+
+execute()
+{
+ log "$" $@
+ $@ 2>&1 | tee -a $LOG_FILE
+ return ${PIPESTATUS[0]}
+}
+
+execute git checkout master
+execute git reset --hard stable
+
+heads=$(grep -v '^#' ../real_control | awk -F ' ' '$2=="quilt" { printf("quilt/%s ", $3); } $2=="git" { printf("%s/%s ", $3, $5); }')
+
+for h in $heads; do
+ log Merging $h
+ old_head=$(git rev-parse HEAD)
+ execute git merge $h || {
+ echo Merge failed 1>&2
+ bash -i || exit
+ log '$' git commit -v -a
+ git commit -v -a
+ execute git diff -M --stat --summary 'HEAD^..'
+ }
+ new_head=$(git rev-parse HEAD)
+ [ "$old_head" = "$new_head" ] && continue
+ $no_build && continue
+ rsync -avH --exclude .git --delete . "$build_host":"$build_dir"/. || {
+ echo Rsync failed 1>&2
+ bash -i || exit
}
-done <Next/control 2>&1 | tee Next/merge.log
+ ssh "$build_host" "$build_cmd" || {
+ echo Build failed 1>&2
+ bash -i || exit
+ }
+done
+
+exit 0
--- /dev/null
+#!/bin/bash
+
+IFS=' '
+
+origwd=$(pwd)
+
+while read email type name url ref; do
+ [[ "$email" =~ '^#.*$' ]] && {
+ echo $name: skipped
+ continue
+ }
+ echo $name: $type
+ if [ "$type" = "git" ]; then
+ git fetch "$name"
+ continue
+ fi
+ if [ "$type" = "quilt" ]; then
+ cd ../quilt || {
+ echo "Cannot chdir to ../quilt" 1>&2
+ continue
+ }
+ [ -d "$name" ] || mkdir "$name" || {
+ echo "Cannot create quilt directory for $name" 1>&2
+ cd "$origwd"
+ continue
+ }
+ cd "$name" || {
+ echo "Cannot chdir to quilt directory for $name" 1>&2
+ cd "$origwd"
+ continue
+ }
+ wget -N -nv --no-cache "$url/series" || {
+ echo "Wget of $name series file failed" 1>&2
+ cd "$origwd"
+ continue
+ }
+ find * -type f | grep -v '^series$' | sort >.series.old
+ do_echo=echo
+ grep -q NEXT_PATCHES series &&
+ do_echo=:
+ while read line; do
+ case "$line" in
+ *NEXT_PATCHES_START*) do_echo=echo ;;
+ *NEXT_PATCHES_END*) do_echo=: ;;
+ ''|\#*) : ;;
+ *) $do_echo $line ;;
+ esac
+ done <series | sort >.series.next
+ wget -N -nv --no-cache -B "$url" -i .series.next || {
+ echo "Wget of series '$name' failed" 1>&2
+ cd ..
+ rm -rf "$name"
+ git checkout "$name"
+ break
+ }
+ comm -23 .series.old .series.next | xargs -r rm -f
+ rm -f .series.old .series.next
+ cd "$origwd"
+ fi
+done <../real_control
+
+cd ../quilt
+git add .
+git commit -v -a
+
+exit 0
--- /dev/null
+#!/bin/bash
+
+mkdir Next
+
+echo 'Trees included into this release:
+
+Name Type URL
+---- ---- ---' > Next/Trees
+
+IFS=' '
+while read email type name url ref; do
+ [[ "$email" =~ '^#.*$' ]] && continue
+ tab="\t"
+ [ $(echo "$name" | wc -c) -le 8 ] && tab="\t\t"
+ [ "$type" = "git" ] && url="$url#$ref"
+ printf "%s$tab%s\t%s\n" $name $type $url
+done <../real_control >>Next/Trees
+
+cp ../quilt-import.log ../merge.log Next/.
+
+d=$(date '+%Y%m%d')
+
+printf "%s-next-%s\n" "" $d >localversion-next
+
+git add Next localversion-next
+git commit -s -v -a -m "Add linux-next specific files"
+git tag "next-$d"
+git update-ref refs/heads/stable refs/remotes/origin/master
+
+exit 0
-#!/bin/sh
-
-(
- IFS=' '
-
- while read email type name url ref; do
- echo $name: $type
- if [ "$type" = "git" ]; then
- git fetch "$name"
- continue
- fi
- (
- cd ../quilt/"$name"
- wget -N --quiet --recursive --no-directories --no-parent "$url"
- )
- done <../real_control
-
- (
- cd ../quilt
- git add .
- git commit -v -a
- )
-)
-
-quilters=$(awk -F ' ' '$2=="quilt" { print $3; }' ../real_control)
+#!/bin/bash
+
+set -o pipefail
+
+cp /dev/null ../quilt-import.log
+
+log()
+{
+ echo "$@" | tee -a ../quilt-import.log
+}
+
+execute()
+{
+ log "#" $@
+ $@ 2>&1 | tee -a ../quilt-import.log
+}
+
+quilters=$(grep -v '^#' ../real_control | awk -F ' ' '$2=="quilt" { print $3; }')
for name in $quilters; do
sfile="../quilt/$name/series"
- base=$(sed -n 's/^[# ]*BASE[ ]*\(.*\)[ ]*$/\1/p' "$sfile")
+ base=$(sed -n 's/^[# ]*NEXT_BASE[ ]*\(.*\)[ ]*$/\1/p' "$sfile")
+ if [ -n "$base" ]; then
+ base=$(grep -v '^#' ../real_control | awk -F ' ' '$3=="'"$base"'" { if ($2=="quilt") printf("quilt/%s", "'"$base"'"); else printf("%s/%s", "'"$base"'", $5); }')
+ else
+ base=$(sed -n 's/^[# ]*BASE[ ]*\(.*\)[ ]*$/\1/p' "$sfile")
+ fi
case "$base" in
*-git[0-9]*) base=$(wget -q -O - "http://www.kernel.org/pub/linux/kernel/v2.6/snapshots/patch-${base}.id")
;;
[0-9]*.*) base="v$base"
;;
esac
- echo "$sfile": "$base"
+ log "Importing $name based on $base"
+ git rev-list -n 1 "$base" -- >/dev/null 2>&1 || {
+ log "Unknown BASE"
+ continue
+ }
grep -q NEXT_PATCHES "$sfile" && {
mv -f "$sfile" "$sfile.orig"
do_echo=:
done <"$sfile.orig" >"$sfile"
}
- git branch -D "quilt/$name"
- git checkout -b "quilt/$name" "$base" || sh -i
- git quiltimport --patches "../quilt/$name" || sh -i
+ execute git branch -D "quilt/$name"
+ execute git checkout -b "quilt/$name" "$base" || sh -i || {
+ [ -f "$sfile.orig" ] && mv -f $sfile.orig $sfile
+ exit 1
+ }
+ execute git quiltimport --patches "../quilt/$name" || sh -i || {
+ [ -f "$sfile.orig" ] && mv -f $sfile.orig $sfile
+ exit 1
+ }
[ -f "$sfile.orig" ] &&
mv -f $sfile.orig $sfile
done
+git checkout master
+
exit 0