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 clonehttps://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