2023-05-30 08:34:06 +02:00
|
|
|
#!/bin/bash
|
|
|
|
#
|
2023-06-01 02:36:25 +02:00
|
|
|
# Rename an e-smith package as smeserver and change relevant files
|
2023-05-30 08:34:06 +02:00
|
|
|
# $1 = Module name e.g. e-smith-dnscache
|
2023-06-01 02:36:25 +02:00
|
|
|
# $2-$5 can appear in any order and are optional
|
|
|
|
# = Organisation (smeserver or user - defaults to smeserver)
|
|
|
|
# = "local" will use parameters set for local repository else it will use remote
|
|
|
|
# = "force" will automagically delete an existing repo, otherwise it will prompt
|
|
|
|
# = "debug" run in debug mode
|
2023-05-30 08:34:06 +02:00
|
|
|
# This works whether the repo and local files exist of not (it deletes them if necessary)
|
|
|
|
#
|
|
|
|
|
|
|
|
if [[ -z $1 ]] ; then
|
2023-06-01 03:05:10 +02:00
|
|
|
echo "Rename an e-smith package as smeserver and change relevant files"
|
|
|
|
echo "rename-e-smith-pkg.sh <modulename> [<organization> <local> <force> <debug>]"
|
2023-06-02 01:17:03 +02:00
|
|
|
echo "<modulename> = Module/package name (e.g. e-smith-dnscache)"
|
|
|
|
echo " can appear in any order and are optional"
|
|
|
|
echo " - <organisation> (smeserver, smecontribs or user - defaults to smeserver)"
|
|
|
|
echo " - <local> will use parameters set for local repository, else it will use remote"
|
|
|
|
echo " - <force> will automagically delete an existing repo, otherwise it will prompt"
|
|
|
|
echo " - <debug> run in debug mode"
|
2023-06-01 03:05:10 +02:00
|
|
|
exit 0
|
2023-05-30 08:34:06 +02:00
|
|
|
fi
|
|
|
|
|
|
|
|
#
|
|
|
|
# Pull in parameters from a config file ~/.smegit/config
|
|
|
|
#
|
|
|
|
inifilename=$(echo ~)"/.smegit/config"
|
|
|
|
if [ ! -e $inifilename ] ; then
|
|
|
|
# Not here, look at system default
|
|
|
|
if [ ! -e /etc/smegit.ini ] ; then
|
|
|
|
echo "No ini file found $inifiename or /etc/smegit.ini"
|
|
|
|
echo "git-cvs2git.sh <modulename> <organization> [<local>]"
|
|
|
|
exit 1
|
|
|
|
else
|
|
|
|
initfilename="/etc/smegit.ini"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
while read -r line || [[ -n "$line" ]]; do
|
|
|
|
if [[ $line =~ ^\[.*\]$ ]]
|
|
|
|
then
|
|
|
|
section=${line#*[}
|
|
|
|
section=${section%]*}
|
|
|
|
else
|
|
|
|
if [[ $line =~ ^[^#]*= ]]
|
|
|
|
then
|
|
|
|
key=${line%=*}
|
|
|
|
value=${line#*=}
|
|
|
|
declare "${section}_${key}=$value"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
done < "$inifilename"
|
|
|
|
DEBUG=
|
|
|
|
if [ ${smegit_DEBUG} == "true" ] ; then DEBUG=true ; fi
|
|
|
|
if [ $DEBUG ] ; then echo "************found ini file: $inifilename" ; fi
|
|
|
|
|
|
|
|
if [[ $smegit_WORKDIR == ~* ]] ; then
|
|
|
|
# relative to users home dir
|
|
|
|
WORKDIR=$(echo ~)${smegit_WORKDIR:1}
|
|
|
|
else
|
|
|
|
# absolute path
|
|
|
|
WORKDIR=${smegit_WORKDIR}
|
|
|
|
fi
|
|
|
|
|
|
|
|
SOURCEHOST=${remote_GITEAHOST}
|
|
|
|
SOURCEACCESSTOKEN=${remote_GITEAACCESSTOKEN}
|
|
|
|
SOURCEORG="smeserver"
|
|
|
|
TARGETORG=${remote_USER}
|
2023-06-01 01:20:55 +02:00
|
|
|
DELETEIT=
|
|
|
|
for param in $2 $3 $4 $5; do
|
2023-05-30 08:34:06 +02:00
|
|
|
if [ $param ] ; then
|
2023-06-01 01:20:55 +02:00
|
|
|
case $param in
|
|
|
|
local )
|
|
|
|
SOURCEHOST=${local_GITEAHOST}
|
2023-05-30 08:34:06 +02:00
|
|
|
SOURCEACCESSTOKEN=${local_GITEAACCESSTOKEN}
|
2023-06-01 01:20:55 +02:00
|
|
|
TARGETORG=${local_USER} ;;
|
|
|
|
force )
|
2023-06-01 01:41:09 +02:00
|
|
|
DELETEIT=true ;;
|
2023-06-01 01:20:55 +02:00
|
|
|
debug )
|
|
|
|
DEBUG=true ;;
|
|
|
|
* )
|
|
|
|
SOURCEORGORG=$param ;;
|
|
|
|
esac
|
2023-05-30 08:34:06 +02:00
|
|
|
else
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
2023-06-01 01:56:37 +02:00
|
|
|
# Debug settings
|
|
|
|
# Make this null if you want lots of output. Still quite a bit anyway
|
|
|
|
QUIET="--quiet"
|
|
|
|
SILENT="-s"
|
|
|
|
if [ $DEBUG ] ; then
|
|
|
|
QUIET=
|
|
|
|
SILENT="-v"
|
|
|
|
fi
|
|
|
|
# Make this null to get curl to check ssl cert
|
|
|
|
checkSSL="-k"
|
|
|
|
|
2023-05-30 08:34:06 +02:00
|
|
|
#Extract <pkg>
|
|
|
|
SOURCEPKG=$1
|
|
|
|
TARGETPKG=${SOURCEPKG/e-smith/smeserver}
|
|
|
|
|
|
|
|
#Check that source package exists
|
|
|
|
if [ $DEBUG ] ; then echo "Check if $SOURCEORG/$SOURCEPKG is there!" ; fi
|
|
|
|
RESPONSE=$(curl $SILENT -o /dev/null -w "%{http_code}" "$SOURCEHOST/api/v1/repos/$SOURCEORG/$SOURCEPKG")
|
|
|
|
if [ "$RESPONSE" == "200" ]; then
|
|
|
|
if [ $DEBUG ] ; then echo "Repository for $SOURCEORG/$SOURCEPKG exists!" ; fi
|
|
|
|
else
|
|
|
|
echo "************Repository for $SOURCEORG/$SOURCEPKG does not exist on $SOURCEHOST ($RESPONSE)"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
#Check that target package does not exist
|
|
|
|
if [ $DEBUG ] ; then echo "Check if $TARGETORG/$TARGETPKG is there!" ; fi
|
|
|
|
RESPONSE=$(curl $SILENT -o /dev/null -w "%{http_code}" "$SOURCEHOST/api/v1/repos/$TARGETORG/$TARGETPKG")
|
|
|
|
if [ "$RESPONSE" == "200" ]; then
|
2023-06-01 01:56:37 +02:00
|
|
|
if [ $DEBUG ] ; then echo "Repository for $TARGETORG/$TARGETPKG exists!" ; fi
|
2023-06-01 01:41:09 +02:00
|
|
|
if [ -z ${DELETEIT} ] ; then
|
|
|
|
while true; do
|
|
|
|
read -p "Do you wish to delete it and continue?(y/n) " yn
|
|
|
|
case $yn in
|
|
|
|
[Yy]* )
|
2023-06-01 01:20:55 +02:00
|
|
|
DELETEIT=true
|
|
|
|
break ;;
|
2023-06-01 01:41:09 +02:00
|
|
|
[Nn]* )
|
2023-05-30 08:34:06 +02:00
|
|
|
echo "************Abandoning Fork of $SOURCEORG/$SOURCEPKG on $SOURCEHOST ($RESPONSE)"
|
2023-06-01 01:20:55 +02:00
|
|
|
exit 1 ;;
|
2023-06-01 01:41:09 +02:00
|
|
|
* ) echo "Please answer yes or no.";;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
fi
|
2023-06-01 01:20:55 +02:00
|
|
|
if [ $DELETEIT ] ; then
|
2023-06-01 01:41:09 +02:00
|
|
|
if [ $DEBUG ] ; then echo "Deleting $TARGETORG/$TARGETPKG" ; fi
|
2023-06-01 01:20:55 +02:00
|
|
|
RESPONSE=$(curl "$checkSSL" "$SILENT" -X 'DELETE' \
|
|
|
|
"$SOURCEHOST/api/v1/repos/$TARGETORG/$TARGETPKG" \
|
|
|
|
-H 'accept: application/json' \
|
|
|
|
-H "Authorization: token $SOURCEACCESSTOKEN" )
|
|
|
|
fi
|
2023-05-30 08:34:06 +02:00
|
|
|
else
|
|
|
|
if [ $DEBUG ] ; then echo "Repository for $TARGETORG/$TARGETPKG does not exist on $SOURCEHOST" ; fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
#Fork e-smith-<pkg> into users repositories as smeserver-<pkg>
|
|
|
|
# - add bugzilla and wiki references
|
|
|
|
|
2023-05-30 10:08:55 +02:00
|
|
|
if [ $DEBUG ] ; then echo "Forking $SORCEORG/$SOURCEPKG into $TARGETORG/$TARGETPKG!" ; fi
|
2023-05-30 08:34:06 +02:00
|
|
|
RESPONSE=$(curl "$SILENT" "$checkSSL" -X 'POST' \
|
|
|
|
"https://src.koozali.org/api/v1/repos/$SOURCEORG/$SOURCEPKG/forks" \
|
|
|
|
-H 'accept: application/json' \
|
|
|
|
-H 'Content-Type: application/json' \
|
2023-05-30 10:08:55 +02:00
|
|
|
-H "Authorization: token $SOURCEACCESSTOKEN" \
|
2023-05-30 08:34:06 +02:00
|
|
|
-d '{
|
|
|
|
"name": "'"$TARGETPKG"'",
|
|
|
|
"description": "'"SMEServer Koozali developed git repo for $TARGETPKG base"'"
|
|
|
|
}')
|
|
|
|
|
|
|
|
# create a Bugzilla URL
|
|
|
|
PRODUCTBUGZILLA="SME%20Server%2010.X"
|
|
|
|
if [[ "$SOURCEORG" == "smecontribs" ]]; then
|
|
|
|
PRODUCTBUGZILLA="SME%20Contribs"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# find the relevant wiki entry
|
|
|
|
WIKILINK="https://wiki.koozali.org"
|
|
|
|
MEDIAWIKI_SITE="https://wiki.koozali.org/api.php"
|
|
|
|
SEARCH_TERM=${SOURCEPKG/e-smith-/}
|
|
|
|
|
|
|
|
# Call the API to perform the search and store the JSON response in a variable
|
|
|
|
RESPONSE=$(curl -s "$MEDIAWIKI_SITE?action=query&format=json&list=search&srsearch=${SEARCH_TERM}&srprop=size%7Cwordcount%7Ctimestamp%7Csnippet&srlimit=10")
|
|
|
|
|
|
|
|
# Use jq to extract the titles and pageids of the pages that match the search term (case-insensitive)
|
|
|
|
RESULTS=$(echo "$RESPONSE" | jq -r '.query.search[] | select(.title | ascii_downcase | contains("'"${SEARCH_TERM}"'" | ascii_downcase)) | .title, .pageid')
|
|
|
|
|
|
|
|
# Loop through the results and construct the URL for each page
|
|
|
|
URLS=$(while read -r TITLE; do \
|
|
|
|
read -r PAGEID; \
|
|
|
|
URL="https://wiki.koozali.org/${TITLE}"; \
|
|
|
|
URL=$(echo $URL | sed 's/ /_/g'); \
|
|
|
|
echo "<br />${URL}"; \
|
|
|
|
done <<< "${RESULTS}" )
|
|
|
|
# and get the first non french (sorry JP!)
|
|
|
|
WIKILINK=$(while read -r TITLE; do \
|
|
|
|
read -r PAGEID; \
|
|
|
|
URL="https://wiki.koozali.org/${TITLE}"; \
|
|
|
|
URL=$(echo $URL | sed 's/ /_/g'); \
|
|
|
|
if [[ ! "$URL" =~ 'fr' ]] ; then echo "${URL}"; break; fi \
|
|
|
|
done <<< "${RESULTS}" )
|
|
|
|
|
2023-05-30 10:08:55 +02:00
|
|
|
if [ $DEBUG ] ; then echo "Updating Description, Bug and Wiki links" ; fi
|
2023-05-30 08:34:06 +02:00
|
|
|
RESPONSE=$(curl "$SILENT" "$checkSSL" -X 'PATCH' \
|
|
|
|
"$SOURCEHOST/api/v1/repos/$TARGETORG/$TARGETPKG" \
|
|
|
|
-H 'accept: application/json' \
|
|
|
|
-H "Authorization: token $SOURCEACCESSTOKEN" \
|
|
|
|
-H 'Content-Type: application/json' \
|
|
|
|
-d '{
|
2023-05-30 10:08:55 +02:00
|
|
|
"description": "'"SMEServer Koozali developed repo for $TARGETPKG base"'",
|
|
|
|
"has_issues": true,
|
|
|
|
"external_tracker": {
|
2023-05-30 08:34:06 +02:00
|
|
|
"external_tracker_format": "https://bugs.koozali.org/show_bug.cgi?id={index}",
|
|
|
|
"external_tracker_style": "numeric",
|
|
|
|
"external_tracker_url": "'"https://bugs.koozali.org/buglist.cgi?component=$TARGETPKG&product=$PRODUCTBUGZILLA"'"
|
|
|
|
},
|
2023-05-30 10:08:55 +02:00
|
|
|
"has_wiki": true,
|
2023-05-30 08:34:06 +02:00
|
|
|
"external_wiki": {
|
|
|
|
"external_wiki_url": "'"$WIKILINK"'"
|
|
|
|
}
|
|
|
|
}'
|
|
|
|
)
|
|
|
|
|
2023-05-30 10:08:55 +02:00
|
|
|
# Create the local Git repository
|
|
|
|
GITFiles=$WORKDIR/GITFiles/$TARGETORG
|
|
|
|
mkdir -p $GITFiles
|
|
|
|
cd $GITFiles
|
|
|
|
|
|
|
|
# Delete the local first
|
|
|
|
if [ -d "$TARGETPKG" ] ; then
|
2023-05-31 09:01:31 +02:00
|
|
|
if [ $DEBUG ] ; then echo "Deleting local GIT files" ; fi
|
2023-05-30 10:08:55 +02:00
|
|
|
rm -Rf $GITFiles/$TARGETPKG
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Clone the package
|
|
|
|
if [ $DEBUG ] ; then echo "git clone $SOURCEHOST/$TARGETORG/$TARGETPKG.git" ; fi
|
|
|
|
cd $GITFiles
|
2023-06-01 01:41:09 +02:00
|
|
|
git clone "$SOURCEHOST/$TARGETORG/$TARGETPKG.git" $QUIET
|
2023-05-30 10:08:55 +02:00
|
|
|
cd $GITFiles/$TARGETPKG
|
|
|
|
|
2023-05-30 08:34:06 +02:00
|
|
|
#Update README.md
|
|
|
|
# - new name
|
2023-05-31 09:01:31 +02:00
|
|
|
sed -i 's/e-smith/smeserver/g' README.md
|
2023-05-31 10:13:20 +02:00
|
|
|
|
|
|
|
# - Bugzilla link to new name whilst keeping old link for Legacy
|
|
|
|
sed -i '/Show list/p' README.md
|
2023-05-31 10:25:19 +02:00
|
|
|
sed -i "/Show list/{ n; s/Show list of outstanding bugs\:/And a list of outstanding Legacy bugs\: ($SOURCEPKG)/}" README.md
|
2023-05-31 10:13:20 +02:00
|
|
|
sed -i '/Show list/{ n; s/smeserver-/e-smith-/g}' README.md
|
2023-05-31 10:25:19 +02:00
|
|
|
sed -i '/Show list/ s/)/)\\/' README.md
|
2023-05-31 10:13:20 +02:00
|
|
|
|
2023-06-01 01:56:37 +02:00
|
|
|
git add README.md
|
2023-05-30 08:34:06 +02:00
|
|
|
|
|
|
|
#Update Makefile
|
|
|
|
# - NAME := smeserver-<pkg>
|
|
|
|
|
2023-05-31 09:01:31 +02:00
|
|
|
sed -i 's/e-smith/smeserver/g' Makefile
|
2023-06-01 01:56:37 +02:00
|
|
|
git add Makefile
|
2023-05-30 10:08:55 +02:00
|
|
|
|
2023-05-31 09:01:31 +02:00
|
|
|
# spec file
|
2023-05-30 08:34:06 +02:00
|
|
|
#Rename e-smith-<pkg>.spec as smeserver-<pkg>.spec
|
2023-06-01 02:05:15 +02:00
|
|
|
git mv "$SOURCEPKG.spec" "$TARGETPKG.spec"
|
2023-05-30 08:34:06 +02:00
|
|
|
|
|
|
|
#Update smeserver-<pkg>.spec
|
2023-06-01 02:21:54 +02:00
|
|
|
# - change name to smeserver-<pkg>
|
|
|
|
sed -i "/^Summary:/ s/e-smith/smeserver/" "$TARGETPKG.spec"
|
2023-05-31 09:14:29 +02:00
|
|
|
sed -i "s/^%define name.*$SOURCEPKG/%define name $TARGETPKG/" "$TARGETPKG.spec"
|
2023-06-01 02:21:54 +02:00
|
|
|
sed -i "/^%description/{ n; s/e-smith/smeserver/}" "$TARGETPKG.spec"
|
2023-05-31 09:01:31 +02:00
|
|
|
|
|
|
|
# - change all Requires: and BuildRequires: e-smith* to smeserver*
|
|
|
|
sed -i 's/^Requires:.*e-smith/Requires: smeserver/g' "$TARGETPKG.spec"
|
|
|
|
sed -i 's/^BuildRequires:.*e-smith/BuildRequires: smeserver/g' "$TARGETPKG.spec"
|
|
|
|
|
2023-05-30 08:34:06 +02:00
|
|
|
# - add changelog entry (Bugzilla #12359)
|
2023-05-31 09:01:31 +02:00
|
|
|
# Bump the release and add changelog
|
2023-06-01 02:49:18 +02:00
|
|
|
change-log "$TARGETPKG.spec" >/dev/null 2>&1
|
2023-05-31 09:01:31 +02:00
|
|
|
# and edit in the reason and add by whom
|
2023-05-31 09:14:29 +02:00
|
|
|
sed -i "s/fix \[SME: \]/Rename to $TARGETPKG \[SME: 12359\]/" "$TARGETPKG.spec"
|
2023-05-31 13:29:18 +02:00
|
|
|
sed -i 's/ME MYSELF <myemail@koozali.org>/rename-e-smith-pkg.sh by Trevor Batley <trevor@batley.id.au>/' "$TARGETPKG.spec"
|
2023-05-30 08:34:06 +02:00
|
|
|
|
2023-05-31 09:01:31 +02:00
|
|
|
# - add PROVIDES: smeserver-<pkg>
|
|
|
|
sed -i "/%description/i Provides: $SOURCEPKG" "$TARGETPKG.spec"
|
|
|
|
|
|
|
|
# - change Source: to new standard of tar.gz
|
2023-06-01 02:05:15 +02:00
|
|
|
sed -i "/^Source:/ s/tar.xz/tar.gz/" "$TARGETPKG.spec"
|
2023-05-31 09:01:31 +02:00
|
|
|
|
|
|
|
# tell git about the changes
|
2023-06-01 01:56:37 +02:00
|
|
|
git add "$TARGETPKG.spec"
|
2023-05-30 10:08:55 +02:00
|
|
|
|
2023-05-31 09:01:31 +02:00
|
|
|
#Delete archivefilename file if it follows the new standard
|
2023-06-01 02:49:18 +02:00
|
|
|
if [ -e archivefilename ] ; then git rm archivefilename $QUIET ; fi
|
2023-05-31 09:01:31 +02:00
|
|
|
|
2023-05-30 08:34:06 +02:00
|
|
|
#Update createlinks
|
2023-05-31 09:01:31 +02:00
|
|
|
# - if there is an e-smith-<pkg>-update event rename to smeserver-<pkg>-update and add symlink
|
2023-05-30 08:34:06 +02:00
|
|
|
|
2023-06-01 01:41:09 +02:00
|
|
|
git commit -m "rename-e-smith-pkg script (#12359)" $QUIET
|
2023-06-01 13:23:51 +02:00
|
|
|
git push origin &> /dev/null
|
2023-05-30 10:08:55 +02:00
|
|
|
|
2023-05-30 08:34:06 +02:00
|
|
|
#Convert repository to a Regular Repository (rather than fork)
|
2023-06-01 02:50:53 +02:00
|
|
|
#Can't do via API call ATM, so leave a message
|
2023-06-01 02:36:25 +02:00
|
|
|
echo "$SOURCEORG/$SOURCEPKG has been renamed as $TARGETORG/$TARGETPKG"
|
|
|
|
echo "It is still a forked repository, so you need to 'Convert to Regular Repository' in GITEA and then 'Transfer' it to it's final Organisation"
|
|
|
|
exit 0
|