Fix log filename generation and source path space escaping#2
Open
reallyseth wants to merge 1 commit into
Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Ports the fixes from getsentry/XcodeBuildMCP#467 directly into xcodemake, plus a follow-up correctness fix for space escaping.
Log filename generation
Previously the capture log was named
xcodemake @original_ARGV.log, interpolating the raw xcodebuild arguments directly. When arguments contained absolute paths (e.g.-derivedDataPath /Users/.../DerivedData), the embedded slashes produced invalid filenames.The log name is now derived from the arguments but:
/,:) and other filesystem-unsafe characters with_-<hash>.log) so distinct invocations stay unique even after truncationAs a side benefit, the
find ... -newer '$log'freshness check is now safer, since the log name no longer contains spaces or slashes.Source path space escaping
Source paths containing spaces were emitted unescaped in Makefile prerequisites for the SwiftDriver path (Xcode 16.3+), where sources come from the JSON output-file-map as raw paths.
makethen treated a single dependency as two, breaking builds for projects on paths with spaces.Prerequisite source paths are now normalized (unescape any existing space escaping, then escape once) in all three dependency branches — CompileC, SwiftDriver, and SwiftCompile. The normalization keeps escaping idempotent, so paths that arrive already backslash-escaped from the build log (CompileC/SwiftCompile) are not double-escaped, while raw JSON paths (SwiftDriver) are escaped correctly.
Testing
perl -c xcodemakepasses.\escape for a path containing a space.