aboutsummaryrefslogtreecommitdiff
path: root/Tools
diff options
context:
space:
mode:
authorRene Ladan <rene@FreeBSD.org>2021-04-06 10:37:15 +0000
committerRene Ladan <rene@FreeBSD.org>2021-04-06 10:39:47 +0000
commit297cd655811ca6374660d466c2bae8a5887f6b3b (patch)
tree00b558a89cc5f770a520c059047fd40986863882 /Tools
parent88917e9f46660b4839f40f73c01d63f56b613174 (diff)
downloadports-297cd655811ca6374660d466c2bae8a5887f6b3b.tar.gz
ports-297cd655811ca6374660d466c2bae8a5887f6b3b.zip
Tools/scripts/rmport: convert workflow to git.
Do not push the final result automatically yet, unlike its previous Subversion version. Reviewed by: emaste, mat, uqs Approved by: crees (maintainer, implicit) Differential Revision: https://reviews.freebsd.org/D29451
Diffstat (limited to 'Tools')
-rwxr-xr-xTools/scripts/rmport246
1 files changed, 86 insertions, 160 deletions
diff --git a/Tools/scripts/rmport b/Tools/scripts/rmport
index 4e6b771e3658..221ff4d329b7 100755
--- a/Tools/scripts/rmport
+++ b/Tools/scripts/rmport
@@ -4,7 +4,7 @@
#
# Copyright 2006-2007 Vasil Dimov
# Copyright 2012-2018 Chris Rees
-# Copyright 2016-2018 Rene Ladan
+# Copyright 2016-2021 René Ladan
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -32,37 +32,28 @@
# Originally written by Vasil Dimov <vd@FreeBSD.org>
# Others:
# Chris Rees <crees@FreeBSD.org>
-# Rene Ladan <rene@FreeBSD.org>
-#
-# $FreeBSD$
+# René Ladan <rene@FreeBSD.org>
#
# MAINTAINER= crees@FreeBSD.org
#
EDITOR=${EDITOR:-/usr/bin/vi}
PORTSDIR=${PORTSDIR:-/usr/ports}
-INDEX=${PORTSDIR}/`make -C ${PORTSDIR} -V INDEXFILE`
+INDEX=${PORTSDIR}/$(make -C ${PORTSDIR} -V INDEXFILE)
-TODAY=`date -u -v+0d +%Y-%m-%d`
+TODAY=$(date -u +%Y-%m-%d)
SED="sed -i .orig -E"
# use ~/.ssh/config to set up the desired username if different than $LOGNAME
-SVNREPO=${SVNREPO:-svn+ssh://repo.FreeBSD.org/ports}
+GITREPO=${GITREPO:-git@gitrepo.FreeBSD.org:ports.git}
-if [ -n "$(command -v svn 2>/dev/null)" ]; then
- SVN=svn
-elif [ -n "$(command -v svnlite 2>/dev/null)" ]; then
- SVN=svnlite
+if [ -n "$(command -v git 2>/dev/null)" ]; then
+ GIT=git
else
- echo "Neither svn(1) nor svnlite(1) found. Please install devel/subversion."
+ echo "git(1) not found. Please install devel/git."
exit 1
fi
-
-if ! CDIFF=$(which cdiff) ; then
- CDIFF=${PAGER}
-fi
-
log()
{
echo "==> $*" >&2
@@ -85,8 +76,8 @@ ask()
question=${1}
answer=x
- while [ "${answer}" != "y" -a "${answer}" != "n" ] ; do
- read -p "${question} [yn] " answer
+ while [ "${answer}" != "y" ] && [ "${answer}" != "n" ] ; do
+ read -p "${question}? [yn]" answer
done
echo ${answer}
@@ -105,13 +96,13 @@ find_catport()
# either absolute or relative
# get the full path
- rp=`realpath ${arg}`
+ rp=$(realpath ${arg})
- category=`basename \`dirname ${rp}\``
- port=`basename ${rp}`
+ category=$(basename $(dirname ${rp}))
+ port=$(basename ${rp})
echo ${category}/${port}
else
- echo "What do you mean by \`${arg}'?" >&2
+ echo "What do you mean by '${arg}'?" >&2
exit 1
fi
}
@@ -121,7 +112,8 @@ find_expired()
for category in $(make -C ${PORTSDIR} -V SUBDIR); do
for port in $(make -C ${PORTSDIR}/${category} -V SUBDIR); do
DATE="$(make -C ${PORTSDIR}/${category}/${port} -V EXPIRATION_DATE)"
- if [ -n "${DATE}" -a ! "${DATE}" \> "${TODAY}" ] ; then
+ # shellcheck disable=SC2039
+ if [ -n "${DATE}" ] && [ ! "${DATE}" \> "$${TODAY}" ] ; then
if [ "$1" = 1 ] ; then
echo -n "${DATE} ${category}/${port}: "
make -C ${PORTSDIR}/${category}/${port} -V DEPRECATED
@@ -133,24 +125,6 @@ find_expired()
done
}
-# create temporary checkout directory
-mkcodir()
-{
- log "creating temporary directory"
- d=`mktemp -d -t rmport`
- echo "This is the commit message, please edit it." >> ${d}/svnlog
- log "created ${d}"
- echo "${d}"
-}
-
-# checkout common files from the repository
-co_common()
-{
- log "getting ports/MOVED and ports/LEGAL from repository"
- ${SVN} co --depth empty ${SVNREPO}/head ports
- ${SVN} up ports/MOVED ports/LEGAL
-}
-
# check if some ports depend on the given port
# XXX Very Little Chance (tm) for breaking INDEX exists:
# /usr/ports/INDEX may be outdated and not contain recently added dependencies
@@ -158,19 +132,19 @@ check_dep_core()
{
catport=${1}
alltorm=${2}
- pkgname=`pkgname ${catport}`
+ pkgname=$(pkgname ${catport})
rmpkgs=""
rmcatports=""
for torm in ${alltorm} ; do
- torm="`echo ${torm} | sed 's/\/$//'`"
- rmpkgs="${rmpkgs:+${rmpkgs}|}`pkgname ${torm}`"
+ torm="$(echo ${torm} | sed 's/\/$//')"
+ rmpkgs="${rmpkgs:+${rmpkgs}|}$(pkgname ${torm})"
rmcatports="${rmcatports:+${rmcatports}|}${PORTSDIR}/${torm}/"
done
err=0
- deps=`grep -E "${pkgname}" ${INDEX} |grep -vE "^(${rmpkgs})" || :`
+ deps=$(grep -E "${pkgname}" ${INDEX} |grep -vE "^(${rmpkgs})" || :)
if [ -n "${deps}" ] ; then
log "${catport}: some port(s) depend on ${pkgname}:"
echo "${deps}" >&2
@@ -178,11 +152,9 @@ check_dep_core()
fi
# check if some Makefiles mention the port to be deleted
- portdir_grep="^[^#].*/`basename ${catport}`([[:space:]]|@|/|$)"
- r="`find -H ${PORTSDIR} -mindepth 2 -maxdepth 3 \
- \( -name "Makefile*" -or -path "*Mk/*.mk" \) \
- |xargs grep -EH "${portdir_grep}" \
- |grep -vE "^(${rmcatports})" || :`"
+ portdir_grep="^[^#].*/$(basename ${catport})([[:space:]]|@|/|$)"
+ r="$(${GIT} grep '${portdir_grep}' -- '**Makefile*' 'Mk/' \
+ |grep -vE "^(${rmcatports})" || :)"
if [ -n "${r}" ] ; then
if [ ${err} -eq 1 ] ; then
echo >&2
@@ -205,7 +177,7 @@ check_dep()
err=0
- res="`check_dep_core ${catport} "${alltorm}" 2>&1`" || err=1
+ res="$(check_dep_core ${catport} "${alltorm}" 2>&1)" || err=1
if [ ${err} -eq 0 ] ; then
return 0
@@ -219,7 +191,7 @@ check_dep()
echo "" >&2
echo "you can skip ${catport} and continue with the rest or remove it anyway" >&2
- answer=`ask "do you want to skip ${catport}?"`
+ answer=$(ask "do you want to skip ${catport}")
if [ "${answer}" = "y" ] ; then
return 1
else
@@ -227,8 +199,8 @@ check_dep()
fi
}
-# query GNATS via Bugzilla, format and return the result
-get_PRs_www()
+# query Bugzilla and return the result
+get_PRs()
{
catport=${1}
synopsis=${2}
@@ -237,7 +209,7 @@ get_PRs_www()
url="https://bugs.freebsd.org/bugzilla/buglist.cgi?quicksearch=${synopsis}"
- raw="`fetch -q -T 20 -o - "${url}"`"
+ raw="$(fetch -q -T 20 -o - "${url}")"
if [ -z "${raw}" ] ; then
log "${catport}: empty result from URL: ${url}"
@@ -249,29 +221,20 @@ get_PRs_www()
|sort
}
-# query GNATS and return the result
-get_PRs()
-{
- catport=${1}
- synopsis=${2}
-
- get_PRs_www ${catport} ${synopsis}
-}
-
# check if any PRs exist that are related to the port
check_PRs()
{
catport=${1}
synopsis=${2}
- PRs="`get_PRs ${catport} "${synopsis}"`" || exit
+ PRs="$(get_PRs ${catport} "${synopsis}")" || exit
if [ -n "${PRs}" ] ; then
log "${catport}: PRs found, related to ${synopsis}:"
printf "%s\n" "${PRs}" >&2
echo "you can skip ${catport} and continue with the rest or remove it anyway" >&2
- answer=`ask "do you want to skip ${catport}?"`
+ answer=$(ask "do you want to skip ${catport}")
if [ "${answer}" = "y" ] ; then
return 1
else
@@ -282,17 +245,6 @@ check_PRs()
return 0
}
-# checkout port's specific files from the repository
-co_port()
-{
- cat=${1}
- port=${2}
-
- log "${cat}/${port}: getting ${cat}/Makefile and port's files from repository"
- ${SVN} up --depth empty ports/${cat} ports/$cat/Makefile
- ${SVN} up ports/${cat}/${port}
-}
-
# check if anything about the port is mentioned in ports/LEGAL
check_LEGAL()
{
@@ -302,11 +254,11 @@ check_LEGAL()
for checkstr in ${pkgname} ${catport} ; do
msg="${catport}: checking if ${checkstr} is in ports/LEGAL"
log "${msg}"
- while grep -i ${checkstr} ports/LEGAL ; do
+ while grep -i ${checkstr} LEGAL ; do
echo "" >&2
- echo "${checkstr} is in ${PWD}/ports/LEGAL" >&2
+ echo "${checkstr} is in ports/LEGAL" >&2
echo "remove it and hit <enter> when ready" >&2
- echo "or hit \`s' to skip this issue and continue anyway" >&2
+ echo "or hit 's' to skip this issue and continue anyway" >&2
read answer
if [ "${answer}" = "s" ] ; then
break
@@ -314,6 +266,7 @@ check_LEGAL()
log "${msg}"
done
done
+ ${GIT} add LEGAL
}
# add port's entry to ports/MOVED
@@ -321,9 +274,9 @@ edit_MOVED()
{
catport=${1}
- DEPRECATED="`make -C ${PORTSDIR}/${catport} -V DEPRECATED`"
+ DEPRECATED="$(make -C ${PORTSDIR}/${catport} -V DEPRECATED)"
DEPRECATED=${DEPRECATED:+: ${DEPRECATED}}
- if [ -n "`make -C ${PORTSDIR}/${catport} -V EXPIRATION_DATE`" ] ; then
+ if [ -n "$(make -C ${PORTSDIR}/${catport} -V EXPIRATION_DATE)" ] ; then
REASON="Has expired${DEPRECATED}"
else
REASON="Removed${DEPRECATED}"
@@ -331,7 +284,8 @@ edit_MOVED()
log "${catport}: adding entry to ports/MOVED"
- echo "${catport}||${TODAY}|${REASON}" >> ports/MOVED
+ echo "${catport}||${TODAY}|${REASON}" >> MOVED
+ ${GIT} add MOVED
}
# remove port from category/Makefile
@@ -342,10 +296,10 @@ edit_Makefile()
log "${cat}/${port}: removing from ${cat}/Makefile"
- portesc=`escape ${port}`
+ portesc=$(escape ${port})
- ${SED} -e "/^[[:space:]]*SUBDIR[[:space:]]*\+=[[:space:]]*${portesc}([[:space:]]+#.*)?$/d" \
- ports/${cat}/Makefile
+ ${SED} -e "/^[[:space:]]*SUBDIR[[:space:]]*\+=[[:space:]]*${portesc}([[:space:]]+#.*)?$/d" ${cat}/Makefile
+ ${GIT} add ${cat}/Makefile
}
# remove port's files
@@ -355,7 +309,7 @@ rm_port()
log "${catport}: removing port's files"
- ${SVN} rm ports/${catport}
+ ${GIT} rm -r ${catport}
}
append_Template()
@@ -364,81 +318,42 @@ append_Template()
msg=${catport}
- EXPIRATION_DATE=`make -C ${PORTSDIR}/${catport} -V EXPIRATION_DATE`
+ EXPIRATION_DATE=$(make -C ${PORTSDIR}/${catport} -V EXPIRATION_DATE)
if [ -n "${EXPIRATION_DATE}" ] ; then
msg="${EXPIRATION_DATE} ${msg}"
fi
- DEPRECATED="`make -C ${PORTSDIR}/${catport} -V DEPRECATED`"
+ DEPRECATED="$(make -C ${PORTSDIR}/${catport} -V DEPRECATED)"
if [ -n "${DEPRECATED}" ] ; then
msg="${msg}: ${DEPRECATED}"
fi
log "${catport}: adding entry to commit message template"
- echo "${msg}" >> ./svnlog
+ echo "${msg}" >> ${gitlog}
}
-# diff
-diff()
-{
- log "creating diff"
-
- diffout=${codir}/diff
-
- ${SVN} diff --no-diff-deleted ports > ${diffout} 2>&1 || :
-
- read -p "hit <enter> to view svn diff output" dummy
-
- # give this to the outside world so it can be showed to the committer
- # and removed when we are done
- echo ${diffout}
-}
-
-# update, ask for confirmation and commit
+# update, ask for confirmation and make a commit
commit()
{
- log "running svn update"
- ${SVN} up --quiet ports 2>&1 |${PAGER:-less}
-
- echo >> svnlog
- echo
- $EDITOR svnlog
-
- log "Your commit message is:"
- cat svnlog
-
- answer=y
- while [ "${answer}" = "y" ] ; do
- answer=`ask "Do you want to edit your commit message again?"`
- if [ "${answer}" = "y" ] ; then
- $EDITOR svnlog
- fi
- done
-
- answer=`ask "Do you want to commit now?"`
-
+ ${GIT} commit --file=${gitlog}
+ answer=$(ask "Do you want to merge and tweak the commit message")
if [ "${answer}" = "y" ] ; then
- ${SVN} ci --file svnlog ports
+ ${GIT} checkout main 2>&1
+ ${GIT} pull --ff-only 2>&1
+ ${GIT} merge --squash ${branch} 2>&1 # history remains linear
+ ${GIT} commit 2>&1 # modify final commit message
+ echo "All done, check the result and push when everything is OK."
fi
}
cleanup()
{
- diffout=${1}
- codir=${2}
-
log "cleaning up"
- rm ${diffout}
-
- rm svnlog
-
- # release ports directories
- rm -rf ports
-
- cd /
- rmdir ${codir}
+ rm -f ${gitlog}
+ ${GIT} checkout main
+ ${GIT} branch -D ${branch}
}
usage()
@@ -465,7 +380,20 @@ usage()
# main
-if [ ${#} -eq 0 -o "${1}" = "-h" -o "${1}" = "--help" ] ; then
+if ! ${GIT} diff --exit-code remotes/origin/main ; then
+ echo "you have local commits, exiting" >&2
+ exit
+fi
+git_dir="$(${GIT} rev-parse --git-dir)"
+exitcode=$?
+if [ ${exitcode} -ne 0 ] ; then
+ echo "not at a git boundary" >&2
+ exit
+else
+ cd "${git_dir}/.." || exit 1
+fi
+
+if [ ${#} -eq 0 ] || [ "${1}" = "-h" ] || [ "${1}" = "--help" ] ; then
usage
fi
@@ -473,7 +401,7 @@ if [ ${1} = "-d" ] ; then
if [ ${#} -ne 2 ] ; then
usage
fi
- catport=`find_catport ${2}`
+ catport=$(find_catport ${2})
check_dep ${catport} 0 ${catport}
exit
fi
@@ -498,23 +426,22 @@ if [ ${1} = "-a" ] ; then
if [ ${#} -ne 1 ] ; then
usage
fi
- ${0} `find_expired 0`
+ ${0} $(find_expired 0)
exit
fi
-codir=`mkcodir`
-cd ${codir}
-
-co_common
+branch="rmport-$(date +%s)"
+${GIT} checkout -b ${branch} remotes/origin/main
+gitlog=$(mktemp -t gitlog)
for catport in $* ; do
# convert to category/port
- catport=`find_catport ${catport}`
- cat=`dirname ${catport}`
- port=`basename ${catport}`
+ catport=$(find_catport ${catport})
+ cat=$(dirname ${catport})
+ port=$(basename ${catport})
# remove any trailing slashes
catport="${cat}/${port}"
- pkgname=`pkgname ${catport}`
+ pkgname=$(pkgname ${catport})
if ! check_dep ${catport} 1 "${*}" ; then
continue
@@ -524,8 +451,6 @@ for catport in $* ; do
continue
fi
- co_port ${cat} ${port}
-
check_LEGAL ${catport} ${pkgname}
# everything seems ok, edit the files
@@ -543,17 +468,18 @@ done
# the diff afterwards
answer=y
while [ "${answer}" = "y" ] ; do
- diffout=$(diff)
-
- ${CDIFF} < ${diffout}
+ ${GIT} diff --staged --irreversible-delete
echo "" >&2
- echo "you can now edit files under ${codir}/ by hand" >&2
- answer=`ask "do you want to recreate the diff?"`
+ echo "you can now edit files by hand" >&2
+ answer=$(ask "do you want to recreate the diff")
+ if [ "${answer}" = "y" ] ; then
+ ${GIT} add LEGAL MOVED
+ fi
done
commit
-cleanup ${diffout} ${codir}
+cleanup
# EOF