#!/bin/bash #cp /dev/null ../quilt-import.log log() { echo "$@" | tee -a ../quilt-import.log } execute() { log "$" $@ "$@" 2>&1 | tee -a ../quilt-import.log [ ${PIPESTATUS[0]} -eq 0 ] || sh -i || { [ -f "$sfile.orig" ] && mv -f "$sfile.orig" "$sfile" exit 1 } } quilters=$(grep -v '^#' ../real_control | awk -F ' ' '$2=="quilt" { print $3; }') for name in $quilters; do # don't bother importing things that haven't changed change_size=$(cd ../quilt;git diff last_merge.. -- "$name/" | wc -c) [ $change_size -eq 0 ] && { log "Unchanged quilt series $name" continue } sfile="../quilt/$name/series" 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") [ -n "$base" ] || { # for stgit base=$(sed '1{s/^#.*GIT commit \(.*\)$/\1/;q}' "$sfile") [ -n "$base" ] || base="origin/master" } fi rbase="$base" case "$base" in *-git[0-9]*) rbase=$(wget -q -O - "http://www.kernel.org/pub/linux/kernel/v2.6/snapshots/patch-${base}.id") ;; commit*) rbase=$(expr "$base" : "commit[ ]*\(.*\)") ;; [0-9]*.*) rbase="v$base" ;; esac log "Importing $name based on $base" rbase_sha1=$(git rev-parse --verify "$rbase^{commit}") || { log "Unknown BASE" continue } mv -f "$sfile" "$sfile.orig" if grep -q NEXT_PATCHES "$sfile.orig"; then do_echo=: while read line; do case $line in *NEXT_PATCHES_START*) do_echo=echo ;; *NEXT_PATCHES_END*) do_echo=: ;; esac $do_echo $line done <"$sfile.orig" >"$sfile" else cp "$sfile.orig" "$sfile" fi git show-ref --quiet --verify "refs/heads/quilt/$name" || execute git branch "quilt/$name" "$rbase_sha1" mv -f "$sfile" "$sfile.tmp" sed -e '/^[ ]*$/d' -e '/^[ ]*#/d' <"$sfile.tmp" >"$sfile" rm -f "$sfile.tmp" [ -s "$sfile" ] || { log " quilt series is empty" [ -f "$sfile.orig" ] && mv -f "$sfile.orig" "$sfile" execute git update-ref "refs/heads/quilt/$name" "$rbase_sha1" continue } [ -d "../quilt-tmp" ] || execute git clone -s -l -n -q . ../quilt-tmp log '$' cd ../quilt-tmp cd ../quilt-tmp execute git reset --hard "$rbase_sha1" author=$(grep -v '^#' ../real_control | awk -F ' ' '$3=="'"$name"'" { printf("%s", $1); }' | sed 's/,.*$//') execute git quiltimport --author "$author" --patches "../quilt/$name" log '$' cd ../next cd ../next execute git fetch -f ../quilt-tmp master:"quilt/$name" [ -f "$sfile.orig" ] && mv -f "$sfile.orig" "$sfile" done [ -d "../quilt-tmp" ] && rm -rf ../quilt-tmp ( cd ../quilt; git update-ref refs/heads/last_merge HEAD ) exit 0