From owner-freebsd-current Tue Aug 7 9:36:41 2001 Delivered-To: freebsd-current@freebsd.org Received: from mail.wrs.com (unknown-1-11.windriver.com [147.11.1.11]) by hub.freebsd.org (Postfix) with ESMTP id 2778937B405 for ; Tue, 7 Aug 2001 09:36:35 -0700 (PDT) (envelope-from jhb@FreeBSD.org) Received: from laptop.baldwin.cx (john@[147.11.46.201]) by mail.wrs.com (8.9.3/8.9.1) with ESMTP id JAA08958; Tue, 7 Aug 2001 09:36:01 -0700 (PDT) Message-ID: X-Mailer: XFMail 1.4.0 on FreeBSD X-Priority: 3 (Normal) Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 8bit MIME-Version: 1.0 In-Reply-To: Date: Tue, 07 Aug 2001 09:36:01 -0700 (PDT) From: John Baldwin To: Julian Elischer Subject: p4 diff notes.. Cc: current@FreeBSD.org Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG On 07-Aug-01 Julian Elischer wrote: > > I have pushed the thread pointers down through most of the code > though there are still many many places that assume that there is only one > thread per process. (no multithreading yet, but getting closer..) > > At this stage diffs must be pushing close to 1MB (maybe more) > (I don't know as I don't know yet how to get p4 to generate diffs :-) It's not too hard. I have the smpng and jhb_preemption batches updating diff's on freefall via cron. :) To do a diff of files against files you have checked out, you use 'p4 diff' such as 'p4 diff -du ...' to get a unified diff. Unfortunately, p4's diff format isn't too patch friendly. There is also a 'p4 diff2' which does a diff of files in the depot. p4 diff2 has an undocumented (well, it's documented in 'p4 help undoc') option -u that will produce a unified diff that patch can grok (albeit, it has the full depot path, so you'll have to use -p6 or some such to apply it). If you had a julian_kse branch off of the kse branch you would use 'p4 diff2 -u -b julian_kse' to get a diff of the entire branch. You can use 'p4 diff2 -u -b kse' to get a diff of the kse branch against the head, but unfortunately it does a diff against the head of the -current vendor import rather than against the latest files you last integrated from. To make the diff relative to when you last branched, you can use a revision specification to refer to the state of the -current tree when you last did your integrate. To do this, look up the change number of your last integrate from -current, (right now 448 was your last MFC for example). You then generate a diff between -current as of that change number and the head revision of your branch (see 'p4 help revisions' or the revisions section of the quickstart guide) like so: > p4 diff2 -u -b kse @448 #head However, having to look up the change number for diff's is a minor pain, and makes it harder to automate things (like generating diff's in crontabs). What you can do is create a label that tracks -current and is the last branch point. First, you want to create a label whose View is the same as the files your branch branches from. For example: > p4 branch -o smpng ... Branch: smpng ... View: //depot/vendor/freebsd/sys/... //depot/projects/smpng/sys/... > p4 label -o smpng_base Label: smpng_base ... Description: Label that tracks the smpng branch's 'base', i.e. the last change imported from the FreeBSD current branch. ... View: //depot/vendor/freebsd/sys/... You use 'p4 label' to create a label (set its View, description, etc.) You use 'p4 labelsync' to actually determine what revisions of what files the label applies to. If you created a kse_base label, then you would start off by specifying it as the last change you integrated from (448) like so: > p4 labelsync -l kse_base @448 You can then do diff's like so: > p4 diff2 -u -b kse @kse_base #head Keeping the label up to date is fairly easy. When you want to do an integrate, simply follow these steps: > p4 labelsync -l kse_base #head > p4 integrate -b kse @kse_base > p4 resolve -a > p4 resolve > p4 submit Note that you can update the label of individual files as well if you wish. For example, my last integrate into smpng just brought across a commit to sys/i386/isa/ipl.s rather than updating the entire tree: > p4 integrate -b smpng sys/i386/isa/ipl.s > p4 resolve -a > p4 submit I then updated the label on just that file like so: > p4 labelsync -l smpng_base //depot/vendor/freebsd/sys/i386/isa/ipl.s#head I usually keep my work trees off of the smpng branch up to date with the smpng branch, so I don't have to bother with label's on those. This allows you to get things working on a stable snapshot of current, and later do an integrate to catch up. Note that you could of done the MFC of one file as so: > p4 labelsync -l smpng_base //depot/vendor/freebsd/sys/i386/isa/ipl.s#head > p4 integrate -b smpng @smpng_base > p4 resolve -a > p4 submit HTH. -- John Baldwin -- http://www.FreeBSD.org/~jhb/ PGP Key: http://www.baldwin.cx/~john/pgpkey.asc "Power Users Use the Power to Serve!" - http://www.FreeBSD.org/ To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message