Skip to content

Commit ebc2048

Browse files
hahnleeanthonyshew
andauthored
fix: Use -z option to git commands to handle unicode file paths (#10844)
### Description ## Summary Added the `-z` option to git commands to separate file paths with null bytes (`\0`) instead of newlines. ## Why? When git diff outputs file paths containing Unicode characters (e.g., `apps/docs/app/테스트.ts`), it wraps them in quotes (e.g., `"apps/docs/app/\355\205\214\354\212\244\355\212\270.ts"`). This causes issues in the `is_file_in_package` function, which fails to properly recognize these file paths. ## Importance If a filename contains non-ASCII characters (such as CJK), Turbo’s filter logic fails. This creates friction for developers in non-English locales, including myself. In particular, turbo-ignore does not trigger correctly, which can break deployments on Vercel. ## Solution Changes made: 1. Added `-z` option to `diff-tree`, `ls-files`, and `diff` commands 2. Modified `add_files_from_stdout` function to process null byte-separated output ### Testing Instructions ## Reproducing Unicode Filename Diff Format 1. Clone https://github.com/hahnlee/repro-turbo-with-unicode 2. Compare outputs of: ```bash git diff-tree -r --name-only --no-commit-id HEAD~1 HEAD git diff-tree -r --name-only --no-commit-id HEAD~2 HEAD ``` <details> <summary>git diff-tree -r --name-only --no-commit-id HEAD~1 HEAD</summary> <pre><code>"apps/docs/app/\355\205\214\354\212\244\355\212\270.ts"</code></pre> </details> <details> <summary>git diff-tree -r --name-only --no-commit-id HEAD~2 HEAD</summary> <pre><code>apps/docs/app/test.ts "apps/docs/app/\355\205\214\354\212\244\355\212\270.ts"</code></pre> </details> 3. Contrast with the -z form: ```bash git diff-tree -r --name-only --no-commit-id -z HEAD~1 HEAD ``` Here filenames are emitted as raw UTF-8 with NUL delimiters (no quotes). ```bash apps/docs/app/테스트.ts ``` ## Reproducing the Turbo Failure 1. Clone https://github.com/hahnlee/repro-turbo-with-unicode 2. Compare outputs of: ```bash turbo run "build" --filter="docs...[HEAD~1]" --dry=json -vv turbo run "build" --filter="docs...[HEAD~2]" --dry=json -vv ``` <details> <summary>turbo run "build" --filter="docs...[HEAD~1]" --dry=json -vv</summary> ```bash 2025-09-13T14:41:25.578+0900 [DEBUG] turborepo_lib::shim: Global turbo version: 2.5.6 2025-09-13T14:41:25.586+0900 [DEBUG] turborepo_lib::shim: Repository Root: /Users/hahnlee/Work/repro-turbo-with-unicode 2025-09-13T14:41:25.587+0900 [DEBUG] turborepo_lib::shim::local_turbo_state: No local turbo binary found at: /Users/hahnlee/Work/repro-turbo-with-unicode/node_modules/turbo-darwin-arm64/bin/turbo 2025-09-13T14:41:25.587+0900 [DEBUG] turborepo_lib::shim::local_turbo_state: No local turbo binary found at: /Users/hahnlee/Work/repro-turbo-with-unicode/node_modules/turbo/node_modules/turbo-darwin-arm64/bin/turbo 2025-09-13T14:41:25.587+0900 [DEBUG] turborepo_lib::shim::local_turbo_state: No local turbo binary found at: /Users/hahnlee/Work/repro-turbo-with-unicode/node_modules/.pnpm/[email protected]/node_modules/turbo-darwin-arm64/bin/turbo 2025-09-13T14:41:25.587+0900 [DEBUG] turborepo_lib::shim::local_turbo_config: downloading correct local version not enabled 2025-09-13T14:41:25.590+0900 [DEBUG] turborepo_lib::shim: Running command as global turbo WARNING No locally installed `turbo` found in your repository. Using globally installed version (2.5.6), which can cause unexpected behavior. Installing the version in your repository (^2.5.6) before calling `turbo` will result in more predictable behavior across environments. turbo 2.5.6 2025-09-13T14:41:25.976+0900 [DEBUG] turborepo_process: spawning children with pty: true 2025-09-13T14:41:25.978+0900 [DEBUG] turborepo_lib::daemon::connector: looking for pid in lockfile: AbsoluteSystemPathBuf("/var/folders/t4/qqflgy6n3rgd5dcnv2r4x0nh0000gn/T/turbod/a3408d9dd9f4ac71/turbod.pid") 2025-09-13T14:41:25.979+0900 [DEBUG] turborepo_lib::daemon::connector: found pid: 85135 2025-09-13T14:41:25.979+0900 [DEBUG] turborepo_lib::daemon::connector: got daemon with pid: 85135 2025-09-13T14:41:25.979+0900 [DEBUG] turborepo_lib::daemon::connector: creating AbsoluteSystemPath("/var/folders/t4/qqflgy6n3rgd5dcnv2r4x0nh0000gn/T/turbod/a3408d9dd9f4ac71") 2025-09-13T14:41:25.979+0900 [DEBUG] turborepo_lib::daemon::connector: watching AbsoluteSystemPath("/var/folders/t4/qqflgy6n3rgd5dcnv2r4x0nh0000gn/T/turbod/a3408d9dd9f4ac71") 2025-09-13T14:41:25.979+0900 [DEBUG] turborepo_lib::daemon::connector: creating AbsoluteSystemPath("/var/folders/t4/qqflgy6n3rgd5dcnv2r4x0nh0000gn/T/turbod/a3408d9dd9f4ac71") 2025-09-13T14:41:25.980+0900 [DEBUG] turborepo_lib::daemon::connector: watching AbsoluteSystemPath("/var/folders/t4/qqflgy6n3rgd5dcnv2r4x0nh0000gn/T/turbod/a3408d9dd9f4ac71") 2025-09-13T14:41:25.980+0900 [DEBUG] turborepo_lib::daemon::connector: connecting to socket: /var/folders/t4/qqflgy6n3rgd5dcnv2r4x0nh0000gn/T/turbod/a3408d9dd9f4ac71/turbod.sock 2025-09-13T14:41:25.982+0900 [DEBUG] tower::buffer::worker: "processing request" 2025-09-13T14:41:25.984+0900 [DEBUG] turborepo_lib::daemon::connector: connected in 5365µs 2025-09-13T14:41:25.984+0900 [DEBUG] turborepo_lib::run::builder: running in daemon mode 2025-09-13T14:41:25.985+0900 [DEBUG] turborepo_repository::discovery: discovering packages using caching strategy 2025-09-13T14:41:25.985+0900 [DEBUG] turborepo_repository::discovery: discovering packages using primary strategy 2025-09-13T14:41:25.985+0900 [DEBUG] turborepo_repository::discovery: discovering packages using fallback strategy 2025-09-13T14:41:25.985+0900 [DEBUG] turborepo_repository::discovery: attempting primary strategy 2025-09-13T14:41:25.985+0900 [DEBUG] turborepo_lib::run::package_discovery: discovering packages using daemon 2025-09-13T14:41:25.985+0900 [DEBUG] tower::buffer::worker: "processing request" 2025-09-13T14:41:25.996+0900 [DEBUG] turborepo_repository::discovery: primary strategy timed out, attempting fallback strategy 2025-09-13T14:41:25.996+0900 [DEBUG] turborepo_repository::discovery: discovering packages using local strategy 2025-09-13T14:41:25.997+0900 [DEBUG] globwalk: processing includes: ["apps/*/package.json", "packages/*/package.json"] 2025-09-13T14:41:25.997+0900 [DEBUG] globwalk: processing excludes: ["**/node_modules/**", "**/bower_components/**"] 2025-09-13T14:41:25.997+0900 [DEBUG] globwalk: processed includes: ["/Users/hahnlee/Work/repro-turbo-with-unicode/apps/*/package.json", "/Users/hahnlee/Work/repro-turbo-with-unicode/packages/*/package.json"] 2025-09-13T14:41:25.997+0900 [DEBUG] globwalk: processed excludes: ["/Users/hahnlee/Work/repro-turbo-with-unicode/**/node_modules/**", "/Users/hahnlee/Work/repro-turbo-with-unicode/**/bower_components/**"] 2025-09-13T14:41:26.000+0900 [DEBUG] turborepo_repository::discovery: discovering packages using caching strategy 2025-09-13T14:41:26.000+0900 [DEBUG] turborepo_repository::discovery: discovering packages using caching strategy 2025-09-13T14:41:26.005+0900 [DEBUG] turborepo_repository::discovery: discovering packages using caching strategy 2025-09-13T14:41:26.005+0900 [DEBUG] turborepo_lib::run::task_access: TASK ACCESS TRACE: unable to restore config from cache 2025-09-13T14:41:26.046+0900 [DEBUG] turborepo_lib::run::scope::change_detector: lockfile did not change 2025-09-13T14:41:26.046+0900 [DEBUG] turborepo_lib::run::scope::change_detector: changed files: ["\"apps/docs/app/\\355\\205\\214\\354\\212\\244\\355\\212\\270.ts\""] 2025-09-13T14:41:26.047+0900 [DEBUG] turborepo_repository::change_mapper: "apps/docs/app/\355\205\214\354\212\244\355\212\270.ts" changes "//" 2025-09-13T14:41:26.047+0900 [DEBUG] turborepo_repository::change_mapper: the lockfile did not change 2025-09-13T14:41:26.047+0900 [DEBUG] turborepo_lib::run::scope::change_detector: 1 packages changed: ["//"] 2025-09-13T14:41:26.048+0900 [DEBUG] turborepo_lib::run::global_hash: global hash env vars [] 2025-09-13T14:41:26.048+0900 [DEBUG] turborepo_lib::run::global_hash: external deps hash: 357e0f85fc2e872a 2025-09-13T14:41:26.073+0900 [DEBUG] turborepo_lib::run: running visitor { "id": "32dEXDplJjKaIuDHOXPZJupOaA0", "version": "1", "turboVersion": "2.5.6", "monorepo": true, "globalCacheInputs": { "rootKey": "I can’t see ya, but I know you’re here", "files": {}, "hashOfExternalDependencies": "357e0f85fc2e872a", "hashOfInternalDependencies": "", "environmentVariables": { "specified": { "env": [], "passThroughEnv": null }, "configured": [], "inferred": [], "passthrough": null }, "engines": { "node": ">=18" } }, "packages": [], "envMode": "strict", "frameworkInference": true, "tasks": [], "user": "", "scm": { "type": "git", "sha": "7f951fdf95bf1ec5773427b2c04a4bc54ea0d32a", "branch": "main" } } 2025-09-13T14:41:26.075+0900 [DEBUG] turborepo_process: waiting for 0 processes to exit 2025-09-13T14:41:26.598+0900 [DEBUG] turborepo_telemetry: telemetry handle closed ``` </details> <details> <summary>turbo run "build" --filter="docs...[HEAD~2]" --dry=json -vv</summary> ```bash 2025-09-13T14:41:58.160+0900 [DEBUG] turborepo_lib::shim: Global turbo version: 2.5.6 2025-09-13T14:41:58.161+0900 [DEBUG] turborepo_lib::shim: Repository Root: /Users/hahnlee/Work/repro-turbo-with-unicode 2025-09-13T14:41:58.161+0900 [DEBUG] turborepo_lib::shim::local_turbo_state: No local turbo binary found at: /Users/hahnlee/Work/repro-turbo-with-unicode/node_modules/turbo-darwin-arm64/bin/turbo 2025-09-13T14:41:58.161+0900 [DEBUG] turborepo_lib::shim::local_turbo_state: No local turbo binary found at: /Users/hahnlee/Work/repro-turbo-with-unicode/node_modules/turbo/node_modules/turbo-darwin-arm64/bin/turbo 2025-09-13T14:41:58.161+0900 [DEBUG] turborepo_lib::shim::local_turbo_state: No local turbo binary found at: /Users/hahnlee/Work/repro-turbo-with-unicode/node_modules/.pnpm/[email protected]/node_modules/turbo-darwin-arm64/bin/turbo 2025-09-13T14:41:58.161+0900 [DEBUG] turborepo_lib::shim::local_turbo_config: downloading correct local version not enabled 2025-09-13T14:41:58.161+0900 [DEBUG] turborepo_lib::shim: Running command as global turbo WARNING No locally installed `turbo` found in your repository. Using globally installed version (2.5.6), which can cause unexpected behavior. Installing the version in your repository (^2.5.6) before calling `turbo` will result in more predictable behavior across environments. turbo 2.5.6 2025-09-13T14:41:58.538+0900 [DEBUG] turborepo_process: spawning children with pty: true 2025-09-13T14:41:58.539+0900 [DEBUG] turborepo_lib::daemon::connector: looking for pid in lockfile: AbsoluteSystemPathBuf("/var/folders/t4/qqflgy6n3rgd5dcnv2r4x0nh0000gn/T/turbod/a3408d9dd9f4ac71/turbod.pid") 2025-09-13T14:41:58.539+0900 [DEBUG] turborepo_lib::daemon::connector: found pid: 85135 2025-09-13T14:41:58.539+0900 [DEBUG] turborepo_lib::daemon::connector: got daemon with pid: 85135 2025-09-13T14:41:58.539+0900 [DEBUG] turborepo_lib::daemon::connector: creating AbsoluteSystemPath("/var/folders/t4/qqflgy6n3rgd5dcnv2r4x0nh0000gn/T/turbod/a3408d9dd9f4ac71") 2025-09-13T14:41:58.539+0900 [DEBUG] turborepo_lib::daemon::connector: watching AbsoluteSystemPath("/var/folders/t4/qqflgy6n3rgd5dcnv2r4x0nh0000gn/T/turbod/a3408d9dd9f4ac71") 2025-09-13T14:41:58.539+0900 [DEBUG] turborepo_lib::daemon::connector: creating AbsoluteSystemPath("/var/folders/t4/qqflgy6n3rgd5dcnv2r4x0nh0000gn/T/turbod/a3408d9dd9f4ac71") 2025-09-13T14:41:58.539+0900 [DEBUG] turborepo_lib::daemon::connector: watching AbsoluteSystemPath("/var/folders/t4/qqflgy6n3rgd5dcnv2r4x0nh0000gn/T/turbod/a3408d9dd9f4ac71") 2025-09-13T14:41:58.539+0900 [DEBUG] turborepo_lib::daemon::connector: connecting to socket: /var/folders/t4/qqflgy6n3rgd5dcnv2r4x0nh0000gn/T/turbod/a3408d9dd9f4ac71/turbod.sock 2025-09-13T14:41:58.539+0900 [DEBUG] tower::buffer::worker: "processing request" 2025-09-13T14:41:58.541+0900 [DEBUG] turborepo_lib::daemon::connector: connected in 2610µs 2025-09-13T14:41:58.541+0900 [DEBUG] turborepo_lib::run::builder: running in daemon mode 2025-09-13T14:41:58.541+0900 [DEBUG] turborepo_repository::discovery: discovering packages using caching strategy 2025-09-13T14:41:58.541+0900 [DEBUG] turborepo_repository::discovery: discovering packages using primary strategy 2025-09-13T14:41:58.541+0900 [DEBUG] turborepo_repository::discovery: discovering packages using fallback strategy 2025-09-13T14:41:58.541+0900 [DEBUG] turborepo_repository::discovery: attempting primary strategy 2025-09-13T14:41:58.541+0900 [DEBUG] turborepo_lib::run::package_discovery: discovering packages using daemon 2025-09-13T14:41:58.541+0900 [DEBUG] tower::buffer::worker: "processing request" 2025-09-13T14:41:58.552+0900 [DEBUG] turborepo_repository::discovery: primary strategy timed out, attempting fallback strategy 2025-09-13T14:41:58.552+0900 [DEBUG] turborepo_repository::discovery: discovering packages using local strategy 2025-09-13T14:41:58.553+0900 [DEBUG] globwalk: processing includes: ["apps/*/package.json", "packages/*/package.json"] 2025-09-13T14:41:58.553+0900 [DEBUG] globwalk: processing excludes: ["**/node_modules/**", "**/bower_components/**"] 2025-09-13T14:41:58.553+0900 [DEBUG] globwalk: processed includes: ["/Users/hahnlee/Work/repro-turbo-with-unicode/apps/*/package.json", "/Users/hahnlee/Work/repro-turbo-with-unicode/packages/*/package.json"] 2025-09-13T14:41:58.553+0900 [DEBUG] globwalk: processed excludes: ["/Users/hahnlee/Work/repro-turbo-with-unicode/**/node_modules/**", "/Users/hahnlee/Work/repro-turbo-with-unicode/**/bower_components/**"] 2025-09-13T14:41:58.555+0900 [DEBUG] turborepo_repository::discovery: discovering packages using caching strategy 2025-09-13T14:41:58.555+0900 [DEBUG] turborepo_repository::discovery: discovering packages using caching strategy 2025-09-13T14:41:58.559+0900 [DEBUG] turborepo_repository::discovery: discovering packages using caching strategy 2025-09-13T14:41:58.559+0900 [DEBUG] turborepo_lib::run::task_access: TASK ACCESS TRACE: unable to restore config from cache 2025-09-13T14:41:58.601+0900 [DEBUG] turborepo_lib::run::scope::change_detector: lockfile did not change 2025-09-13T14:41:58.601+0900 [DEBUG] turborepo_lib::run::scope::change_detector: changed files: ["apps/docs/app/test.ts", "\"apps/docs/app/\\355\\205\\214\\354\\212\\244\\355\\212\\270.ts\""] 2025-09-13T14:41:58.601+0900 [DEBUG] turborepo_repository::change_mapper: apps/docs/app/test.ts changes "docs" 2025-09-13T14:41:58.601+0900 [DEBUG] turborepo_repository::change_mapper: "apps/docs/app/\355\205\214\354\212\244\355\212\270.ts" changes "//" 2025-09-13T14:41:58.601+0900 [DEBUG] turborepo_repository::change_mapper: the lockfile did not change 2025-09-13T14:41:58.601+0900 [DEBUG] turborepo_lib::run::scope::change_detector: 2 packages changed: ["docs", "//"] 2025-09-13T14:41:58.601+0900 [DEBUG] turborepo_lib::turbo_json::loader: path: /Users/hahnlee/Work/repro-turbo-with-unicode/apps/docs, turbo_json: Ok(None), turbo_jsonc: Ok(None) 2025-09-13T14:41:58.601+0900 [DEBUG] turborepo_lib::turbo_json::loader: path: /Users/hahnlee/Work/repro-turbo-with-unicode/apps/docs, turbo_json: Ok(None), turbo_jsonc: Ok(None) 2025-09-13T14:41:58.601+0900 [DEBUG] turborepo_lib::turbo_json::loader: path: /Users/hahnlee/Work/repro-turbo-with-unicode/packages/eslint-config, turbo_json: Ok(None), turbo_jsonc: Ok(None) 2025-09-13T14:41:58.601+0900 [DEBUG] turborepo_lib::turbo_json::loader: path: /Users/hahnlee/Work/repro-turbo-with-unicode/packages/typescript-config, turbo_json: Ok(None), turbo_jsonc: Ok(None) 2025-09-13T14:41:58.601+0900 [DEBUG] turborepo_lib::turbo_json::loader: path: /Users/hahnlee/Work/repro-turbo-with-unicode/packages/ui, turbo_json: Ok(None), turbo_jsonc: Ok(None) 2025-09-13T14:41:58.601+0900 [DEBUG] turborepo_lib::turbo_json::loader: path: /Users/hahnlee/Work/repro-turbo-with-unicode/packages/eslint-config, turbo_json: Ok(None), turbo_jsonc: Ok(None) 2025-09-13T14:41:58.601+0900 [DEBUG] turborepo_lib::turbo_json::loader: path: /Users/hahnlee/Work/repro-turbo-with-unicode/packages/typescript-config, turbo_json: Ok(None), turbo_jsonc: Ok(None) 2025-09-13T14:41:58.630+0900 [DEBUG] globwalk: processing includes: ["packages/typescript-config/$TURBO_DEFAULT$", "packages/typescript-config/.env*", "packages/typescript-config/package.json", "packages/typescript-config/turbo.json", "packages/typescript-config/turbo.jsonc"] 2025-09-13T14:41:58.630+0900 [DEBUG] globwalk: processing excludes: [] 2025-09-13T14:41:58.630+0900 [DEBUG] globwalk: '/Users/hahnlee/Work/repro-turbo-with-unicode/packages/typescript-config/turbo.json' doesn't have metadata 2025-09-13T14:41:58.630+0900 [DEBUG] globwalk: '/Users/hahnlee/Work/repro-turbo-with-unicode/packages/typescript-config/turbo.jsonc' doesn't have metadata 2025-09-13T14:41:58.630+0900 [DEBUG] globwalk: processed includes: ["/Users/hahnlee/Work/repro-turbo-with-unicode/packages/typescript-config/$TURBO_DEFAULT$", "/Users/hahnlee/Work/repro-turbo-with-unicode/packages/typescript-config/.env*", "/Users/hahnlee/Work/repro-turbo-with-unicode/packages/typescript-config/package.json", "/Users/hahnlee/Work/repro-turbo-with-unicode/packages/typescript-config/turbo.json", "/Users/hahnlee/Work/repro-turbo-with-unicode/packages/typescript-config/turbo.jsonc"] 2025-09-13T14:41:58.630+0900 [DEBUG] globwalk: processed excludes: [] 2025-09-13T14:41:58.630+0900 [DEBUG] globwalk: processing includes: ["packages/ui/$TURBO_DEFAULT$", "packages/ui/.env*", "packages/ui/package.json", "packages/ui/turbo.json", "packages/ui/turbo.jsonc"] 2025-09-13T14:41:58.630+0900 [DEBUG] globwalk: processing excludes: [] 2025-09-13T14:41:58.630+0900 [DEBUG] globwalk: '/Users/hahnlee/Work/repro-turbo-with-unicode/packages/ui/turbo.json' doesn't have metadata 2025-09-13T14:41:58.630+0900 [DEBUG] globwalk: '/Users/hahnlee/Work/repro-turbo-with-unicode/packages/ui/turbo.jsonc' doesn't have metadata 2025-09-13T14:41:58.631+0900 [DEBUG] globwalk: processed includes: ["/Users/hahnlee/Work/repro-turbo-with-unicode/packages/ui/$TURBO_DEFAULT$", "/Users/hahnlee/Work/repro-turbo-with-unicode/packages/ui/.env*", "/Users/hahnlee/Work/repro-turbo-with-unicode/packages/ui/package.json", "/Users/hahnlee/Work/repro-turbo-with-unicode/packages/ui/turbo.json", "/Users/hahnlee/Work/repro-turbo-with-unicode/packages/ui/turbo.jsonc"] 2025-09-13T14:41:58.631+0900 [DEBUG] globwalk: processed excludes: [] 2025-09-13T14:41:58.631+0900 [DEBUG] globwalk: processing includes: ["packages/eslint-config/$TURBO_DEFAULT$", "packages/eslint-config/.env*", "packages/eslint-config/package.json", "packages/eslint-config/turbo.json", "packages/eslint-config/turbo.jsonc"] 2025-09-13T14:41:58.631+0900 [DEBUG] globwalk: processing excludes: [] 2025-09-13T14:41:58.631+0900 [DEBUG] globwalk: '/Users/hahnlee/Work/repro-turbo-with-unicode/packages/eslint-config/turbo.json' doesn't have metadata 2025-09-13T14:41:58.631+0900 [DEBUG] globwalk: '/Users/hahnlee/Work/repro-turbo-with-unicode/packages/eslint-config/turbo.jsonc' doesn't have metadata 2025-09-13T14:41:58.631+0900 [DEBUG] globwalk: processed includes: ["/Users/hahnlee/Work/repro-turbo-with-unicode/packages/eslint-config/$TURBO_DEFAULT$", "/Users/hahnlee/Work/repro-turbo-with-unicode/packages/eslint-config/.env*", "/Users/hahnlee/Work/repro-turbo-with-unicode/packages/eslint-config/package.json", "/Users/hahnlee/Work/repro-turbo-with-unicode/packages/eslint-config/turbo.json", "/Users/hahnlee/Work/repro-turbo-with-unicode/packages/eslint-config/turbo.jsonc"] 2025-09-13T14:41:58.631+0900 [DEBUG] globwalk: processed excludes: [] 2025-09-13T14:41:58.631+0900 [DEBUG] globwalk: processing includes: ["apps/docs/$TURBO_DEFAULT$", "apps/docs/.env*", "apps/docs/package.json", "apps/docs/turbo.json", "apps/docs/turbo.jsonc"] 2025-09-13T14:41:58.631+0900 [DEBUG] globwalk: processing excludes: [] 2025-09-13T14:41:58.631+0900 [DEBUG] globwalk: '/Users/hahnlee/Work/repro-turbo-with-unicode/apps/docs/turbo.json' doesn't have metadata 2025-09-13T14:41:58.631+0900 [DEBUG] globwalk: '/Users/hahnlee/Work/repro-turbo-with-unicode/apps/docs/turbo.jsonc' doesn't have metadata 2025-09-13T14:41:58.631+0900 [DEBUG] globwalk: processed includes: ["/Users/hahnlee/Work/repro-turbo-with-unicode/apps/docs/$TURBO_DEFAULT$", "/Users/hahnlee/Work/repro-turbo-with-unicode/apps/docs/.env*", "/Users/hahnlee/Work/repro-turbo-with-unicode/apps/docs/package.json", "/Users/hahnlee/Work/repro-turbo-with-unicode/apps/docs/turbo.json", "/Users/hahnlee/Work/repro-turbo-with-unicode/apps/docs/turbo.jsonc"] 2025-09-13T14:41:58.631+0900 [DEBUG] globwalk: processed excludes: [] 2025-09-13T14:41:58.632+0900 [DEBUG] turborepo_lib::run::global_hash: global hash env vars [] 2025-09-13T14:41:58.632+0900 [DEBUG] turborepo_lib::run::global_hash: external deps hash: 357e0f85fc2e872a 2025-09-13T14:41:58.657+0900 [DEBUG] turborepo_lib::run: running visitor 2025-09-13T14:41:58.658+0900 [DEBUG] turborepo_lib::task_graph::visitor: task @repo/typescript-config#build hash is e2c5fe89ff31c9f0 2025-09-13T14:41:58.658+0900 [DEBUG] turborepo_lib::task_graph::visitor: task @repo/eslint-config#build hash is 90d1c675729e05b6 2025-09-13T14:41:58.658+0900 [DEBUG] turborepo_lib::task_graph::visitor: task @repo/ui#build hash is 1bd745cc8d4fc385 2025-09-13T14:41:58.659+0900 [DEBUG] turborepo_lib::task_hash: auto detected framework for docs 2025-09-13T14:41:58.659+0900 [DEBUG] turborepo_lib::task_hash: framework: nextjs, env_prefix: ["NEXT_PUBLIC_*"] 2025-09-13T14:41:58.659+0900 [DEBUG] turborepo_lib::task_graph::visitor: task docs#build hash is d422c82cfc568523 { "id": "32dEbIgpqFdNJ8WJMhspSbFAKyL", "version": "1", "turboVersion": "2.5.6", "monorepo": true, "globalCacheInputs": { "rootKey": "I can’t see ya, but I know you’re here", "files": {}, "hashOfExternalDependencies": "357e0f85fc2e872a", "hashOfInternalDependencies": "", "environmentVariables": { "specified": { "env": [], "passThroughEnv": null }, "configured": [], "inferred": [], "passthrough": null }, "engines": { "node": ">=18" } }, "packages": [ "docs" ], "envMode": "strict", "frameworkInference": true, "tasks": [ { "taskId": "@repo/eslint-config#build", "task": "build", "package": "@repo/eslint-config", "hash": "90d1c675729e05b6", "inputs": { "README.md": "8b42d901b0e8dee2e21313ec0442c50e9fef038a", "base.js": "09d316efdb6f6db4f6141815e87980a598f6ff54", "next.js": "6bf01a74edb72f94da7957298427c89debdedc34", "package.json": "c18143d61895bfef8c29778d7ee6b255d72b74d3", "react-internal.js": "daeccba24d4f4b95ad293d175b570acd126628a9" }, "hashOfExternalDependencies": "c87f501e87a7855f", "cache": { "local": false, "remote": false, "status": "MISS", "timeSaved": 0 }, "command": "<NONEXISTENT>", "cliArguments": [], "outputs": [ ".next/**" ], "excludedOutputs": [ ".next/cache/**" ], "logFile": "packages/eslint-config/.turbo/turbo-build.log", "directory": "packages/eslint-config", "dependencies": [], "dependents": [ "@repo/ui#build", "docs#build" ], "with": [], "resolvedTaskDefinition": { "outputs": [ "!.next/cache/**", ".next/**" ], "cache": true, "dependsOn": [ "^build" ], "inputs": [ "$TURBO_DEFAULT$", ".env*" ], "outputLogs": "full", "persistent": false, "interruptible": false, "env": [], "passThroughEnv": null, "interactive": false }, "expandedOutputs": [], "framework": "", "envMode": "strict", "environmentVariables": { "specified": { "env": [], "passThroughEnv": null }, "configured": [], "inferred": [], "passthrough": null } }, { "taskId": "@repo/typescript-config#build", "task": "build", "package": "@repo/typescript-config", "hash": "e2c5fe89ff31c9f0", "inputs": { "base.json": "5117f2a3d1c5fe54a344a7152acbe366fe63cdda", "nextjs.json": "e6defa48fce860cf5570f268d4880161a74789c8", "package.json": "27c0e60436aac79bd14661e016c8c5721c5db6d6", "react-library.json": "c3a1b26fbb3b6ad5d606836247a8ca3a1be051c6" }, "hashOfExternalDependencies": "459c029558afe716", "cache": { "local": false, "remote": false, "status": "MISS", "timeSaved": 0 }, "command": "<NONEXISTENT>", "cliArguments": [], "outputs": [ ".next/**" ], "excludedOutputs": [ ".next/cache/**" ], "logFile": "packages/typescript-config/.turbo/turbo-build.log", "directory": "packages/typescript-config", "dependencies": [], "dependents": [ "@repo/ui#build", "docs#build" ], "with": [], "resolvedTaskDefinition": { "outputs": [ "!.next/cache/**", ".next/**" ], "cache": true, "dependsOn": [ "^build" ], "inputs": [ "$TURBO_DEFAULT$", ".env*" ], "outputLogs": "full", "persistent": false, "interruptible": false, "env": [], "passThroughEnv": null, "interactive": false }, "expandedOutputs": [], "framework": "", "envMode": "strict", "environmentVariables": { "specified": { "env": [], "passThroughEnv": null }, "configured": [], "inferred": [], "passthrough": null } }, { "taskId": "@repo/ui#build", "task": "build", "package": "@repo/ui", "hash": "1bd745cc8d4fc385", "inputs": { "eslint.config.mjs": "19170f88edaf8893fdc80d2c616c081f2d838861", "package.json": "c820347d203fac3d8a6f313e87e4f11888863821", "src/button.tsx": "78e5420c3f606fcc5959ef45cf9c930148d1ec73", "src/card.tsx": "7b988937b9a1d98eca18d2b87fdba837a4fe3dd0", "src/code.tsx": "f7cbd22a8618fcb6dca4341cc15dccfb48c0e74d", "tsconfig.json": "ca86687c4bb77d8aed541bc31f9e81156880764a" }, "hashOfExternalDependencies": "4832a154da2aa18b", "cache": { "local": false, "remote": false, "status": "MISS", "timeSaved": 0 }, "command": "<NONEXISTENT>", "cliArguments": [], "outputs": [ ".next/**" ], "excludedOutputs": [ ".next/cache/**" ], "logFile": "packages/ui/.turbo/turbo-build.log", "directory": "packages/ui", "dependencies": [ "@repo/eslint-config#build", "@repo/typescript-config#build" ], "dependents": [ "docs#build" ], "with": [], "resolvedTaskDefinition": { "outputs": [ "!.next/cache/**", ".next/**" ], "cache": true, "dependsOn": [ "^build" ], "inputs": [ "$TURBO_DEFAULT$", ".env*" ], "outputLogs": "full", "persistent": false, "interruptible": false, "env": [], "passThroughEnv": null, "interactive": false }, "expandedOutputs": [], "framework": "", "envMode": "strict", "environmentVariables": { "specified": { "env": [], "passThroughEnv": null }, "configured": [], "inferred": [], "passthrough": null } }, { "taskId": "docs#build", "task": "build", "package": "docs", "hash": "d422c82cfc568523", "inputs": { ".gitignore": "f886745c5216623d70058427ddd40ecf6ebf84f7", "README.md": "a98bfa8140e14c75a3675f1666a6f587d4d25fe5", "app/favicon.ico": "718d6fea4835ec2d246af9800eddb7ffb276240c", "app/fonts/GeistMonoVF.woff": "f2ae185cbfd16946a534d819e9eb03924abbcc49", "app/fonts/GeistVF.woff": "1b62daacff96dad6584e71cd962051b82957c313", "app/globals.css": "6af7ecbbb8656b1295acccd1b6cdd1da88d6c855", "app/layout.tsx": "8469537555ad68b14377be257758ab1876d3ff5b", "app/page.module.css": "3630662c6f3119c94bea5a7fdeb98d99df322f2f", "app/page.tsx": "e726335a89cff289eab34248f5aacab1fa6e6523", "app/test.ts": "533170cc85fd9263afcdb553dddc34bffe7afb44", "app/테스트.ts": "533170cc85fd9263afcdb553dddc34bffe7afb44", "eslint.config.js": "e8759ff50fbca5c63fbaac5154b7a7d5876f72be", "next.config.js": "4678774e6d606704bce1897a5dab960cd798bf66", "package.json": "a9c661cb7961bf71d710d101b9d96c551c1e3f3b", "public/file-text.svg": "9cfb3c98674c3553ae58854c31f9302cc1f72a24", "public/globe.svg": "4230a3d2071c406b7e4c7b297d247fc194be540c", "public/next.svg": "5174b28c565c285e3e312ec5178be64fbeca8398", "public/turborepo-dark.svg": "dae38fed549745d94f3380a9280864ae0f797c1f", "public/turborepo-light.svg": "ddea915815874759a0cd6dd54dbd197b874c3c99", "public/vercel.svg": "0164ddc5ad9db8a097651e72e9fe9c9caf6e394a", "public/window.svg": "bbc780069c332dbf9b048a30e7d1f5358921c534", "tsconfig.json": "7aef056980d5671f71555aa0fe6abd88f6be8305" }, "hashOfExternalDependencies": "1814afc0d83c6c37", "cache": { "local": false, "remote": false, "status": "MISS", "timeSaved": 0 }, "command": "next build", "cliArguments": [], "outputs": [ ".next/**" ], "excludedOutputs": [ ".next/cache/**" ], "logFile": "apps/docs/.turbo/turbo-build.log", "directory": "apps/docs", "dependencies": [ "@repo/eslint-config#build", "@repo/typescript-config#build", "@repo/ui#build" ], "dependents": [], "with": [], "resolvedTaskDefinition": { "outputs": [ "!.next/cache/**", ".next/**" ], "cache": true, "dependsOn": [ "^build" ], "inputs": [ "$TURBO_DEFAULT$", ".env*" ], "outputLogs": "full", "persistent": false, "interruptible": false, "env": [], "passThroughEnv": null, "interactive": false }, "expandedOutputs": [], "framework": "nextjs", "envMode": "strict", "environmentVariables": { "specified": { "env": [], "passThroughEnv": null }, "configured": [], "inferred": [], "passthrough": null } } ], "user": "", "scm": { "type": "git", "sha": "7f951fdf95bf1ec5773427b2c04a4bc54ea0d32a", "branch": "main" } } ...Finishing writing to cache... 2025-09-13T14:41:58.660+0900 [DEBUG] turborepo_process: waiting for 0 processes to exit 2025-09-13T14:41:59.201+0900 [DEBUG] turborepo_telemetry: telemetry handle closed ``` </details> In both cases, `apps/docs` was modified. However, in the first case the `docs` build is **not** triggered due to quoted path handling. <details> <summary>Reproduction after this change</summary> ```bash 2025-09-13T14:45:11.624+0900 [DEBUG] turborepo_lib::shim: Global turbo version: 2.5.7-canary.0 2025-09-13T14:45:11.628+0900 [DEBUG] turborepo_lib::shim: Repository Root: /Users/hahnlee/Work/repro-turbo-with-unicode 2025-09-13T14:45:11.629+0900 [DEBUG] turborepo_lib::shim::local_turbo_state: No local turbo binary found at: /Users/hahnlee/Work/repro-turbo-with-unicode/node_modules/turbo-darwin-arm64/bin/turbo 2025-09-13T14:45:11.629+0900 [DEBUG] turborepo_lib::shim::local_turbo_state: No local turbo binary found at: /Users/hahnlee/Work/repro-turbo-with-unicode/node_modules/turbo/node_modules/turbo-darwin-arm64/bin/turbo 2025-09-13T14:45:11.629+0900 [DEBUG] turborepo_lib::shim::local_turbo_state: No local turbo binary found at: /Users/hahnlee/Work/repro-turbo-with-unicode/node_modules/.pnpm/[email protected]/node_modules/turbo-darwin-arm64/bin/turbo 2025-09-13T14:45:11.629+0900 [DEBUG] turborepo_lib::shim::local_turbo_config: downloading correct local version not enabled 2025-09-13T14:45:11.631+0900 [DEBUG] turborepo_lib::shim: Running command as global turbo WARNING No locally installed `turbo` found in your repository. Using globally installed version (2.5.7-canary.0), which can cause unexpected behavior. Installing the version in your repository (^2.5.6) before calling `turbo` will result in more predictable behavior across environments. turbo 2.5.7-canary.0 2025-09-13T14:45:12.027+0900 [DEBUG] turborepo_process: spawning children with pty: true 2025-09-13T14:45:12.028+0900 [DEBUG] turborepo_lib::daemon::connector: looking for pid in lockfile: AbsoluteSystemPathBuf("/var/folders/t4/qqflgy6n3rgd5dcnv2r4x0nh0000gn/T/turbod/a3408d9dd9f4ac71/turbod.pid") 2025-09-13T14:45:12.029+0900 [DEBUG] turborepo_lib::daemon::connector: found pid: 85135 2025-09-13T14:45:12.029+0900 [DEBUG] turborepo_lib::daemon::connector: got daemon with pid: 85135 2025-09-13T14:45:12.030+0900 [DEBUG] turborepo_lib::daemon::connector: creating AbsoluteSystemPath("/var/folders/t4/qqflgy6n3rgd5dcnv2r4x0nh0000gn/T/turbod/a3408d9dd9f4ac71") 2025-09-13T14:45:12.030+0900 [DEBUG] turborepo_lib::daemon::connector: watching AbsoluteSystemPath("/var/folders/t4/qqflgy6n3rgd5dcnv2r4x0nh0000gn/T/turbod/a3408d9dd9f4ac71") 2025-09-13T14:45:12.030+0900 [DEBUG] turborepo_lib::daemon::connector: creating AbsoluteSystemPath("/var/folders/t4/qqflgy6n3rgd5dcnv2r4x0nh0000gn/T/turbod/a3408d9dd9f4ac71") 2025-09-13T14:45:12.030+0900 [DEBUG] turborepo_lib::daemon::connector: watching AbsoluteSystemPath("/var/folders/t4/qqflgy6n3rgd5dcnv2r4x0nh0000gn/T/turbod/a3408d9dd9f4ac71") 2025-09-13T14:45:12.030+0900 [DEBUG] turborepo_lib::daemon::connector: connecting to socket: /var/folders/t4/qqflgy6n3rgd5dcnv2r4x0nh0000gn/T/turbod/a3408d9dd9f4ac71/turbod.sock 2025-09-13T14:45:12.031+0900 [DEBUG] tower::buffer::worker: "processing request" 2025-09-13T14:45:12.032+0900 [DEBUG] turborepo_lib::daemon::connector: connected in 3976µs 2025-09-13T14:45:12.032+0900 [DEBUG] turborepo_lib::run::builder: running in daemon mode 2025-09-13T14:45:12.033+0900 [DEBUG] turborepo_repository::discovery: discovering packages using caching strategy 2025-09-13T14:45:12.033+0900 [DEBUG] turborepo_repository::discovery: discovering packages using primary strategy 2025-09-13T14:45:12.033+0900 [DEBUG] turborepo_repository::discovery: discovering packages using fallback strategy 2025-09-13T14:45:12.033+0900 [DEBUG] turborepo_repository::discovery: attempting primary strategy 2025-09-13T14:45:12.033+0900 [DEBUG] turborepo_lib::run::package_discovery: discovering packages using daemon 2025-09-13T14:45:12.033+0900 [DEBUG] tower::buffer::worker: "processing request" 2025-09-13T14:45:12.044+0900 [DEBUG] turborepo_repository::discovery: primary strategy timed out, attempting fallback strategy 2025-09-13T14:45:12.044+0900 [DEBUG] turborepo_repository::discovery: discovering packages using local strategy 2025-09-13T14:45:12.045+0900 [DEBUG] globwalk: processing includes: ["apps/*/package.json", "packages/*/package.json"] 2025-09-13T14:45:12.045+0900 [DEBUG] globwalk: processing excludes: ["**/node_modules/**", "**/bower_components/**"] 2025-09-13T14:45:12.045+0900 [DEBUG] globwalk: processed includes: ["/Users/hahnlee/Work/repro-turbo-with-unicode/apps/*/package.json", "/Users/hahnlee/Work/repro-turbo-with-unicode/packages/*/package.json"] 2025-09-13T14:45:12.045+0900 [DEBUG] globwalk: processed excludes: ["/Users/hahnlee/Work/repro-turbo-with-unicode/**/node_modules/**", "/Users/hahnlee/Work/repro-turbo-with-unicode/**/bower_components/**"] 2025-09-13T14:45:12.049+0900 [DEBUG] turborepo_repository::discovery: discovering packages using caching strategy 2025-09-13T14:45:12.050+0900 [DEBUG] turborepo_repository::discovery: discovering packages using caching strategy 2025-09-13T14:45:12.061+0900 [DEBUG] turborepo_repository::discovery: discovering packages using caching strategy 2025-09-13T14:45:12.061+0900 [DEBUG] turborepo_lib::run::task_access: TASK ACCESS TRACE: unable to restore config from cache 2025-09-13T14:45:12.106+0900 [DEBUG] turborepo_lib::run::scope::change_detector: lockfile did not change 2025-09-13T14:45:12.106+0900 [DEBUG] turborepo_lib::run::scope::change_detector: changed files: ["apps/docs/app/테스트.ts"] 2025-09-13T14:45:12.106+0900 [DEBUG] turborepo_repository::change_mapper: apps/docs/app/테스트.ts changes "docs" 2025-09-13T14:45:12.107+0900 [DEBUG] turborepo_repository::change_mapper: the lockfile did not change 2025-09-13T14:45:12.107+0900 [DEBUG] turborepo_lib::run::scope::change_detector: 1 packages changed: ["docs"] 2025-09-13T14:45:12.107+0900 [DEBUG] turborepo_lib::turbo_json::loader: path: /Users/hahnlee/Work/repro-turbo-with-unicode/apps/docs, turbo_json: Ok(None), turbo_jsonc: Ok(None) 2025-09-13T14:45:12.107+0900 [DEBUG] turborepo_lib::turbo_json::loader: path: /Users/hahnlee/Work/repro-turbo-with-unicode/apps/docs, turbo_json: Ok(None), turbo_jsonc: Ok(None) 2025-09-13T14:45:12.107+0900 [DEBUG] turborepo_lib::turbo_json::loader: path: /Users/hahnlee/Work/repro-turbo-with-unicode/packages/typescript-config, turbo_json: Ok(None), turbo_jsonc: Ok(None) 2025-09-13T14:45:12.107+0900 [DEBUG] turborepo_lib::turbo_json::loader: path: /Users/hahnlee/Work/repro-turbo-with-unicode/packages/ui, turbo_json: Ok(None), turbo_jsonc: Ok(None) 2025-09-13T14:45:12.107+0900 [DEBUG] turborepo_lib::turbo_json::loader: path: /Users/hahnlee/Work/repro-turbo-with-unicode/packages/eslint-config, turbo_json: Ok(None), turbo_jsonc: Ok(None) 2025-09-13T14:45:12.107+0900 [DEBUG] turborepo_lib::turbo_json::loader: path: /Users/hahnlee/Work/repro-turbo-with-unicode/packages/eslint-config, turbo_json: Ok(None), turbo_jsonc: Ok(None) 2025-09-13T14:45:12.107+0900 [DEBUG] turborepo_lib::turbo_json::loader: path: /Users/hahnlee/Work/repro-turbo-with-unicode/packages/typescript-config, turbo_json: Ok(None), turbo_jsonc: Ok(None) 2025-09-13T14:45:12.139+0900 [DEBUG] globwalk: processing includes: ["packages/ui/$TURBO_DEFAULT$", "packages/ui/.env*", "packages/ui/package.json", "packages/ui/turbo.json", "packages/ui/turbo.jsonc"] 2025-09-13T14:45:12.139+0900 [DEBUG] globwalk: processing excludes: [] 2025-09-13T14:45:12.139+0900 [DEBUG] globwalk: processing includes: ["packages/eslint-config/$TURBO_DEFAULT$", "packages/eslint-config/.env*", "packages/eslint-config/package.json", "packages/eslint-config/turbo.json", "packages/eslint-config/turbo.jsonc"] 2025-09-13T14:45:12.139+0900 [DEBUG] globwalk: processing excludes: [] 2025-09-13T14:45:12.139+0900 [DEBUG] globwalk: '/Users/hahnlee/Work/repro-turbo-with-unicode/packages/ui/turbo.json' doesn't have metadata 2025-09-13T14:45:12.139+0900 [DEBUG] globwalk: '/Users/hahnlee/Work/repro-turbo-with-unicode/packages/ui/turbo.jsonc' doesn't have metadata 2025-09-13T14:45:12.139+0900 [DEBUG] globwalk: processed includes: ["/Users/hahnlee/Work/repro-turbo-with-unicode/packages/ui/$TURBO_DEFAULT$", "/Users/hahnlee/Work/repro-turbo-with-unicode/packages/ui/.env*", "/Users/hahnlee/Work/repro-turbo-with-unicode/packages/ui/package.json", "/Users/hahnlee/Work/repro-turbo-with-unicode/packages/ui/turbo.json", "/Users/hahnlee/Work/repro-turbo-with-unicode/packages/ui/turbo.jsonc"] 2025-09-13T14:45:12.139+0900 [DEBUG] globwalk: '/Users/hahnlee/Work/repro-turbo-with-unicode/packages/eslint-config/turbo.json' doesn't have metadata 2025-09-13T14:45:12.139+0900 [DEBUG] globwalk: processing includes: ["packages/typescript-config/$TURBO_DEFAULT$", "packages/typescript-config/.env*", "packages/typescript-config/package.json", "packages/typescript-config/turbo.json", "packages/typescript-config/turbo.jsonc"] 2025-09-13T14:45:12.139+0900 [DEBUG] globwalk: processing excludes: [] 2025-09-13T14:45:12.140+0900 [DEBUG] globwalk: '/Users/hahnlee/Work/repro-turbo-with-unicode/packages/typescript-config/turbo.json' doesn't have metadata 2025-09-13T14:45:12.139+0900 [DEBUG] globwalk: processed excludes: [] 2025-09-13T14:45:12.140+0900 [DEBUG] globwalk: '/Users/hahnlee/Work/repro-turbo-with-unicode/packages/typescript-config/turbo.jsonc' doesn't have metadata 2025-09-13T14:45:12.140+0900 [DEBUG] globwalk: processed includes: ["/Users/hahnlee/Work/repro-turbo-with-unicode/packages/typescript-config/$TURBO_DEFAULT$", "/Users/hahnlee/Work/repro-turbo-with-unicode/packages/typescript-config/.env*", "/Users/hahnlee/Work/repro-turbo-with-unicode/packages/typescript-config/package.json", "/Users/hahnlee/Work/repro-turbo-with-unicode/packages/typescript-config/turbo.json", "/Users/hahnlee/Work/repro-turbo-with-unicode/packages/typescript-config/turbo.jsonc"] 2025-09-13T14:45:12.140+0900 [DEBUG] globwalk: processed excludes: [] 2025-09-13T14:45:12.140+0900 [DEBUG] globwalk: '/Users/hahnlee/Work/repro-turbo-with-unicode/packages/eslint-config/turbo.jsonc' doesn't have metadata 2025-09-13T14:45:12.140+0900 [DEBUG] globwalk: processed includes: ["/Users/hahnlee/Work/repro-turbo-with-unicode/packages/eslint-config/$TURBO_DEFAULT$", "/Users/hahnlee/Work/repro-turbo-with-unicode/packages/eslint-config/.env*", "/Users/hahnlee/Work/repro-turbo-with-unicode/packages/eslint-config/package.json", "/Users/hahnlee/Work/repro-turbo-with-unicode/packages/eslint-config/turbo.json", "/Users/hahnlee/Work/repro-turbo-with-unicode/packages/eslint-config/turbo.jsonc"] 2025-09-13T14:45:12.140+0900 [DEBUG] globwalk: processed excludes: [] 2025-09-13T14:45:12.140+0900 [DEBUG] globwalk: processing includes: ["apps/docs/$TURBO_DEFAULT$", "apps/docs/.env*", "apps/docs/package.json", "apps/docs/turbo.json", "apps/docs/turbo.jsonc"] 2025-09-13T14:45:12.141+0900 [DEBUG] globwalk: processing excludes: [] 2025-09-13T14:45:12.141+0900 [DEBUG] globwalk: '/Users/hahnlee/Work/repro-turbo-with-unicode/apps/docs/turbo.json' doesn't have metadata 2025-09-13T14:45:12.141+0900 [DEBUG] globwalk: '/Users/hahnlee/Work/repro-turbo-with-unicode/apps/docs/turbo.jsonc' doesn't have metadata 2025-09-13T14:45:12.141+0900 [DEBUG] globwalk: processed includes: ["/Users/hahnlee/Work/repro-turbo-with-unicode/apps/docs/$TURBO_DEFAULT$", "/Users/hahnlee/Work/repro-turbo-with-unicode/apps/docs/.env*", "/Users/hahnlee/Work/repro-turbo-with-unicode/apps/docs/package.json", "/Users/hahnlee/Work/repro-turbo-with-unicode/apps/docs/turbo.json", "/Users/hahnlee/Work/repro-turbo-with-unicode/apps/docs/turbo.jsonc"] 2025-09-13T14:45:12.141+0900 [DEBUG] globwalk: processed excludes: [] 2025-09-13T14:45:12.143+0900 [DEBUG] turborepo_lib::run::global_hash: global hash env vars [] 2025-09-13T14:45:12.143+0900 [DEBUG] turborepo_lib::run::global_hash: external deps hash: 357e0f85fc2e872a 2025-09-13T14:45:12.169+0900 [DEBUG] turborepo_lib::run: running visitor 2025-09-13T14:45:12.170+0900 [DEBUG] turborepo_lib::task_graph::visitor: task @repo/typescript-config#build hash is e2c5fe89ff31c9f0 2025-09-13T14:45:12.171+0900 [DEBUG] turborepo_lib::task_graph::visitor: task @repo/eslint-config#build hash is 90d1c675729e05b6 2025-09-13T14:45:12.172+0900 [DEBUG] turborepo_lib::task_graph::visitor: task @repo/ui#build hash is 1bd745cc8d4fc385 2025-09-13T14:45:12.172+0900 [DEBUG] turborepo_lib::task_hash: auto detected framework for docs 2025-09-13T14:45:12.172+0900 [DEBUG] turborepo_lib::task_hash: framework: nextjs, env_prefix: ["NEXT_PUBLIC_*"] 2025-09-13T14:45:12.172+0900 [DEBUG] turborepo_lib::task_graph::visitor: task docs#build hash is d422c82cfc568523 { "id": "32dEzfzak5BlK0KgGRWneRXPWoe", "version": "1", "turboVersion": "2.5.7-canary.0", "monorepo": true, "globalCacheInputs": { "rootKey": "I can’t see ya, but I know you’re here", "files": {}, "hashOfExternalDependencies": "357e0f85fc2e872a", "hashOfInternalDependencies": "", "environmentVariables": { "specified": { "env": [], "passThroughEnv": null }, "configured": [], "inferred": [], "passthrough": null }, "engines": { "node": ">=18" } }, "packages": [ "docs" ], "envMode": "strict", "frameworkInference": true, "tasks": [ { "taskId": "@repo/eslint-config#build", "task": "build", "package": "@repo/eslint-config", "hash": "90d1c675729e05b6", "inputs": { "README.md": "8b42d901b0e8dee2e21313ec0442c50e9fef038a", "base.js": "09d316efdb6f6db4f6141815e87980a598f6ff54", "next.js": "6bf01a74edb72f94da7957298427c89debdedc34", "package.json": "c18143d61895bfef8c29778d7ee6b255d72b74d3", "react-internal.js": "daeccba24d4f4b95ad293d175b570acd126628a9" }, "hashOfExternalDependencies": "c87f501e87a7855f", "cache": { "local": false, "remote": false, "status": "MISS", "timeSaved": 0 }, "command": "<NONEXISTENT>", "cliArguments": [], "outputs": [ ".next/**" ], "excludedOutputs": [ ".next/cache/**" ], "logFile": "packages/eslint-config/.turbo/turbo-build.log", "directory": "packages/eslint-config", "dependencies": [], "dependents": [ "@repo/ui#build", "docs#build" ], "with": [], "resolvedTaskDefinition": { "outputs": [ "!.next/cache/**", ".next/**" ], "cache": true, "dependsOn": [ "^build" ], "inputs": [ "$TURBO_DEFAULT$", ".env*" ], "outputLogs": "full", "persistent": false, "interruptible": false, "env": [], "passThroughEnv": null, "interactive": false }, "expandedOutputs": [], "framework": "", "envMode": "strict", "environmentVariables": { "specified": { "env": [], "passThroughEnv": null }, "configured": [], "inferred": [], "passthrough": null } }, { "taskId": "@repo/typescript-config#build", "task": "build", "package": "@repo/typescript-config", "hash": "e2c5fe89ff31c9f0", "inputs": { "base.json": "5117f2a3d1c5fe54a344a7152acbe366fe63cdda", "nextjs.json": "e6defa48fce860cf5570f268d4880161a74789c8", "package.json": "27c0e60436aac79bd14661e016c8c5721c5db6d6", "react-library.json": "c3a1b26fbb3b6ad5d606836247a8ca3a1be051c6" }, "hashOfExternalDependencies": "459c029558afe716", "cache": { "local": false, "remote": false, "status": "MISS", "timeSaved": 0 }, "command": "<NONEXISTENT>", "cliArguments": [], "outputs": [ ".next/**" ], "excludedOutputs": [ ".next/cache/**" ], "logFile": "packages/typescript-config/.turbo/turbo-build.log", "directory": "packages/typescript-config", "dependencies": [], "dependents": [ "@repo/ui#build", "docs#build" ], "with": [], "resolvedTaskDefinition": { "outputs": [ "!.next/cache/**", ".next/**" ], "cache": true, "dependsOn": [ "^build" ], "inputs": [ "$TURBO_DEFAULT$", ".env*" ], "outputLogs": "full", "persistent": false, "interruptible": false, "env": [], "passThroughEnv": null, "interactive": false }, "expandedOutputs": [], "framework": "", "envMode": "strict", "environmentVariables": { "specified": { "env": [], "passThroughEnv": null }, "configured": [], "inferred": [], "passthrough": null } }, { "taskId": "@repo/ui#build", "task": "build", "package": "@repo/ui", "hash": "1bd745cc8d4fc385", "inputs": { "eslint.config.mjs": "19170f88edaf8893fdc80d2c616c081f2d838861", "package.json": "c820347d203fac3d8a6f313e87e4f11888863821", "src/button.tsx": "78e5420c3f606fcc5959ef45cf9c930148d1ec73", "src/card.tsx": "7b988937b9a1d98eca18d2b87fdba837a4fe3dd0", "src/code.tsx": "f7cbd22a8618fcb6dca4341cc15dccfb48c0e74d", "tsconfig.json": "ca86687c4bb77d8aed541bc31f9e81156880764a" }, "hashOfExternalDependencies": "4832a154da2aa18b", "cache": { "local": false, "remote": false, "status": "MISS", "timeSaved": 0 }, "command": "<NONEXISTENT>", "cliArguments": [], "outputs": [ ".next/**" ], "excludedOutputs": [ ".next/cache/**" ], "logFile": "packages/ui/.turbo/turbo-build.log", "directory": "packages/ui", "dependencies": [ "@repo/eslint-config#build", "@repo/typescript-config#build" ], "dependents": [ "docs#build" ], "with": [], "resolvedTaskDefinition": { "outputs": [ "!.next/cache/**", ".next/**" ], "cache": true, "dependsOn": [ "^build" ], "inputs": [ "$TURBO_DEFAULT$", ".env*" ], "outputLogs": "full", "persistent": false, "interruptible": false, "env": [], "passThroughEnv": null, "interactive": false }, "expandedOutputs": [], "framework": "", "envMode": "strict", "environmentVariables": { "specified": { "env": [], "passThroughEnv": null }, "configured": [], "inferred": [], "passthrough": null } }, { "taskId": "docs#build", "task": "build", "package": "docs", "hash": "d422c82cfc568523", "inputs": { ".gitignore": "f886745c5216623d70058427ddd40ecf6ebf84f7", "README.md": "a98bfa8140e14c75a3675f1666a6f587d4d25fe5", "app/favicon.ico": "718d6fea4835ec2d246af9800eddb7ffb276240c", "app/fonts/GeistMonoVF.woff": "f2ae185cbfd16946a534d819e9eb03924abbcc49", "app/fonts/GeistVF.woff": "1b62daacff96dad6584e71cd962051b82957c313", "app/globals.css": "6af7ecbbb8656b1295acccd1b6cdd1da88d6c855", "app/layout.tsx": "8469537555ad68b14377be257758ab1876d3ff5b", "app/page.module.css": "3630662c6f3119c94bea5a7fdeb98d99df322f2f", "app/page.tsx": "e726335a89cff289eab34248f5aacab1fa6e6523", "app/test.ts": "533170cc85fd9263afcdb553dddc34bffe7afb44", "app/테스트.ts": "533170cc85fd9263afcdb553dddc34bffe7afb44", "eslint.config.js": "e8759ff50fbca5c63fbaac5154b7a7d5876f72be", "next.config.js": "4678774e6d606704bce1897a5dab960cd798bf66", "package.json": "a9c661cb7961bf71d710d101b9d96c551c1e3f3b", "public/file-text.svg": "9cfb3c98674c3553ae58854c31f9302cc1f72a24", "public/globe.svg": "4230a3d2071c406b7e4c7b297d247fc194be540c", "public/next.svg": "5174b28c565c285e3e312ec5178be64fbeca8398", "public/turborepo-dark.svg": "dae38fed549745d94f3380a9280864ae0f797c1f", "public/turborepo-light.svg": "ddea915815874759a0cd6dd54dbd197b874c3c99", "public/vercel.svg": "0164ddc5ad9db8a097651e72e9fe9c9caf6e394a", "public/window.svg": "bbc780069c332dbf9b048a30e7d1f5358921c534", "tsconfig.json": "7aef056980d5671f71555aa0fe6abd88f6be8305" }, "hashOfExternalDependencies": "1814afc0d83c6c37", "cache": { "local": false, "remote": false, "status": "MISS", "timeSaved": 0 }, "command": "next build", "cliArguments": [], "outputs": [ ".next/**" ], "excludedOutputs": [ ".next/cache/**" ], "logFile": "apps/docs/.turbo/turbo-build.log", "directory": "apps/docs", "dependencies": [ "@repo/eslint-config#build", "@repo/typescript-config#build", "@repo/ui#build" ], "dependents": [], "with": [], "resolvedTaskDefinition": { "outputs": [ "!.next/cache/**", ".next/**" ], "cache": true, "dependsOn": [ "^build" ], "inputs": [ "$TURBO_DEFAULT$", ".env*" ], "outputLogs": "full", "persistent": false, "interruptible": false, "env": [], "passThroughEnv": null, "interactive": false }, "expandedOutputs": [], "framework": "nextjs", "envMode": "strict", "environmentVariables": { "specified": { "env": [], "passThroughEnv": null }, "configured": [], "inferred": [], "passthrough": null } } ], "user": "", "scm": { "type": "git", "sha": "7f951fdf95bf1ec5773427b2c04a4bc54ea0d32a", "branch": "main" } } 2025-09-13T14:45:12.175+0900 [DEBUG] turborepo_process: waiting for 0 processes to exit 2025-09-13T14:45:12.743+0900 [DEBUG] turborepo_telemetry: telemetry handle closed ``` </details> --------- Co-authored-by: Anthony Shew <[email protected]>
1 parent 445df7e commit ebc2048

File tree

1 file changed

+14
-4
lines changed
  • crates/turborepo-scm/src

1 file changed

+14
-4
lines changed

crates/turborepo-scm/src/git.rs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,7 @@ impl GitRepo {
294294
"-r",
295295
"--name-only",
296296
"--no-commit-id",
297+
"-z",
297298
&valid_from,
298299
to_commit,
299300
];
@@ -311,13 +312,19 @@ impl GitRepo {
311312
// Add untracked files or unstaged changes, i.e. files that are not in git at
312313
// all
313314
let ls_files_output = self.execute_git_command(
314-
&["ls-files", "--others", "--modified", "--exclude-standard"],
315+
&[
316+
"ls-files",
317+
"--others",
318+
"--modified",
319+
"--exclude-standard",
320+
"-z",
321+
],
315322
pathspec,
316323
)?;
317324
self.add_files_from_stdout(&mut files, turbo_root, ls_files_output);
318325
// Include any files that have been staged, but not committed
319326
let diff_output =
320-
self.execute_git_command(&["diff", "--name-only", "--cached"], pathspec)?;
327+
self.execute_git_command(&["diff", "--name-only", "--cached", "-z"], pathspec)?;
321328
self.add_files_from_stdout(&mut files, turbo_root, diff_output);
322329
}
323330

@@ -351,8 +358,11 @@ impl GitRepo {
351358
turbo_root: &AbsoluteSystemPath,
352359
stdout: Vec<u8>,
353360
) {
354-
let stdout = String::from_utf8(stdout).unwrap();
355-
for line in stdout.lines() {
361+
let stdout = String::from_utf8_lossy(&stdout);
362+
for line in stdout.split('\0') {
363+
if line.is_empty() {
364+
continue;
365+
}
356366
let path = RelativeUnixPath::new(line).unwrap();
357367
let anchored_to_turbo_root_file_path = self
358368
.reanchor_path_from_git_root_to_turbo_root(turbo_root, path)

0 commit comments

Comments
 (0)