From owner-freebsd-lite2 Mon Aug 19 04:50:54 1996 Return-Path: owner-lite2 Received: (from root@localhost) by freefall.freebsd.org (8.7.5/8.7.3) id EAA08433 for lite2-outgoing; Mon, 19 Aug 1996 04:50:54 -0700 (PDT) Received: from spinner.DIALix.COM (root@spinner.DIALix.COM [192.203.228.67]) by freefall.freebsd.org (8.7.5/8.7.3) with ESMTP id EAA08428 for ; Mon, 19 Aug 1996 04:50:49 -0700 (PDT) Received: from spinner.DIALix.COM (peter@localhost.DIALix.oz.au [127.0.0.1]) by spinner.DIALix.COM (8.7.5/8.7.3) with ESMTP id TAA03563 for ; Mon, 19 Aug 1996 19:50:44 +0800 (WST) Message-Id: <199608191150.TAA03563@spinner.DIALix.COM> X-Mailer: exmh version 1.6.7 5/3/96 To: lite2@freebsd.org Subject: cvs tree preperation.. Date: Mon, 19 Aug 1996 19:50:44 +0800 From: Peter Wemm Sender: owner-lite2@freebsd.org X-Loop: FreeBSD.org Precedence: bulk This kind of got away from me last time, lets see if we can sort something out and get it going. As for how we do it, we have several choices.. I'll re-list them and add some answers to questions I was asked last time... 1: same as smp tree. -current imported onto vendor branch. This looses -current's commit history, all of -current is in a single revision, and logs cannot be extracted. The lite-2 patches are applied to it, and periodically a new -current is pulled in. Once the conflicts from -current are resolved, a 'cvs diff -c -rCURRENT' will produce a patch that will be able to be applied cleanly to -current. The disadvantages would be that to get deltas/logs between -current versions, you'd have to write a script that takes your $PWD and uses that to extract the info from another tree somewhere. 2: use cvsup to copy the -current tree into /home/lite2's repository, and ADD a side-branch that cvsup will not touch (hopefully). This means the commit logs are available in the working source. However, this has some serious disadvantages, this only works for a short time before it becomes impossible to manage. The basic problem is that from the branch-point onwards, cvs doesn't remember which parts of -current you've merged in. So, if you do a 'cvs update -j HEAD', it will merge -current's changes into the lite2 branch, and you resolve the conflicts. However, if you again, next week do a 'cvs update -jHEAD' you get BOTH weeks changes merged together into the side branch. This means you get all the same conflicts AGAIN, plus new ones. cvs uses rcsmerge, and as this branchpoint-to-current delta gets bigger, the conflicts will get bigger (ie: 50 line conflict markers because of a whitespace change is not fun). 3: like #2, but place explicit markers on the current branch and use those for merging, instead of 'update -j HEAD', we import -current, do a 'cvs rtag MERGE1', and on the lite2 branch, we do a 'cvs update -jMERGE1'. Next time we sync with -current, we add 'cvs rtag MERGE2' and do a 'cvs update -jMERGE1 -jMERGE2'. That way we wont get super-conflicts and the same conflicts over and over again. I'm not sure how it would go in practice, I've never tried it befor. If somebody branches -current with the same $Id$ as the Lite2 branch is on, we're sunk. 4: Give p3 a shot (http://www.p3.com). P3 is designed to do this sort of merging, but it's quite different to cvs and will take a lot of re-learning. It isn't quite as flexible with diffing, but it can be done. It can do delta-by-delta merging, rather than simply merging the lot and fixing up the mess. However, what we gained from the better branch support we'd probably loose in re-learning time.... My thoughts are that #1 is preferable from a "known quantity" perspective, but #3 is probably more practical but at a risk of using a new tool (ie: using cvsup to generate the repository on freefall, from freefall). Doug? Jeff? -Peter