I'm sending a [PATCH v4] to fix a bug in creating the tags that have
lines with --start-number on it.

Jon

On Mon, Jul 4, 2011 at 1:30 AM, Jon Ringle <[email protected]> wrote:
> The patch series I have for the Linux kernel includes incremental patches
> from upstream like
>
> patch-2.6.33.1.bz2
> patch-2.6.33.1-2.bz2
>
> followed by a patch series for my board.
> But ptxdist messes this up when applying the patch series with git.
>
> This patch allows one to mark the base tag in the series with:
> #tag:base --start-number 1
>
> Other arbitrary tags can also be put in the series:
> #tag:for-upstream --start-number 5
>
> When using 'git ptx-patches' to regenerate the series, only the patches
> between "#tag:base" and the next "#tag:*" or EOF in the series are
> regenerated. All others in the series are left untouched. To use a
> different tag than the default tag base, use -t tagname.
>
> e.g.:
> # generated by git-ptx-patches
> patch-2.6.33.1.bz2
> patch-2.6.33.1-2.bz2
> patch-2.6.33.2-3.bz2
> #tag:for-upstream --start-number 1
> 0001-for-upstream-1.patch
> 0002-for-upstream-2.patch
> 0003-for-upstream-3.patch
> #tag:base --start-number 4
> 0004-foo.patch
> 0005-bar.batch
> # 25a3096f40bc8d841c8bf3ec24dd101f  - git-ptx-patches magic
>
> Any options included on a #tag:* line are passed to git format-patch when
> generating the patches for that section.
>
> Signed-off-by: Jon Ringle <[email protected]>
> ---
>  scripts/git-ptx-patches                |   73 
> +++++++++++++++++++++++++++++---
>  scripts/lib/ptxd_make_world_patchin.sh |   26 +++++++++++
>  2 files changed, 93 insertions(+), 6 deletions(-)
>
> diff --git a/scripts/git-ptx-patches b/scripts/git-ptx-patches
> index c5eb405..396797c 100755
> --- a/scripts/git-ptx-patches
> +++ b/scripts/git-ptx-patches
> @@ -18,6 +18,7 @@ if [ ! -L .ptxdist/series ]; then
>  fi
>
>  remove_old=no
> +tag=base
>
>  if grep -q "$PTX_PATCHES_HEADER" .ptxdist/series; then
>        echo "Found series file generated by git-ptx-patches."
> @@ -31,8 +32,57 @@ if grep -q "$PTX_PATCHES_HEADER" .ptxdist/series; then
>        fi
>  fi
>
> +while getopts "ft:n:" opt; do
> +       case "${opt}" in
> +               f)
> +                       remove_old="force"
> +                       ;;
> +               t)
> +                       tag="${OPTARG}"
> +                       range="${tag}"
> +                       ;;
> +       esac
> +done
> +shift $((${OPTIND} - 1))
> +
>  if [ "x$1" = "x--force-remove" ]; then
>        remove_old="force"
> +       shift
> +fi
> +
> +tag2=$(grep "#tag:" .ptxdist/series | awk "/#tag:${tag}/{getline;print \$0}" 
> | sed 's,#tag:,,' | cut -d' ' -f1)
> +if [ "${tag}" != "${tag2}" ]; then
> +    range="${tag}..${tag2}"
> +else
> +    range="${tag}"
> +    tag2=""
> +fi
> +
> +echo "$PTX_PATCHES_HEADER" > .ptxdist/series.0
> +:> .ptxdist/series.1
> +if grep -q "#tag:" .ptxdist/series; then
> +       tagline=$(grep "#tag:${tag}" .ptxdist/series)
> +       t=$(echo "${tagline}"|cut -d' ' -f1)
> +       if [ "#tag:${tag}" == "${t}" ]; then
> +               tagopt=$(echo "${tagline}"|cut -d' ' -f2-)
> +               sed -e "/$PTX_PATCHES_HEADER/d" -n -e "0,/#tag:${tag}/p" 
> .ptxdist/series >> .ptxdist/series.0
> +               # Remove patches before #tag:${tag} so they don't get rm'd 
> with remove_old=yes
> +               sed -i --follow-symlinks "0,/#tag:${tag}/d" .ptxdist/series
> +               if [ -n "${tag2}" ]; then
> +                       sed -n -e "/#tag:${tag2}/,/git-ptx-patches magic/p" 
> .ptxdist/series > .ptxdist/series.1
> +                       sed -i "/git-ptx-patches magic/d" .ptxdist/series.1
> +                       sed -i --follow-symlinks 
> "/#tag:${tag2}/,/git-ptx-patches magic/d" .ptxdist/series
> +               fi
> +       else
> +               echo "series contains #tag:* lines, but could not find 
> #tag:${tag} line in series. Aborting."
> +               exit 1
> +       fi
> +else
> +       if [ "${tag}" != "base" ]; then
> +               echo "When using series with no #tag:* lines, you must use 
> base tag."
> +               exit 1
> +       fi
> +       echo "#tag:${tag} --start-number 1" >> .ptxdist/series.0
>  fi
>
>  case "$remove_old" in
> @@ -53,7 +103,13 @@ case "$remove_old" in
>                                ".ptxdist/patches/") continue ;;
>                                ".ptxdist/patches/series") continue ;;
>                                ".ptxdist/patches/autogen.sh") continue ;;
> -                               *) rm -rf "$file" ;;
> +                               *)
> +                                       if grep -q 
> "${file##\.ptxdist/patches/}" .ptxdist/series.{0,1}; then
> +                                               echo "Keep base patch ${file}"
> +                                       else
> +                                               rm -rf "$file"
> +                                       fi
> +                                       ;;
>                        esac
>                done
>                ;;
> @@ -63,8 +119,10 @@ if git format-patch -h 2>&1 | grep -q signature; then
>        GIT_EXTRA_ARGS="--no-signature"
>  fi
>
> -echo "$PTX_PATCHES_HEADER" > .ptxdist/series
> -git format-patch -N $GIT_EXTRA_ARGS -o .ptxdist/patches/ base | sed -e 
> 's,^.ptxdist/patches/,,' >> .ptxdist/series
> +cat .ptxdist/series.0 > .ptxdist/series
> +git format-patch -N $GIT_EXTRA_ARGS ${tagopt} -o .ptxdist/patches/ ${range} 
> | sed -e 's,^.ptxdist/patches/,,' > .ptxdist/series.auto
> +cat .ptxdist/series.auto >> .ptxdist/series
> +cat .ptxdist/series.1 >> .ptxdist/series
>  cat .ptxdist/series | _md5sum >> .ptxdist/series
>
>  # The first line of the patch is 'From <some-git-hash> ...'
> @@ -75,14 +133,17 @@ while read patch para; do
>                "series"|"autogen.sh") continue ;;
>                *) ;;
>        esac
> -       if grep -q "$patch" .ptxdist/series; then
> +       if grep -q "$patch" .ptxdist/series.auto; then
>                p=".ptxdist/patches/$patch"
>                lines=$(cat "$p" | wc -l)
>                lines=$[lines-1]
>                tail -n$lines "$p" > ".$patch.ptx-patches"
>                mv ".$patch.ptx-patches" "$p"
>        else
> -               echo "Old patch \"$patch\"!"
> +               if grep -q "$patch" .ptxdist/series.{0,1}; then
> +                       echo "Base patch \"$patch\"!"
> +               else
> +                       echo "Old patch \"$patch\"!"
> +               fi
>        fi
>  done
> -
> diff --git a/scripts/lib/ptxd_make_world_patchin.sh 
> b/scripts/lib/ptxd_make_world_patchin.sh
> index bbb7490..b812f0f 100644
> --- a/scripts/lib/ptxd_make_world_patchin.sh
> +++ b/scripts/lib/ptxd_make_world_patchin.sh
> @@ -112,6 +112,16 @@ ptxd_make_world_patchin_apply_git_compat()
>        esac
>
>        case "${patch}" in
> +           "#tag:"*)
> +               local tag="${patch##\#tag:}"
> +               if [ -f ${pkg_patchin_dir}/.ptxdist/git-patches/series ]; then
> +                   mv 
> ${pkg_patchin_dir}/.ptxdist/git-patches/series{,.${tag}} &&
> +                   touch ${pkg_patchin_dir}/.ptxdist/git-patches/series
> +               else
> +                   touch 
> ${pkg_patchin_dir}/.ptxdist/git-patches/series.${tag}
> +               fi
> +               continue
> +               ;;
>            ""|"#"*) continue ;;        # skip empty lines and comments
>            *.gz)  cat="zcat" ;;
>            *.bz2) cat="bzcat" ;;
> @@ -141,6 +151,22 @@ ptxd_make_world_patchin_apply_git()
>     #
>     ptxd_make_world_patchin_apply_git_compat || return
>
> +    grep "\#tag:" "${pkg_patchin_dir}/.ptxdist/series" | while read tagline; 
> do
> +       local tag="${tagline##\#tag:}"
> +       if [ -f "${pkg_patchin_dir}/.ptxdist/git-patches/series.${tag}" ]; 
> then
> +           mv ${pkg_patchin_dir}/.ptxdist/git-patches/series{,.1} || return
> +           mv ${pkg_patchin_dir}/.ptxdist/git-patches/series{.${tag},} || 
> return
> +
> +           git quiltimport \
> +               --patches "${pkg_patchin_dir}/.ptxdist/git-patches" \
> +               --author "unknown author <[email protected]>"
> +           echo "tagging -> ${tag}"
> +           git tag -f ${tag}
> +           mv ${pkg_patchin_dir}/.ptxdist/git-patches/series{,.${tag}} || 
> return
> +           mv ${pkg_patchin_dir}/.ptxdist/git-patches/series{.1,} || return
> +       fi
> +    done
> +
>     git quiltimport \
>        --patches "${pkg_patchin_dir}/.ptxdist/git-patches" \
>        --author "unknown author <[email protected]>"
> --
> 1.7.0.4
>
>

-- 
ptxdist mailing list
[email protected]

Reply via email to