[openwrt/openwrt] build: get_source_date_epoch allow external repos

LEDE Commits lede-commits at lists.infradead.org
Mon Aug 31 06:29:53 EDT 2020


dangole pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/a83b2af47f1796c9bd6d0d49c606391d64538dce

commit a83b2af47f1796c9bd6d0d49c606391d64538dce
Author: Paul Spooren <mail at aparcar.org>
AuthorDate: Sat Aug 15 10:57:01 2020 -1000

    build: get_source_date_epoch allow external repos
    
    The SOURCE_DATE_EPOCH variable is used to make builds reproducible even
    if rebuild at different times. Instead of using the current timestamp,
    the time of the last source change is used.
    
    Created packages are `touch`ed with a specific timestamp so resulting
    packages have the same checksums.
    
    The `get_source_date_epoch.sh` script tries multiple ways (file, git,
    hg) to determine the correct timestamp.
    
    Until now the script would only consider the $TOPDIR instead of package
    specific changes. Resulting in packages with same versions but different
    timestamps, as $TOPDIR (openwrt.git) received changes not affecting
    package versions. This results in warning/erros in `opkg` as the package
    versions stay the same but checksums changed.
    
    This commit adds an optional argument to get the `SOURCE_DATE_EPOCH` of
    a specific path (e.g. package SOURCE) rather than the $TOPDIR. As a
    consequence this allows granular but still reproducible timestamps.
    
    As packages might be distributed over multiple repositories the check
    for `.git/` becomes unfeasible. Instead tell `git` and `hg` to change
    their working directories and automatically traverse the repo folder.
    
    Signed-off-by: Paul Spooren <mail at aparcar.org>
---
 scripts/get_source_date_epoch.sh | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/scripts/get_source_date_epoch.sh b/scripts/get_source_date_epoch.sh
index 8a41eebae7..d122acf385 100755
--- a/scripts/get_source_date_epoch.sh
+++ b/scripts/get_source_date_epoch.sh
@@ -6,21 +6,23 @@ if [ -n "$TOPDIR" ]; then
 	cd "$TOPDIR" || exit 1
 fi
 
+SOURCE="${1:-.}"
+
 try_version() {
-	[ -f version.date ] || return 1
-	SOURCE_DATE_EPOCH="$(cat version.date)"
+	[ -f "$SOURCE/version.date" ] || return 1
+	SOURCE_DATE_EPOCH=$(cat "$SOURCE/version.date")
 	[ -n "$SOURCE_DATE_EPOCH" ]
 }
 
 try_git() {
-	[ -e .git ] || return 1
-	SOURCE_DATE_EPOCH="$(git log -1 --format=format:%ct)"
+	SOURCE_DATE_EPOCH=$(git -C "$SOURCE" log -1 --format=format:%ct \
+		"$SOURCE" 2>/dev/null)
 	[ -n "$SOURCE_DATE_EPOCH" ]
 }
 
 try_hg() {
-	[ -d .hg ] || return 1
-	SOURCE_DATE_EPOCH="$(hg log --template '{date}' -l 1 | cut -d. -f1)"
+	SOURCE_DATE_EPOCH=$(hg --cwd "$SOURCE" log --template '{date}' -l 1 \
+		"$SOURCE" 2>/dev/null | cut -d. -f1)
 	[ -n "$SOURCE_DATE_EPOCH" ]
 }
 



More information about the lede-commits mailing list