Skip to content

Arbitrary improvements#353

Open
danolivo wants to merge 2 commits intomainfrom
arbitrary-improvements
Open

Arbitrary improvements#353
danolivo wants to merge 2 commits intomainfrom
arbitrary-improvements

Conversation

@danolivo
Copy link
Contributor

Removed all the Windows code as we don't intend to support it.

It is just the fact that --exclude-extension has been introduced in
Postgres 18.
Drop Win32-specific code paths including exec_cmd_win32(), GetTempPath()
temp directory resolution, Windows argument quoting, and related type
definitions. Spock targets POSIX-only environments.
@danolivo danolivo self-assigned this Feb 18, 2026
@danolivo danolivo added the enhancement New feature or request label Feb 18, 2026
@coderabbitai
Copy link

coderabbitai bot commented Feb 18, 2026

📝 Walkthrough

Walkthrough

This pull request removes Windows platform support from the codebase by eliminating Windows-specific function declarations, process handling logic, temporary directory resolution, and typedef entries, consoliding implementations to POSIX-only paths with version-gating for PostgreSQL compatibility.

Changes

Cohort / File(s) Summary
Windows Support Removal
include/spock_sync.h, src/spock_sync.c, src/spock.c
Eliminated Windows-specific code including QuoteWindowsArgv function declaration, exec_cmd_win32 process handling, Windows temp directory resolution logic, and all WIN32 conditional blocks. Consolidated implementations to POSIX-only using TMPDIR environment variable, fork(), and waitpid().
Build Configuration Updates
src/spock_sync.c, utils/pgindent/typedefs.list
Added PostgreSQL version gating for build_exclude_extension_string (PG_VERSION_NUM >= 180000) and removed Windows-specific typedef entries (DWORD, LPVOID, BY_HANDLE_FILE_INFORMATION, SERVICE_STATUS_HANDLE, win32_deadchild_waitinfo) from pgindent configuration.

Poem

🐰 Hopping through the code with glee,
Windows paths have set us free!
No more #ifdefs, no WIN32 chains,
Just POSIX roots through clean domains,
TMPDIR and fork() light the way,
The rabbit celebrates this cleaner day! 🌰

🚥 Pre-merge checks | ✅ 1 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive The title 'Arbitrary improvements' is vague and non-descriptive; it does not convey meaningful information about the main change (removal of Windows support). Use a more descriptive title such as 'Remove Windows-specific code and POSIX-only support' to clearly summarize the primary change.
✅ Passed checks (1 passed)
Check name Status Explanation
Description check ✅ Passed The description directly relates to the changeset, clearly stating the intent to remove all Windows-specific code.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch arbitrary-improvements

Tip

Issue Planner is now in beta. Read the docs and try it out! Share your feedback on Discord.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
src/spock_sync.c (2)

106-131: ⚠️ Potential issue | 🟡 Minor

Unhandled fork() failure: pid = -1 falls through to waitpid(-1, …).

With Windows code removed, this is the sole code path. When fork() returns -1:

  • The child block is skipped (correct).
  • waitpid(-1, &stat, 0) is then called, which waits for any child of the process — an unintended side-effect that could reap an unrelated child.
  • If waitpid itself returns -1 (e.g., ECHILD), the check if (-1 != -1) is false and stat is returned uninitialized (undefined behavior).
🐛 Proposed fix
 	if ((pid = fork()) == 0)
 	{
 		if (execv(cmd, cmdargv) < 0)
 		{
 			ereport(ERROR,
 					(errmsg("could not execute \"%s\": %m", cmd)));
 			/* We're already in the child process here, can't return */
 			exit(1);
 		}
 	}
+	else if (pid < 0)
+	{
+		/* fork() failed */
+		return -1;
+	}

 	if (waitpid(pid, &stat, 0) != pid)
 		stat = -1;
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/spock_sync.c` around lines 106 - 131, Handle the case where fork()
returns -1 in exec_cmd: after the fork() call check for pid == -1, log/ereport
the fork failure (including errno via %m) and return an error indicator (e.g.,
set stat = -1 and return it) without calling waitpid; only call waitpid when pid
> 0 and proceed with the existing child handling for pid == 0 in the same
function.

156-174: ⚠️ Potential issue | 🟠 Major

Wrong PostgreSQL version threshold — --exclude-extension was added in PostgreSQL 17.

The pg_dump option --exclude-extension was introduced in PostgreSQL 17, but the code guards it with PG_VERSION_NUM >= 180000 (PostgreSQL 18). This causes build_exclude_extension_string() to be compiled out on PostgreSQL 17, preventing extensions in skip_extension[] from being filtered from dumps.

Both locations need fixing:

  • Line 156: Function definition guard
  • Line 238: Call site guard

Change both from #if PG_VERSION_NUM >= 180000 to #if PG_VERSION_NUM >= 170000.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/spock_sync.c` around lines 156 - 174, The preprocessor guards erroneously
require PostgreSQL 18 for the build_exclude_extension_string feature; update
both occurrences that wrap the function and its call site to use PG_VERSION_NUM
>= 170000 instead of PG_VERSION_NUM >= 180000 so
build_exclude_extension_string() and its use (which relies on
--exclude-extension and the skip_extension[] list) are compiled for PostgreSQL
17+; locate the two guards surrounding build_exclude_extension_string and its
invocation and change the numeric threshold from 180000 to 170000.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Outside diff comments:
In `@src/spock_sync.c`:
- Around line 106-131: Handle the case where fork() returns -1 in exec_cmd:
after the fork() call check for pid == -1, log/ereport the fork failure
(including errno via %m) and return an error indicator (e.g., set stat = -1 and
return it) without calling waitpid; only call waitpid when pid > 0 and proceed
with the existing child handling for pid == 0 in the same function.
- Around line 156-174: The preprocessor guards erroneously require PostgreSQL 18
for the build_exclude_extension_string feature; update both occurrences that
wrap the function and its call site to use PG_VERSION_NUM >= 170000 instead of
PG_VERSION_NUM >= 180000 so build_exclude_extension_string() and its use (which
relies on --exclude-extension and the skip_extension[] list) are compiled for
PostgreSQL 17+; locate the two guards surrounding build_exclude_extension_string
and its invocation and change the numeric threshold from 180000 to 170000.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

Comments