一般化する

一般化する

一般化する

--ignore=<regex>私が入力した行は.stowrc機能しません。 Stowを実行すると、「.stowrcからデフォルト値をロードしています」というメッセージが表示されますが、効果はありません。しかし、--ignore=<regex>その行をコマンドに直接渡すと機能します。

質問

次のディレクトリを想定します。

user@user-machine:~/test-stow/stow$ tree -a
.
├── a
│   └── car
└── .stowrc

1 directory, 2 files

コンテンツ./.stowrc:

--ignore='car'

だから私の期待は、そのディレクトリでコマンドを実行することは、ファイルがstow --verbose=3 a/存在しないときに実行するのと同じですstow --ignore='car' --verbose=3 a/./.stowrc

次に、次を実行します。

user@user-machine:~/test-stow/stow$ stow --verbose=3 a
Loading defaults from .stowrc
stow dir is /home/user/test-stow/stow
stow dir path relative to target /home/user/test-stow is stow
cwd now /home/user/test-stow
cwd restored to /home/user/test-stow/stow
cwd now /home/user/test-stow
Planning stow of package a...
Stowing contents of stow/a (cwd=~/test-stow)
Stowing stow/a/car
LINK: car => stow/a/car
Planning stow of package a... done
cwd restored to /home/user/test-stow/stow
Processing tasks...
cwd now /home/user/test-stow
cwd restored to /home/user/test-stow/stow
Processing tasks... done

この点に注意してくださいする./carそれでもシンボリックリンクを作成してください。ignore./.stowrc

次の操作を実行してジョブをキャンセルしますstow -D --verbose=3 a/

user@user-machine:~/test-stow/stow$ stow -D --verbose=3 a/
stow dir is /home/user/test-stow/stow
stow dir path relative to target /home/user/test-stow is stow
cwd now /home/user/test-stow
Planning unstow of package a...
Unstowing from . (cwd=~/test-stow, stow dir=stow)
Unstowing stow/a/car
car did not exist to be unstowed
Planning unstow of package a... done
cwd restored to /home/user/test-stow/stow
cwd now /home/user/test-stow
cwd restored to /home/user/test-stow/stow
Processing tasks...

すべてを削除し./.stowrcて実行すると、stow --verbose=3 --ignore='car' a/他の結果が表示されます。

user@user-machine:~/test-stow/stow$ stow --verbose=3 --ignore='car' a/
stow dir is /home/user/test-stow/stow
stow dir path relative to target /home/user/test-stow is stow
cwd now /home/user/test-stow
cwd restored to /home/user/test-stow/stow
cwd now /home/user/test-stow
Planning stow of package a...
Stowing contents of stow/a (cwd=~/test-stow)
Planning stow of package a... done
cwd restored to /home/user/test-stow/stow
Processing tasks...

シンボリックリンク./carは今いいえ予想通り、期待通りに作成されました。

何について$HOME/.stowrc

.stowrc代わりに、ファイルをホームディレクトリに配置すると、ファイルへのシンボリックリンクが作成され続けるのと$HOME/test-stow/stow同じ効果があります。car

無視リスト

$HOME/test-stow/stow/.stow-local-ignore代わりに、"car"という内容を含むファイルを使用する.stowrcことは機能しません。carファイルへのシンボリックリンクはまだ作成されます。


GNUリポジトリのバージョン:2.2.0
パールバージョン:パール5、バージョン18

修正する

こここれはAdam Spearsの答えに対する私の答えです。

ベストアンサー1

素晴らしいバグレポートをありがとうございます!私はあなたの質問に答えることができ、Stow管理者としてこれを解決できます。しかし、私たちが最高のソリューションを見つけることができるように、ユーザーエクスペリエンスの観点からフィードバックを提供していただきありがとうございます。

まず、無視メカニズムの内部に関する詳細を提供することに注目する価値があります--verbose=5。ただし、この場合、状況が期待どおりに機能しない理由を説明するだけでは不十分です。

両方のファイルが機能しない理由は2つあります.stowrc

  1. パーサーは.stowrc代わりにスペース文字に基づいて(オプション、値)ペアを分割します=。したがって、オプションを無視するこのファイルの行は--ignorenotで始まる必要があります--ignore=
  2. パーサーは.stowrc自動的に引用符を削除しません。--ignoreオプション(または他のオプション)がCLIを介して渡されると、シェルはStowが表示する前に引用符を削除します。それがそこで働く理由です。

したがって、これら2つの組み合わせは、次のものを含める必要があること.stowrcを意味します。

--ignore car

私はそれをテストし、動作します。

これで、これら2つのうちの1つまたは両方が実際にユーザーエクスペリエンスのバグという有効な主張がある可能性があります。私は彼らが直感的なユーザーインターフェイスを提供していないことに間違いなく同意します。問題は、動作を変更する必要があるのか​​、それともドキュメントに明確に記述するのが良いかです。

私の現在の考えは以下に基づいています。フォステルの法則、パーサーはスペースとの区切りを許可する必要があります=が、引用符を削除しないでください。'car'ユーザーが実際に無視するのではなく、無視したい場合はどうなりますかcar?既存および関連項目もあります。空白が壊れるオプションに関するバグ報告stowrcしたがって、修正を実装するときにこの点を考慮する必要があります。 (この回答を投稿したらエラーを更新します。)

これに対するあなたのコメントを歓迎します。

最後に、パッケージディレクトリの.stow-local-ignore代わりにstowディレクトリに保存したので、あなたのアプローチはうまくいかないと思います。a/これに関するドキュメントは私にとって非常に明確に見えるので、パイロットバグで書くのは公正だと思います。しかし、文書をより明確にする方法に関する提案があれば、いつでも耳を傾けます。

もう一度ありがとうございます!ちなみに、今後は次のバグレポートを送信することを検討することができます。メーリングリストbug-stow(または恐ろしいが道徳的に正しいサバンナバグトラッカーまたはそれほど倫理的ではありませんが、より便利なgithub問題トラッカー)と助けを求めるメーリングリストhelp-stow。はい、次の日にやるべきことのリストである小さくて静かなプロジェクトに比べてオプションが多すぎます。

おすすめ記事