From 5e8452a70566abed8becb134579fb7035c5d4706 Mon Sep 17 00:00:00 2001 From: Rayyan Ansari Date: Sun, 27 Nov 2022 13:21:23 +0000 Subject: [PATCH] archiver: create_cmd: do not add preexec_fn on Windows The preexec_fn argument of Popen is not supported on Windows. --- src/borg/archiver/create_cmd.py | 9 +++++++-- src/borg/helpers/process.py | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/borg/archiver/create_cmd.py b/src/borg/archiver/create_cmd.py index 4db61bbd5..855357401 100644 --- a/src/borg/archiver/create_cmd.py +++ b/src/borg/archiver/create_cmd.py @@ -28,6 +28,7 @@ from ..helpers import sig_int, ignore_sigint from ..helpers import iter_separated from ..manifest import Manifest from ..patterns import PatternMatcher +from ..platform import is_win32 from ..platform import get_flags from ..platform import uid2user, gid2group @@ -68,7 +69,9 @@ class CreateMixIn: if not dry_run: try: try: - proc = subprocess.Popen(args.paths, stdout=subprocess.PIPE, preexec_fn=ignore_sigint) + proc = subprocess.Popen( + args.paths, stdout=subprocess.PIPE, preexec_fn=None if is_win32 else ignore_sigint + ) except (FileNotFoundError, PermissionError) as e: self.print_error("Failed to execute command: %s", e) return self.exit_code @@ -89,7 +92,9 @@ class CreateMixIn: paths_sep = eval_escapes(args.paths_delimiter) if args.paths_delimiter is not None else "\n" if args.paths_from_command: try: - proc = subprocess.Popen(args.paths, stdout=subprocess.PIPE, preexec_fn=ignore_sigint) + proc = subprocess.Popen( + args.paths, stdout=subprocess.PIPE, preexec_fn=None if is_win32 else ignore_sigint + ) except (FileNotFoundError, PermissionError) as e: self.print_error("Failed to execute command: %s", e) return self.exit_code diff --git a/src/borg/helpers/process.py b/src/borg/helpers/process.py index 3d6de7aef..5877b8b42 100644 --- a/src/borg/helpers/process.py +++ b/src/borg/helpers/process.py @@ -341,7 +341,7 @@ def create_filter_process(cmd, stream, stream_close, inbound=True): stdin=filter_stream, log_prefix="filter-process: ", env=env, - preexec_fn=ignore_sigint, + preexec_fn=None if is_win32 else ignore_sigint, ) else: proc = popen_with_error_handling( @@ -350,7 +350,7 @@ def create_filter_process(cmd, stream, stream_close, inbound=True): stdout=filter_stream, log_prefix="filter-process: ", env=env, - preexec_fn=ignore_sigint, + preexec_fn=None if is_win32 else ignore_sigint, ) if not proc: raise Error(f"filter {cmd}: process creation failed")