#!/bin/bash # # Convert a patch-queue branch into a patch series in debian/patches and vice # versa. # # assumes you have your quilt patch queue for $branch on patch-queue/$branch # # See: https://honk.sigxcpu.org/piki/development/debian_packages_in_git/ is_patch_queue() { local branch=$1 case $branch in patch-queue/*) return 0 ;; *) return 1 ;; esac } run_git() { set -e git "$@" set +e } pq_export() { local branch=$1 local pq="patch-queue/$branch" if is_patch_queue $branch; then branch="${branch//patch-queue\/}" pq="patch-queue/$branch" echo "On \"$pq\", switching to \"$branch\"." run_git checkout $branch fi rm -f debian/patches/* PATCHES=`git format-patch -N -o debian/patches $branch...$pq` if [ -n "$PATCHES" ]; then echo "Regenerating patch queue in \"debian/patches\"." > debian/patches/series for PATCH in $PATCHES; do # delete the first line (from sha1) and last two lines (git version # info) of the patch file sed -i -e '1d' -e 'N;$!P;$!D;$d' $PATCH sed -i -e 's/^-- \n[0-9\.]+$//' $PATCH echo $PATCH | sed -e 's%debian/patches/%%' >> debian/patches/series done run_git status -- debian/patches else echo "No patches on \"$pq\" - nothing to do." fi } pq_rebase() { local branch=$1 local pq="patch-queue/$branch" if ! is_patch_queue $branch; then echo "Switching to \"$pq\"" run_git checkout $pq else echo "Already on \"$branch\"" fi run_git rebase "$branch" } pq_import() { local branch=$1 local pq="patch-queue/$branch" local patches=debian/patches/ if is_patch_queue $branch; then echo "Already on a patch-queue branch \"$branch\" - doing nothing." return 1 fi if ! git checkout -b $pq; then echo "Cannot create patch-queue branch \"$pq\". Try \"rebase\" instead." return 1 fi if [ ! -r ${patches}series ]; then echo "Found no series file at \"$patches\". No patches to add to patch-queue branch." return 0 fi maintainer="$(sed -n -e 's/Maintainer: \+\(.*\)/\1/p' debian/control)" QUILT_PATCHES=$patches run_git quiltimport --author "$maintainer" } pq_drop() { local branch=$1 local pq="patch-queue/$branch" if is_patch_queue $branch; then echo "On a patch-queue branch, can't drop it." return 1 else run_git branch -D "${pq}" echo "Dropped ${pq}." fi } usage () { cat <