`commitcount` returns the number of commits affecting the current
folder. The newly added function can be used for packages that do not
follow a traditional versioning schema, most prominent `base-files`
which requires tedious `PKG_RELEASE` bumps.

Below a naming example:

        base-files_1399-r15385+75-c5d033a34d_x86_64.ipk

In cases where no Git system is used, a folder timestamp is used in
combination with the hardcoded $(REVISION) variable (set in releases).

        base-files_210107.30634-r1538581-c5d033a34d_x86_64.ipk

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

diff --git a/rules.mk b/rules.mk
index f79340b124..8ccecb89d5 100644
--- a/rules.mk
+++ b/rules.mk
@@ -408,6 +408,28 @@ endef
 # file extension
 ext=$(word $(words $(subst ., ,$(1))),$(subst ., ,$(1)))
 
+define commitcount
+       $(shell \
+               if git log -1 >/dev/null 2>/dev/null; then \
+                       set -- $$(git rev-list --count HEAD .); \
+                       if [ -n "$$1" ]; then
+                               echo "$$1"; \
+                       else \
+                               echo "unknown"; \
+                       fi; \
+               else \
+                       ts=$$(find . -type f -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