From owner-freebsd-questions@FreeBSD.ORG Sat May 16 23:28:27 2009 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A26031065688 for ; Sat, 16 May 2009 23:28:27 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: from mail2.fluidhosting.com (mx24.fluidhosting.com [204.14.89.7]) by mx1.freebsd.org (Postfix) with ESMTP id 63E2F8FC22 for ; Sat, 16 May 2009 23:28:26 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: (qmail 11472 invoked by uid 399); 16 May 2009 23:01:44 -0000 Received: from localhost (HELO foreign.dougb.net) (dougb@dougbarton.us@127.0.0.1) by localhost with ESMTPAM; 16 May 2009 23:01:44 -0000 X-Originating-IP: 127.0.0.1 X-Sender: dougb@dougbarton.us Message-ID: <4A0F45D7.5010205@FreeBSD.org> Date: Sat, 16 May 2009 16:01:43 -0700 From: Doug Barton Organization: http://www.FreeBSD.org/ User-Agent: Thunderbird 2.0.0.21 (X11/20090423) MIME-Version: 1.0 To: Mel Flynn References: <20090425101042.GA48343@hyperion.scode.org> <20090425122825.2cc0b090@gluon.draftnet> <49F4256C.6090407@isafeelin.org> <200905151659.35618.mel.flynn+fbsd.questions@mailing.thruhere.net> In-Reply-To: <200905151659.35618.mel.flynn+fbsd.questions@mailing.thruhere.net> X-Enigmail-Version: 0.95.7 OpenPGP: id=D5B2F0FB Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: Bruce Cran , Frederique Rijsdijk , Peter Schuller , freebsd-questions@freebsd.org Subject: Re: mergemaster -U overwriting modified files X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 16 May 2009 23:28:28 -0000 -----BEGIN PGP SIGNED MESSAGE----- Hash: RIPEMD160 Mel Flynn wrote: > On Sunday 26 April 2009 11:12:12 Frederique Rijsdijk wrote: >> Bruce Cran wrote: >>> On Sat, 25 Apr 2009 12:10:42 +0200 >>> >>> Peter Schuller wrote: >>>> I recently began testing mergemaster -U since the perpetual "review >>>> diff of file I never touched" grows annoying real quick. >>>> >>>> Unfortunately I recently discovered that it does not seem to do what >>>> you might expect. For example it nuked my mailer.conf on one machine, >>>> and my /etc/namedb/named.conf (!!!) on another machine. >>>> >>>> Is this a bug or intended? What is the intended functionality of -U? >>> I noticed this recently too: after using mergemaster -U without >>> problems for a long time it suddenly went and overwrote named.conf on >>> a recently upgrade of 7-STABLE. >> I've seen this happen as well with named.conf. > > I think I know the cause, not entirely the problem yet, as I just got hit by > this too and right at the point where I upgraded source tree from cvs to svn > so *all* files had different idents. > > Before running mergemaster -iU I checked /var/db/mergemaster.mtree and it was > zero-sized. Why, is not entirely clear, (hence, I don't know the real problem) > but I thought I noticed mergemaster saving mtree database on the pre-world > run. Looking at the code though, this should be impossible, so the more I > think about it, the more I start to doubt. At the time I was thinking why is > mergemaster saving the mtree and that's when I checked it's size. > > Whatever the cause, this is where mergemaster fails: > CHANGED= > if [ -n "${AUTO_UPGRADE}" -a -f "${DESTDIR}${MTREEFILE}" ]; then > for file in `mtree -eq -f ${DESTDIR}${MTREEFILE} -p ${DESTDIR}/ \ > 2>/dev/null | awk '($2 == "changed") {print $1}'`; do > if [ -f "${DESTDIR}/$file" ]; then > CHANGED="${CHANGED} ${DESTDIR}/$file" > fi > done > fi > > Because ${MTREEFILE} is empty, the mtree command will not produce output and > CHANGED will not be populated. For things like this, it would be nice if mtree > supported a 'lint' mode to check syntax, but at the very least could > mergemaster test for -s rather then or in addition to -f? Thank you for your analysis Mel. This problem has come up on other lists as well, and while I don't have an answer for why the mtree file is getting reduced down to zero size (which shouldn't actually be possible) I had pretty much come to the same conclusion as you did that this must be the cause of the problem. I just committed r192230 which changes -f to -s in several places, and also adds some new safety belts to the way that mergemaster creates and uses the list of changed files in the comparison process. I think that these changes will solve the effects of the problem (an empty CHANGED list as a result of an empty mtree file). I also changed a -f to a -s on the routine that saves the new mtree file, so hopefully whatever the bug is that created this problem in the first place will no longer be able to wreak havoc. If you're interested in trying the new version you can just grab the one from HEAD via the cvs or svn interfaces and run it on RELENG_[67] without any problems. hope this helps, Doug - -- This .signature sanitized for your protection -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.11 (FreeBSD) iEYEAREDAAYFAkoPRdcACgkQyIakK9Wy8PvTqACg1Lw8ICzT7XyicSeOA9K+8834 lwYAn3g7bmuM4YeGMDyYYjKYClHvLohb =9JuD -----END PGP SIGNATURE-----