On Tue Nov 8 11, Dimitry Andric wrote: > On 2011-11-08 21:49, Alexander Best wrote: > > any reason 'make cleanworld' does > > > > otaku% make cleanworld > > rm -rf /usr/obj/usr/git-freebsd-head/* > > chflags -R 0 /usr/obj/usr/git-freebsd-head > > rm -rf /usr/obj/usr/git-freebsd-head/* > > > > where > > > > otaku% make cleanworld > > chflags -R 0 /usr/obj/usr/git-freebsd-head > > rm -rf /usr/obj/usr/git-freebsd-head/* > > > > should be sufficient? > > The first method is more efficient, because there are usually just a few > files with schg flags set on them (zero even, if you build as a regular > user). > > Suppose you have 30,000 files in /usr/obj, of which 20 have schg flags. > > The first method will unlink 29,980 files, failing on 20 of them. Then > it will change flags on just 20 files, and lastly unlink those 20 files. > Total number of 'operations' is 30,000 + 20 + 20 = 30,040. > > The second method will change flags on all 30,000 files, then unlink all > 30,000 files. Total number of 'operations' is now 30,000 + 30,000 = > 60,000.
maybe the comment in /usr/src/Makefile could be updated to mention the efficiency aspect? right now it only says: # # This 'cleanworld' target is not included in TGTS, because it is not a # recursive target. All of the work for it is done right here. It is # expected that BW_CANONICALOBJDIR == the CANONICALOBJDIR as would be # created by bsd.obj.mk, except that we don't want to .include that file # in this makefile. # # In the following, the first 'rm' in a series will usually remove all # files and directories. If it does not, then there are probably some # files with chflags set, so this unsets them and tries the 'rm' a # second time. There are situations where this target will be cleaning # some directories via more than one method, but that duplication is # needed to correctly handle all the possible situations. Also this # another tought would be to do the following: find -flags +XXX /usr/obj/usr/git-freebsd-head -exec chflags -R 0 {} + rm/obj/usr/git-freebsd-head/* that should only execute chflags(1) on those files with flags set. cheers. alex _______________________________________________ freebsd-toolchain@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-toolchain To unsubscribe, send any mail to "freebsd-toolchain-unsubscr...@freebsd.org"