diff --git a/generate_patches.sh b/generate_patches.sh new file mode 100755 index 0000000..b0f1ee9 --- /dev/null +++ b/generate_patches.sh @@ -0,0 +1,55 @@ +#!/bin/bash -e +readonly ROOT_DIR="$(dirname $(readlink -f ${BASH_SOURCE[0]}))" + +readonly SPEC_FILE="$(find . -name '*.spec' | head -n 1)" +readonly REPO_NAME="$(basename ${SPEC_FILE} | sed 's/.spec//')" +readonly REPO_VERSION="$(grep Version ${SPEC_FILE} | head -n 1 | awk -F ' ' '{print $NF}')" +readonly REPO_REMOTE="origin" + +readonly PKG_NAME="${REPO_NAME}-${REPO_VERSION}" +readonly PKG_DIR="${ROOT_DIR}/${PKG_NAME}" +readonly PKG_BRANCH="$(git branch --show-current | sed 's/-LTS.*//')" + +echo "Preparing..." +# clean old files +rm -f ${ROOT_DIR}/*.patch +rm -rf ${PKG_DIR} + +# extract package +tar -xf ${PKG_NAME}.tar.gz + +# fetch baseline +pushd ${PKG_DIR} > /dev/null +readonly PKG_BASELINE=$(git rev-parse --short HEAD) +popd > /dev/null + +echo "------------------------------" +echo "Name: ${PKG_NAME}" +echo "Branch: ${PKG_BRANCH}" +echo "Baseline: ${PKG_BASELINE}" +echo "------------------------------" + +echo "Syncing with remote..." +pushd ${PKG_DIR} > /dev/null +git fetch ${REPO_REMOTE} +popd > /dev/null + +echo "Generating patches..." +# format patches +pushd ${PKG_DIR} > /dev/null +git checkout -q ${REPO_REMOTE}/${PKG_BRANCH} +git format-patch -qN -o ${ROOT_DIR} ${PKG_BASELINE} +popd > /dev/null + +# print patch list +patch_list="$(find ${ROOT_DIR} -maxdepth 1 -name "*.patch" | sort)" +for patch_file in ${patch_list}; do + patch_name="$(basename ${patch_file})" + patch_id="$(echo ${patch_name} | awk -F '-' '{print $1}')" + echo "Patch${patch_id}: ${patch_name}" +done + +echo "Cleaning up..." +rm -rf ${PKG_DIR} + +echo "Done"