一般化する
--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
。
- パーサーは
.stowrc
代わりにスペース文字に基づいて(オプション、値)ペアを分割します=
。したがって、オプションを無視するこのファイルの行は--ignore
notで始まる必要があります--ignore=
。 - パーサーは
.stowrc
自動的に引用符を削除しません。--ignore
オプション(または他のオプション)がCLIを介して渡されると、シェルはStowが表示する前に引用符を削除します。それがそこで働く理由です。
したがって、これら2つの組み合わせは、次のものを含める必要があること.stowrc
を意味します。
--ignore car
私はそれをテストし、動作します。
これで、これら2つのうちの1つまたは両方が実際にユーザーエクスペリエンスのバグという有効な主張がある可能性があります。私は彼らが直感的なユーザーインターフェイスを提供していないことに間違いなく同意します。問題は、動作を変更する必要があるのか、それともドキュメントに明確に記述するのが良いかです。
私の現在の考えは以下に基づいています。フォステルの法則、パーサーはスペースとの区切りを許可する必要があります=
が、引用符を削除しないでください。'car'
ユーザーが実際に無視するのではなく、無視したい場合はどうなりますかcar
?既存および関連項目もあります。空白が壊れるオプションに関するバグ報告stowrc
したがって、修正を実装するときにこの点を考慮する必要があります。 (この回答を投稿したらエラーを更新します。)
これに対するあなたのコメントを歓迎します。
最後に、パッケージディレクトリの.stow-local-ignore
代わりにstowディレクトリに保存したので、あなたのアプローチはうまくいかないと思います。a/
これに関するドキュメントは私にとって非常に明確に見えるので、パイロットバグで書くのは公正だと思います。しかし、文書をより明確にする方法に関する提案があれば、いつでも耳を傾けます。
もう一度ありがとうございます!ちなみに、今後は次のバグレポートを送信することを検討することができます。メーリングリストbug-stow
(または恐ろしいが道徳的に正しいサバンナバグトラッカーまたはそれほど倫理的ではありませんが、より便利なgithub問題トラッカー)と助けを求めるメーリングリストhelp-stow
。はい、次の日にやるべきことのリストである小さくて静かなプロジェクトに比べてオプションが多すぎます。