freebsd-nq/contrib/one-true-awk/FREEBSD-upgrade
Warner Losh fd2a4a31d9 awk: document updating
Fill in all the details to the standard process so they are hand in one
place and don't need to be re-remembered or rediscovered for the next
import.

Sponsored by:		Netflix
2021-08-01 11:31:50 -06:00

59 lines
2.3 KiB
Plaintext

Notes on upgrading awk from upstream
FreeBSD imports awk from the one true awk github project. This is the blessed
successor to Brian Kernighan's efforts to maintain awk after he left Lucent.
git@github.com:onetrueawk/awk.git
We also track the bsd-features branch. This is a branch that takes the
traditional one true awk and adds features that the BSD projects have added over
the years that are useful, but not too over the top (like bit functions).
The typical update cycle goes something like:
(1) Create a work tree for the vendor/one-true-awk branch
% cd freebsd-main
% git worktree create ../ota vendor/one-true-awk
(2) Update the onetrueawk github
% cd ../awk
% git pull --rebase
% git branch --show-current
bsd-features
% git show-ref HEAD
f9affa922c5e074990a999d486d4bc823590fd93 refs/remotes/origin/HEAD
(3) Copy that to the vendor branch and push upstream
% rm -rf ../ota/* # trailing /* is important
% cp -a * ../ota
% cd ../ota
% git add *
% git commit -m"Import awk YYYYMMDD hash f9affa922c5e" # 12 places
% git commit --amend
<insert the relevant bits from the FIXES file>
% diff -ur ../awk .
# Sanity check to make sure it looks good. The vendor branch should
# contain the unaltered sources from upstream since it's active
# again (for a while we were importing submitted patches to the
# vendor branch given the long lag with the old upstream, but no more)
% git tag -a -s vendor/one-true-awk/f9affa92 # 8 places
<enter gpg password>
% git push --follow-tags freebsd vendor/one-true-awk
(4) Merge this into main
% git subtree merge -P contrib/one-true-awk vendor/one-true-awk
# resolve any conflicts and commit
# Be sure to use the same or similar commit message as you did for
# the import. If you import multiple versions before merging to head
# you may need to combine the messages. Also, if there's more than
# a screen of changes, you may want to abstract them down into an
# easy to digest summary.
% cd usr.bin/awk
% sudo make check
# make sure all the tests pass
% cd ../..
# awk is a build tool, so test the builds
% make buildworld / buildkernel for amd64, armv7, i386 and aarch64 (or
make universe/tinderbox if there's a lot of changes).
% git push freebsd
(5) Oops, lost the race to push while testing, the following will rebase things
% git fetch freebsd
% git rebase --rebase-merges -i freebsd/main