#!/bin/bash
+export LOG_FILE=../akpm-import.log
+
log()
{
- echo "$@" | tee -a ../akpm-import.log
+ echo "$@" | tee -a $LOG_FILE
}
execute()
{
- log "$" $@
- "$@" 2>&1 | tee -a ../akpm-import.log
- [ ${PIPESTATUS[0]} -eq 0 ] || sh -i || {
- [ -f "$sfile.orig" ] &&
- mv -f "$sfile.orig" "$sfile"
- exit 1
- }
+ log '$' "$@"
+ "$@" 2>&1 | tee -a $LOG_FILE
+ return ${PIPESTATUS[0]}
}
-name="akpm"
-mmotm="../../mmotm/text"
+mmotm="../mmotm"
sfile="$mmotm/series"
cpwd=$(pwd)
-base=$(sed -n '1s/^GIT *\([^ ]*\).*$/\1/p' "$mmotm/broken-out/origin.patch")
+[ -f "$mmotm/broken-out/origin.patch" ] &&
+ base=$(sed -n '1s/^GIT *\([^ ]*\).*$/\1/p' "$mmotm/broken-out/origin.patch")
+[ "$base" ] || {
+ base=$(tail -n 1 "$mmotm/.DATE")
+ base=${base#v}
+ base="v${base}"
+}
nbase=$(sed -n '1s/^GIT *\([^ ]*\).*$/\1/p' "$mmotm/broken-out/linux-next.patch")
-log "Importing $name based on $base/$nbase"
git rev-parse --verify "$base" >/dev/null || {
- log "Unknown origin BASE"
+ log "Unknown origin BASE $base"
exit 1
}
git rev-parse --verify "$nbase" >/dev/null || {
- log "Unknown linux-next BASE"
+ log "Unknown linux-next BASE $nbase"
exit 1
}
+db=$(git describe "$base")
+dnb=$(git describe --contains "$nbase")
+log "Importing akpm based on $db/$dnb"
-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" "$base"
-
-[ -s "$sfile" ] || {
- log " quilt series is empty"
- mv -f "$sfile.orig" "$sfile"
- execute git update-ref "refs/heads/quilt/$name" "$nbase"
- exit 0
+[ -d "../tmp-akpm" ] && {
+ log "akpm import directory already exists"
+ exit 1
}
-[ -d "../quilt-tmp" ] ||
- execute git clone -s -l -n -q . ../quilt-tmp
+execute git worktree add -b tmp-akpm/master ../tmp-akpm "$db" ||
+ $SHELL -i || exit
-log '$' cd ../quilt-tmp
-cd ../quilt-tmp
-execute git reset --hard "$base"
-GIT_EDITOR=: execute git merge "$nbase" || bash -i || exit 1
-git branch base
+log '$' cd ../tmp-akpm
+cd ../tmp-akpm
+execute git branch tmp-akpm/current-base ||
+ $SHELL -i || exit
-for f in $(cat "$mmotm/series"); do
- [ "$f" = "origin.patch" ] && continue
- [ "$f" = "linux-next.patch" ] && continue
- execute git am "$mmotm/broken-out/$f" ||
- bash -i ||
- break
+sed_exp='
+/NEXT_PATCHES_START/,/NEXT_PATCHES_END/{
+ s/[ \t]*#.*$//
+ /^[ \t]*$/!p
+}
+/^linux-next.patch/p'
+patches=$(sed -n "$sed_exp" "$sfile")
+
+for f in $patches; do
+ case "$f" in
+ origin.patch)
+ ;;
+ linux-next.patch)
+ execute git branch tmp-akpm/current ||
+ $SHELL -i || exit
+ execute git merge --no-edit --no-stat "$dnb" || {
+ umf=$(git diff 2>&1 | sed -n 's/^\* Unmerged path //p')
+ [ "$umf" ] && [ -f "../merge-files/akpm-current" ] && {
+ rmf=$(grep -F "$umf" "../merge-files/akpm-current")
+ [ "$rmf" ] &&
+ "$bin_dir/do_rm" $rmf
+ }
+ git diff 2>&1 | grep -E -q '<<<<<|^\*' && {
+ $SHELL -i || exit
+ }
+ GIT_EDITOR=: execute git commit -v -a
+ }
+ [ -f "../merge-fixes/akpm-current" ] && {
+ for p in $(cat "../merge-fixes/akpm-current"); do
+ $(dirname $0)/merge_fix -n "$p" ||
+ $SHELL -i || exit
+ done
+ }
+ execute git branch tmp-akpm/master-base ||
+ $SHELL -i || exit
+ ;;
+ *)
+ execute git am -s --patch-format=mbox "$mmotm/broken-out/$f" ||
+ $SHELL -i || exit
+ ;;
+ esac
done
log '$' cd $cpwd
cd $cpwd
-execute git fetch -f ../quilt-tmp master:"quilt/$name"
-execute git fetch -f ../quilt-tmp base:"quilt/${name}-base"
+execute rm -rf ../tmp-akpm
+execute git worktree prune
-mv -f "$sfile.orig" "$sfile"
-
-[ -d "../quilt-tmp" ] &&
- rm -rf ../quilt-tmp
+for i in akpm/current akpm/current-base akpm/master akpm/master-base; do
+ execute git branch -f $i tmp-$i
+ execute git branch -D tmp-$i
+done
exit 0