`findrev` can be used to automatically determine the revision of a
package by checking the latest Git commit of a package folder. In case
not Git informtion is available the folder timestamp is used.

This function is migrated from `luci.git` where it is used for all
package versions. As openwrt.git does not contain any PO files, the
special case for PO files is inverted, not requiring an extra parameter
per default.

The newly added function can be used for packages that do not follow a
traditional versioning schema, most prominent case `base-files` which
requires tedious `PKG_RELEASE` bumps.

Below a naming example:

        base-files_21.001.85028-0f68971_x86_64.ipk

The `luci.mk` implementation prefixes the version with `git-` which was
removed as the information is redundant to the attached `revision` behind
the timestamp. The `revision` is missing if no Git information was found.

CC: Jo-Philipp Wich <j...@mein.io>

Signed-off-by: Paul Spooren <m...@aparcar.org>
---
 rules.mk | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/rules.mk b/rules.mk
index f79340b124..dcefd92761 100644
--- a/rules.mk
+++ b/rules.mk
@@ -408,6 +408,30 @@ endef
 # file extension
 ext=$(word $(words $(subst ., ,$(1))),$(subst ., ,$(1)))
 
+define findrev
+       $(shell \
+               if git log -1 >/dev/null 2>/dev/null; then \
+                       set -- $$(git log -1 --format="%ct %h" --abbrev=7 -- 
$(if $(1),po,. ':(exclude)po')); \
+                       if [ -n "$$1" ]; then
+                               secs="$$(($$1 % 86400))"; \
+                               yday="$$(date --utc --date="@$$1" "+%y.%j")"; \
+                               printf '%s.%05d-%s' "$$yday" "$$secs" "$$2"; \
+                       else \
+                               echo "unknown"; \
+                       fi; \
+               else \
+                       ts=$$(find . -type f $(if $(1),,-not) -path './po/*' 
-printf '%T@\n' 2>/dev/null | sort -rn | head -n1 | cut -d. -f1); \
+                       if [ -n "$$ts" ]; then \
+                               secs="$$(($$ts % 86400))"; \
+                               date="$$(date --utc --date="@$$ts" "+%y%m%d")"; 
\
+                               printf '%s.%05d' "$$date" "$$secs"; \
+                       else \
+                               echo "unknown"; \
+                       fi; \
+               fi \
+       )
+endef
+
 all:
 FORCE: ;
 .PHONY: FORCE
-- 
2.29.2


_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to