feat(renderer): インストール不可の理由を一覧に出す - #2479
Open
hal-shu-sato wants to merge 4 commits into
Open
Conversation
パッケージ一覧の「インストール不可」は boolean 1 個で、何が足りないのかを 持っていない。理由になる依存関係は computeInstallable が計算しているのに、 結果を捨てている。 「要導入: 〜」を作る missingDeps は if (thisPackage && isInstalled(id)) の 中でしか動かないので、**まだ導入していないパッケージには足りないものが 構造上いっさい出ない**。初回起動でいちばん最初に開く画面に、理由の無い 警告だけが並ぶことになる。 computeInstallable の isDepsInstallable と同じ式で、満たせなかった依存 グループだけを unmetDependencies に残す。導入済みかどうかは問わない。 競合が理由のときは空になる(依存の問題ではないため)。 表示用の名前解決は packageDisplay へ。aviutl / exedit の擬似 ID は一覧に 無いので手で組み立てる。バージョン指定(>=1.0 など)は落とす。
「インストール不可」の下に「要: 拡張編集 0.92」のように並べる。 実データで 294 行中 57 件が該当し、すべてに理由が出ることを確認した。
導入前でも unmetDependencies が埋まること、満たせている依存は入らないこと、 競合が理由のときは空になることを見る。名前解決は擬似 ID と or 指定を押さえる。
依存だけでなく、doNotInstall のもう 1 つの理由も出す。competeInstallable の conflictsInstalled と同じ式で、実際に成立している競合だけを conflictingWith に残す。installationStatus が otherInstalled のときは「別のバージョンが 導入済み」と書く。 これで「インストール不可」が理由を持たない経路が無くなる。データ側で conflicts を書けば apm が自動で不可にして理由まで出せるようになるので、 #1880(Bakusoku 系と patch.aul の競合を書いてほしい)はデータの修正だけで済む。 表示名が重複したら畳む。ePi/patch と nazono/patch はどちらも名前が 「patch.aul」で、そのままだと「競合: patch.aul、patch.aul」になる。
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.
実際にアプリを起動して見つけたものです。素のインストール先でプラグイン&スクリプトタブを開くと、理由の書かれていない黄色い「インストール不可」が並びます。 実データで数えると 294 行中 57 件が該当します。
なぜ理由が出ないのか
理由になる情報は
computeInstallableが計算しているのに、結果を捨てています。doNotInstallは boolean 1 個です。そして「要導入: 〜」を作るmissingDepsはの中でしか動かないので、まだ導入していないパッケージには足りないものが構造上いっさい表示されません。 初回のユーザーが最初に開く画面で、いちばん目立つ色の警告に、いちばん情報が無いという状態です。
この PR でやること
computeInstallableのisDepsInstallableと同じ式で、満たせなかった依存グループだけをunmetDependenciesに残します。導入済みかどうかは問いません。競合が理由のときは空になります(依存の問題ではないため)。表示は「インストール不可」の下に 1 行足すだけです。
名前解決は
packageDisplay.ts(fs 非依存)に置きました。aviutl/exeditは一覧に無い擬似 ID なので手で組み立て、>=1.0のようなバージョン指定は落とします。実データでの結果
パッケージ版を起動して 57 件すべてに理由が出ることを確認しました。
パッケージ名も解決されていて(
rikkymodule/最終フレーム自動調整など)、擬似 ID は「拡張編集 0.92」「AviUtl 1.10」として出ます。検証
yarn test333 件(+8)緑。未導入でも理由が埋まること/満たせている依存は入らないこと/競合のときは空になること/擬似 ID と or 指定の名前解決yarn lint/yarn lint:ts緑yarn package→yarn test:e2e(7 件)緑追記: 競合と別バージョンも理由に出すようにしました
依存だけだと、競合が理由のときは理由が空のままでした(
unmetDependenciesは依存の話しか持たないため)。conflictsInstalledと同じ式で、実際に成立している競合をconflictingWithに残し、installationStatusがotherInstalledのときは「別のバージョンが導入済み」と書きます。これで**「インストール不可」が理由を持たない経路が無くなりました。**
実データで確認(
patch.aulを手動導入した状態):表示名が重複したときは畳んでいます。
ePi/patchとnazono/patchはどちらも名前が「patch.aul」で、そのままだと「競合: patch.aul、patch.aul」になるためです。副次的な効果
#1880(「Bakusoku 系と patch.aul は競合する」と書いてほしい)は、apm-data の
conflictsに書くだけで済むようになります。 apm が自動で「インストール不可」にして、理由まで表示します。テストは 336 件(+11)。