[OE-core] [PATCH 2/6] Reproducible: Refactor: get_source_date_epoch_from_youngest_file()
Douglas Royds
douglas.royds at taitradio.com
Wed Sep 12 01:27:03 UTC 2018
Signed-off-by: Douglas Royds <douglas.royds at taitradio.com>
---
meta/classes/reproducible_build.bbclass | 59 ++++++++++++++-----------
1 file changed, 33 insertions(+), 26 deletions(-)
diff --git a/meta/classes/reproducible_build.bbclass b/meta/classes/reproducible_build.bbclass
index 4e8850fb83..e118cfde01 100644
--- a/meta/classes/reproducible_build.bbclass
+++ b/meta/classes/reproducible_build.bbclass
@@ -49,15 +49,15 @@ do_deploy_source_date_epoch[sstate-plaindirs] = "${SDE_DIR}"
addtask do_deploy_source_date_epoch_setscene
addtask do_deploy_source_date_epoch before do_configure after do_patch
-def get_source_date_epoch_known_files(d, path):
- source_date_epoch = 0
+def get_source_date_epoch_from_known_files(d, path):
+ source_date_epoch = None
known_files = set(["NEWS", "ChangeLog", "Changelog", "CHANGES"])
for file in known_files:
filepath = os.path.join(path,file)
if os.path.isfile(filepath):
mtime = int(os.lstat(filepath).st_mtime)
# There may be more than one "known_file" present, if so, use the youngest one
- if mtime > source_date_epoch:
+ if not source_date_epoch or mtime > source_date_epoch:
source_date_epoch = mtime
return source_date_epoch
@@ -68,8 +68,8 @@ def find_git_folder(path):
if '.git' in dirs:
return root
-def get_source_date_epoch_git(d, path):
- source_date_epoch = 0
+def get_source_date_epoch_from_git(d, path):
+ source_date_epoch = None
if "git://" in d.getVar('SRC_URI'):
gitpath = find_git_folder(d.getVar('WORKDIR'))
if gitpath != None:
@@ -84,24 +84,13 @@ def get_source_date_epoch_git(d, path):
bb.warn("Failed to find a git repository for path:%s" % (path))
return source_date_epoch
-python do_create_source_date_epoch_stamp() {
- path = d.getVar('S')
- if not os.path.isdir(path):
- bb.warn("Unable to determine source_date_epoch! path:%s" % path)
- return
-
- epochfile = d.getVar('SDE_FILE')
- if os.path.isfile(epochfile):
- bb.debug(1, " path: %s reusing __source_date_epoch.txt" % epochfile)
- return
-
- source_date_epoch = get_source_date_epoch_git(d, path)
- if source_date_epoch == 0:
- source_date_epoch = get_source_date_epoch_known_files(d, path)
- if source_date_epoch == 0:
+def get_source_date_epoch_from_youngest_file(d, path):
# Do it the hard way: check all files and find the youngest one...
- filename_dbg = None
- exclude = set(["temp", "license-destdir", "patches", "recipe-sysroot-native", "recipe-sysroot", "pseudo", "build", "image", "sysroot-destdir"])
+ source_date_epoch = None
+ newest_file = None
+ # Just in case S = WORKDIR
+ exclude = set(["build", "image", "license-destdir", "patches", "pseudo",
+ "recipe-sysroot", "recipe-sysroot-native", "sysroot-destdir", "temp"])
for root, dirs, files in os.walk(path, topdown=True):
files = [f for f in files if not f[0] == '.']
dirs[:] = [d for d in dirs if d not in exclude]
@@ -112,13 +101,31 @@ python do_create_source_date_epoch_stamp() {
mtime = int(os.lstat(filename).st_mtime)
except ValueError:
mtime = 0
- if mtime > source_date_epoch:
+ if not source_date_epoch or mtime > source_date_epoch:
source_date_epoch = mtime
- filename_dbg = filename
+ newest_file = filename
+
+ if newest_file != None:
+ bb.debug(1," SOURCE_DATE_EPOCH %d derived from: %s" % (source_date_epoch, newest_file))
+ return source_date_epoch
- if filename_dbg != None:
- bb.debug(1," SOURCE_DATE_EPOCH %d derived from: %s" % (source_date_epoch, filename_dbg))
+python do_create_source_date_epoch_stamp() {
+ path = d.getVar('S')
+ if not os.path.isdir(path):
+ bb.warn("Unable to determine source_date_epoch! path:%s" % path)
+ return
+
+ epochfile = d.getVar('SDE_FILE')
+ if os.path.isfile(epochfile):
+ bb.debug(1, " path: %s reusing __source_date_epoch.txt" % epochfile)
+ return
+ source_date_epoch = (
+ get_source_date_epoch_from_git(d, path) or
+ get_source_date_epoch_from_known_files(d, path) or
+ get_source_date_epoch_from_youngest_file(d, path) or
+ 0 # Last resort
+ )
if source_date_epoch == 0:
# empty folder, not a single file ...
# kernel source do_unpack is special cased
--
2.17.1
More information about the Openembedded-core
mailing list