From 79ef4d7c6224c2390b6e5952cae02d31b6b201e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?= Date: Mon, 17 May 2021 22:10:52 +0700 Subject: [PATCH 1/2] shutils: add basic commit lint Warn if: * subject is longer than 50 characters Error if: * any lines are longer than 80 characters * second line is not blank --- common/xbps-src/shutils/lint_commits.sh | 39 +++++++++++++++++++++++++ xbps-src | 8 +++++ 2 files changed, 47 insertions(+) create mode 100755 common/xbps-src/shutils/lint_commits.sh diff --git a/common/xbps-src/shutils/lint_commits.sh b/common/xbps-src/shutils/lint_commits.sh new file mode 100755 index 000000000000..9e5ec3a57ffd --- /dev/null +++ b/common/xbps-src/shutils/lint_commits.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +lint_commits() { + local base="$1" + local status=0 + local cmt + if [ -n "$base" ]; then + base=$("$XBPS_GIT_CMD" rev-parse --verify "$base") || + return + elif base=$("$XBPS_GIT_CMD" rev-parse --verify FETCH_HEAD 2>/dev/null); then + : + elif base=$("$XBPS_GIT_CMD" rev-parse --verify ORIG_HEAD 2>/dev/null); then + : + else + echo base commit not found >&2 + exit 1 + fi + + for cmt in $("$XBPS_GIT_CMD" rev-list --reverse --abbrev-commit "$base"..HEAD) + do + "$XBPS_GIT_CMD" cat-file commit "$cmt" | + awk -vC="$cmt" ' + /^$/ && !msg { msg = 1; next } + !msg { next } + !/ / && (length > 80) { print C ": long line: " $0; exit 1 } + !subject { + if (length > 50) { print C ": subject is a bit long" } + # Below check is too noisy? + # if (!($0 ~ "^New package:" || $0 ~ ".*: update to")) { + # print C ": not new package/update/removal?" + # } + subject = 1; next + } + /^$/ { body = 1; next } + !body { print C ": second line must be blank"; exit 1 } + ' || status=1 + done + return $status +} diff --git a/xbps-src b/xbps-src index c3cd7e5db10b..c5dbac6a90b3 100755 --- a/xbps-src +++ b/xbps-src @@ -141,6 +141,10 @@ update-hash-cache zap Removes a masterdir but preserving ccache, distcc and host directories. +lint-commits [base-commit] + Do basic check on commit made from [base-commit] exclusively. + If [base-commit] omited, FETCH_HEAD or ORIG_HEAD will be used. + Options: -1 If dependencies of target package are missing, fail instead of building them. @@ -964,6 +968,10 @@ case "$XBPS_TARGET" in zap) masterdir_zap ;; + lint-commits) + shift + lint_commits "$@" + ;; *) msg_red "xbps-src: invalid target $XBPS_TARGET.\n" usage && exit 1 From 47f6e987b2dc187f6985f0888af84f5ef1396ae4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?= Date: Mon, 17 May 2021 22:21:09 +0700 Subject: [PATCH 2/2] workflows: enable lint-commits --- .github/workflows/build.yaml | 1 + common/travis/xcommitlint.sh | 15 +++++++++++++++ 2 files changed, 16 insertions(+) create mode 100755 common/travis/xcommitlint.sh diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 1ea1da2e4881..78aae5cb2f9e 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -21,6 +21,7 @@ jobs: - run: common/travis/changed_templates.sh - run: common/travis/fetch-xtools.sh - run: common/travis/xlint.sh + - run: common/travis/xcommitlint.sh # Build changed packages. build: diff --git a/common/travis/xcommitlint.sh b/common/travis/xcommitlint.sh new file mode 100755 index 000000000000..4da7d3070e7a --- /dev/null +++ b/common/travis/xcommitlint.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Copied from xbps-src +readonly REQHOST_UTILS="xbps-install xbps-query xbps-rindex xbps-uhelper + xbps-reconfigure xbps-remove xbps-create xbps-uchroot xbps-uunshare" + +PATH=$PATH:/tmp/fake-xbps +mkdir -p /tmp/fake-xbps + +for req in $REQHOST_UTILS +do + ln -sf /bin/true /tmp/fake-xbps/$req +done + +exec ./xbps-src lint-commits FETCH_HEAD