diff --git a/cosmo/Dockerfile b/cosmo/Dockerfile index 7c91e93..2f61dc4 100644 --- a/cosmo/Dockerfile +++ b/cosmo/Dockerfile @@ -127,18 +127,9 @@ RUN . ./env \ ; FROM builder AS distrib -COPY dedupe.awk / +COPY --chmod=0755 --from=localhost/notwa-util /usr/local/bin/dedupe /usr/bin/ RUN --mount=type=tmpfs,target=/tmp : \ && . ./env \ - && dedupe() \ - (: \ - && h=0 && { [ "$1" != --hard ] || shift && h=1 ;} \ - && cd "$1" && shift && D="$1" && shift && t="$(mktemp)" \ - && { [ $# -eq 0 ] || sha256sum >"$t" "$@" ;} \ - && find ! -type d -exec sha256sum {} + >>"$t~" \ - && sort -k2, <"$t~" >>"$t" \ - && awk -v D="$D" -v h="$h" -F' ' -f /dedupe.awk <"$t" \ - ) \ && find o -name '*.sym' -delete \ && dedupe o/third_party/gcc /distrib/gcc/ \ bin/x86_64-linux-musl-gcc \ diff --git a/cosmo/dedupe.awk b/cosmo/dedupe.awk deleted file mode 100644 index e60ec1d..0000000 --- a/cosmo/dedupe.awk +++ /dev/null @@ -1 +0,0 @@ -BEGIN{if(!D){print U;exit 64}E=(Q="'")"\"'\""Q;H=(G=".")(F="/");I=" -- "Q;J="[^/]*/";sub(F"?$",F,D)gsub(Q,E,D)}function C(x){if(X=system(x))exit X}{if((p=$2)==B){print V;exit 65}for(r=z=i=d=B;d!=!i;i++){b=a=p;d=sub("/.*",B,a);sub(J,B,p);if(a==G G)e=!sub(J,B,z);else z=a==G?z:b!=a?z a F:z a;if(e||!i&&!a){print W;exit 65}}P=p=!z?H:z;if((o=O[$1])==p)next;gsub(Q,E,P);M=m=D P;gsub("/[^/]+$",B,M);if(!u[M]++)C("mkdir -p"I M Q);if(o){T=split(o,t,F);S=split(p,s,F);for(i=1;t[i]==s[i];i++);for(j=i;j&2 dedupe "$*" \ + ;} \ +\ + && { : \ + && [ -d /tmp ] \ + || { complain "/tmp must be mounted"; exit 72 ;} \ + ;} \ +\ + && f="$(mktemp)" \ +\ + && { : \ + && [ -s "$f" ] \ + || { : \ + && cat >"$f" <<'EOF' +BEGIN{if(!D){print U;exit 64}E=(Q="'")"\"'\""Q;H=(G=".")(F="/");I=" -- "Q;J="[^/]*/";sub(F"?$",F,D)gsub(Q,E,D)}function C(x){if(X=system(x))exit X}{if((p=$2)==B){print V;exit 65}for(r=z=i=d=B;d!=!i;i++){b=a=p;d=sub("/.*",B,a);sub(J,B,p);if(a==G G)e=!sub(J,B,z);else z=a==G?z:b!=a?z a F:z a;if(e||!i&&!a){print W;exit 65}}P=p=!z?H:z;if((o=O[$1])==p)next;gsub(Q,E,P);M=m=D P;gsub("/[^/]+$",B,M);if(!u[M]++)C("mkdir -p"I M Q);if(o){T=split(o,t,F);S=split(p,s,F);for(i=1;t[i]==s[i];i++);for(j=i;j"$t" "$@" ;} \ + && find ! -type d -exec sha256sum {} + >>"$t~" \ + && sort -k2, <"$t~" >>"$t" \ + && awk -v D="$D" -v h="$h" -F' ' -f "$f" <"$t" \ +;