[dbscripts,4/4] Finish the svn refactor by implementing helper functions to write to the VCS

Message ID 20181008212230.27793-5-eschwartz@archlinux.org
State Accepted, archived
Headers show
Series Refactoring svn calls | expand

Commit Message

Emil Velikov via arch-projects Oct. 8, 2018, 9:22 p.m. UTC
Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
---
 db-functions-svn | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 db-move          | 23 ++++-------------------
 db-remove        |  5 ++---
 3 files changed, 52 insertions(+), 22 deletions(-)

Patch

diff --git a/db-functions-svn b/db-functions-svn
index 9903f55e..f971cd2e 100644
--- a/db-functions-svn
+++ b/db-functions-svn
@@ -58,3 +58,49 @@  find_repo_for_package() {
 
 	printf '%s\n' "${repos[@]%/}"
 }
+
+# Commit changes staged by (successive?) vcs_(re)?move_package runs.
+vcs_commit() {
+	arch_svn commit -q "${WORKDIR}/svn/${pkgbase}" -m "${1}"
+}
+
+# Write to the VCS in order to track a package moving between different pacman
+# repositories.
+vcs_move_package() {
+	local pkgbase=${1}
+	local vcsrepo_from=${WORKDIR}/svn/${pkgbase}/repos/${2}
+	local vcsrepo_to=${WORKDIR}/svn/${pkgbase}/repos/${3}
+
+	if [[ ! -d ${WORKDIR}/svn ]]; then
+		arch_svn checkout -q -N "${SVNREPO}" "${WORKDIR}/svn" >/dev/null
+	fi
+	arch_svn up -q "${WORKDIR}/svn/${pkgbase}" >/dev/null
+
+	if [[ -d ${vcsrepo_to} ]]; then
+		while read -r file; do
+			arch_svn rm -q "${vcsrepo_to}/${file}@"
+		done < <(arch_svn ls "${vcsrepo_to}")
+	else
+		mkdir "${vcsrepo_to}"
+		arch_svn add -q "${vcsrepo_to}"
+	fi
+
+	while read -r file; do
+		arch_svn mv -q -r HEAD "${vcsrepo_from}/${file}@" "${vcsrepo_to}/"
+	done < <(arch_svn ls "${vcsrepo_from}")
+	arch_svn rm --force -q "${vcsrepo_from}"
+}
+
+# Write to the VCS in order to track a package being deleted from a pacman
+# repository.
+vcs_remove_package() {
+	local pkgbase=${1}
+	local vcsrepo=${WORKDIR}/svn/${pkgbase}/repos/${2}
+
+	if [[ ! -d ${WORKDIR}/svn ]]; then
+		arch_svn checkout -q -N "${SVNREPO}" "${WORKDIR}/svn" >/dev/null
+	fi
+
+	arch_svn up -q "${WORKDIR}/svn/${pkgbase}" > /dev/null
+	arch_svn rm --force -q "${vcsrepo}"
+}
diff --git a/db-move b/db-move
index 4867b41f..72aa0b35 100755
--- a/db-move
+++ b/db-move
@@ -58,15 +58,12 @@  for arch in "${ARCHES[@]}"; do
 	declare -a add_pkgs_$arch
 	declare -a remove_pkgs_$arch
 done
-arch_svn checkout -q -N "${SVNREPO}" "${WORKDIR}/svn" >/dev/null
 for pkgbase in "${args[@]:2}"; do
-	arch_svn up -q "${WORKDIR}/svn/${pkgbase}" >/dev/null
 	tag_list=""
 	for pkgarch in "${ARCHES[@]}" 'any'; do
-		svnrepo_from="${WORKDIR}/svn/${pkgbase}/repos/${repo_from}-${pkgarch}"
-		svnrepo_to="${WORKDIR}/svn/${pkgbase}/repos/${repo_to}-${pkgarch}"
+		vcsrepo_from=$(find_repo_for_package "${pkgbase}" "${pkgarch}" "${repo_from}")
 
-		if [[ -f ${svnrepo_from}/PKGBUILD ]]; then
+		if [[ ${vcsrepo_from} = ${repo_from}-${pkgarch} ]]; then
 			if [[ ${pkgarch} = any ]]; then
 				tarches=("${ARCHES[@]}")
 			else
@@ -77,19 +74,7 @@  for pkgbase in "${args[@]:2}"; do
 			    get_full_version; echo "${pkgname[@]}")
 			read -ra pkgnames <<<"$pkgnames"
 
-			if [[ -d ${svnrepo_to} ]]; then
-				for file in $(arch_svn ls "${svnrepo_to}"); do
-					arch_svn rm -q "${svnrepo_to}/$file@"
-				done
-			else
-				mkdir "${svnrepo_to}"
-				arch_svn add -q "${svnrepo_to}"
-			fi
-
-			for file in $(arch_svn ls "${svnrepo_from}"); do
-				arch_svn mv -q -r HEAD "${svnrepo_from}/$file@" "${svnrepo_to}/"
-			done
-			arch_svn rm --force -q "${svnrepo_from}"
+			vcs_move_package "${pkgbase}" "${repo_from}-${pkgarch}" "${repo_to}-${pkgarch}"
 			tag_list+=", $pkgarch"
 
 			for tarch in "${tarches[@]}"; do
@@ -110,7 +95,7 @@  for pkgbase in "${args[@]:2}"; do
 		fi
 	done
 	tag_list="${tag_list#, }"
-	arch_svn commit -q "${WORKDIR}/svn/${pkgbase}" -m "${0##*/}: moved ${pkgbase} from [${repo_from}] to [${repo_to}] (${tag_list})"
+	vcs_commit "${0##*/}: moved ${pkgbase} from [${repo_from}] to [${repo_to}] (${tag_list})"
 done
 
 for tarch in "${ARCHES[@]}"; do
diff --git a/db-remove b/db-remove
index b0a49cf8..a27a9f29 100755
--- a/db-remove
+++ b/db-remove
@@ -34,9 +34,8 @@  for pkgbase in "${pkgbases[@]}"; do
 	msg "Removing %s from [%s]..." "$pkgbase" "$repo"
 
 	if remove_pkgs+=($(source_pkgbuild "${pkgbase}" "repos/${vcsrepo}" && echo ${pkgname[@]})); then
-		arch_svn checkout -q "${SVNREPO}/${pkgbase}" "${WORKDIR}/svn/${pkgbase}" >/dev/null
-		arch_svn rm --force -q "${WORKDIR}/svn/$pkgbase/repos/$vcsrepo"
-		arch_svn commit -q "${WORKDIR}/svn/$pkgbase" -m "${0##*/}: $pkgbase removed by $(id -un)"
+		vcs_remove_package "${pkgbase}" "${vcsrepo}"
+		vcs_commit "${0##*/}: $pkgbase removed by $(id -un)"
 	else
 		warning "%s not found in %s" "$pkgbase" "$vcsrepo"
 		warning "Removing only %s from the repo" "$pkgbase"