X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=update_trees;h=d5c8697e96985c706b00bd458b1d2ae0b5a01c76;hb=7feff05394b1dd5699a01e5974b4ab9ce5bac970;hp=2a1bec917ccec50ec8b205a9effa92c6ddc506f1;hpb=686509b71299ead03c199af10534d9f6e0b8cf08;p=next-scripts diff --git a/update_trees b/update_trees index 2a1bec9..d5c8697 100755 --- a/update_trees +++ b/update_trees @@ -1,46 +1,47 @@ #!/bin/bash -#cp /dev/null ../quilt-import.log +. "$(dirname $0)/common.sh" + +log_file=../quilt-import.log +#cp /dev/null $log_file log() { - echo "$@" | tee -a ../quilt-import.log + echo "$@" | tee -a $log_file } 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 - } + "$@" 2>&1 | tee -a $log_file + [ ${PIPESTATUS[0]} -eq 0 ] || $SHELL -i || exit 1 } -quilters=$(grep -v '^#' ../real_control | awk -F ' ' '$2=="quilt" { print $3; }') +cpwd=$(pwd) -for name in $quilters; do +quilters=$(grep -v '^#' $CTRL_FILE | awk -F '\t' '$2=="quilt" { print $3; }') - # 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 - } +for name in $quilters; do sfile="../quilt/$name/series" - base=$(sed -n 's/^[# ]*NEXT_BASE[ ]*\(.*\)[ ]*$/\1/p' "$sfile") + base=$(sed -n 's/^#[ \t]*NEXT[-_]BASE[ \t]*\([^ \t]*\)[ \t]*$/\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); }') + nbase=$(grep -v '^#' $CTRL_FILE | awk -F '\t' '$3=="'"$base"'" { printf("%s/%s", "'"$base"'", $5); }') + [ -n "$nbase" ] && base="$nbase" else - base=$(sed -n 's/^[# ]*BASE[ ]*\(.*\)[ ]*$/\1/p' "$sfile") + base=$(sed -n 's/^#[ \t]*BASE[ \t]*\(.*\)[ \t]*$/\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") + *-git[0-9]*) rbase=$("$bin_dir/get_gitid" "${base}") ;; - commit*) rbase=$(expr "$base" : "commit[ ]*\(.*\)") + commit*) rbase=${base##commit*[[:space:]]} ;; [0-9]*.*) rbase="v$base" ;; @@ -50,48 +51,55 @@ for name in $quilters; do 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" + # don't bother importing things that haven't changed + mb=$(git merge-base "$rbase_sha1" "$name/master") + change_size=$(cd ../quilt;git diff last_merge.. -- "$name/" | wc -c) + [ "$mb" = "$rbase_sha1" ] && [ $change_size -eq 0 ] && { + log "Unchanged quilt series $name" + continue + } + + sed_exp='s/[ \t]*#.*$//;/^[ \t]*$/!p' + grep -q NEXT_PATCHES "$sfile" && + sed_exp='/NEXT_PATCHES_START/,/NEXT_PATCHES_END/{'"$sed_exp"';}' + patches=$(sed -n "$sed_exp" "$sfile") + + git show-ref --quiet --verify "refs/heads/$name/master" || + execute git branch "$name/master" "$rbase_sha1" - mv -f "$sfile" "$sfile.tmp" - sed -e '/^[ ]*$/d' -e '/^[ ]*#/d' <"$sfile.tmp" >"$sfile" - rm -f "$sfile.tmp" - [ -s "$sfile" ] || { + [ -n "$patches" ] || { log " quilt series is empty" - [ -f "$sfile.orig" ] && - mv -f "$sfile.orig" "$sfile" - execute git update-ref "refs/heads/quilt/$name" "$rbase_sha1" + execute git branch -f "$name/master" "$rbase_sha1" continue } - execute git checkout "quilt/$name" + [ -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" + for f in $patches; do + old_head=$(git rev-parse --verify HEAD) + execute git am --patch-format=mbox "../quilt/$name/$f" + new_head=$(git rev-parse --verify HEAD) + [ "$new_head" = "$old_head" ] && { + echo "Tree unchanged, please check ..." + bash -i || exit + } + done + + log '$' cd $cpwd + cd $cpwd - [ -f "$sfile.orig" ] && - mv -f "$sfile.orig" "$sfile" + execute git fetch -f ../quilt-tmp master:"$name/master" done -( cd ../quilt; git update-ref refs/heads/last_merge HEAD ) +[ -d "../quilt-tmp" ] && + rm -rf ../quilt-tmp -git checkout master +( cd ../quilt; git branch -f last_merge HEAD ) exit 0