On Mon, May 21, 2018 at 07:22:13PM +0200, Marc Espie wrote:
> > @@ -3434,17 +3434,17 @@ show:
> >  # du fails if it can't access everything
> >  show-size:
> >     @if du -ks ${WRKDIR} 2>/dev/null >${WRKDIR}/wrkdir-size; then \
> > -           cat ${WRKDIR}/wrkdir-size && rm -f ${WRKDIR}/wrkdir-size; \
> > +           cat ${WRKDIR}/wrkdir-size && ${_PBUILD} rm -f 
> > ${WRKDIR}/wrkdir-size; \
> >     else \
> > -           chmod -R u+rX ${WRKDIR}; \
> > +           ${_PBUILD} chmod -R u+rX ${WRKDIR}; \
> >             du -ks ${WRKDIR}; \
> >     fi
> >  
> >  show-fake-size:
> >     @if du -ks ${WRKINST} 2>/dev/null >${WRKINST}/wrkdir-size; then \
> > -           cat ${WRKINST}/wrkdir-size && rm -f ${WRKINST}/wrkdir-size; \
> > +           cat ${WRKINST}/wrkdir-size && ${_PBUILD} rm -f 
> > ${WRKINST}/wrkdir-size; \
> >     else \
> > -           chmod -R u+rX ${WRKINST}; \
> > +           ${_PBUILD} chmod -R u+rX ${WRKINST}; \
> >             du -ks ${WRKINST}; \
> >     fi
> >  
> Those should definitely be done differently... Namely adding a file under
> WRKDIR seems like overkill, stuff could go to a tmp file
> and also it's probably more useful to always go _PBUILD for the du instead of
> chmod'ing.
Here's a diff that just runs `du' as _pbuild which may fail and show
inaccessible files as are.

For bad permissions in WRKDIR, espie (recently) introduced
FIX_EXTRACT_PERMISSIONS[0], which already does

        2505 # run as _pbuild
        2506 _post-extract-finalize:
        ...
        2512 .if ${FIX_EXTRACT_PERMISSIONS:L} == "yes"
        2513 ›       @chmod -R a+rX ${WRKDIR}


and for bad permissions in WRKINST, there's

        2789 ${_FAKE_COOKIE}: ${_BUILD_COOKIE} ${_FAKESUDO_CHECK_COOKIE}
        ...
        2802 .if ${FAKE_AS_ROOT:L} != "yes"
        2803 ›       @${_FAKESUDO} chmod -R a+rX ${WRKINST}


Thus, by the time `show-size' or `show-fake-size' runs,
`_post-extract-finalize' or `${_FAKE_COOKIE}' respectively will have
adjusted permissions already.

Scenarios where permissions change in between running these targets are
not covered, but `show(-fake)-size' is the wrong place to take care of
this anyway imho.

With this in mind, I don't see why we should still bother with stashing
the output and rerunning `du'.

Feedback?

0: https://marc.info/?l=openbsd-ports&m=151266048117858&w=2

Index: bsd.port.mk
===================================================================
RCS file: /cvs/ports/infrastructure/mk/bsd.port.mk,v
retrieving revision 1.1403
diff -u -p -r1.1403 bsd.port.mk
--- bsd.port.mk 21 May 2018 21:26:39 -0000      1.1403
+++ bsd.port.mk 22 May 2018 20:32:11 -0000
@@ -3430,23 +3430,12 @@ show:
        @echo ${${_s}:Q}
 .endfor
 
-# avoid sudo and avoid modifying dir (if possible):
 # du fails if it can't access everything
 show-size:
-       @if du -ks ${WRKDIR} 2>/dev/null >${WRKDIR}/wrkdir-size; then \
-               cat ${WRKDIR}/wrkdir-size && rm -f ${WRKDIR}/wrkdir-size; \
-       else \
-               chmod -R u+rX ${WRKDIR}; \
-               du -ks ${WRKDIR}; \
-       fi
+       @${_PBUILD} du -ks ${WRKDIR}
 
 show-fake-size:
-       @if du -ks ${WRKINST} 2>/dev/null >${WRKINST}/wrkdir-size; then \
-               cat ${WRKINST}/wrkdir-size && rm -f ${WRKINST}/wrkdir-size; \
-       else \
-               chmod -R u+rX ${WRKINST}; \
-               du -ks ${WRKINST}; \
-       fi
+       @${_PBUILD} du -ks ${WRKINST}
 
 verbose-show:
 .for _s in ${verbose-show}

Reply via email to