chattr makes cygport slow

ASSI Stromeko@nexgo.de
Sat Jul 8 14:22:59 GMT 2023


Jon Turney via Cygwin-apps writes:
> So, the idea here is that we try to ensure it's on, at least for the
> working directory.

That IMHO should only be done when the working directory is created, but
not retroactively applied to an existing workdir.

> Skipping it when 'finish' is used isn't right, because then 'finish
> all' wouldn't work as desired.  But yeah, it seems that this is in the
> wrong place.  I'll look into moving it.

Meanwhile I've done this:

--8<---------------cut here---------------start------------->8---
 if [ $OSTYPE = "cygwin" ]
 then
+	[ -n "$(find ${workdir} -maxdepth 0 -empty)" ] &&
 	chattr -fR +C ${workdir} >/dev/null 2>&1 || true
 fi
--8<---------------cut here---------------end--------------->8---

I think it should be moved into a function that can be called before the
prep command, but I haven't actually tried it for a longer time or
checked what tests need changing due to the extra output:

--8<---------------cut here---------------start------------->8---
>From 4be00357be8cb14493413b7c8c80777671c21e5d Mon Sep 17 00:00:00 2001
Subject: [PATCH] cygport.in: move case-sensitivity testing / enabling into
 functions

---
 bin/cygport.in | 46 ++++++++++++++++++++++++++++++----------------
 1 file changed, 30 insertions(+), 16 deletions(-)

diff --git a/bin/cygport.in b/bin/cygport.in
index 02e9b7bf..a6dabc91 100755
--- a/bin/cygport.in
+++ b/bin/cygport.in
@@ -577,25 +577,36 @@ declare -r  pkg_count=${#pkg_name[*]};
 # this requires workdir to be already defined
 mkdir -p ${workdir}
 
-if [ $OSTYPE = "cygwin" ]
-then
-	chattr -fR +C ${workdir} >/dev/null 2>&1 || true
-fi
-
-rm -f ${workdir}/.probe_case_sensitivity
-touch ${workdir}/.PROBE_CASE_SENSITIVITY
-probe=$( [ -f ${workdir}/.probe_case_sensitivity ] && echo "failed" || echo "" )
-rm -f ${workdir}/.PROBE_CASE_SENSITIVITY
-if [ -n "$probe" ]
-then
+__enable_case_sensitivity() {
+    inform "Trying to enable case sensitivity on ${workdir}"
+    if [ $OSTYPE = "cygwin" ]
+    then
+	[ -n "$(find ${workdir} -maxdepth 0 -empty)" ] &&
+	    chattr -fR +C ${workdir} >/dev/null 2>&1 || true
+	__probe_case_sensitivity
+    fi
+}
+
+__probe_case_sensitivity() {
+    mkdir -p ${workdir}
+    rm -f ${workdir}/.probe_case_sensitivity
+    touch ${workdir}/.PROBE_CASE_SENSITIVITY
+    local probe=$( [ -f ${workdir}/.probe_case_sensitivity ] && echo "failed" || echo "" )
+    rm -f ${workdir}/.PROBE_CASE_SENSITIVITY
+    if [ -n "$probe" ]
+    then
 	if defined _CYGPORT_RESTRICT_case_insensitive_
 	then
-		error "Package ${NAME} cannot be built on a case-insensitive filesystem";
+	    error "Package ${NAME} cannot be built on a case-insensitive filesystem";
 	else
-		warning "Building on a case-insensitive filesystem";
+	    warning "Building on a case-insensitive filesystem";
 	fi
-fi
-unset probe
+	false
+    else
+	inform "Building on a case-sensitive filesystem";
+	true
+    fi
+}
 
 # this requires S and B to be already defined
 if ! defined _CYGPORT_RESTRICT_debuginfo_
@@ -638,15 +649,18 @@ while (( arg_n < argc ))
 do
 	case ${argv[${arg_n}]} in
 		downloadall|fetchall|wgetall|getall)
+		        __probe_case_sensitivity || __enable_case_sensitivity;
 			__src_fetch;
 			_status=$?;
 			;;
 		download|fetch|wget|get)
+		        __probe_case_sensitivity || __enable_case_sensitivity;
 			__DL_ONLY_MISSING=1 __src_fetch;
 			_status=$?;
 			;;
 		prepare|unpack|prep)
-			__stage Preparing;
+		        __probe_case_sensitivity || __enable_case_sensitivity;
+		        __stage Preparing;
 			__src_prep;
 			_status=$?;
 			;;
-- 
2.41.0


--8<---------------cut here---------------end--------------->8---

> I think there's possibly something else going wrong if it's taking 5
> minutes, as that seems excessive.

Try it on the gcc build dir…


Regards,
Achim.
-- 
+<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+

Factory and User Sound Singles for Waldorf Q+, Q and microQ:
http://Synth.Stromeko.net/Downloads.html#WaldorfSounds


More information about the Cygwin-apps mailing list