cvs commit: src ObsoleteFiles.inc

Jeremy Messenger mezz7 at cox.net
Sun Jul 24 18:36:18 GMT 2005


On Sun, 24 Jul 2005 04:45:23 -0500, Maxime Henrion <mux at FreeBSD.org> wrote:

> Jeremy Messenger wrote:
>> On Sat, 23 Jul 2005 20:16:29 -0500, Maxime Henrion <mux at FreeBSD.org>  
>> wrote:
>>
>> >Doug Barton wrote:
>> >>Pawel Worach wrote:
>> >>
>> >>>While you are at it can you add this one too.
>> >>
>> >>Done. Please note for next time that you need to add a comment
>> >>indicating
>> >>why the file was removed. This can easily be found from the CVS logs.
>> >>
>> >>BTW, this is exactly why I don't like this mechanism for cleaning  
>> stale
>> >>files. This list was, as I predicted it would be, quite literally out  
>> of
>> >>date when it was committed. This is with all due respect to the effort
>> >>that
>> >>went into producing it. It's the methodology that I'm opposed to here.
>> >>
>> >>I much prefer the dynamic method suggested by myself, mezz, and others
>> >>which scans the directories and compares the ages of the files to a
>> >>known
>> >>value. This not only has the benefit of not needing a static list to
>> >>support it, but it also has the benefit of alerting you to pieces left
>> >>behind when you (for example) add a NO_FOO knob to your make.conf file
>> >>to
>> >>avoid building part of the world.
>> >>
>> >>I would really like to see us reexamine the thought process behind  
>> this
>> >>before we invest a lot more time into the static method. I think that
>> >>the
>> >>dynamic method will buy us more down the road.
>> >
>> >For what it's worth, I'd love to see a mechanism similar to the
>> >following:
>> >
>> >- We ensure every file installed when doing an installworld gets
>> >  installed through bsd.*.mk.  I thought this was already the case
>> >  but ru@ told me it's not.
>> >
>> >- We can then add some kind of special make target, for instance
>> >  build-files-list that generates a file with all the files going
>> >  to be installed by installworld.
>> >
>> >- At installworld time we install this special file somewhere.
>> >
>> >Then we can easily deduce the obsoloted files by doing a diff.  The
>> >nice thing is that such a system doesn't depend on people keeping
>> >a file up-to-date, and it's safer than the find(1) method because
>>
>> I agree about find(1) isn't right solution, because I still have to  
>> re-run
>> the installworld after I use my script. It's not perfect, but at least  
>> it
>> works for me since around FreeBSD 5.0 to clean up stuff very well.
>>
>> >IIRC, there are corner cases where it doesn't work.  Unless I'm
>> >missing something,
>>
>> Can you point me what's not work? I am insteresting to fix my own script
>> if I don't notice anything that don't work.
>
> There are plenty of cases where a find(1) based mechanism is useless and
> I can think of a few.
>
> If files are installed using the -p flag of install(1), which preserves  
> the modification time (I'm not sure we actually use this flag).

Maybe, it's why I rather to have to re-run the installworld after using  
delete.sh.

> Also, a find -ctime +1 is only useful if the installworld was done
> not long ago; if it's a few days old or more, we'd have to hack the
> script.

Of course, this script is for me mostly...and '-ctime +1' is perfect for  
me. :-)

> We can also imagine
> doing an installworld in the morning, and another in the evening.  Your
> script would fail to find any files to remove, for the same reasons.

Yeah that's right, unless someone tweak it. Not great for someone that do  
a random of update daily.

> In short, such a mechanism is way too fragile in my opinion.  The system
> I'm advocating would have made my life easier in many different
> scenarios, some of which a find(1) based one can't handle.  Imagine you
> do a buildworld, then an installworld, and realised you built the
> profiling libs which you don't need.  With a system similar to what I'm
> suggesting, you can just re-run an installworld with NO_PROFILE=yes and
> by doing a diff between the old installworld generated file and the new
> one, you'll get precisely the list of the profiling libs to remove.

Do anyone know other good trick than use static method or use find(1)?

>> >a find(1)-based mechanism couldn't handle directories either.
>>
>> It can. The '-delete' will remove directory too. Unless, I don't
>> understand what you are trying to say what's not work.
>
> As for directories, I thought their modification time wasn't changed
> even when files were copied into it, is it?

====================================
# ls -l /usr/share/doc/
total 18
drwxr-xr-x   2 root  wheel   512 Jul 22 17:16 IPv6/
drwxr-xr-x   2 root  wheel   512 Jul 22 17:16 atm/
drwxr-xr-x   4 root  wheel   512 Jul 22 17:16 bind9/
drwxr-xr-x   2 root  wheel   512 Jul 22 17:15 ncurses/
drwxr-xr-x   2 root  wheel  2048 Jul 22 17:16 ntp/
drwxr-xr-x   2 root  wheel   512 Jul 22 17:16 papers/
drwxr-xr-x  23 root  wheel   512 Jul 22 17:16 psd/
drwxr-xr-x  13 root  wheel   512 Jul 22 17:16 smm/
drwxr-xr-x  13 root  wheel   512 Jul 22 17:16 usd/
====================================

It seems do it. I personal haven't done any homework for how and when  
directory time will change. Maybe can add something like 'find ${moo}  
-type d -empty -delete' (untest) for an extra check.

Cheers,
Mezz

> Cheers,
> Maxime


-- 
mezz7 at cox.net  -  mezz at FreeBSD.org
FreeBSD GNOME Team
http://www.FreeBSD.org/gnome/  -  gnome at FreeBSD.org


More information about the cvs-src mailing list