lab 99 - catching up with inferno-os
I had fallen way behind in keeping acme-sac code up to date with inferno-os. I tried to correct that this week by merging changes and adding files from inferno-os.
I wrote a script, part of this labs files, to check the differences between inferno-os and acme-sac. I'm hoping by using this script I'll stay up to date with inferno-os as changes are made. The script compares sub-trees, such as the limbo source code hierarchy, the C source code, the manual pages, and the /lib directory. It prints out commands to diff the files or copy the file over.
% inf inferno synchronization: appl show changed limbo files sys show changed C source files man show changed man pages lib show changed /lib files cmd show changed sh scripts below /dis update refresh file tree info for local and remote adiff adiff selected file with inferno-os equivalent diff diff selected file with inferno-os equivalent missing show files missing from local tree added show files added to local tree % inf update % inf sys diff -u /sys/emu/port/win-x11a.c /n/D/inferno-os/emu/port/win-x11a.c cp /n/D/inferno-os/emu/port/win-x11a.c /sys/emu/port/win-x11a.c %
There is a short list of directories I did not synchronize because I know every file has changed; I consider these a fork, though the changes to charon are not dramatic,
/appl/acme/ /appl/charon/ /acme/
There is a list of directories acme-sac has removed from the inferno-os hierarchy:
/FreeBSD/ /libbio/ /utils/ /Hp/ /libdynld/ /appl/alphabet/ /Inferno/ /libkern/ /appl/collab/ /Irix/ /liblogfs/ /appl/demo/ /NetBSD/ /libnandfs/ /appl/ebook/ /OpenBSD/ /libprefab/ /appl/spree/ /Plan9/ /libtk/ /appl/tiny/ /asm/ /tools/ /appl/wm/
And finally there is a sub-tree we need to actually synchronize:
Linux appl/grid lib libkeyring libmp module Nt appl/lib lib9 libmath libsec appl appl/math libdraw libmemdraw include appl/cmd emu libinterp libmemlayer man
After comparing these sub-trees I built a list of files that were intentionally removed and files locally changed. Any file found "missing", where inferno-os added new functionality, was copied over. Files that were not marked as locally changed but nevertheless contained changes were merged, usually overwritten with the latest from inferno-os. There is also a list of files added to acme-sac apart from anything below /acme.
I found it useful to use the side-by-side diff functionality from lab 95. I added some simple interactive merge functionality that worked if you start from the end of the file and stepped backwards through the diffs using a PrevDiff command on the adiff output and calling the command Merge to apply the currently highlighted change. The implementation of this Merge command was pretty simple because it involved just copying the selected text from the source file over to the target. Given acme's filesystem interface this is literally a file copy,
cp /mnt/acme/$b/rdsel /mnt/acme/$a/wrsel
The PrevDiff commands does the work of setting up the selected texts correctly, properly handling the case of added, changed, or deleted text.
The list of files in the changed list should be reduced. Some of these are changes that could be pushed to inferno-os. E.g., diff adds the -u flag, os has changes from rog implementing host file name translation. Some files will need to be continually merged, such as the man page indices.
The list of files and directories removed are mostly just functionality either specific to running inferno as a native os, or the Tk functionality. There shouldn't be anything there people would really miss in an acme-sac environment. Though if there is let me know.