Re: discussion on future removal of empty $FreeBSD$ tags

From: Warner Losh <imp_at_bsdimp.com>
Date: Mon, 02 May 2022 20:09:30 UTC
The current plans are to keep $FreeBSD$ in main until stable/12 is out of
support. no new files will have it added, unless they are to be merged to
stable/12 and are installed / managed by mergemaster.

We'll do a coordinated sweep of the tree removing them after stable/12
drops out of support and we'll do similar commits to stable/13 to reduce as
much as possible any merge conflicts after that point.

stable/13 and newer they are, of course, just noise. mergemaster doesn't
require them to be non-empty, but will skip modified files if they match.
Though it's been a while since I've used mergemaster... It has no
maintainer and only receives emergency fixes when something breaks (and it
usually takes a while for the right people to notice).

Warner

On Mon, May 2, 2022 at 12:25 PM Marek Zarychta <
zarychtam@plan-b.pwste.edu.pl> wrote:

> Dear subscribers,
>
> after one of the recent commits[1] surprisingly we got rid of $FreeBSD$
> from among others, two configuration files: /etc/ssh/ssh_config and
> /etc/ssh/sshd_config. I was told these IDs are going to be deprecated in
> the whole source tree when 12.x branch reaches EoL, what is surprising
> news, at least for me. While indeed empty $FreeBSD$ tags after the
> transition to git became useless, leaving them in config files, still might
> be handy. Please let me explain why.
>
> After the transition to git, a lot of people complained about breakage in
> mergemaster(8). Finally, they were told that this tool is outdated, cannot
> do 3-way merge, has no maintainer, etc. so it's going to be deprecated
> soon. Then appropriate notice was added, the handbook got updated, so
> seemingly everyone was fine with this depreciation. I am not going to bring
> any serious arguments against etcupdate(8), but when providing support on
> IRC, a few cases of foot shooting with this tool had been reported to me
> and the last one happened this year IIRC. Moreover some people, including
> me, just like and are used to old sdiff(1)-way work of mergemaster(8).  So
> soon after the transition to git to overcome this deficiency I wrote for
> myself a git primer helping with quick creation of local repository
> including $FreeBSD$ recreation for mergemaster(8) relying on empty
> $FreeBSD$ tags. I will attach this primer[2] for users here, maybe someone
> (noncommitter) will benefit from this (if it will not get burned with fire
> here earlier).
>
> Please don't get me wrong, I am not fighting with etcupdate(8) which works
> almost flawlessly in unison with freebsd-update(8), but people who follow
> STABLE/CURRENT really do appreciate the existence of mergemaster(8) and
> still use it behind the scenes, including probably members of core@ team.
> I am only asking for leaving these empty $FreeBSD$ IDs in config files.
> This will of course add some burden to committers' work but might be
> beneficial in the future. I am neither committer, nor contributor, but the
> voice from the userbase.
>
> Best regards,
>
> Marek Zarychta
>
> [1] https://cgit.freebsd.org/src/commit/?id=835ee05f
>
> [2]
>
> ########################################################
> #
> # FreeBSD Git src with worktrees and clean/smudge filters
> # for mergemaster(8)
> #
> ########################################################
> # Preparation of the tree
>
> zfs create zroot/usr/src_head
> zfs create zroot/usr/src_13
>
> ########################################################
> # Making src of stable/13 mountable in /usr/src
>
> echo "/usr/src_13 	/usr/src 		nullfs rw,late 0 0" >> /etc/fstab
> mount -al
>
> ########################################################
> # Cloning the repository
>
> cd /usr/src_head
> git clone https://git.freebsd.org/src.git/ ./
>
> ########################################################
> # Adding filters
> # Filters require lang/ruby and lang/perl installed
>
> git config filter.freebsdid.smudge expand_freebsd
> git config filter.freebsdid.clean 'perl -pe "s/\\\$FreeBSD[^\\\$]*\\\$/\\\$FreeBSD\\\$/"'
>
> ########################################################
> # Limiting filters scope
> # In /usr/src_head create file .git/info/attributes with
> # following contents (at least):
>
> ------------cut------------
> cat > .git/info/attributes << EOF
> etc/* 	                filter=freebsdid
> etc/*/*                 filter=freebsdid
> libexec/rc/*            filter=freebsdid
> libexec/rc/rc.d/*       filter=freebsdid
> *.conf                  filter=freebsdid
> dot.??*                 filter=freebsdid
> lib/libc/gen/shells     filter=freebsdid
> lib/libc/net/hosts      filter=freebsdid
> lib/libpam/pam.d/*      filter=freebsdid
> lib/libwrap/hosts.allow filter=freebsdid
> usr.sbin/services_mkdb/services filter=freebsdid
> usr.sbin/bsnmpd/bsnmpd/snmpd.config filter=freebsdid
> usr.sbin/periodic/etc/* filter=freebsdid
> usr.sbin/cron/cron/crontab filter=freebsdid
> crypto/openssh/ssh*_config filter=freebsdid
> EOF
> ------------cut------------
>
> ########################################################
> # Smudge filter setup
> # Create file /usr/local/bin/expand_freebsd with following
> # contents and make it executable.
>
> ------------cut------------
> #!/usr/bin/env ruby
> data = STDIN.read
> last_info = `git log --pretty=format:"%h %ae %ad" -1`
> puts data.gsub('$FreeBSD$', '$FreeBSD: ' + last_info.to_s + '$')
> ------------cut------------
>
> chmod a+x /usr/local/bin/expand_freebsd
>
> ########################################################
> # Adding worktrees
> # Add worktree for stable/13, filters will be applied
>
> git worktree add /usr/src_13 stable/13
>
> # To have IDs in main (HEAD)
> # do checkout of filtered files again
>
> cd /usr/src_head
> rm etc/master.passwd etc/group
> rm libexec/rc/rc.d/*
> git checkout -f -- .
>
> ########################################################
> # To find more files with $FreeBSD tags which might
> # be added to .git/info/attributes file issue command:
>
> find . -type f -a -not -name '*~' | xargs grep -l '$FreeBSD'
>
> --
> Marek Zarychta
>
>