tag:blogger.com,1999:blog-2425290326823263574.post1439630464887175129..comments2022-12-04T18:48:06.405-08:00Comments on Krazy Glew's Blog: Back to the future: RCSAndy "Krazy" Glewhttp://www.blogger.com/profile/08442494949914217568noreply@blogger.comBlogger4125tag:blogger.com,1999:blog-2425290326823263574.post-46092755362391739042016-03-30T16:01:53.455-07:002016-03-30T16:01:53.455-07:00A minor but especially annoying annoyance with usi...A minor but especially annoying annoyance with using RCS is that RCS does not use an EDITOR variable.<br /><br />Sure, I can script that - but I don't want to unconditionally write a checkin message, and then learn that it is unnecessary,<br />Andy "Krazy" Glewhttps://www.blogger.com/profile/08442494949914217568noreply@blogger.comtag:blogger.com,1999:blog-2425290326823263574.post-41638905860993567802016-03-30T16:00:09.995-07:002016-03-30T16:00:09.995-07:00In case people think that using RCS means giving u...In case people think that using RCS means giving up DVCS:<br /><br />years ago I wrote "RCS,v-merge", a tool that would take RCS files from cloned, forked, repos, and merge them meaningfully.<br /><br />I gave up on this when git came out. But I may revive it.<br /><br /><br />I used monotone-like hashes to detect common history. I was even able to merge RCS,v files that did not shared an ultimate common ancestor. I.e. I could merge histories in the middle or towards the leaves of the tree, not just at the root.<br /><br /><br />Andy "Krazy" Glewhttps://www.blogger.com/profile/08442494949914217568noreply@blogger.comtag:blogger.com,1999:blog-2425290326823263574.post-19284812373607282782016-03-30T15:56:17.482-07:002016-03-30T15:56:17.482-07:00i.e. in some ways I want a cvs without CVSROOT, an...i.e. in some ways I want a cvs without CVSROOT, and with some degree of dirtectory traversal / ascent to find control info.Andy "Krazy" Glewhttps://www.blogger.com/profile/08442494949914217568noreply@blogger.comtag:blogger.com,1999:blog-2425290326823263574.post-37238156342443768062016-03-30T15:55:13.992-07:002016-03-30T15:55:13.992-07:00Of course, the primary problem with RCS is that it...Of course, the primary problem with RCS is that it is file based. not directory tree based.<br /><br />RCS does allow use of an RCS subdirectory, and that can be a symlink (like CVS).<br /><br />But unlike CVS, if you RCS add a new file in a new subdirectory, it does not automatically create the appropriate RCS file.<br /><br />(And even though CVS may create the appropriate CVS file, under CVSROOT, it is not necessarily the link that you want.)<br /><br /><br /><br />Neither RCS nor CVS ascend the filesystem to find the root of the repo, or a parent CVS.<br /><br /><br /><br />But... these problems can probably be scripted or wrapped.<br /><br /><br /><br />As I said in <><br /><br />one if the main problems in a VCS is mapping workspace files to history objects.<br /><br />It can be done by suffices or prefixes (SCCS s.file.c, RCS file.c,v), e.g. in the same directory.<br /><br />It can be done by "links to history areas", like the CVS or RCS or SCCS directiories.<br /><br />It can be done by substuting parts of pathnames (e.g. CVS's CVSROOT, which also stores metadata)<br /><br />This can be generalized to mapping files using transform rules like regexps (Perforce)<br /><br />You can find the control info and/or repo root by ascending the filesystem, looking fior a filename like .p4config or a directory like .hg/.git/.bzr)<br /><br />It can be in environment variables (gag).<br /><br />Once you have found the control info that describes how the mappings can be done, you can script a lower level thing like RCS.<br /><br /><br /><br /><br /><br />Andy "Krazy" Glewhttps://www.blogger.com/profile/08442494949914217568noreply@blogger.com