From d7b42aa3fa0d796fcd55181bbd24eb797e82be33 Mon Sep 17 00:00:00 2001 From: Stephen Rothwell Date: Wed, 12 Mar 2008 18:08:51 +1100 Subject: [PATCH] lots of updates --- do_merge | 62 ++++++++++++++++++++++++++++++++++++++------ fetch_trees | 66 +++++++++++++++++++++++++++++++++++++++++++++++ make_tree_file | 30 ++++++++++++++++++++++ update_trees | 70 ++++++++++++++++++++++++++++---------------------- 4 files changed, 190 insertions(+), 38 deletions(-) create mode 100755 fetch_trees create mode 100755 make_tree_file diff --git a/do_merge b/do_merge index 1ede56c..b5ed78b 100755 --- a/do_merge +++ b/do_merge @@ -1,11 +1,57 @@ #!/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 &1 | tee Next/merge.log + ssh "$build_host" "$build_cmd" || { + echo Build failed 1>&2 + bash -i || exit + } +done + +exit 0 diff --git a/fetch_trees b/fetch_trees new file mode 100755 index 0000000..c83647a --- /dev/null +++ b/fetch_trees @@ -0,0 +1,66 @@ +#!/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.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 diff --git a/make_tree_file b/make_tree_file new file mode 100755 index 0000000..2a5a980 --- /dev/null +++ b/make_tree_file @@ -0,0 +1,30 @@ +#!/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 diff --git a/update_trees b/update_trees index 75333d0..8465a94 100755 --- a/update_trees +++ b/update_trees @@ -1,32 +1,30 @@ -#!/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") ;; @@ -35,7 +33,11 @@ for name in $quilters; do [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=: @@ -50,12 +52,20 @@ for name in $quilters; do 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 -- 2.39.2