Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 15 May 2009 16:59:35 +0200
From:      Mel Flynn <mel.flynn+fbsd.questions@mailing.thruhere.net>
To:        freebsd-questions@freebsd.org
Cc:        Bruce Cran <bruce@cran.org.uk>, Frederique Rijsdijk <frederique@isafeelin.org>, Doug Barton <DougB@freebsd.org>, Peter Schuller <peter.schuller@infidyne.com>
Subject:   Re: mergemaster -U overwriting modified files
Message-ID:  <200905151659.35618.mel.flynn%2Bfbsd.questions@mailing.thruhere.net>
In-Reply-To: <49F4256C.6090407@isafeelin.org>
References:  <20090425101042.GA48343@hyperion.scode.org> <20090425122825.2cc0b090@gluon.draftnet> <49F4256C.6090407@isafeelin.org>

next in thread | previous in thread | raw e-mail | index | archive | help
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 <peter.schuller@infidyne.com> 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?

-- 
Mel



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200905151659.35618.mel.flynn%2Bfbsd.questions>