From 453cc058d9ee6d7cb47529d99061216e72149a5f Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 9 May 2021 06:21:55 +0200 Subject: Adding bin. Signed-off-by: Daniel Baumann --- bin/pimport.sh | 534 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 534 insertions(+) create mode 100755 bin/pimport.sh (limited to 'bin/pimport.sh') diff --git a/bin/pimport.sh b/bin/pimport.sh new file mode 100755 index 0000000..27b74cb --- /dev/null +++ b/bin/pimport.sh @@ -0,0 +1,534 @@ +#!/bin/sh + +set -e + +case "$(basename ${0})" in + p*) + MODE="progress-linux" + ;; + + b*) + MODE="bfh" + ;; +esac + +case "${MODE}" in + progress-linux) + MAINTAINER="Progress Linux Maintainers " + UPLOADERS="Daniel Baumann " + BUGS="mailto:maintainers@lists.progress-linux.org" + + if echo ${PWD} | grep -qs engywuck-backports + then + VCS_BROWSER="https://git.progress-linux.org/packages/engywuck-backports" + VCS_GIT="https://git.progress-linux.org/packages/engywuck-backports" + elif echo ${PWD} | grep -qs fuchur-backports + then + VCS_BROWSER="https://git.progress-linux.org/packages/fuchur-backports" + VCS_GIT="https://git.progress-linux.org/packages/fuchur-backports" + elif echo ${PWD} | grep -qs engywuck + then + VCS_BROWSER="https://git.progress-linux.org/packages/engywuck" + VCS_GIT="https://git.progress-linux.org/packages/engywuck" + elif echo ${PWD} | grep -qs fuchur + then + VCS_BROWSER="https://git.progress-linux.org/packages/fuchur" + VCS_GIT="https://git.progress-linux.org/packages/fuchur" + else + VCS_BROWSER="https://git.progress-linux.org/packages/engywuck-backports" + VCS_GIT="https://git.progress-linux.org/packages/engywuck-backports" + fi + + DOWNSTREAM_BRANCH="progress-linux" + ;; + + bfh) + MAINTAINER="Team Linux \& Infrastructure Services " + UPLOADERS="Daniel Baumann " + BUGS="mailto:bfh-linux-users@lists.bfh.science" + + VCS_BROWSER="https://git.bfh.science/packages/buster-backports" + VCS_GIT="https://git.bfh.science/packages/buster-backports" + + DOWNSTREAM_BRANCH="bfh" + ;; +esac + +RED="\033[1;33;31m" +GREEN="\033[1;33;32m" +YELLOW="\033[1;33;33m" +BLUE="\033[1;33;34m" +WHITE="\033[1;33;37m" +NORMAL="\033[0m" +PURPLE="\033[1;33;35m" + +DSC="${1}" + +case "${DSC}" in + *.dsc) + ;; + + *) + echo "Usage: ${0} DSC" + exit 1 + ;; +esac + +case "${DSC}" in + http*) + DSC_TEMPDIR="$(mktemp -d)" + + cd "${DSC_TEMPDIR}" + dget -d "${DSC}" + cd "${OLDPWD}" + + DSC="${DSC_TEMPDIR}/$(basename ${DSC})" + ;; +esac + +PACKAGE="$(basename ${DSC} | awk -F_ '{ print $1 }')" +DEB_VERSION="$(awk '/^Version: / { print $2 }' ${DSC})" + +case "${DEB_VERSION}" in + *-*) + DEB_UPSTREAM_VERSION="$(echo ${DEB_VERSION} | awk -F- '{ $NF=""; print $0 }' | sed -e 's| |-|g' -e 's|-$||g')" + ;; + + *) + DEB_UPSTREAM_VERSION="${DEB_VERSION}" + ;; +esac + +Add_initial_commit () +{ + if [ ! -e .git ] + then + git init --shared + fi + + if ! git log > /dev/null 2>&1 + then + echo + echo "################################################################################" + echo "git: adding initial commit" + echo "################################################################################" + + git commit -a -s -S -m "Initial commit." --allow-empty + fi +} + +Create_upstream_branch () +{ + CURRENT_BRANCH="$(git branch --show-current)" + + case "${CURRENT_BRANCH}" in + master|main) + if ! git branch | grep -qs upstream + then + echo + echo "################################################################################" + echo "git: adding upstream branch" + echo "################################################################################" + + git branch -m ${CURRENT_BRANCH} upstream + fi + ;; + esac +} + +Switch_upstream_branch () +{ + CURRENT_BRANCH="$(git branch --show-current)" + + if [ "${CURRENT_BRANCH}" != "upstream" ] && git branch | grep -qs upstream + then + echo + echo "################################################################################" + echo "git: switching to upstream branch" + echo "################################################################################" + + git checkout upstream + fi +} + +Remove_everything () +{ + echo + echo "################################################################################" + echo "git: removing all files" + echo "################################################################################" + + echo -n "Removing files for new import..." + + find . -maxdepth 1 -mindepth 1 -and -not -name .git -print0 | xargs -0 -I '{}' rm -rf '{}' + + echo " done." +} + +Unpack_upstream () +{ + echo + echo "################################################################################" + echo "dpkg: unpacking upstream files" + echo "################################################################################" + + TEMPDIR="$(mktemp -d -p . -u)" + + dpkg-source -x --no-copy --skip-debianization ${DSC} "${TEMPDIR}" + rm -rf "${TEMPDIR}/debian" + find "${TEMPDIR}" -type d -name ".git" -exec rm -rf {} \; || true + + DEBIAN_TAR="$(dirname $(readlink -f ${DSC}))/$(awk '/debian.tar.*$/ { print $3 }' ${DSC} | head -n1)" + + case "${DEBIAN_TAR}" in + *.debian.tar.*) + if [ -e "${DEBIAN_TAR}" ] + then + # this includes upstream additions outside debian/ into the upstream branch + cd "${TEMPDIR}" + tar xf "${DEBIAN_TAR}" + rm -rf debian + rm -rf .git + cd "${OLDPWD}" + fi + ;; + esac + + find "${TEMPDIR}" -maxdepth 1 -mindepth 1 -print0 | xargs -0 -I '{}' mv '{}' . + rmdir "${TEMPDIR}" +} + +Add_upstream_version () +{ + echo + echo "################################################################################" + echo "git: adding upstream version" + echo "################################################################################" + + # FIXME + git-upstream-add ${DEB_UPSTREAM_VERSION} +} + +Create_debian_branch () +{ + echo + echo "################################################################################" + echo "git: creating debian branch" + echo "################################################################################" + + CURRENT_BRANCH="$(git branch --show-current)" + + if [ "${CURRENT_BRANCH}" = "upstream" ] && ! git branch | grep -qs debian + then + git branch debian + fi +} + +Switch_debian_branch () +{ + CURRENT_BRANCH="$(git branch --show-current)" + + if [ "${CURRENT_BRANCH}" != "debian" ] && git branch | grep -qs debian + then + echo + echo "################################################################################" + echo "git: switching to debian branch" + echo "################################################################################" + + git checkout debian + fi +} + +Unpack_debian () +{ + echo + echo "################################################################################" + echo "dpkg: unpacking debian files" + echo "################################################################################" + + TEMPDIR="$(mktemp -d -p . -u)" + + dpkg-source -x --no-copy --skip-patches ${DSC} ${TEMPDIR} + find "${TEMPDIR}" -type d -name ".git" -exec rm -rf {} \; || true + + find "${TEMPDIR}" -maxdepth 1 -mindepth 1 -print0 | xargs -0 -I '{}' mv '{}' . + + rmdir ${TEMPDIR} +} + +Add_debian_version () +{ + echo + echo "################################################################################" + echo "git: adding debian version" + echo "################################################################################" + + # FIXME + git-debian-add +} + +Create_downstream_branch () +{ + echo + echo "################################################################################" + echo "git: create ${DOWNSTREAM_BRANCH} branch" + echo "################################################################################" + + CURRENT_BRANCH="$(git branch --show-current)" + + if [ "${CURRENT_BRANCH}" = "debian" ] && ! git branch | grep -qs ${DOWNSTREAM_BRANCH} + then + git checkout -b ${DOWNSTREAM_BRANCH} + fi +} + +Update_maintainer_field () +{ + if [ -e debian/templates/control.source.in ] + then + CONTROL="debian/templates/control.source.in" + elif [ -e debian/control.in ] + then + CONTROL="debian/control.in" + else + CONTROL="debian/control" + fi + + if ! grep -qs "^XSBC-Original-Maintainer: ${MAINTAINER}$" "${CONTROL}" + then + echo + echo "################################################################################" + echo "git: updating maintainer field" + echo "################################################################################" + + if grep -qs "^Uploaders:" "${CONTROL}" + then + # sorting maintainer and uploaders fields + ORIGINAL_MAINTAINER="$(grep '^Maintainer:' ${CONTROL})" + + # remove original maintainer field + TEMPFILE="$(mktemp -p .)" + grep -v "^Maintainer:" "${CONTROL}" > "${TEMPFILE}" + rm -f "${CONTROL}" + mv "${TEMPFILE}" "${CONTROL}" + + # readd original maintainer field + sed -i -e "s|^\(Uploaders.*\)$|${ORIGINAL_MAINTAINER}\n\1|" \ + "${CONTROL}" + fi + + sed -i -e "s|^Maintainer:|Maintainer: ${MAINTAINER}\nXSBC-Original-Maintainer:|" "${CONTROL}" + + git commit -a -s -S -m "Updating maintainer field." + fi + + if [ -n "$(grep -s -r "^Maintainer:" debian | grep -v ^debian\/control)" ] + then + echo "WARNING: additional 'Maintainer:' fields outside debian/control{,.in} found!" + fi +} + +Update_uploaders_field () +{ + if [ -e debian/templates/control.source.in ] + then + CONTROL="debian/templates/control.source.in" + elif [ -e debian/control.in ] + then + CONTROL="debian/control.in" + else + CONTROL="debian/control" + fi + + # FIXME: single uploader on one line, no multi-line + if ! grep -qs "^XSBC-Uploaders: ${UPLOADERS}$" "${CONTROL}" + then + echo + echo "################################################################################" + echo "git: updating uploaders field" + echo "################################################################################" + + sed -i -e "s|^\(Maintainer:.*$\)|\1\nXSBC-Uploaders: ${UPLOADERS}|" \ + -e "s|^Uploaders:|XSBC-Original-Uploaders:|" \ + "${CONTROL}" + + git commit -a -s -S -m "Updating uploaders field." + fi + + if [ -n "$(grep -s -r "^Uploaders:" debian | grep -v ^debian\/control)" ] + then + echo "WARNING: additional 'Uploaders:' fields outside debian/control{,.in} found!" + fi +} + +Update_bugs_field () +{ + if [ -e debian/templates/control.source.in ] + then + CONTROL="debian/templates/control.source.in" + elif [ -e debian/control.in ] + then + CONTROL="debian/control.in" + else + CONTROL="debian/control" + fi + + if ! grep -qs "^Bugs: ${BUGS}$" "${CONTROL}" + then + echo + echo "################################################################################" + echo "git: updating bugs field" + echo "################################################################################" + + # remove original bugs fields + TEMPFILE="$(mktemp -p .)" + grep -v "^Bugs:" "${CONTROL}" > "${TEMPFILE}" + rm -f "${CONTROL}" + mv "${TEMPFILE}" "${CONTROL}" + + # add new bugs field + if grep -qs "^XSBC-Original-Uploaders:" "${CONTROL}" + then + NEXT_FIELD_AFTER_UPLOADERS="$(grep -v '^ ' ${CONTROL} | grep -v '^ ' | grep -A1 -m1 '^XSBC-Original-Uploaders:' | tail -n1 | awk -F: '{ print $1 }')" + else + NEXT_FIELD_AFTER_UPLOADERS="$(grep -v '^ ' ${CONTROL} | grep -v '^ ' | grep -A1 -m1 '^XSBC-Original-Maintainer:' | tail -n1 | awk -F: '{ print $1 }')" + fi + + case "${NEXT_FIELD_AFTER_UPLOADERS}" in + Package:*) + LAST_LINE_OF_SOURCE_BLOCK="$(grep -B2 -m1 '^Package:' ${CONTROL} | head -n1)" + + sed -i -e "s|\(^${LAST_LINE_OF_SOURCE_BLOCK}$\)|\1\nBugs: ${BUGS}|" \ + "${CONTROL}" + ;; + + *) + sed -i -e "s|^\(${NEXT_FIELD_AFTER_UPLOADERS}\)|Bugs: ${BUGS}\n\1|" \ + "${CONTROL}" + ;; + esac + + git commit -a -s -S -m "Updating bugs field." + fi +} + +Update_vcs_fields () +{ + if [ -e debian/templates/control.source.in ] + then + CONTROL="debian/templates/control.source.in" + elif [ -e debian/control.in ] + then + CONTROL="debian/control.in" + else + CONTROL="debian/control" + fi + + if ! grep -qs "^Vcs-Browser: ${VCS_BROWSER}/${PACKAGE}$" "${CONTROL}" && \ + ! grep -qs "^Vcs-Git: ${VCS_BROWSER}/${PACKAGE}$" "${CONTROL}" + then + echo + echo "################################################################################" + echo "git: updating vcs fields" + echo "################################################################################" + + sed -i -e 's|^Vcs-browser|Vcs-Browser|' \ + -e 's|^Vcs-git|Vcs-Git|' \ + "${CONTROL}" + + # replace original vcs fields + sed -i -e 's|^Vcs-|XSBC-Original-Vcs-|g' \ + "${CONTROL}" + + if ! grep -qs "^XSBC-Original-Vcs-" "${CONTROL}" + then + # no vcs in original file + LAST_LINE_OF_SOURCE_BLOCK="$(grep -B2 -m1 '^Package:' ${CONTROL} | head -n1)" + + sed -i -e "s|\(^${LAST_LINE_OF_SOURCE_BLOCK}.*$\)|\1\nVcs-Browser: ${VCS_BROWSER}/${PACKAGE}\nVcs-Git: ${VCS_GIT}/${PACKAGE}|" \ + "${CONTROL}" + else + # vcs fields in original file + ORIGINAL_VCS_BROWSER="$(grep '^XSBC-Original-Vcs-Browser' ${CONTROL})" + + TEMPFILE="$(mktemp -p . -u)" + grep -v "^XSBC-Original-Vcs-Browser" "${CONTROL}" > "${TEMPFILE}" + rm -f "${CONTROL}" + mv "${TEMPFILE}" "${CONTROL}" + + # FIXME: handle cases where only Vcs-Browser is there, but no Vcs-Git + ORIGINAL_VCS_OTHER="$(grep '^XSBC-Original-Vcs' ${CONTROL})" + sed -i -e "s|^\(XSBC-Original-Vcs-.*\)$|Vcs-Browser: ${VCS_BROWSER}/${PACKAGE}\nVcs-Git: ${VCS_GIT}/${PACKAGE}\n${ORIGINAL_VCS_BROWSER}\n\1|" \ + "${CONTROL}" + fi + fi + + if [ -n "$(git status --porcelain)" ] + then + git commit -a -s -S -m "Updating vcs fields." + fi +} + +Update_source_format () +{ + if ! grep -qs '^3.0 (quilt)' debian/source/format + then + echo + echo "################################################################################" + echo "git: updating source format" + echo "################################################################################" + + mkdir -p debian/source + echo "3.0 (quilt)" > debian/source/format + + git add . + git commit -a -s -S -m "Updating source format." + fi +} + +echo "################################################################################" +echo "git: importing ${DSC}" +echo "################################################################################" + +Add_initial_commit + +Create_upstream_branch +Switch_upstream_branch +Remove_everything +Unpack_upstream +Add_upstream_version + +Create_debian_branch +Switch_debian_branch +Remove_everything +Unpack_debian +Add_debian_version + +if [ -n "${DSC_TEMPDIR}" ] +then + rm -rf "${DSC_TEMPDIR}" +fi + +Create_downstream_branch + +Update_maintainer_field +Update_uploaders_field +Update_bugs_field +Update_vcs_fields +Update_source_format + +if [ -e debian/control.in ] || [ -e debian/templates/control.source.in ] || [ -e debian/control.md5sum ] +then + echo "################################################################################" + echo "${RED}WARNING:${NORMAL} debian/control.in exists," + echo "likely the debian files need to be regenerated (manually)." + echo "################################################################################" +fi + +if [ "$(grep -rs '^Maintainer:' debian | wc -l )" -gt 1 ] +then + echo "################################################################################" + echo "${RED}WARNING:${NORMAL} more than one Maintainer field exists," + echo "likely further debian files need to be changed (manually)." + echo "################################################################################" +fi -- cgit v1.2.3