pkgs.nix-gitignore
pkgs.nix-gitignore تابعی است که عملکردی مشابه builtins.filterSource دارد، اما امکان فیلتر کردن با استفاده از قالب gitignore را نیز فراهم میکند.
نحوه استفاده
pkgs.nix-gitignore تعدادی تابع را صادر میکند، اما به احتمال زیاد به یکی از توابع gitignoreSource یا gitignoreSourcePure نیاز خواهید داشت. هر دوی آنها به عنوان آرگومان اول خود، یکی از موارد زیر را میپذیرند: ۱. فایلی حاوی خطوط gitignore، ۲. رشتهای حاوی خطوط gitignore، یا ۳. فهرستی از هر یک از این دو مورد. این موارد در قالب یک رشته بزرگ واحد به یکدیگر متصل خواهند شد.
{
pkgs ? import <nixpkgs> { },
}:
{
src = nix-gitignore.gitignoreSource [ ] ./source;
# Simplest version
src = nix-gitignore.gitignoreSource ''
supplemental-ignores
'' ./source;
# This one reads the ./source/.gitignore and concats the auxiliary ignores
src = nix-gitignore.gitignoreSourcePure ''
ignore-this
ignore-that
'' ./source;
# Use this string as gitignore, don't read ./source/.gitignore.
src = nix-gitignore.gitignoreSourcePure [
''
ignore-this
ignore-that
''
~/.gitignore
] ./source;
# It also accepts a list (of strings and paths) that will be concatenated
# once the paths are turned to strings via readFile.
} این توابع با تنظیم اولین آرگومان فیلتر روی (_: _: true)، از توابع Filter مشتق شدهاند:
{
gitignoreSourcePure = gitignoreFilterSourcePure (_: _: true);
gitignoreSource = gitignoreFilterSource (_: _: true);
} این توابع فیلتر همان آرگومانهایی را میپذیرند که تابع builtins.filterSource به فیلترهای خود پاس میدهد، بنابراین fn: gitignoreFilterSourcePure fn "" باید از نظر مصداقی معادل filterSource باشد. اگر فایل چه توسط فیلتر شما و چه توسط gitignoreFilter در فهرست سیاه قرار گیرد، در فهرست سیاه قرار خواهد گرفت.
اگر میخواهید فیلتر خودتان را از ابتدا بسازید، میتوانید از
{ gitignoreFilter = ign: root: filterPattern (gitignoreToPatterns ign) root; } فایلهای gitignore در زیرپوشهها
اگر میخواهید از فیلتری استفاده کنید که همانند رفتار پیشفرض git، فایلهای .gitignore را در زیرپوشهها جستجو کند، از این تابع استفاده کنید:
{
# gitignoreFilterRecursiveSource = filter: patterns: root:
# OR
gitignoreRecursiveSource = gitignoreFilterSourcePure (_: _: true);
}