summaryrefslogtreecommitdiffstats
path: root/bin/pimport.sh
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2021-05-09 04:21:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2021-05-09 04:21:55 +0000
commit453cc058d9ee6d7cb47529d99061216e72149a5f (patch)
tree38e3683d9cb52c2f181d65ba513554a5e1387f20 /bin/pimport.sh
parentInitial commit. (diff)
downloadprogress-linux-tools-453cc058d9ee6d7cb47529d99061216e72149a5f.tar.xz
progress-linux-tools-453cc058d9ee6d7cb47529d99061216e72149a5f.zip
Adding bin.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'bin/pimport.sh')
-rwxr-xr-xbin/pimport.sh534
1 files changed, 534 insertions, 0 deletions
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 <maintainers@lists.progress-linux.org>"
+ UPLOADERS="Daniel Baumann <daniel.baumann@progress-linux.org>"
+ 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 <bfh-linux-sysadmin@lists.bfh.science>"
+ UPLOADERS="Daniel Baumann <daniel.baumann@bfh.ch>"
+ 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