Skip to content

test: plugin の片づけの試験で大文字小文字だけが違う名前を作らない(macOS で EEXIST) - #4397

Merged
takecchi merged 1 commit into
mainfrom
fix/plugin-extract-macos-case-3991
Oct 10, 2026
Merged

takecchi merged 1 commit into
mainfrom
fix/plugin-extract-macos-case-3991

Conversation

@takecchi

@takecchi takecchi commented Oct 10, 2026 •

Copy link
Copy Markdown
Owner

Refs #3991

何を直したか

packages/core/src/plugin-extract.test.ts の「片づけ > 今のストアに無い版と .tmp-* を消し、規則に合わないものは残す」は、plugins/ の中に demo@${SHA_A}(demo@aaa…a、40桁)を作った直後に demo@${'A'.repeat(40)} を作っていた。大文字小文字を区別しない fs(macOS の既定の APFS)では、この2つは同じ名前になる。そのため2つ目の mkdir が EEXIST で落ちていた。

大文字の側を demo@${'C'.repeat(40)} に変えた。ほかに作る名前(a…・b… 系)とは、大文字小文字を畳んでもぶつからない。直したのは試験だけで、製品のコードは変えていない。

保証は弱くなっていない

この歯が測っているのは「DIR_NAME_RULE(小文字の16進40桁)に合わない、大文字の16進の名前を片づけが消さない」ことである。C も大文字の16進なので、測っているものは同じである。期待値(readdir の結果に残ること)も、同じ名前で引き続き見ている。

macOS の実機(GitHub の macos-latest)で確かめたこと

repo には macOS の runner を回す workflow が無い。そこで、マージしない一時の枝に runs-on: macos-latest の workflow を置いて回した(probe/macos-plugin-extract-3991 / -old)。器は ProductVersion: 26.6.2、File System Personality: APFS、node v22.23.3、TMPDIR=/var/folders/36/…/T/。

木 run plugin-extract.test.ts + plugins.test.ts
報告のときの木 9760a91a 38016791756 Tests 1 failed | 85 passed (86) — 落ちたのは上の1件だけ
いまの main a64e14f4 38016604284 Tests 1 failed | 102 passed (103) — 落ちたのは上の1件だけ
main + この PR の変更 38016967646 Tests 103 passed (103)

落ちた1件のエラー文(逐語、main の木):

Error: EEXIST: file already exists, mkdir '/var/folders/36/tjdph2t965j8snz9_vkdnw0r0000gn/T/alteroid-plugin-extract-txbJZs/plugins/demo@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'

Issue の疑いについて、同じ run で分かったこと:

  • 0o555 のディレクトリの rename(疑い1)は原因ではない。 mkdir d && chmod 555 d && mv d e は終了コード 0 だった(rename 0o555 dir: 0)。展開の経路(0o700 の mkdir・O_NOFOLLOW|O_EXCL・0o444/0o555・同じ親での rename)を通る他の試験も、macOS で全部通った
  • /var → /private/var の symlink も、plugin の2本には効いていない。 tmpdir は /var/folders/… のまま渡り、展開・再展開・片づけの試験はその root で通った
  • plugins.test.ts は、どちらの木でも macOS で全部通った

確かめていないこと

検証

  • Linux(この器): pnpm --filter @alteroid/core exec vitest run src/plugin-extract.test.ts src/plugins.test.ts → Tests 103 passed (103)、pnpm --filter @alteroid/core typecheck → exit 0
  • macOS: 上の表の run 38016967646

Alteroid-Issue-Done: 3991

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant