]> git.ozlabs.org Git - next-scripts/blobdiff - update_trees
introduce get_contacts function and use it
[next-scripts] / update_trees
index d46b80caf7a637e01e553acbbd851d3c103ae448..5d4e90a7217863fa52b29b16a2e86f818a049a20 100755 (executable)
@@ -1,33 +1,35 @@
 #!/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)
+
+quilters=$(grep -v '^#' $CTRL_FILE | awk -F '\t' '$2=="quilt" { print $3; }')
 
 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")
@@ -37,9 +39,9 @@ for name in $quilters; do
        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"
                        ;;
@@ -51,34 +53,24 @@ for name in $quilters; do
        }
 
        # don't bother importing things that haven't changed
-       mb=$(git merge-base "$rbase_sha1" "quilt/$name")
+       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
        }
 
-       mv -f "$sfile" "$sfile.orig"
-       do_echo=echo
-       grep -q NEXT_PATCHES "$sfile.orig" && 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" |
-               sed -e 's/[     ]*#.*$//' -e '/^[       ]*$/d' >"$sfile"
-
-       git show-ref --quiet --verify "refs/heads/quilt/$name" ||
-               execute git branch "quilt/$name" "$rbase_sha1"
-
-       [ -s "$sfile" ] || {
+       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"
+
+       [ -n "$patches" ] || {
                log "   quilt series is empty"
-               mv -f "$sfile.orig" "$sfile"
-               execute git update-ref "refs/heads/quilt/$name" "$rbase_sha1"
+               execute git branch -f "$name/master" "$rbase_sha1"
                continue
        }
 
@@ -89,20 +81,25 @@ for name in $quilters; do
        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
+       for f in $patches; do
+               old_head=$(git rev-parse --verify HEAD)
+               execute git am -s --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
 
-       execute git fetch -f ../quilt-tmp master:"quilt/$name"
+       log '$' cd $cpwd
+       cd $cpwd
 
-       mv -f "$sfile.orig" "$sfile"
+       execute git fetch -f ../quilt-tmp master:"$name/master"
 done
 
 [ -d "../quilt-tmp" ] &&
        rm -rf ../quilt-tmp
 
-( cd ../quilt; git update-ref refs/heads/last_merge HEAD )
+( cd ../quilt; git branch -f last_merge HEAD )
 
 exit 0