aboutsummaryrefslogtreecommitdiff
path: root/website
diff options
context:
space:
mode:
authorKyle Evans <kevans@FreeBSD.org>2026-07-23 16:39:51 +0000
committerKyle Evans <kevans@FreeBSD.org>2026-07-24 00:31:04 +0000
commit9452c6943ef868d8c00962ffe0e34c3a07fec25d (patch)
tree7355d4607d9ce963a90441af7490f816c16135d8 /website
parentb258509548d6a6c957d285923eef0b22f4b79556 (diff)
Diffstat (limited to 'website')
-rwxr-xr-xwebsite/content/en/news/2026-ports-freeze/ports-reset.sh112
1 files changed, 112 insertions, 0 deletions
diff --git a/website/content/en/news/2026-ports-freeze/ports-reset.sh b/website/content/en/news/2026-ports-freeze/ports-reset.sh
new file mode 100755
index 0000000000..6708d62a7a
--- /dev/null
+++ b/website/content/en/news/2026-ports-freeze/ports-reset.sh
@@ -0,0 +1,112 @@
+#!/bin/sh -e
+
+# Note that the hash of this file is recorded in a signed announcement, please
+# do not touch it without due consideration.
+
+cleanup() {
+ rc=$?
+
+ if [ -n "$tmpf" ]; then
+ rm -f "$tmpf"
+ rm -f "$tmpf.import"
+ fi
+
+ exit "$rc"
+}
+
+me=${0##*/}
+tmpf=$(mktemp -t ports-reset)
+trap cleanup EXIT
+
+#
+# REPLACE AS NEEDED:
+#
+# bad1 and bad2 correspond to the following two commits. If your tree or branch
+# has local changes mixed in, confirm and replace the commits with your
+# equivalent:
+#
+# commit bb14266f00bb1bac62900477b93e5a7be984cd2f
+# Date: Mon Jul 20 22:03:39 2026 -0000
+#
+# misc/github-copilot-cli: update 1.0.71 → 1.0.72
+#
+# commit f208eb093cebb71adaec5861c76c8369139289d2
+# Date: Tue Jul 21 05:00:50 2026
+#
+# misc/github-copilot-cli: Remove inadvertently added file
+#
+bad1=bb14266f00bb1bac62900477b93e5a7be984cd2f
+bad2=f208eb093cebb71adaec5861c76c8369139289d2
+dry_run=
+if [ $# -gt 0 ]; then
+ if [ $1 = "-h" ]; then
+ echo "Usage: $me [-h] [-n] [bad_hash1] [bad_hash2]"
+ echo "$me should be invoked while the ports repository to be fixed is the current working directory"
+ echo "bad_hash1 and bad_hash2 must be ordered exactly as they appear in commit history, with bad_hash1 being older"
+ exit 0
+ fi
+ if [ $1 = "-n" ]; then
+ dry_run=echo
+ shift
+ fi
+fi
+if [ $# -gt 0 ]; then
+ bad1="$1"
+ shift
+fi
+if [ $# -gt 0 ]; then
+ bad2="$1"
+ shift
+fi
+
+filter="$bad1|$bad2"
+
+# We use git-fast-export to dump all of the revisions that need to be replayed.
+# We dump one revision before the first bad revision to be dropped because the
+# first revision in the dump is magic to git-fast-export.
+# Note that any commit signatures in the commits to be rewritten will be removed
+# by this operation. This makes it reproducible.
+/usr/local/bin/git fast-export \
+ --show-original-ids \
+ --signed-tags=strip \
+ --reference-excluded-parents \
+ --no-data \
+ --mark-tags \
+ --use-done-feature \
+ ${bad1}~2..HEAD \
+ > "$tmpf"
+
+# Sanity check: did we have the commit in the first place?
+if ! grep -q "original-oid $bad1" "$tmpf"; then
+ 1>&2 echo "This branch does not seem to contain the commit that needs to be pruned."
+ 1>&2 echo "Please refer to the comments in '$0' for adjustments that may need to be made."
+ 1>&2 echo "Bailing out without modifying the current branch."
+ exit 1
+fi
+
+/usr/bin/sed -En '
+/^from :/d
+H
+/^$/!{
+ $!d
+}
+x
+/original-oid ('$filter')/!{
+ s/^\n//
+ p
+}' < "$tmpf" > "$tmpf.import"
+
+if [ -n "$dry_run" ]; then
+ echo Would have issued: /usr/local/bin/git fast-import --force --date-format=raw \< "$tmpf.import"
+ echo "Commits dropped can be inspected in the following somewhat noisy diff:"
+ echo diff -u "$tmpf" "$tmpf.import"
+ trap - EXIT
+else
+ /usr/local/bin/git fast-import --force --date-format=raw < "$tmpf.import"
+ # git-fast-import leaves the contents of the bad commits in the index.
+ # Clean up to avoid accidents.
+ git checkout HEAD .
+
+ # This shouldn't happen, but we'd rather be safe than sorry.
+ echo "Please review your tree for any staged changes that may have been left behind."
+fi