From 375bfed4b4e49e6ccd1ece576a2716868b2c7330 Mon Sep 17 00:00:00 2001 From: Ioa1 Date: Mon, 11 Aug 2025 13:37:52 -0400 Subject: [PATCH 01/18] Added support for fifos and sockets (#42) --- Makefile.in | 6 ++- Vagrantfile | 30 +++++++++++++ configure.ac | 28 +++++++----- package.nix | 8 +--- scripts/check_trycase.sh | 2 +- test/all-commit-cases.sh | 93 +++++++++++++++++++++++++++++++++++---- try | 33 +++++++++++--- utils/make-socket | Bin 0 -> 25888 bytes utils/make-socket.c | 42 ++++++++++++++++++ utils/try-commit.c | 19 ++++++++ utils/try-summary.c | 31 +++++++++++++ 11 files changed, 258 insertions(+), 34 deletions(-) create mode 100755 utils/make-socket create mode 100644 utils/make-socket.c diff --git a/Makefile.in b/Makefile.in index 507b32d5..e943c573 100644 --- a/Makefile.in +++ b/Makefile.in @@ -16,13 +16,14 @@ INSTALL=@INSTALL@ DISTDIR=@PACKAGE_TARNAME@-@PACKAGE_VERSION@ DISTTGZ=$(DISTDIR).tgz -TARGETS=$(if $(findstring yes,@enable_utils@),utils/try-summary utils/try-commit) man/try.1.gz +TARGETS=utils/make-socket $(if $(findstring yes,@enable_utils@),utils/try-summary utils/try-commit) man/try.1.gz all: $(TARGETS) install: $(TARGETS) $(INSTALL) -d $(bindir) $(INSTALL) -m 755 try $(bindir) + $(INSTALL) -m 755 utils/make-socket $(bindir) ifeq (@enable_utils@, yes) $(INSTALL) -m 755 utils/try-summary $(bindir) $(INSTALL) -m 755 utils/try-commit $(bindir) @@ -58,6 +59,9 @@ utils/try-summary: utils/ignores.o utils/try-summary.o utils/try-commit: utils/ignores.o utils/try-commit.o $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -g $^ +utils/make-socket: utils/make-socket.o + $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -g $^ + test: try $(if $(findstring yes,@enable_utils@),utils/try-summary utils/try-commit) scripts/run_tests.sh diff --git a/Vagrantfile b/Vagrantfile index 0119e767..e2ce4e22 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -13,9 +13,16 @@ Vagrant.configure("2") do |config| sudo apt-get update sudo apt-get install -y git expect curl attr pandoc gcc make autoconf mergerfs sudo chown -R vagrant:vagrant try + sudo modprobe overlay cd try + + autoconf && ./configure --disable-utils + make + sudo make install scripts/run_tests.sh + sudo make clean + autoconf && ./configure && make sudo make install which try-commit || exit 2 @@ -78,10 +85,15 @@ Vagrant.configure("2") do |config| # This is intentional, if we moved try to lv1 it'd work since itself does not contain a nested mount sudo mv /home/vagrant/try /mnt/lv0 sudo chown -R vagrant:vagrant /mnt/lv0/try + sudo modprobe overlay cd /mnt/lv0/try + autoconf && ./configure --disable-utils && make + sudo make install scripts/run_tests.sh + sudo make clean + autoconf && ./configure && make sudo make install which try-commit || exit 2 @@ -97,6 +109,7 @@ Vagrant.configure("2") do |config| sudo apt-get update sudo apt-get install -y curl attr pandoc gcc make autoconf mergerfs zsh sudo chown -R vagrant:vagrant try + sudo modprobe overlay cd try @@ -149,8 +162,18 @@ Vagrant.configure("2") do |config| wget https://github.com/trapexit/mergerfs/releases/download/2.40.2/mergerfs-2.40.2-1.el9.x86_64.rpm sudo rpm -i mergerfs-2.40.2-1.el9.x86_64.rpm sudo chown -R vagrant:vagrant try + sudo modprobe overlay cd try + + autoconf && ./configure --disable-utils && make + sudo make install + + autoconf && ./configure --disable-utils && make + sudo make install TRY_TOP=$(pwd) scripts/run_tests.sh + + sudo make clean + autoconf && ./configure && make sudo make install which try-commit || exit 2 @@ -167,8 +190,15 @@ Vagrant.configure("2") do |config| wget https://github.com/trapexit/mergerfs/releases/download/2.40.2/mergerfs-2.40.2-1.fc39.x86_64.rpm sudo rpm -i mergerfs-2.40.2-1.fc39.x86_64.rpm sudo chown -R vagrant:vagrant try + sudo modprobe overlay cd try + + autoconf && ./configure --disable-utils && make + sudo make install TRY_TOP=$(pwd) scripts/run_tests.sh + + sudo make clean + autoconf && ./configure && make sudo make install which try-commit || exit 2 diff --git a/configure.ac b/configure.ac index 82841b5a..4d3f1758 100644 --- a/configure.ac +++ b/configure.ac @@ -10,21 +10,27 @@ AC_ARG_ENABLE([utils], [don't compile C utilities for summarizing and committing changes (default is yes)])], [enable_utils=${enableval}], [enable_utils=yes]) + +AC_REQUIRE_AUX_FILE([utils/make-socket.c]) + +# build tools +AC_PROG_CC + +# CFLAGS AND CPPFLAGGS +if test -z "$CFLAGS" +then + AUTO_CFLAGS="-g -Wall -O2" + AUTO_CPPFLAGS="-g -Wall -O2" +else + AUTO_CFLAGS="" + AUTO_CPPFLAGS="" +fi + if test "$enable_utils" = "yes" then AC_REQUIRE_AUX_FILE([utils/try-commit.c]) - # build tools - AC_PROG_CC - - # CFLAGS and CPPFLAGGS - if test -z "$CFLAGS" - then - AUTO_CFLAGS="-g -Wall -O2" - else - AUTO_CFLAGS="" - fi - AUTO_CPPFLAGS="" + AUTO_CPPFLAGS="" CFLAGS=${CFLAGS-"$AUTO_CFLAGS"} CPPFLAGS=${CPPFLAGS-"$AUTO_CPPFLAGS"} diff --git a/package.nix b/package.nix index 02db2f90..f2276dc1 100644 --- a/package.nix +++ b/package.nix @@ -16,12 +16,7 @@ stdenv.mkDerivation { pname = "try"; version = "latest"; - src = fetchFromGitHub { - owner = "binpash"; - repo = "try"; - rev = "67052d8f20725f3cdc22ffaec33f7b7c14f1eb6b"; - hash = "sha256-8mfCmqN50pRAeNTJUlRVrRQulWon4b2OL4Ug/ygBhB0="; - }; + src = ./.; # skip TRY_REQUIRE_PROG as it detects executable dependencies by running it postPatch = '' @@ -40,6 +35,7 @@ stdenv.mkDerivation { install -Dt $out/bin try install -Dt $out/bin utils/try-commit install -Dt $out/bin utils/try-summary + install -Dt $out/bin utils/make-socket wrapProgram $out/bin/try --prefix PATH : ${ lib.makeBinPath [ coreutils diff --git a/scripts/check_trycase.sh b/scripts/check_trycase.sh index 6471a864..e34a4645 100755 --- a/scripts/check_trycase.sh +++ b/scripts/check_trycase.sh @@ -38,7 +38,7 @@ check_file() { lf="${lf%)}" case "$cf" in - (file|dir|symlink|nonexist|opaque|whiteout);; + (file|dir|symlink|nonexist|opaque|whiteout|fifo|socket);; (*) printf "ERROR: $1: invalid changed file: %s\n" "$cf" : $((ERRORS += 1)) ;; diff --git a/test/all-commit-cases.sh b/test/all-commit-cases.sh index 852efd1c..ca1d79d4 100755 --- a/test/all-commit-cases.sh +++ b/test/all-commit-cases.sh @@ -5,12 +5,11 @@ TRY_TOP="${TRY_TOP:-$(git rev-parse --show-toplevel --show-superproject-working- TRY="$TRY_TOP/try" cleanup() { - cd / + cd / - if [ -d "$try_workspace" ] - then - rm -rf "$try_workspace" >/dev/null 2>&1 - fi + if [ -d "$try_workspace" ]; then + rm -rf "$try_workspace" >/dev/null 2>&1 + fi } trap 'cleanup' EXIT @@ -25,11 +24,10 @@ cd "$try_workspace" || exit 99 COUNT=0 fail() { - echo Case $COUNT: "$@" - exit ${COUNT} + echo Case $COUNT: "$@" + exit ${COUNT} } - # // TRYCASE(opaque, dir) # // TRYCASE(dir, dir) @@ -224,3 +222,82 @@ echo arrivederci >formerdir/it/file2 || fail [ -L formerdir ] || fail [ "$(readlink formerdir)" = "/this/is/a/broken/symlink" ] || fail rm formerdir || fail + +# // TRYCASE(fifo, file) + +: $((COUNT += 1)) + +! [ -e newpipe ] || fail +"$TRY" -y "mkfifo newpipe; rm newpipe; touch newpipe; echo new >newpipe" +[ -f newpipe ] || fail +[ "$(cat newpipe)" = "new" ] || fail +rm newpipe || fail + +# // TRYCASE(fifo, dir) + +: $((COUNT += 1)) + +! [ -e newpipe ] || fail +"$TRY" -y "mkfifo newpipe; rm newpipe; mkdir newpipe" +[ -d newpipe ] || fail +rm -r newpipe + +# // TRYCASE(fifo, symlink) + +: $((COUNT += 1)) + +! [ -e newpipe ] || fail +ln -s "$TRY" newpipe +[ -L newpipe ] || fail +"$TRY" -y "rm newpipe; mkfifo newpipe" +[ -p newpipe ] || fail +rm newpipe + +# // TRYCASE(fifo, nonexist) + +: $((COUNT += 1)) + +! [ -e newpipe ] || fail +"$TRY" -y "mkfifo newpipe" +[ -p newpipe ] || fail +rm newpipe + +# // TRYCASE(socket, file) + +: $((COUNT += 1)) + +! [ -e newsock ] || fail +"$TRY" -y "make-socket newsock; rm newsock; touch newsock; echo hello> newsock" +[ -f newsock ] || fail +[ "$(cat newsock)" = "hello" ] || fail +rm newsock + +# // TRYCASE(socket, dir) + +: $((COUNT += 1)) + +! [ -e newsock ] || fail +"$TRY" -y "make-socket newsock; rm newsock; mkdir newsock" +[ -d newsock ] || fail +rm -r newsock + +# // TRYCASE(socket, symlink) + +: $((COUNT += 1)) + +! [ -e newsock ] || fail +ln -s "$TRY" newsock +[ -L newsock ] || fail +"$TRY" -y "rm newsock; make-socket newsock" +! [ -e newlink ] || fail +[ -S newsock ] || fail +rm newsock + +# // TRYCASE(socket, nonexist) + +: $((COUNT += 1)) + +! [ -e newsock ] +"$TRY" -y "make-socket newsock" +[ -S newsock ] || fail +rm newsock diff --git a/try b/try index de6ef4a3..2cb0fc88 100755 --- a/try +++ b/try @@ -45,7 +45,6 @@ set_TRY_SHELL() { export TRY_SHELL } - ################################################################################ # Run a command (in `$@`) in an overlay (in `$SANDBOX_DIR`) ################################################################################ @@ -246,9 +245,7 @@ do mkdir "$merger_dir" ## Create a union directory - ## NB $mountpoint is the local directory to mount - ## $merger_dir is where we'll put its merger - "$UNION_HELPER" "$mountpoint" "$merger_dir" 2>>"$try_mount_log" || + "$UNION_HELPER" $mountpoint $merger_dir 2>>"$try_mount_log" || printf "%s: Warning: Failed mounting $mountpoint via $UNION_HELPER, see \"$try_mount_log\"\n" "$TRY_COMMAND" >&2 make_overlay "$SANDBOX_DIR" "$merger_dir" "$pure_mountpoint" 2>>"$try_mount_log" || printf "%s: Warning: Failed mounting $mountpoint as an overlay via $UNION_HELPER, see \"$try_mount_log\"\n" "$TRY_COMMAND" >&2 @@ -458,8 +455,9 @@ find_upperdir_changes() { sandbox_dir="$1" ignore_file="$2" - find "$sandbox_dir/upperdir/" -type f -o \( -type c -size 0 \) -o -type d -o -type l | ignore_changes "$ignore_file" -} + find "$sandbox_dir/upperdir/" \( -type f -o -type c -size 0 -o -type d -o -type l -o -type s -o -type p \) | ignore_changes "$ignore_file" + + } ################################################################################ # Processes upperdir changes to an internal format that can be processed by summary and commit @@ -514,7 +512,28 @@ process_changes() { echo "rd $local_file" continue fi - + elif [ -p "$changed_file" ] + then + if [ -e "$local_file" ] + then + # // TRYCASE(fifo, file) + # // TRYCASE(fifo, dir) + # // TRYCASE(fifo, symlink) + echo "mo $local_file" + continue + else + # // TRYCASE(fifo, nonexist) + echo "ad $local_file" + continue + fi + # // TRYCASE(fifo, *) + echo "ad $local_file" + continue + elif [ -S "$changed_file" ] + then + # // TRYCASE(socket, *) + echo "ad $local_file" + continue # must be a directory, but not opaque---leave it! elif [ -c "$changed_file" ] && ! [ -s "$changed_file" ] && [ "$(stat -c %t,%T "$changed_file")" = "0,0" ] then diff --git a/utils/make-socket b/utils/make-socket new file mode 100755 index 0000000000000000000000000000000000000000..cbebc0aa00abcf559d5bc3794f851939dd4054f9 GIT binary patch literal 25888 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 +#include +#include +#include +#include +#include +#include +#include +#include + +int main(int argc, char *argv[]) { + int sockfd; + struct sockaddr_un addr; + + if (argc != 2) { + fprintf(stderr, "Usage: %s \n", argv[0]); + exit(EXIT_FAILURE); + } + + const char *socket_name= argv[1]; + + sockfd = socket(AF_UNIX, SOCK_DGRAM, 0); + if (sockfd == -1) { + perror("socket"); + exit(EXIT_FAILURE); + } + + memset(&addr, 0, sizeof(struct sockaddr_un)); + addr.sun_family = AF_UNIX; + strncpy(addr.sun_path, socket_name, sizeof(addr.sun_path) - 1); + + if (bind(sockfd, (struct sockaddr *)&addr, sizeof(struct sockaddr_un)) == -1) { + perror("bind"); + close(sockfd); + exit(EXIT_FAILURE); + } + + close(sockfd); + + return 0; +} + diff --git a/utils/try-commit.c b/utils/try-commit.c index 986c718a..32c8f163 100644 --- a/utils/try-commit.c +++ b/utils/try-commit.c @@ -256,6 +256,25 @@ int main(int argc, char *argv[]) { break; case FTS_DEFAULT: + + if (S_ISFIFO(ent->fts_statp->st_mode) || (S_ISSOCK(ent->fts_statp->st_mode))) { + + if (local_exists) { + // TRYCASE(fifo, file) + // TRYCASE(fifo, dir) + // TRYCASE(fifo, symlink) + // TRYCASE(socket, file) + // TRYCASE(socket, dir) + // TRYCASE(socket, symlink) + remove_local(local_file, local_exists, &local_stat); + } + + // TRYCASE(fifo, nonexist) + // TRYCASE(socket, nonexist) + commit(ent->fts_path, local_file); + break; + } + if (S_ISCHR(ent->fts_statp->st_mode) && ent->fts_statp->st_size == 0) { struct statx statxp; if (statx(AT_FDCWD, ent->fts_path, 0, STATX_TYPE | STATX_INO, &statxp) == -1) { diff --git a/utils/try-summary.c b/utils/try-summary.c index 84a06d2b..6787542c 100644 --- a/utils/try-summary.c +++ b/utils/try-summary.c @@ -137,6 +137,7 @@ int main(int argc, char *argv[]) { // nothing of interest! directory got made, but modifications must be inside break; + case FTS_F: // regular file if (getxattr(ent->fts_path, "user.overlay.whiteout", NULL, 0) != -1) { // TRYCASE(whiteout, *) @@ -163,6 +164,36 @@ int main(int argc, char *argv[]) { break; case FTS_DEFAULT: + + if (S_ISFIFO(ent->fts_statp->st_mode)) { + + if(local_exists) { + // TRYCASE(fifo, file) + // TRYCASE(fifo, dir) + // TRYCASE(fifo, symlink) + show_change(local_file, "modified"); + break; + } + + //TRYCASE (fifo, nonexist) + show_change(local_file, "added"); + break; + } + + if (S_ISSOCK(ent->fts_statp->st_mode)) { + + if(local_exists) { + // TRYCASE(socket, file) + // TRYCASE(socket, dir) + // TRYCASE(socket, symlink) + show_change(local_file, "modified"); + break; + } + + // TRYCASE(socket, nonexist) + show_change(local_file, "added"); + } + if (S_ISCHR(ent->fts_statp->st_mode) && ent->fts_statp->st_size == 0) { struct statx statxp; if (statx(AT_FDCWD, ent->fts_path, 0, STATX_TYPE | STATX_INO, &statxp) == -1) { From 65a62aa334ca95da3339a9001f13f8699fd3379a Mon Sep 17 00:00:00 2001 From: Ioa1 Date: Mon, 11 Aug 2025 13:42:37 -0400 Subject: [PATCH 02/18] Added support for fifos and sockets (#42) --- utils/try-commit.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/try-commit.c b/utils/try-commit.c index 32c8f163..b17dcd76 100644 --- a/utils/try-commit.c +++ b/utils/try-commit.c @@ -256,7 +256,7 @@ int main(int argc, char *argv[]) { break; case FTS_DEFAULT: - + if (S_ISFIFO(ent->fts_statp->st_mode) || (S_ISSOCK(ent->fts_statp->st_mode))) { if (local_exists) { From a1cad0f7591067282af9b314d357abba8bfc8382 Mon Sep 17 00:00:00 2001 From: Ioa1 Date: Mon, 11 Aug 2025 13:53:27 -0400 Subject: [PATCH 03/18] Added support for fifos and sockets (#42) --- Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.in b/Makefile.in index e943c573..59a2a548 100644 --- a/Makefile.in +++ b/Makefile.in @@ -59,7 +59,7 @@ utils/try-summary: utils/ignores.o utils/try-summary.o utils/try-commit: utils/ignores.o utils/try-commit.o $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -g $^ -utils/make-socket: utils/make-socket.o +utils/make-socket: utils/ignores.o utils/make-socket.o $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -g $^ test: try $(if $(findstring yes,@enable_utils@),utils/try-summary utils/try-commit) From 0f1f759e749558c73fdbfe3aca1e82b25de7a545 Mon Sep 17 00:00:00 2001 From: Ioa1 Date: Mon, 11 Aug 2025 13:57:26 -0400 Subject: [PATCH 04/18] Added support for fifos and sockets (#42) --- Makefile.in | 2 +- configure.ac | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/Makefile.in b/Makefile.in index 59a2a548..e943c573 100644 --- a/Makefile.in +++ b/Makefile.in @@ -59,7 +59,7 @@ utils/try-summary: utils/ignores.o utils/try-summary.o utils/try-commit: utils/ignores.o utils/try-commit.o $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -g $^ -utils/make-socket: utils/ignores.o utils/make-socket.o +utils/make-socket: utils/make-socket.o $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -g $^ test: try $(if $(findstring yes,@enable_utils@),utils/try-summary utils/try-commit) diff --git a/configure.ac b/configure.ac index 4d3f1758..d1485296 100644 --- a/configure.ac +++ b/configure.ac @@ -19,11 +19,9 @@ AC_PROG_CC # CFLAGS AND CPPFLAGGS if test -z "$CFLAGS" then - AUTO_CFLAGS="-g -Wall -O2" - AUTO_CPPFLAGS="-g -Wall -O2" + AUTO_CFLAGS="-g -Wall -O2" else AUTO_CFLAGS="" - AUTO_CPPFLAGS="" fi if test "$enable_utils" = "yes" From 2bf8a531fb18e2b4c70fdb4ce1252a4a41c48d7f Mon Sep 17 00:00:00 2001 From: Ioa1 Date: Mon, 11 Aug 2025 14:02:37 -0400 Subject: [PATCH 05/18] Added support for fifos and sockets (#42) --- Makefile.in | 2 +- configure.ac | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Makefile.in b/Makefile.in index e943c573..c08f7226 100644 --- a/Makefile.in +++ b/Makefile.in @@ -62,7 +62,7 @@ utils/try-commit: utils/ignores.o utils/try-commit.o utils/make-socket: utils/make-socket.o $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -g $^ -test: try $(if $(findstring yes,@enable_utils@),utils/try-summary utils/try-commit) +test: try $(if $(findstring yes,@enable_utils@),utils/try-summary utils/try-commit) utils/make-socket scripts/run_tests.sh lint: diff --git a/configure.ac b/configure.ac index d1485296..4d3f1758 100644 --- a/configure.ac +++ b/configure.ac @@ -19,9 +19,11 @@ AC_PROG_CC # CFLAGS AND CPPFLAGGS if test -z "$CFLAGS" then - AUTO_CFLAGS="-g -Wall -O2" + AUTO_CFLAGS="-g -Wall -O2" + AUTO_CPPFLAGS="-g -Wall -O2" else AUTO_CFLAGS="" + AUTO_CPPFLAGS="" fi if test "$enable_utils" = "yes" From e3bc7fa80a113ad4b4402b4c87afba4e6732c584 Mon Sep 17 00:00:00 2001 From: Ioa1 Date: Mon, 11 Aug 2025 14:10:55 -0400 Subject: [PATCH 06/18] Added support for fifos and sockets (#42) --- Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.in b/Makefile.in index c08f7226..b201bde6 100644 --- a/Makefile.in +++ b/Makefile.in @@ -62,7 +62,7 @@ utils/try-commit: utils/ignores.o utils/try-commit.o utils/make-socket: utils/make-socket.o $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -g $^ -test: try $(if $(findstring yes,@enable_utils@),utils/try-summary utils/try-commit) utils/make-socket +test: try utils/try-summary utils/try-commit utils/make-socket scripts/run_tests.sh lint: From 98bc6dc392e227fb51fbae4c1594db5d74621f06 Mon Sep 17 00:00:00 2001 From: Ioa1 Date: Mon, 11 Aug 2025 14:15:17 -0400 Subject: [PATCH 07/18] Added support for fifos and sockets (#42) --- .github/workflows/test.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 21f74b5f..d9f4526d 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -115,7 +115,6 @@ jobs: - name: Configure and build utilities run: | - autoconf ./configure make all From abe8f9d4328b60daa043af0029174bea35f32c60 Mon Sep 17 00:00:00 2001 From: Ioa1 Date: Mon, 11 Aug 2025 14:25:27 -0400 Subject: [PATCH 08/18] Added support for fifos and sockets (#42) --- .github/workflows/test.yaml | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index d9f4526d..a8a99f4e 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -69,8 +69,9 @@ jobs: run: | tar xzf try-dist.tgz/try-*.tgz --strip-components=1 rm -r try-dist.tgz - ./configure + ./configure --disable-utils make all + sudo make install - name: Run tests with shell fallbacks run: | @@ -78,8 +79,14 @@ jobs: ! which try-commit scripts/run_tests.sh + - name: Clean up build + run: | + sudo make clean + - name: Install utilities run: | + ./configure + make all sudo make install - name: Run tests with utilities @@ -115,8 +122,10 @@ jobs: - name: Configure and build utilities run: | - ./configure + autoconf + ./configure --disable-utils make all + sudo make install - name: Run tests with shell fallbacks run: | @@ -124,8 +133,15 @@ jobs: ! which try-commit scripts/run_tests.sh + - name: Clean up build + run: | + sudo make clean + - name: Install utilities run: | + autoconf + ./configure + make all sudo make install - name: Run tests with utilities From e62bf80b78bda4f5d60474c8003c9b5844f044d9 Mon Sep 17 00:00:00 2001 From: Ioa1 Date: Mon, 11 Aug 2025 14:30:32 -0400 Subject: [PATCH 09/18] Added support for fifos and sockets (#42) --- Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.in b/Makefile.in index b201bde6..c08f7226 100644 --- a/Makefile.in +++ b/Makefile.in @@ -62,7 +62,7 @@ utils/try-commit: utils/ignores.o utils/try-commit.o utils/make-socket: utils/make-socket.o $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -g $^ -test: try utils/try-summary utils/try-commit utils/make-socket +test: try $(if $(findstring yes,@enable_utils@),utils/try-summary utils/try-commit) utils/make-socket scripts/run_tests.sh lint: From 9ecca5b67d081106f3ae924246199a4d175fe361 Mon Sep 17 00:00:00 2001 From: Ioa1 Date: Mon, 11 Aug 2025 14:33:03 -0400 Subject: [PATCH 10/18] Added support for fifos and sockets (#42) --- .github/workflows/test.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index a8a99f4e..be2a5f22 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -85,6 +85,7 @@ jobs: - name: Install utilities run: | + autoconf ./configure make all sudo make install From 6e0c84514b9e5df11993c6de4921e54eee8357d5 Mon Sep 17 00:00:00 2001 From: Ioa1 Date: Tue, 26 Aug 2025 16:35:24 -0400 Subject: [PATCH 11/18] Added support for fifos and sockets (#42) --- Vagrantfile | 4 +- configure.ac | 10 +---- test/all-commit-cases.sh | 93 ++++------------------------------------ test/explore.sh | 9 ++-- try | 47 ++++++++------------ 5 files changed, 34 insertions(+), 129 deletions(-) diff --git a/Vagrantfile b/Vagrantfile index e2ce4e22..f85d93cf 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -15,9 +15,7 @@ Vagrant.configure("2") do |config| sudo chown -R vagrant:vagrant try sudo modprobe overlay cd try - - autoconf && ./configure --disable-utils - make + autoconf && ./configure --disable-utils && make sudo make install scripts/run_tests.sh diff --git a/configure.ac b/configure.ac index 4d3f1758..16882078 100644 --- a/configure.ac +++ b/configure.ac @@ -17,14 +17,8 @@ AC_REQUIRE_AUX_FILE([utils/make-socket.c]) AC_PROG_CC # CFLAGS AND CPPFLAGGS -if test -z "$CFLAGS" -then - AUTO_CFLAGS="-g -Wall -O2" - AUTO_CPPFLAGS="-g -Wall -O2" -else - AUTO_CFLAGS="" - AUTO_CPPFLAGS="" -fi +AUTO_CFLAGS="" +AUTO_CPPFLAGS="" if test "$enable_utils" = "yes" then diff --git a/test/all-commit-cases.sh b/test/all-commit-cases.sh index ca1d79d4..852efd1c 100755 --- a/test/all-commit-cases.sh +++ b/test/all-commit-cases.sh @@ -5,11 +5,12 @@ TRY_TOP="${TRY_TOP:-$(git rev-parse --show-toplevel --show-superproject-working- TRY="$TRY_TOP/try" cleanup() { - cd / + cd / - if [ -d "$try_workspace" ]; then - rm -rf "$try_workspace" >/dev/null 2>&1 - fi + if [ -d "$try_workspace" ] + then + rm -rf "$try_workspace" >/dev/null 2>&1 + fi } trap 'cleanup' EXIT @@ -24,10 +25,11 @@ cd "$try_workspace" || exit 99 COUNT=0 fail() { - echo Case $COUNT: "$@" - exit ${COUNT} + echo Case $COUNT: "$@" + exit ${COUNT} } + # // TRYCASE(opaque, dir) # // TRYCASE(dir, dir) @@ -222,82 +224,3 @@ echo arrivederci >formerdir/it/file2 || fail [ -L formerdir ] || fail [ "$(readlink formerdir)" = "/this/is/a/broken/symlink" ] || fail rm formerdir || fail - -# // TRYCASE(fifo, file) - -: $((COUNT += 1)) - -! [ -e newpipe ] || fail -"$TRY" -y "mkfifo newpipe; rm newpipe; touch newpipe; echo new >newpipe" -[ -f newpipe ] || fail -[ "$(cat newpipe)" = "new" ] || fail -rm newpipe || fail - -# // TRYCASE(fifo, dir) - -: $((COUNT += 1)) - -! [ -e newpipe ] || fail -"$TRY" -y "mkfifo newpipe; rm newpipe; mkdir newpipe" -[ -d newpipe ] || fail -rm -r newpipe - -# // TRYCASE(fifo, symlink) - -: $((COUNT += 1)) - -! [ -e newpipe ] || fail -ln -s "$TRY" newpipe -[ -L newpipe ] || fail -"$TRY" -y "rm newpipe; mkfifo newpipe" -[ -p newpipe ] || fail -rm newpipe - -# // TRYCASE(fifo, nonexist) - -: $((COUNT += 1)) - -! [ -e newpipe ] || fail -"$TRY" -y "mkfifo newpipe" -[ -p newpipe ] || fail -rm newpipe - -# // TRYCASE(socket, file) - -: $((COUNT += 1)) - -! [ -e newsock ] || fail -"$TRY" -y "make-socket newsock; rm newsock; touch newsock; echo hello> newsock" -[ -f newsock ] || fail -[ "$(cat newsock)" = "hello" ] || fail -rm newsock - -# // TRYCASE(socket, dir) - -: $((COUNT += 1)) - -! [ -e newsock ] || fail -"$TRY" -y "make-socket newsock; rm newsock; mkdir newsock" -[ -d newsock ] || fail -rm -r newsock - -# // TRYCASE(socket, symlink) - -: $((COUNT += 1)) - -! [ -e newsock ] || fail -ln -s "$TRY" newsock -[ -L newsock ] || fail -"$TRY" -y "rm newsock; make-socket newsock" -! [ -e newlink ] || fail -[ -S newsock ] || fail -rm newsock - -# // TRYCASE(socket, nonexist) - -: $((COUNT += 1)) - -! [ -e newsock ] -"$TRY" -y "make-socket newsock" -[ -S newsock ] || fail -rm newsock diff --git a/test/explore.sh b/test/explore.sh index 3f5d8a9e..6a91578a 100755 --- a/test/explore.sh +++ b/test/explore.sh @@ -4,12 +4,11 @@ TRY_TOP="${TRY_TOP:-$(git rev-parse --show-toplevel --show-superproject-working- TRY="$TRY_TOP/try" cleanup() { - cd / + cd / - if [ -d "$try_workspace" ] - then - rm -rf "$try_workspace" >/dev/null 2>&1 - fi + if [ -d "$try_workspace" ]; then + rm -rf "$try_workspace" >/dev/null 2>&1 + fi } trap 'cleanup' EXIT diff --git a/try b/try index 2cb0fc88..de4d9918 100755 --- a/try +++ b/try @@ -158,7 +158,7 @@ make_overlay() { sandbox_dir="$1" lowerdirs="$2" overlay_mountpoint="$3" - mount -t overlay overlay -o userxattr -o "lowerdir=$lowerdirs,upperdir=$sandbox_dir/upperdir/$overlay_mountpoint,workdir=$sandbox_dir/workdir/$overlay_mountpoint" "$sandbox_dir/temproot/$overlay_mountpoint" + mount -t overlay overlay -o userxattr -o "lowerdir=$lowerdirs,upperdir=$sandbox_dir/upperdir/$overlay_mountpoint,workdir=$sandbox_dir/workdir/$overlay_mountpoint,xino=off,index=off" "$sandbox_dir/temproot/$overlay_mountpoint" } @@ -279,7 +279,7 @@ EOF cat >"$chroot_executable" </dev/null | grep -q -e "user.overlay.whiteout" then @@ -553,11 +530,25 @@ process_changes() { # // TRYCASE(file, file) # // TRYCASE(file, dir) # // TRYCASE(file, symlink) + # // TRYCASE(fifo, file) + # // TRYCASE(fifo, dir) + # // TRYCASE(fifo, symlink) + # // TRYCASE(socket, file) + # // TRYCASE(socket, dir) + # // TRYCASE(socket, symlink) echo "mo $local_file" + continue else # // TRYCASE(file, nonexist) + # // TRYCASE(fifo, nonexist) + # // TRYCASE(socket, nonexist) echo "ad $local_file" + continue fi + # // TRYCASE(fifo, *) + # // TRYCASE(socket, *) + echo "ad $local_file" + continue fi done < Date: Tue, 26 Aug 2025 17:00:17 -0400 Subject: [PATCH 12/18] Added support for fifos and sockets (#42) --- test/all-commit-cases.sh | 87 ++++++++++++++++++++++++++++++++++++++++ test/explore.sh | 15 +++---- 2 files changed, 93 insertions(+), 9 deletions(-) diff --git a/test/all-commit-cases.sh b/test/all-commit-cases.sh index 852efd1c..d1e90ab5 100755 --- a/test/all-commit-cases.sh +++ b/test/all-commit-cases.sh @@ -224,3 +224,90 @@ echo arrivederci >formerdir/it/file2 || fail [ -L formerdir ] || fail [ "$(readlink formerdir)" = "/this/is/a/broken/symlink" ] || fail rm formerdir || fail + +# // TRYCASE(fifo, file) + +: $((COUNT += 1)) + +! [ -e newpipe ] || fail +"$TRY" -y "touch newpipe; echo new >newpipe" +[ -f newpipe ] || fail +[ "$(cat newpipe)" = "new" ] || fail +"$TRY" -y "rm newpipe; mkfifo newpipe" +[ -p newpipe ] || fail +rm newpipe + +# // TRYCASE(fifo, dir) + +: $((COUNT += 1)) + +! [ -e newpipe ] || fail +"$TRY" -y "mkdir newpipe" +[ -d newpipe ] || fail +"$TRY" -y "rm -r newpipe; mkfifo newpipe" +[ -p newpipe ] || fail +rm newpipe + +# // TRYCASE(fifo, symlink) + +: $((COUNT += 1)) + +! [ -e newpipe ] || fail +ln -s "$TRY" newpipe +[ -L newpipe ] || fail +"$TRY" -y "rm newpipe; mkfifo newpipe" +[ -p newpipe ] || fail +rm newpipe + +# // TRYCASE(fifo, nonexist) + +: $((COUNT += 1)) + +! [ -e newpipe ] || fail +"$TRY" -y "mkfifo newpipe" +[ -p newpipe ] || fail +rm newpipe + +# // TRYCASE(socket, file) + +: $((COUNT += 1)) + +! [ -e newsock ] || fail +"$TRY" -y "touch newsock; echo hello> newsock" +[ -f newsock ] || fail +[ "$(cat newsock)" = "hello" ] || fail +"$TRY" -y "rm newsock; make-socket newsock" +[ -S newsock ] || fail +rm newsock + +# // TRYCASE(socket, dir) + +: $((COUNT += 1)) + +! [ -e newsock ] || fail +"$TRY" -y "mkdir newsock" +[ -d newsock ] || fail +"$TRY" -y "rm -r newsock; make-socket newsock" +[ -S newsock ] || fail +rm newsock + +# // TRYCASE(socket, symlink) + +: $((COUNT += 1)) + +! [ -e newsock ] || fail +ln -s "$TRY" newsock +[ -L newsock ] || fail +"$TRY" -y "rm newsock; make-socket newsock" +! [ -e newlink ] || fail +[ -S newsock ] || fail +rm newsock + +# // TRYCASE(socket, nonexist) + +: $((COUNT += 1)) + +! [ -e newsock ] +"$TRY" -y "make-socket newsock" +[ -S newsock ] || fail +rm newsock diff --git a/test/explore.sh b/test/explore.sh index 6a91578a..0308de99 100755 --- a/test/explore.sh +++ b/test/explore.sh @@ -4,11 +4,12 @@ TRY_TOP="${TRY_TOP:-$(git rev-parse --show-toplevel --show-superproject-working- TRY="$TRY_TOP/try" cleanup() { - cd / + cd / - if [ -d "$try_workspace" ]; then - rm -rf "$try_workspace" >/dev/null 2>&1 - fi + if [ -d "$try_workspace" ] + then + rm -rf "$try_workspace" >/dev/null 2>&1 + fi } trap 'cleanup' EXIT @@ -16,11 +17,6 @@ trap 'cleanup' EXIT try_workspace="$(mktemp -d)" cd "$try_workspace" || exit 9 -SHELL="/usr/bin/env bash --norc" -export SHELL -PS1="# " -export PS1 - echo hi >expected.out cat >explore.exp <explore.exp < Date: Tue, 26 Aug 2025 17:01:16 -0400 Subject: [PATCH 13/18] Added support for fifos and sockets (#42) --- test/all-commit-cases.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/all-commit-cases.sh b/test/all-commit-cases.sh index d1e90ab5..bdfef0e8 100755 --- a/test/all-commit-cases.sh +++ b/test/all-commit-cases.sh @@ -242,7 +242,7 @@ rm newpipe : $((COUNT += 1)) ! [ -e newpipe ] || fail -"$TRY" -y "mkdir newpipe" +"$TRY" -y "mkdir newpipe" [ -d newpipe ] || fail "$TRY" -y "rm -r newpipe; mkfifo newpipe" [ -p newpipe ] || fail From 0144546ebe25fd01e6fffdb0674a0191403e13c6 Mon Sep 17 00:00:00 2001 From: Ioa1 Date: Tue, 26 Aug 2025 17:02:54 -0400 Subject: [PATCH 14/18] Added support for fifos and sockets (#42) --- try | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/try b/try index de4d9918..5550e63c 100755 --- a/try +++ b/try @@ -158,7 +158,7 @@ make_overlay() { sandbox_dir="$1" lowerdirs="$2" overlay_mountpoint="$3" - mount -t overlay overlay -o userxattr -o "lowerdir=$lowerdirs,upperdir=$sandbox_dir/upperdir/$overlay_mountpoint,workdir=$sandbox_dir/workdir/$overlay_mountpoint,xino=off,index=off" "$sandbox_dir/temproot/$overlay_mountpoint" + mount -t overlay overlay -o userxattr -o "lowerdir=$lowerdirs,upperdir=$sandbox_dir/upperdir/$overlay_mountpoint,workdir=$sandbox_dir/workdir/$overlay_mountpoint" "$sandbox_dir/temproot/$overlay_mountpoint" } @@ -279,7 +279,7 @@ EOF cat >"$chroot_executable" < Date: Sun, 21 Sep 2025 19:00:50 -0400 Subject: [PATCH 15/18] Added support for fifos and sockets (#42) --- Vagrantfile | 5 +---- test/explore.sh | 1 - try | 10 ++++++---- utils/make-socket | Bin 25888 -> 20296 bytes utils/try-summary.c | 18 ++++-------------- 5 files changed, 11 insertions(+), 23 deletions(-) diff --git a/Vagrantfile b/Vagrantfile index f85d93cf..fa873905 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -161,10 +161,7 @@ Vagrant.configure("2") do |config| sudo rpm -i mergerfs-2.40.2-1.el9.x86_64.rpm sudo chown -R vagrant:vagrant try sudo modprobe overlay - cd try - - autoconf && ./configure --disable-utils && make - sudo make install + cd try autoconf && ./configure --disable-utils && make sudo make install diff --git a/test/explore.sh b/test/explore.sh index 0308de99..6b7c2f61 100755 --- a/test/explore.sh +++ b/test/explore.sh @@ -25,7 +25,6 @@ cat >explore.exp <>"$try_mount_log" || - printf "%s: Warning: Failed mounting $mountpoint via $UNION_HELPER, see \"$try_mount_log\"\n" "$TRY_COMMAND" >&2 + ## NB $mountpoint is the local directory to mount + ## $merger_dir is where we'll put its merger + "$UNION_HELPER" "$mountpoint" "$merger_dir" 2>>"$try_mount_log" || + printf "%s: Warning: Failed mounting $mountpoint via $UNION_HELPER, see \"$try_mount_log\"\n" "$TRY_COMMAND" >&2 make_overlay "$SANDBOX_DIR" "$merger_dir" "$pure_mountpoint" 2>>"$try_mount_log" || printf "%s: Warning: Failed mounting $mountpoint as an overlay via $UNION_HELPER, see \"$try_mount_log\"\n" "$TRY_COMMAND" >&2 fi @@ -456,7 +458,7 @@ find_upperdir_changes() { ignore_file="$2" find "$sandbox_dir/upperdir/" | ignore_changes "$ignore_file" - } +} ################################################################################ # Processes upperdir changes to an internal format that can be processed by summary and commit @@ -511,7 +513,7 @@ process_changes() { echo "rd $local_file" continue fi - # must be a directory, but not opaque---leave it! + # must be a directory, but not opaque---leave it! elif [ -c "$changed_file" ] && ! [ -s "$changed_file" ] && [ "$(stat -c %t,%T "$changed_file")" = "0,0" ] then # // TRYCASE(whiteout, *) diff --git a/utils/make-socket b/utils/make-socket index cbebc0aa00abcf559d5bc3794f851939dd4054f9..602ca06f69ce268a83924e641eaf42f17e1afdb8 100755 GIT binary patch delta 4490 zcmZu!3vg7`89wLk-Dk4N?&h((0g}yzMqb%G2qAz;HbBDW1tAa#m2h{nyJ6RCHgO*a z)fy1$V42t?XR0__$h7J>I-SM_J65a)!Rpv?N}=OWI}RDGPVDFuEIQIUrvHELz2Pyv zJLmlW|NW2i-*f(R_T0($=({KBn8S9}O8DcI33<0^e8uyo3WF?G7{)*Jm~IHNbVFb^ z>M^aNvbc(}R_ZYxQnZuoFn!aOSu87WQr0ExEnekPeD0(&OjfbK2!GDqo!%=l;E)UN~&0=3_N@x|cigsq%BeG{j2g}`=%e+9B zi4NL^8u}Y%-D#(#?0&JF7IWkcMA+;ek-FJ6A&0I+)Ug?YTZxnSy*LaZ$|Mlhqbtqm zi^fAFITRcSr`XH7%8FoYC>bWPXkXBi9P-qVE$uBEH%V2V>IJUKvu1%`UCk==?K>zD zi3Wa@_ctlNl!ioLObZ{Gklbk0Ou#y!VCjOWk$}xZihO$f378Cl9Anq?_NG~z>~^_M zrfTM63hwjXj;r!agN)<6Qr2OxJ2f)E`wO>d_3Xz6yE)?)?JT?BVE=(SS6a~EDlI%- znbQLi*hdCC71`H@E!4p3jCK|?W|}K*u`sbgqn({8{hsWiqYws}-xO7G|z299a+LswI>cxor_t>=MnEe7SIQ!IHm~;(6HY(!UxAhI)FR|Zat+!? zfr9U9K(mlHKy4A>q8+0c3IWwDUR(owCeCbJTyob%pfn4|FVda_p3pB*aG6jc5F-Zp z7@BD_bOV^ebHIoe(FVb^qsSZd+krP&MnKRO=S={~b3zckh@+Yvx^7VGF9AaJ?*by| z?*d+2K1g-WpCD&T&V>vv-u`aEcKYmJA2H&855T`d~1bp&%^q_Surc~;^x12_4>Tv}5DJnr z1;Ql#2b%eLdN0s%3=lBla!=7l)b!;Y1hZG^kA!lNf;`z7`U_Nr4G)9rJTZI-l3wq8 z5{T0RkZx6$`5)e?y!cf{UVCI-GQSZ*eI?Q}B>v2Hfuw@nXxx#mpHP@F2I>H9( z3x#RIj@K9FT|v8$##|=C@?QmkWSk}J4bV^+CF8na_M?U`fA)34uGJTeTmcQu&?1%z zjXqPYgW_rjGz+nO1-E<$Ou+=eJ-}>*W_=A+Ml^Z`8lGH58IU10J8)BK#xFc?E*C2O64AdIc90$AZo}F9HD?8s%Qt-55aSDPB!{3#Lb_=i`x=U6@ zy*Zhp3&P-|`^d^%-n@~I6?;rv_qs(^7C`umva?aM)Fp#NcTQ1b?0?=8`+WuP05=M8 zU`$#`bbq@gnoEX_nk8zq;!jYW2Myh17vlZ~7VjHj`sqzy&y3!TpN8-Lf<{nF@sy2@)HM?{o1Eg0Xu#imRkx zIw1vzV(Gy+83vP~1lh4|Q=7DP+t!Wkz>xmo1labIKw{s15l$j06<#uFV}p8cu}w0~C#;FEg}-eBc!dqyh^`;=A$Db~J78Y~0k= zw3DlvTiTn*AUaC@iEua(PD-(85?)>!>hG_qmQw6b9czkjPQ^kPHAa6l7LE_GnYP>! zNzQ;9M?+y{{K26R%npWw{885z2o9u&m09DnT16J#ky`}8CAeRfl%cDbq@>Jp=yJu@*Ml>Fbr961EjC9ZWr$CAn->A_3PhW zx>&8>)#9&cH}31?^fw3s_NC z-iC#Ew3pwq)RFa9mA(BH)i2nPn=I(r$u2khLsyCQrd~;go$a!>I6xA`~!&YIjQ=2-;?QNKFWXxVJM+aAE%k_EoHhP^5-)5}0? z#7xvL)KW!VqS*Vr3ZRg3z`4D;0195sXt$j<@xBLpXA~?kpF7_-&8}(f+Mj`ze-&1~ zh!F+&=20T5<4vLe|M^ZlhtXNjE+=EVs@TO{9XctD=Lg%}AIBq}}4DA>FF7IS8?tl<>OBxkzQUqNXP zI~*uCs@3FWzYnansw>@DA-ljn>|0Aa*}A?4HTD&;Suk5vFPq)qlkW;S tjJe8wt7VO$wRxS25unF)eb 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 { + if (S_ISFIFO(ent->fts_statp->st_mode) || S_ISSOCK(ent->fts_statp->st_mode)){ if(local_exists) { // TRYCASE(fifo, file) // TRYCASE(fifo, dir) // TRYCASE(fifo, symlink) - show_change(local_file, "modified"); - break; - } - - //TRYCASE (fifo, nonexist) - show_change(local_file, "added"); - break; - } - - if (S_ISSOCK(ent->fts_statp->st_mode)) { - - if(local_exists) { // TRYCASE(socket, file) // TRYCASE(socket, dir) // TRYCASE(socket, symlink) @@ -190,10 +178,12 @@ int main(int argc, char *argv[]) { break; } + // TRYCASE(fifo, nonexist) // TRYCASE(socket, nonexist) show_change(local_file, "added"); + break; } - + if (S_ISCHR(ent->fts_statp->st_mode) && ent->fts_statp->st_size == 0) { struct statx statxp; if (statx(AT_FDCWD, ent->fts_path, 0, STATX_TYPE | STATX_INO, &statxp) == -1) { From 6854cc22ae0aafe40dad2c00841a76a07de54bed Mon Sep 17 00:00:00 2001 From: Ioa1 Date: Sun, 21 Sep 2025 19:02:45 -0400 Subject: [PATCH 16/18] Added support for fifos and sockets (#42) --- Vagrantfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Vagrantfile b/Vagrantfile index fa873905..20266d69 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -161,7 +161,7 @@ Vagrant.configure("2") do |config| sudo rpm -i mergerfs-2.40.2-1.el9.x86_64.rpm sudo chown -R vagrant:vagrant try sudo modprobe overlay - cd try + cd try autoconf && ./configure --disable-utils && make sudo make install From 635d883b89742d3b4c7be2668f3d38e86b6124fa Mon Sep 17 00:00:00 2001 From: Ioa1 Date: Sun, 21 Sep 2025 19:04:27 -0400 Subject: [PATCH 17/18] Added support for fifos and sockets (#42) --- utils/try-summary.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/utils/try-summary.c b/utils/try-summary.c index 77207302..616a4617 100644 --- a/utils/try-summary.c +++ b/utils/try-summary.c @@ -165,7 +165,7 @@ int main(int argc, char *argv[]) { case FTS_DEFAULT: - if (S_ISFIFO(ent->fts_statp->st_mode) || S_ISSOCK(ent->fts_statp->st_mode)){ + if (S_ISFIFO(ent->fts_statp->st_mode) || S_ISSOCK(ent->fts_statp->st_mode)) { if(local_exists) { // TRYCASE(fifo, file) @@ -183,7 +183,7 @@ int main(int argc, char *argv[]) { show_change(local_file, "added"); break; } - + if (S_ISCHR(ent->fts_statp->st_mode) && ent->fts_statp->st_size == 0) { struct statx statxp; if (statx(AT_FDCWD, ent->fts_path, 0, STATX_TYPE | STATX_INO, &statxp) == -1) { From f9c9cb1eada750a1d443a5b0008ec135047e0f31 Mon Sep 17 00:00:00 2001 From: Ioa1 Date: Thu, 1 Jan 2026 00:19:51 -0500 Subject: [PATCH 18/18] Removed make-socket (should not be checked in) --- utils/make-socket | Bin 20296 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100755 utils/make-socket diff --git a/utils/make-socket b/utils/make-socket deleted file mode 100755 index 602ca06f69ce268a83924e641eaf42f17e1afdb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20296 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