~alpine/devel

abuild: use id instead of whoami v1 PROPOSED

Sören Tempel: 5
 abuild: use id instead of whoami
 abuild: there is no man page section 9
 abuild: rewrite hardlink handling when compressing man pages
 abuild: update symlinks before updating hardlinks
 add abuild-fetch to the .gitignore file

 5 files changed, 34 insertions(+), 29 deletions(-)
Export patchset (mbox)
How do I use this?

Copy & paste the following snippet into your terminal to import this patchset into git:

curl -s https://lists.alpinelinux.org/~alpine/devel/patches/990/mbox | git am -3
Learn more about email & git

[alpine-devel] [PATCH 1/5] abuild: use id instead of whoami Export this patch

Furthermore compare the UID instead of the username.
---
 abuild.in | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/abuild.in b/abuild.in
index 38d6efd..697a186 100644
--- a/abuild.in
+++ b/abuild.in
@@ -2144,7 +2144,7 @@ done
shift $(( $OPTIND - 1 ))

# check so we are not root
if [ "$(whoami)" = "root" ] && [ -z "$FAKEROOTKEY" ]; then
if [ $(id -u) -eq 0 ] && [ -z "$FAKEROOTKEY" ]; then
	[ -z "$forceroot" ] && die "Do not run abuild as root"
	FAKEROOT=
fi
-- 
2.6.3



---
Unsubscribe:  alpine-devel+unsubscribe@lists.alpinelinux.org
Help:         alpine-devel+help@lists.alpinelinux.org
---

[alpine-devel] [PATCH 2/5] abuild: there is no man page section 9 Export this patch

---
 abuild.in | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/abuild.in b/abuild.in
index 697a186..4c45504 100644
--- a/abuild.in
+++ b/abuild.in
@@ -591,7 +591,7 @@ postcheck() {
			warning "Found /usr/share/man but package name doesn't end with -doc"
		fi
		# check for uncompressed man pages
		i=$(find "$dir"/usr/share/man -name '*.[0-9]' -type f | sed "s|^$dir|\t|")
		i=$(find "$dir"/usr/share/man -name '*.[0-8]' -type f | sed "s|^$dir|\t|")
		if [ -n "$i" ]; then
			error "Found uncompressed man pages:"
			echo "$i"
@@ -1405,7 +1405,7 @@ default_doc() {
	# compress man pages
	local previnode= prevname=  mandir="$subpkgdir"/usr/share/man
	[ -d "$mandir" ] && find "$subpkgdir"/usr/share/man \
		-type f \( -name \*.[0-9n] -o -name \*.[0-9][a-z]* \) \
		-type f \( -name \*.[0-8n] -o -name \*.[0-8][a-z]* \) \
		-exec stat -c "%i %n" {} \; | sort -n \
		| while read inode name; do

@@ -1421,7 +1421,7 @@ default_doc() {
		prevname="$name"
	done
	[ -d "$mandir" ] && find "$subpkgdir"/usr/share/man \
		-type l \( -name \*.[0-9n] -o -name \*.[0-9][a-z]* \) \
		-type l \( -name \*.[0-8n] -o -name \*.[0-8][a-z]* \) \
		| while read symlink; do

		ln -s $(readlink $symlink).gz "$symlink".gz
-- 
2.6.3



---
Unsubscribe:  alpine-devel+unsubscribe@lists.alpinelinux.org
Help:         alpine-devel+help@lists.alpinelinux.org
---

[alpine-devel] [PATCH 3/5] abuild: rewrite hardlink handling when compressing man pages Export this patch

The problem is that gzip refuses to run if it detects that a file has
more than 1 link. Our existing solution (removing hardlinks, compressing
the man page and recreating the hardlinks) made certain assumptions
about inode order that are only given on Unix v7 like filesystems
meaning it didn't work properly on 'tree-based' filesystems like BTRFS
or ZFS.

This patch has a different more bulletproof approach: It simply replaces
all hardlinks with symlinks. This is way easier because symlinks (unlike
hardlinks) can point to a file that doesn't exist, therefore we can
update all links before compressing the file in an easy way.
---
 abuild.in | 40 ++++++++++++++++++++++------------------
 1 file changed, 22 insertions(+), 18 deletions(-)

diff --git a/abuild.in b/abuild.in
index 4c45504..26b7982 100644
--- a/abuild.in
+++ b/abuild.in
@@ -1403,29 +1403,33 @@ default_doc() {
	done

	# compress man pages
	local previnode= prevname=  mandir="$subpkgdir"/usr/share/man
	[ -d "$mandir" ] && find "$subpkgdir"/usr/share/man \
		-type f \( -name \*.[0-8n] -o -name \*.[0-8][a-z]* \) \
		-exec stat -c "%i %n" {} \; | sort -n \
		| while read inode name; do

		if [ "$inode" = "$previnode" ]; then
			# update hard link
			rm "$name"
			ln "$prevname".gz "$name".gz
		else
			gzip -9 "$name"
		fi
	local mandir="$subpkgdir"/usr/share/man
	[ -d "$mandir" ] && find "$mandir" -type f \
		-a \( -name \*.[0-8n] -o -name \*.[0-8][a-z]* \) \
		-exec stat -c "%i %n" \{\} \; | while read inode name; do

		# Skip hardlinks removed in last iteration.
		[ -f "$name" ] || continue

		local islink=0
		find "$mandir" -type f -links +1 \
			-a \( -name \*.[0-8n] -o -name \*.[0-8][a-z]* \) \
			-exec stat -c "%i %n" \{\} \; | while read linode lname; do
			if [ "$linode" = "$inode" -a "$lname" != "$name" ]; then
				islink=1
				rm -f "$lname"
				ln -s "${name##*/}".gz "$lname".gz
			fi
		done

		previnode="$inode"
		prevname="$name"
		[ $islink -eq 0 ] && gzip -9 "$name"
	done
	[ -d "$mandir" ] && find "$subpkgdir"/usr/share/man \
		-type l \( -name \*.[0-8n] -o -name \*.[0-8][a-z]* \) \
	[ -d "$mandir" ] && find "$mandir" -type l \
		-a \( -name \*.[0-8n] -o -name \*.[0-8][a-z]* \) \
		| while read symlink; do

		ln -s $(readlink $symlink).gz "$symlink".gz
		rm "$symlink"
		rm -f "$symlink"
	done

	rm -f "$subpkgdir/usr/share/info/dir"
-- 
2.6.3



---
Unsubscribe:  alpine-devel+unsubscribe@lists.alpinelinux.org
Help:         alpine-devel+help@lists.alpinelinux.org
---

[alpine-devel] [PATCH 4/5] abuild: update symlinks before updating hardlinks Export this patch

This should be a minimal performance improvement since hardlinks are
replaced with symlinks and should thus already point to the correct
file.
---
 abuild.in | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/abuild.in b/abuild.in
index 26b7982..65b6377 100644
--- a/abuild.in
+++ b/abuild.in
@@ -1404,6 +1404,13 @@ default_doc() {

	# compress man pages
	local mandir="$subpkgdir"/usr/share/man
	[ -d "$mandir" ] && find "$mandir" -type l \
		-a \( -name \*.[0-8n] -o -name \*.[0-8][a-z]* \) \
		| while read symlink; do

		ln -s $(readlink $symlink).gz "$symlink".gz
		rm -f "$symlink"
	done
	[ -d "$mandir" ] && find "$mandir" -type f \
		-a \( -name \*.[0-8n] -o -name \*.[0-8][a-z]* \) \
		-exec stat -c "%i %n" \{\} \; | while read inode name; do
@@ -1424,13 +1431,6 @@ default_doc() {

		[ $islink -eq 0 ] && gzip -9 "$name"
	done
	[ -d "$mandir" ] && find "$mandir" -type l \
		-a \( -name \*.[0-8n] -o -name \*.[0-8][a-z]* \) \
		| while read symlink; do

		ln -s $(readlink $symlink).gz "$symlink".gz
		rm -f "$symlink"
	done

	rm -f "$subpkgdir/usr/share/info/dir"

-- 
2.6.3



---
Unsubscribe:  alpine-devel+unsubscribe@lists.alpinelinux.org
Help:         alpine-devel+help@lists.alpinelinux.org
---

[alpine-devel] [PATCH 5/5] add abuild-fetch to the .gitignore file Export this patch

---
 .gitignore | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.gitignore b/.gitignore
index 9018782..ac669f6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
*.tar.bz2
*.o
abuild
abuild-fetch
abuild-keygen
abuild-sign
abuild-sudo
-- 
2.6.3



---
Unsubscribe:  alpine-devel+unsubscribe@lists.alpinelinux.org
Help:         alpine-devel+help@lists.alpinelinux.org
---