Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 6 Jun 2003 00:40:54 +0300
From:      Ruslan Ermilov <ru@FreeBSD.org>
To:        Marcel Moolenaar <marcel@xcllnt.net>
Cc:        cvs-all@FreeBSD.org
Subject:   Re: cvs commit: src/release Makefile
Message-ID:  <20030605214054.GD10536@sunbay.com>
In-Reply-To: <20030605210108.GA689@athlon.pn.xcllnt.net>
References:  <200306040517.h545HIY1051372@repoman.freebsd.org> <20030605100007.GA42986@sunbay.com> <20030605170728.GA572@dhcp01.pn.xcllnt.net> <20030605195611.GA2243@sunbay.com> <20030605210108.GA689@athlon.pn.xcllnt.net>

next in thread | previous in thread | raw e-mail | index | archive | help

--p8PhoBjPxaQXD0vg
Content-Type: multipart/mixed; boundary="FEz7ebHBGB6b2e8X"
Content-Disposition: inline


--FEz7ebHBGB6b2e8X
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Thu, Jun 05, 2003 at 02:01:08PM -0700, Marcel Moolenaar wrote:
> On Thu, Jun 05, 2003 at 10:56:11PM +0300, Ruslan Ermilov wrote:
> > > > I think this is not quite right.  Instead, the /tmp/.ports_done
> > > > should be created, similar to /tmp/.world_done, when ports are
> > > > really done.
> > >=20
> > > It is. The wording "complete run" is confusing. I meant a complete
> > > run of the make readmes, not of the release itself.
> > >=20
> > Not quite.  You also create it when NOPORTREADMES is set.
> > Ports (readmes) aren't created in this case.  Er, and I
> > meant /tmp/.readmes_done of course.
>=20
> That's why I called the file .skip_ports. It doesn't mean readmes
> are made, it means that they shouldn't be made (ie skipped). This
> happens when readmes should not be made at all, or when they have
> been made already. I've been more careful than you think :-)
>=20
I noticed you were careful, I did.  But then please don't say
"it is", because I meant what I said, "when ports^Wreadmes are
really done".  ;)

> > > > When NOPORTS or NOPORTREADMES are defined, we should just not be
> > > > doing the relevant parts of "make release".
> > >=20
> > > Which is exactly what happens. By making the different parts of
> > > a release cycle optional by checking for the existence of files,
> > > you can more easily interfere by creating files or removing them.
> > > Files are also a good way to maintain state across make invocations.
> > >=20
> > What bugs me here is that we also (ab)use the /tmp/.skip_ports for
> > remembering "NOPORTS || NOPORTREADMES".
>=20
> It's not abuse, because it's designed for that purpose. Hence, you
> don't like my design. Fair enough. Let me explain how I looked at
> it:
>=20
Mkay, you didn't mention it in the commit log.

> I think ``make release [list of defines]'' should in principle be
> restarted with ``make rerelease [same list of defines]'', where
> [same list of defines] is functional equivalent to [list of defines].
> Exceptions are defines that control how you want the release to be
> restarted (ie -DRELEASENOUPDATE).
>=20
"make rerelease -DRELEASENOUPDATE" is normal, but your test
case was "make release -DNOPORTS" and then "make rerelease
-DRELEASENOUPDATE", which I consider as one of many ways
to foot shoot themselves.  ;)

> Second order functionality such as the ability to skip ports for the
> release but have them made for the rerelease is nice, but given our
> current release process is flawed. Hence, second order functionality.
>=20
Agreed, this is secondary.

> This change was made because 5.1-RC1 for ia64 got severily delayed
> due to having to restart it often (due to instability) and having no
> way (other than defines like NOPORTREADMES or NOPORTS) to skip remaking
> the readmes. Using the defines is highly unwanted because there may
> be consequences for the final output. Whether it would in this case
> is not really important...
>=20
It is clear.  I like the change in principle, just one thing I don't
like in implementation. ;)

> > > > And of course, it
> > > > should be possible to run "make -DNOPORTS release" first, and be
> > > > able to run "make rerelease" later, and get the ports built.
> > >=20
> > > It's not that simple AFAICT. If you follow a release -DNOPORTS -DNODOC
> > > with a rerelease -DRELEASENOUPDATE, you won't have a ports tree
> > > at all so you cannot possibly expect to have all the readmes built.
> > > Your rerelease will probably fail.
> > >=20
> > We could check if /usr/ports/Makefile exists, but this case is
> > a self-foot-shooting IMO.  If you know you didn't check out ports
> > sources with "make release", and expect "make rerelease" to build
> > ports readmes, it should be clear that you don't want
> > -DRELEASENOUPDATE.
>=20
> Again, it's not that simple (unfortunately). One may need to update
> the source tree and at the same time want ports. The point here is
> not that we should allow al this fickleness, but that we have many
> knobs and we have a lot of flexibility and most combinations simply
> don't work if you don't have a FreeBSD Release GURU badge nailed to
> your forehead and know how to circumvent the pitfalls.
>=20
Who said that this should be simple?  ;)

> > I'm actually thinking of getting rid of "rerelease", and instead
> > adding the -DNOCLEAN knob to "make release" to replace it.
>=20
> Good thinking. I don't know how feasible it is, but it's definitely
> something we should consider. Our release process has grown out of
> control in some ways. Fresh solutions are needed...
>=20
Mail me your concerns, I wish to consider them.

> > Yes, this change is needed in either case.  It means: if we update
> > the ports sources, we should be regenerating readmes.  How about
> > this instead (without anti-footshooting measure)?
> >=20
> > %%%
> > Index: Makefile
> > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> > RCS file: /home/ncvs/src/release/Makefile,v
> > retrieving revision 1.782
> > diff -u -r1.782 Makefile
> > --- Makefile	4 Jun 2003 22:24:43 -0000	1.782
> > +++ Makefile	5 Jun 2003 19:34:07 -0000
> > @@ -384,6 +384,7 @@
> >  .if !defined(NOPORTS)
> >  	cd ${CHROOTDIR}/usr/ports && ${CVSPREFIX} cvs -R ${CVSARGS} -q update=
 ${CVSCMDARGS} -P -d
> >  .endif
> > +	rm -f ${CHROOTDIR}/tmp/.readmes_done
> >  .if defined(DOMINIMALDOCPORTS) && ${DOMINIMALDOCPORTS} =3D=3D "YES"
> >  	for i in ${MINIMALDOCPORTS}; do \
> >  		( cd ${CHROOTDIR}/usr/$$i && ${CVSPREFIX} cvs -R ${CVSARGS} -q updat=
e ${CVSCMDARGS} -P -d ) ; \
> > @@ -453,21 +454,20 @@
> >  	echo "	${CROSSMAKE} ${WORLD_FLAGS} -DNOCLEAN buildworld && \\" >> ${C=
HROOTDIR}/mk
> >  	echo "	touch /tmp/.world_done"		>> ${CHROOTDIR}/mk
> >  	echo "fi"				>> ${CHROOTDIR}/mk
> > -	echo "if [ ! -f /tmp/.skip_ports ]; then" >> ${CHROOTDIR}/mk
> > +.if defined(NOPORTS) || defined(NOPORTREADMES)
> > +	echo "if [ ! -f /tmp/.readmes_done ]; then" >> ${CHROOTDIR}/mk
> >  	echo "	echo \">>> make readmes started on \`LC_ALL=3DC TZ=3DGMT date\=
`\"" >> ${CHROOTDIR}/mk
> >  	echo "	cd /usr/ports"			>> ${CHROOTDIR}/mk
> >  	echo "	make ${PORTREADMES_FLAGS} readmes" >> ${CHROOTDIR}/mk
> > -	echo "	touch /tmp/.skip_ports"		>> ${CHROOTDIR}/mk
> > +	echo "	touch /tmp/.readmes_done"	>> ${CHROOTDIR}/mk
> >  	echo "	echo \">>> make readmes finished on \`LC_ALL=3DC TZ=3DGMT date=
\`\"" >> ${CHROOTDIR}/mk
> >  	echo "fi"				>> ${CHROOTDIR}/mk
> > +.endif
> >  	echo "cd /usr/src/release"		>> ${CHROOTDIR}/mk
> >  	echo "make obj"				>> ${CHROOTDIR}/mk
> >  	echo "make \$${_RELTARGET}"		>> ${CHROOTDIR}/mk
> >  	echo "echo \">>> make ${.TARGET} for ${TARGET} finished on \`LC_ALL=
=3DC TZ=3DGMT date\`\"" >> ${CHROOTDIR}/mk
> >  	chmod 755 ${CHROOTDIR}/mk
> > -.if defined(NOPORTS) || defined(NOPORTREADMES)
> > -	touch ${CHROOTDIR}/tmp/.skip_ports
> > -.endif
> >  	# Ensure md.ko is loaded if md(4) is not statically compiled into the=
 kernel
> >  	-mdconfig 2>/dev/null
> >  	env -i /usr/sbin/chroot ${CHROOTDIR} /mk
> > %%%
>=20
> It's not an anti-foot-shooting measure you're removing. It's the
> basic functionality to have all the commands present in
> ${CHROOTDIR}/mk in all cases, even if you don't actually use them.
> It has been suggested before (in the 5.0-R timeframe) that having
> the commands to make the readmes in ${CHROOT}/mk helps to manually
> fiddle with the process. That's why the previous version had=20
>=20
> 	.if defined(NOPORTS) || defined(NOPORTREADMES)
> 		echo "if false; then"		>> ${CHROOTDIR}/mk
> 	.else
> 		echo "if true; then"		>> ${CHROOTDIR}/mk
> 	.endif
>=20
How the "if false; then cd /usr/ports && make readmes" is really
helpful?  How this is better than just "cd /usr/ports && make
readmes" manually?  But okay, I agree we shouldn't be doing
this in general.

> However, this resulted in unnecessary remakes of readmes and was
> changed to the version we have now.
>=20
Clear.

> So: please do not conditionally put the commands in ${CHROOTDIR}/mk.
> Have them unconditionally there, but have them conditionally executed.
>=20
Sure, how is this then (better viewed as the diff to 1.780)?
Feel free to commit it if you like it, I'm going to sleep
now. ;)


Cheers,
--=20
Ruslan Ermilov		Sysadmin and DBA,
ru@sunbay.com		Sunbay Software Ltd,
ru@FreeBSD.org		FreeBSD committer

--FEz7ebHBGB6b2e8X
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename=p

Index: Makefile
===================================================================
RCS file: /home/ncvs/src/release/Makefile,v
retrieving revision 1.782
diff -u -r1.782 Makefile
--- Makefile	4 Jun 2003 22:24:43 -0000	1.782
+++ Makefile	5 Jun 2003 21:36:49 -0000
@@ -384,6 +384,7 @@
 .if !defined(NOPORTS)
 	cd ${CHROOTDIR}/usr/ports && ${CVSPREFIX} cvs -R ${CVSARGS} -q update ${CVSCMDARGS} -P -d
 .endif
+	rm -f ${CHROOTDIR}/tmp/.readmes_done
 .if defined(DOMINIMALDOCPORTS) && ${DOMINIMALDOCPORTS} == "YES"
 	for i in ${MINIMALDOCPORTS}; do \
 		( cd ${CHROOTDIR}/usr/$$i && ${CVSPREFIX} cvs -R ${CVSARGS} -q update ${CVSCMDARGS} -P -d ) ; \
@@ -453,11 +454,15 @@
 	echo "	${CROSSMAKE} ${WORLD_FLAGS} -DNOCLEAN buildworld && \\" >> ${CHROOTDIR}/mk
 	echo "	touch /tmp/.world_done"		>> ${CHROOTDIR}/mk
 	echo "fi"				>> ${CHROOTDIR}/mk
-	echo "if [ ! -f /tmp/.skip_ports ]; then" >> ${CHROOTDIR}/mk
+.if defined(NOPORTS) || defined(NOPORTREADMES)
+	echo "if false; then"			>> ${CHROOTDIR}/mk
+.else
+	echo "if [ ! -f /tmp/.readmes_done ]; then" >> ${CHROOTDIR}/mk
+.endif
 	echo "	echo \">>> make readmes started on \`LC_ALL=C TZ=GMT date\`\"" >> ${CHROOTDIR}/mk
 	echo "	cd /usr/ports"			>> ${CHROOTDIR}/mk
 	echo "	make ${PORTREADMES_FLAGS} readmes" >> ${CHROOTDIR}/mk
-	echo "	touch /tmp/.skip_ports"		>> ${CHROOTDIR}/mk
+	echo "	touch /tmp/.readmes_done"	>> ${CHROOTDIR}/mk
 	echo "	echo \">>> make readmes finished on \`LC_ALL=C TZ=GMT date\`\"" >> ${CHROOTDIR}/mk
 	echo "fi"				>> ${CHROOTDIR}/mk
 	echo "cd /usr/src/release"		>> ${CHROOTDIR}/mk
@@ -465,9 +470,6 @@
 	echo "make \$${_RELTARGET}"		>> ${CHROOTDIR}/mk
 	echo "echo \">>> make ${.TARGET} for ${TARGET} finished on \`LC_ALL=C TZ=GMT date\`\"" >> ${CHROOTDIR}/mk
 	chmod 755 ${CHROOTDIR}/mk
-.if defined(NOPORTS) || defined(NOPORTREADMES)
-	touch ${CHROOTDIR}/tmp/.skip_ports
-.endif
 	# Ensure md.ko is loaded if md(4) is not statically compiled into the kernel
 	-mdconfig 2>/dev/null
 	env -i /usr/sbin/chroot ${CHROOTDIR} /mk

--FEz7ebHBGB6b2e8X--

--p8PhoBjPxaQXD0vg
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (FreeBSD)

iD8DBQE+37jmUkv4P6juNwoRAg6PAJ9Y4I6oDJ6yKL3CKxcZG/y56D6gMQCghBjr
1l5qkBvQ27DhjR0lpAB59GA=
=d2j+
-----END PGP SIGNATURE-----

--p8PhoBjPxaQXD0vg--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030605214054.GD10536>