summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLevente Polyak <anthraxx@archlinux.org>2023-06-11 23:31:18 +0200
committerLevente Polyak <anthraxx@archlinux.org>2023-12-19 20:06:26 +0100
commitd00a2b989044fe452792e108a15b6c901a1a1d4c (patch)
tree03206fb052b24ffeadf02251264aade56065d310
parentc2d73d73aec9c21ffdb0677a7e3ef96a42c1ba47 (diff)
downloaddevtools-d00a2b989044fe452792e108a15b6c901a1a1d4c.tar.xz
feat(configure): ship default ignore via exclude
BREAKING CHANGE: Increments the repo spec version which requires to reconfigure all existing packaging repo clones. Fixes #129 Component: pkgctl repo configure Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
-rw-r--r--Makefile8
-rwxr-xr-xconfig/git/template/hooks/applypatch-msg1
-rwxr-xr-xconfig/git/template/hooks/commit-msg1
-rwxr-xr-xconfig/git/template/hooks/post-applypatch1
-rwxr-xr-xconfig/git/template/hooks/post-checkout1
-rwxr-xr-xconfig/git/template/hooks/post-commit1
-rwxr-xr-xconfig/git/template/hooks/post-merge1
-rwxr-xr-xconfig/git/template/hooks/pre-applypatch1
-rwxr-xr-xconfig/git/template/hooks/pre-commit1
-rwxr-xr-xconfig/git/template/hooks/pre-merge-commit1
-rwxr-xr-xconfig/git/template/hooks/pre-push1
-rwxr-xr-xconfig/git/template/hooks/pre-rebase1
-rwxr-xr-xconfig/git/template/hooks/prepare-commit-msg1
-rw-r--r--config/git/template/info/exclude28
-rw-r--r--doc/man/pkgctl-repo-configure.1.asciidoc2
-rw-r--r--src/commitpkg.in6
-rw-r--r--src/lib/common.sh2
-rw-r--r--src/lib/repo/configure.sh25
18 files changed, 80 insertions, 3 deletions
diff --git a/Makefile b/Makefile
index 36f1b9b..afdb602 100644
--- a/Makefile
+++ b/Makefile
@@ -16,6 +16,7 @@ LIBRARY_SRC = $(call rwildcard,src/lib,*.sh)
LIBRARY = $(addprefix $(BUILDDIR)/,$(patsubst src/%,%,$(patsubst %.in,%,$(LIBRARY_SRC))))
MAKEPKG_CONFIGS=$(wildcard config/makepkg/*)
PACMAN_CONFIGS=$(wildcard config/pacman/*)
+GIT_CONFIGS = $(wildcard config/git/*)
SETARCH_ALIASES = $(wildcard config/setarch-aliases.d/*)
MANS = $(addprefix $(BUILDDIR)/,$(patsubst %.asciidoc,%,$(wildcard doc/man/*.asciidoc)))
@@ -97,9 +98,12 @@ $(BUILDDIR)/doc/man/%: doc/man/%.asciidoc doc/asciidoc.conf doc/man/include/foot
@a2x --no-xmllint --asciidoc-opts="-f doc/asciidoc.conf" -d manpage -f manpage --destination-dir=$(BUILDDIR)/doc/man -a pkgdatadir=$(DATADIR) $<
conf:
- @install -d $(BUILDDIR)/makepkg.conf.d $(BUILDDIR)/pacman.conf.d
+ @install -d $(BUILDDIR)/makepkg.conf.d
@cp -a $(MAKEPKG_CONFIGS) $(BUILDDIR)/makepkg.conf.d
+ @install -d $(BUILDDIR)/pacman.conf.d
@cp -a $(PACMAN_CONFIGS) $(BUILDDIR)/pacman.conf.d
+ @install -d $(BUILDDIR)/git.conf.d
+ cp -a $(GIT_CONFIGS) $(BUILDDIR)/git.conf.d
clean:
rm -rf $(BUILDDIR)
@@ -112,6 +116,7 @@ install: all
install -m0755 ${BINPROGS} $(DESTDIR)$(PREFIX)/bin
install -dm0755 $(DESTDIR)$(DATADIR)/lib
cp -ra $(BUILDDIR)/lib/* $(DESTDIR)$(DATADIR)/lib
+ cp -a $(BUILDDIR)/git.conf.d -t $(DESTDIR)$(DATADIR)
for conf in $(notdir $(MAKEPKG_CONFIGS)); do install -Dm0644 $(BUILDDIR)/makepkg.conf.d/$$conf $(DESTDIR)$(DATADIR)/makepkg.conf.d/$${conf##*/}; done
for conf in $(notdir $(PACMAN_CONFIGS)); do install -Dm0644 $(BUILDDIR)/pacman.conf.d/$$conf $(DESTDIR)$(DATADIR)/pacman.conf.d/$${conf##*/}; done
for a in ${SETARCH_ALIASES}; do install -m0644 $$a -t $(DESTDIR)$(DATADIR)/setarch-aliases.d; done
@@ -129,6 +134,7 @@ uninstall:
for f in $(notdir $(BINPROGS)); do rm -f $(DESTDIR)$(PREFIX)/bin/$$f; done
for f in $(notdir $(LIBRARY)); do rm -f $(DESTDIR)$(DATADIR)/lib/$$f; done
rm -rf $(DESTDIR)$(DATADIR)/lib
+ rm -rf $(DESTDIR)$(DATADIR)/git.conf.d
for conf in $(notdir $(MAKEPKG_CONFIGS)); do rm -f $(DESTDIR)$(DATADIR)/makepkg.conf.d/$${conf##*/}; done
for conf in $(notdir $(PACMAN_CONFIGS)); do rm -f $(DESTDIR)$(DATADIR)/pacman.conf.d/$${conf##*/}; done
for f in $(notdir $(SETARCH_ALIASES)); do rm -f $(DESTDIR)$(DATADIR)/setarch-aliases.d/$$f; done
diff --git a/config/git/template/hooks/applypatch-msg b/config/git/template/hooks/applypatch-msg
new file mode 100755
index 0000000..1a24852
--- /dev/null
+++ b/config/git/template/hooks/applypatch-msg
@@ -0,0 +1 @@
+#!/bin/sh
diff --git a/config/git/template/hooks/commit-msg b/config/git/template/hooks/commit-msg
new file mode 100755
index 0000000..1a24852
--- /dev/null
+++ b/config/git/template/hooks/commit-msg
@@ -0,0 +1 @@
+#!/bin/sh
diff --git a/config/git/template/hooks/post-applypatch b/config/git/template/hooks/post-applypatch
new file mode 100755
index 0000000..1a24852
--- /dev/null
+++ b/config/git/template/hooks/post-applypatch
@@ -0,0 +1 @@
+#!/bin/sh
diff --git a/config/git/template/hooks/post-checkout b/config/git/template/hooks/post-checkout
new file mode 100755
index 0000000..1a24852
--- /dev/null
+++ b/config/git/template/hooks/post-checkout
@@ -0,0 +1 @@
+#!/bin/sh
diff --git a/config/git/template/hooks/post-commit b/config/git/template/hooks/post-commit
new file mode 100755
index 0000000..1a24852
--- /dev/null
+++ b/config/git/template/hooks/post-commit
@@ -0,0 +1 @@
+#!/bin/sh
diff --git a/config/git/template/hooks/post-merge b/config/git/template/hooks/post-merge
new file mode 100755
index 0000000..1a24852
--- /dev/null
+++ b/config/git/template/hooks/post-merge
@@ -0,0 +1 @@
+#!/bin/sh
diff --git a/config/git/template/hooks/pre-applypatch b/config/git/template/hooks/pre-applypatch
new file mode 100755
index 0000000..1a24852
--- /dev/null
+++ b/config/git/template/hooks/pre-applypatch
@@ -0,0 +1 @@
+#!/bin/sh
diff --git a/config/git/template/hooks/pre-commit b/config/git/template/hooks/pre-commit
new file mode 100755
index 0000000..1a24852
--- /dev/null
+++ b/config/git/template/hooks/pre-commit
@@ -0,0 +1 @@
+#!/bin/sh
diff --git a/config/git/template/hooks/pre-merge-commit b/config/git/template/hooks/pre-merge-commit
new file mode 100755
index 0000000..1a24852
--- /dev/null
+++ b/config/git/template/hooks/pre-merge-commit
@@ -0,0 +1 @@
+#!/bin/sh
diff --git a/config/git/template/hooks/pre-push b/config/git/template/hooks/pre-push
new file mode 100755
index 0000000..1a24852
--- /dev/null
+++ b/config/git/template/hooks/pre-push
@@ -0,0 +1 @@
+#!/bin/sh
diff --git a/config/git/template/hooks/pre-rebase b/config/git/template/hooks/pre-rebase
new file mode 100755
index 0000000..1a24852
--- /dev/null
+++ b/config/git/template/hooks/pre-rebase
@@ -0,0 +1 @@
+#!/bin/sh
diff --git a/config/git/template/hooks/prepare-commit-msg b/config/git/template/hooks/prepare-commit-msg
new file mode 100755
index 0000000..1a24852
--- /dev/null
+++ b/config/git/template/hooks/prepare-commit-msg
@@ -0,0 +1 @@
+#!/bin/sh
diff --git a/config/git/template/info/exclude b/config/git/template/info/exclude
new file mode 100644
index 0000000..ba46529
--- /dev/null
+++ b/config/git/template/info/exclude
@@ -0,0 +1,28 @@
+/pkg
+/src
+/*/
+!/keys/
+
+/*.log
+/*.tar.*
+/*.tar
+/*.tgz
+/*.zst
+/*.gz
+/*.xz
+/*.bz2
+/*.zip
+/*.xpi
+/*.jar
+/*.whl
+/*.war
+/*.deb
+/*.ttf
+/*.dat
+/*.iso
+/*.asc
+/*.sig
+/*.signature
+/*.sign
+/*.SHA256SUMS
+/*.sha256
diff --git a/doc/man/pkgctl-repo-configure.1.asciidoc b/doc/man/pkgctl-repo-configure.1.asciidoc
index 6bdea93..12d879c 100644
--- a/doc/man/pkgctl-repo-configure.1.asciidoc
+++ b/doc/man/pkgctl-repo-configure.1.asciidoc
@@ -22,6 +22,8 @@ The remote protocol is automatically determined from the author email
address by choosing SSH for all official packager identities and
read-only HTTPS otherwise.
+Git default excludes and hooks are applied to the configured repo.
+
Options
-------
diff --git a/src/commitpkg.in b/src/commitpkg.in
index 6d4b014..016ab22 100644
--- a/src/commitpkg.in
+++ b/src/commitpkg.in
@@ -71,6 +71,12 @@ if ! repo_spec=$(git config --local devtools.version) || [[ ${repo_spec} != "${G
exit 1
fi
+if ! repo_variant=$(git config --local devtools.variant) || [[ ${repo_variant} != canonical ]]; then
+ error "cannot release from a repository with none canonical specs (%s), try:" "${repo_variant:-development}"
+ msg2 'pkgctl repo configure'
+ exit 1
+fi
+
if [[ "$(git symbolic-ref --short HEAD)" != main ]]; then
die 'must be run from the main branch'
fi
diff --git a/src/lib/common.sh b/src/lib/common.sh
index 7589120..82fdd2e 100644
--- a/src/lib/common.sh
+++ b/src/lib/common.sh
@@ -22,7 +22,7 @@ export BUILDTOOLVER=@buildtoolver@
# Set common properties
export PACMAN_KEYRING_DIR=/etc/pacman.d/gnupg
export GITLAB_HOST=gitlab.archlinux.org
-export GIT_REPO_SPEC_VERSION=1
+export GIT_REPO_SPEC_VERSION=2
export GIT_PACKAGING_NAMESPACE=archlinux/packaging/packages
export GIT_PACKAGING_NAMESPACE_ID=11323
export GIT_PACKAGING_URL_SSH="git@${GITLAB_HOST}:${GIT_PACKAGING_NAMESPACE}"
diff --git a/src/lib/repo/configure.sh b/src/lib/repo/configure.sh
index 1ddb1b8..b3c188c 100644
--- a/src/lib/repo/configure.sh
+++ b/src/lib/repo/configure.sh
@@ -17,6 +17,7 @@ source /usr/share/makepkg/util/config.sh
source /usr/share/makepkg/util/message.sh
set -e
+shopt -s nullglob
pkgctl_repo_configure_usage() {
@@ -34,6 +35,8 @@ pkgctl_repo_configure_usage() {
address by choosing SSH for all official packager identities and
read-only HTTPS otherwise.
+ Git default excludes and hooks are applied to the configured repo.
+
OPTIONS
--protocol https Configure remote url to use https
-j, --jobs N Run up to N jobs in parallel (default: $(nproc))
@@ -104,7 +107,7 @@ pkgctl_repo_configure() {
# variables
local -r command=${_DEVTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
- local path realpath pkgbase remote_url project_path
+ local path realpath pkgbase remote_url project_path hook
local PACKAGER GPGKEY packager_name packager_email
while (( $# )); do
@@ -230,7 +233,15 @@ pkgctl_repo_configure() {
git config branch.main.merge refs/heads/main
fi
+ # configure spec version and variant to avoid using development hooks in production
git config devtools.version "${GIT_REPO_SPEC_VERSION}"
+ if [[ ${_DEVTOOLS_LIBRARY_DIR} == /usr/share/devtools ]]; then
+ git config devtools.variant canonical
+ else
+ warning "Configuring with development version of pkgctl, do not use this repo in production"
+ git config devtools.variant development
+ fi
+
git config pull.rebase true
git config branch.autoSetupRebase always
git config branch.main.remote origin
@@ -257,6 +268,18 @@ pkgctl_repo_configure() {
git config user.signingKey "${GPGKEY}"
fi
+ # set default git exclude
+ mkdir -p .git/info
+ ln -sf "${_DEVTOOLS_LIBRARY_DIR}/git.conf.d/template/info/exclude" \
+ .git/info/exclude
+
+ # set default git hooks
+ mkdir -p .git/hooks
+ rm -f .git/hooks/*.sample
+ for hook in "${_DEVTOOLS_LIBRARY_DIR}"/git.conf.d/template/hooks/*; do
+ ln -sf "${hook}" ".git/hooks/$(basename "${hook}")"
+ done
+
if ! git ls-remote origin &>/dev/null; then
warning "configured remote origin may not exist, run:"
msg2 "pkgctl repo create ${pkgbase}"