git: 7e866ceb0ef5 - main - Tools/scripts: Add update-rust-port.sh script to simplify Rust port updates

From: Yuri Victorovich <yuri_at_FreeBSD.org>
Date: Wed, 12 Jul 2023 05:22:17 UTC
The branch main has been updated by yuri:

URL: https://cgit.FreeBSD.org/ports/commit/?id=7e866ceb0ef53a7aeaed442890ca2fb1bab4e1e6

commit 7e866ceb0ef53a7aeaed442890ca2fb1bab4e1e6
Author:     Yuri Victorovich <yuri@FreeBSD.org>
AuthorDate: 2023-07-12 05:18:21 +0000
Commit:     Yuri Victorovich <yuri@FreeBSD.org>
CommitDate: 2023-07-12 05:18:21 +0000

    Tools/scripts: Add update-rust-port.sh script to simplify Rust port updates
    
    The command 'update-rust-port.sh <version>', when run in the Rust
    port directory, updates this port to the requested version.
    
    update-rust-port.sh should work in most cases.
---
 Tools/scripts/update-rust-port.sh | 69 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 69 insertions(+)

diff --git a/Tools/scripts/update-rust-port.sh b/Tools/scripts/update-rust-port.sh
new file mode 100755
index 000000000000..7e479f87822a
--- /dev/null
+++ b/Tools/scripts/update-rust-port.sh
@@ -0,0 +1,69 @@
+#!/bin/sh
+#
+# MAINTAINER: yuri@FreeBSD.org
+
+## args
+
+VERSION="$1"
+
+## checks
+
+if [ -z "$VERSION" ]; then
+	echo "Usage: $0 <new-version>"
+	exit 1
+fi
+if ! [ -f Makefile ] || ! [ -f pkg-descr ] || ! grep -q "CARGO_CRATES=" Makefile; then
+	echo "$0 should be run in a Rust-based port directory"
+	exit 1
+fi
+
+## MAIN
+
+# copy Makefile
+cp Makefile Makefile.new
+
+# substitute version
+sed -i '' -E "s/(VERSION=[\t ]*)[0-9.]+/\1${VERSION}/" Makefile.new
+
+# replace CARGO_CRATES with a placeholder
+/usr/bin/awk '
+BEGIN {
+	in_cargo_crates = 0
+}
+/^CARGO_CRATES=.*/ {
+	in_cargo_crates = 1
+	print "#@@@PLACEHOLDER@@@"
+}
+/^\t.*/ {
+	if (in_cargo_crates) {
+		// skip line
+	} else {
+		print $0
+	}
+}
+!/^CARGO_CRATES=.*|^\t.*/ {
+	if (in_cargo_crates) {
+		in_cargo_crates = 0
+	}
+	print $0
+}' < Makefile.new > Makefile.new1 &&
+/bin/mv Makefile.new1 Makefile.new
+
+# update distinfo
+make -f Makefile.new makesum
+
+# replace the placeholder
+while IFS= read -r line; do
+	if [ "$line" = "#@@@PLACEHOLDER@@@" ]; then
+		make -f Makefile.new cargo-crates | grep -v '^='
+	else
+		echo "$line"
+	fi
+done < Makefile.new > Makefile.new1 &&
+mv Makefile.new1 Makefile.new
+
+# move Makefile.new
+mv Makefile.new Makefile
+
+# update distinfo
+make clean makesum