[Buildroot] [PATCH] core/pkg-infra: restore completeness of packages files lists

Peter Korsgaard peter at korsgaard.com
Fri Feb 8 08:35:20 UTC 2019


>>>>> "Yann" == Yann E MORIN <yann.morin.1998 at free.fr> writes:

 > In commit 7fb6e782542f (core/instrumentation: shave minutes off the
 > build time), the built stampfile is used as a reference to detect files
 > installed by a package.

 > However, packages may install files keeping their mtime intact, and we
 > end up not detecting this. For example, the internal skeleton package
 > will install (e.g.) /etc/passwd with an mtime of when the file was
 > created in $(TOP_DIR), which could be the time the git repository was
 > checked out; that mtime is always older than the build stamp file, so
 > files installed by the skeleton package are never accounted for to that
 > package, or to any other package for that matters.

 > We switch to an alternate solution, which consists of storing some extra
 > metadata per file, so that we can more reasily detect modifications to
 > the files. Then we compare the state before the package is installed (by
 > reusing the existing list) and after the package is installed, compare
 > that to list any new file or modified files (in reality, ignoring
 > untouched and removed files). Finally, we store the file->package
 > association in the global list and store the new stat list as the global
 > list.

 > Signed-off-by: "Yann E. MORIN" <yann.morin.1998 at free.fr>
 > Cc: Peter Korsgaard <peter at korsgaard.com>
 > Cc: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
 > Cc: Arnout Vandecappelle <arnout at mind.be>
 > Cc: Thomas De Schampheleire <patrickdepinguin at gmail.com>
 > Cc: Trent Piepho <tpiepho at impinj.com>
 > ---
 >  package/pkg-generic.mk | 13 ++++++++++---
 >  1 file changed, 10 insertions(+), 3 deletions(-)

 > diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
 > index f5cab2b9c2..c07cb32349 100644
 > --- a/package/pkg-generic.mk
 > +++ b/package/pkg-generic.mk
 > @@ -63,13 +63,20 @@ GLOBAL_INSTRUMENTATION_HOOKS += step_time
 >  # $(2): base directory to search in
 >  # $(3): suffix of file  (optional)
 >  define step_pkg_size_inner
 > +	@touch $(BUILD_DIR)/packages-file-list$(3).stat

This "stat" file is an internal implementation detail, that I don't
think we should expose to the users (E.G. so we can change it later if
needed), and it doesn't list anything about packages - So I renamed it to:

 $(BUILD_DIR)/.files-list$(3).stat

>  	@touch $(BUILD_DIR)/packages-file-list$(3).txt
 >  	$(SED) '/^$(1),/d' $(BUILD_DIR)/packages-file-list$(3).txt
 >  	cd $(2); \
 > -	find . \( -type f -o -type l \) \
 > -		-newer $($(PKG)_DIR)/.stamp_built \
 > -		-exec printf '$(1),%s\n' {} + \
 > +	LC_ALL=C find . -printf '%T@:%i:%#m:%y:%s,%p\n' \

I re-added the -type f -o -type l as poined out by Thomas.

> +	|LC_ALL=C sort >$($(PKG)_BUILDDIR)/.files-list$(3).stat

Indentation is strange here, so fixed that. I named the new files list
file $(BUILD_DIR)/.files-list$(3).new as it is just a new snapshot and
not specific to a package.

> +	comm -13 $(BUILD_DIR)/packages-file-list$(3).stat \

I added LC_ALL=C as pointed out by Thomas and slightly reformatted this.

 > +		$($(PKG)_BUILDDIR)/.files-list$(3).stat \
 > +		>$($(PKG)_BUILDDIR)/.files-list$(3).new

Calling the diff (E.G. the list of files installed by the package) .new
is a bit odd, so I called it .files-list$(3).txt

Committed with those minor changes, thanks.

-- 
Bye, Peter Korsgaard


More information about the buildroot mailing list