From 9d3b03e8b82921ce231b19509ee2794fa4f3b3c5 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Wed, 15 May 2024 20:03:17 -0600 Subject: [PATCH 001/108] chore: Added gitignore --- .gitignore | 162 ++++++++++++++++++++ ignori/__pycache__/__init__.cpython-312.pyc | Bin 146 -> 0 bytes ignori/__pycache__/app.cpython-312.pyc | Bin 835 -> 0 bytes ignori/app.py | 5 +- 4 files changed, 166 insertions(+), 1 deletion(-) create mode 100644 .gitignore delete mode 100644 ignori/__pycache__/__init__.cpython-312.pyc delete mode 100644 ignori/__pycache__/app.cpython-312.pyc diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..efa407c --- /dev/null +++ b/.gitignore @@ -0,0 +1,162 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/latest/usage/project/#working-with-version-control +.pdm.toml +.pdm-python +.pdm-build/ + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ \ No newline at end of file diff --git a/ignori/__pycache__/__init__.cpython-312.pyc b/ignori/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index fd44fac0ca66910037ee78ffd10cbd7c1c4d21a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146 zcmX@j%ge<81bcF=(m?cM5P=Rpvj9b=GgLBYGWxA#C}INgK7-W!GEBCL2`x@7Dvn7{ ztV%41DJaU%N=+^)j>$~V%P-1=QStGad6^~g@p=W7zc_4i^HWN5QtgUZfhI5laWRPT Nk(rT^v4|PS0suARBVPaj diff --git a/ignori/__pycache__/app.cpython-312.pyc b/ignori/__pycache__/app.cpython-312.pyc deleted file mode 100644 index 1dd8a12a58b2adaf31408dde071e36e66af4e8c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 835 zcmY*W&1(}u6o0c{*)&b#N2F3(5IsmlR`4Qd5lV@+T1qwX;1XQc>?B5Zv+K-+nw*04 zWG_8gk6uggFYzQ^bPzmvP;Z4)(4Ks=n-m;&fA3@7$M3!QP%O>>o+p>9tp^0)yE3N7 zoG9aasO&=k0SO@@E{QZ(Bg)o7Ju+M)GF>yZ_0WoPZZ5K2n}7y)Aux6zFew@7SuHo; zw<@_`%BW~kUr7>KT#ch7=JX-uy-*xz(psZ_K$*1e#Ic|Z%?yo+F}{wma8=p&iCg{m>Cj&ZWhu=&^2dl9{G!h?npmFC*Lsf*r-l{U{9qctiFH0WldJ zd;jO}!+U+3RLCY%d#(^^a2mF_s&e7@>gvtLBTgA_wEcmfG!hm+r%k~dos{EL_(|d< zeVJ=!D;%6Y8Nr#jaAe?RgrD$d2w&&QyU$+FrDAvPFIP)@wXjGwD>KseysjTn&yzEr z7sWv@RQjyvz3BO2cEfCpmuB`7Iv0%PmBU`GWe>tsJ$4G=0LF;GN(vN*6mqEWiwHaL zdG_3}`lWPc@7BAek7u1vrE9~rLqjv?-!2^i3U+>)q_`CXeJPNJg99_Q&$N>)P2Jm_ zpiKp5mby}1WI0=u(-WQ0;Z%rDx6M=jDd&vSyb4bnDW1pnayIsDwuq*B2)=-Ds1riI V!4>>|z>OozBJ+FtZ$Ode{sV9c#r*&P diff --git a/ignori/app.py b/ignori/app.py index d5253ed..eef555a 100644 --- a/ignori/app.py +++ b/ignori/app.py @@ -1,5 +1,6 @@ +import os from textual.app import App, ComposeResult -from textual.widgets import Header, Footer +from textual.widgets import Header, Footer, Label, Input from ignori.util.settings import APP_TITLE, STYLES_PATH @@ -10,4 +11,6 @@ class IgnoriApp(App): def compose(self) -> ComposeResult: yield Header() + yield Input(placeholder="Search...") + yield Label(os.getcwd()) yield Footer() From d83a794ae1f7b17de46719883ce103f192ded1c7 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Fri, 17 May 2024 09:25:02 -0600 Subject: [PATCH 002/108] chore: installed devtools for Textual --- poetry.lock | 537 ++++++++++++++++++++++++++++++++++++++++++++++++- pyproject.toml | 3 + 2 files changed, 539 insertions(+), 1 deletion(-) diff --git a/poetry.lock b/poetry.lock index b8f40b2..edad9d2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,5 +1,255 @@ # This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +[[package]] +name = "aiohttp" +version = "3.9.5" +description = "Async http client/server framework (asyncio)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "aiohttp-3.9.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fcde4c397f673fdec23e6b05ebf8d4751314fa7c24f93334bf1f1364c1c69ac7"}, + {file = "aiohttp-3.9.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5d6b3f1fabe465e819aed2c421a6743d8debbde79b6a8600739300630a01bf2c"}, + {file = "aiohttp-3.9.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ae79c1bc12c34082d92bf9422764f799aee4746fd7a392db46b7fd357d4a17a"}, + {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d3ebb9e1316ec74277d19c5f482f98cc65a73ccd5430540d6d11682cd857430"}, + {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84dabd95154f43a2ea80deffec9cb44d2e301e38a0c9d331cc4aa0166fe28ae3"}, + {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c8a02fbeca6f63cb1f0475c799679057fc9268b77075ab7cf3f1c600e81dd46b"}, + {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c26959ca7b75ff768e2776d8055bf9582a6267e24556bb7f7bd29e677932be72"}, + {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:714d4e5231fed4ba2762ed489b4aec07b2b9953cf4ee31e9871caac895a839c0"}, + {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e7a6a8354f1b62e15d48e04350f13e726fa08b62c3d7b8401c0a1314f02e3558"}, + {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c413016880e03e69d166efb5a1a95d40f83d5a3a648d16486592c49ffb76d0db"}, + {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ff84aeb864e0fac81f676be9f4685f0527b660f1efdc40dcede3c251ef1e867f"}, + {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ad7f2919d7dac062f24d6f5fe95d401597fbb015a25771f85e692d043c9d7832"}, + {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:702e2c7c187c1a498a4e2b03155d52658fdd6fda882d3d7fbb891a5cf108bb10"}, + {file = "aiohttp-3.9.5-cp310-cp310-win32.whl", hash = "sha256:67c3119f5ddc7261d47163ed86d760ddf0e625cd6246b4ed852e82159617b5fb"}, + {file = "aiohttp-3.9.5-cp310-cp310-win_amd64.whl", hash = "sha256:471f0ef53ccedec9995287f02caf0c068732f026455f07db3f01a46e49d76bbb"}, + {file = "aiohttp-3.9.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0ae53e33ee7476dd3d1132f932eeb39bf6125083820049d06edcdca4381f342"}, + {file = "aiohttp-3.9.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c088c4d70d21f8ca5c0b8b5403fe84a7bc8e024161febdd4ef04575ef35d474d"}, + {file = "aiohttp-3.9.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:639d0042b7670222f33b0028de6b4e2fad6451462ce7df2af8aee37dcac55424"}, + {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f26383adb94da5e7fb388d441bf09c61e5e35f455a3217bfd790c6b6bc64b2ee"}, + {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66331d00fb28dc90aa606d9a54304af76b335ae204d1836f65797d6fe27f1ca2"}, + {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ff550491f5492ab5ed3533e76b8567f4b37bd2995e780a1f46bca2024223233"}, + {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f22eb3a6c1080d862befa0a89c380b4dafce29dc6cd56083f630073d102eb595"}, + {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a81b1143d42b66ffc40a441379387076243ef7b51019204fd3ec36b9f69e77d6"}, + {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f64fd07515dad67f24b6ea4a66ae2876c01031de91c93075b8093f07c0a2d93d"}, + {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:93e22add827447d2e26d67c9ac0161756007f152fdc5210277d00a85f6c92323"}, + {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:55b39c8684a46e56ef8c8d24faf02de4a2b2ac60d26cee93bc595651ff545de9"}, + {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4715a9b778f4293b9f8ae7a0a7cef9829f02ff8d6277a39d7f40565c737d3771"}, + {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:afc52b8d969eff14e069a710057d15ab9ac17cd4b6753042c407dcea0e40bf75"}, + {file = "aiohttp-3.9.5-cp311-cp311-win32.whl", hash = "sha256:b3df71da99c98534be076196791adca8819761f0bf6e08e07fd7da25127150d6"}, + {file = "aiohttp-3.9.5-cp311-cp311-win_amd64.whl", hash = "sha256:88e311d98cc0bf45b62fc46c66753a83445f5ab20038bcc1b8a1cc05666f428a"}, + {file = "aiohttp-3.9.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:c7a4b7a6cf5b6eb11e109a9755fd4fda7d57395f8c575e166d363b9fc3ec4678"}, + {file = "aiohttp-3.9.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:0a158704edf0abcac8ac371fbb54044f3270bdbc93e254a82b6c82be1ef08f3c"}, + {file = "aiohttp-3.9.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d153f652a687a8e95ad367a86a61e8d53d528b0530ef382ec5aaf533140ed00f"}, + {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82a6a97d9771cb48ae16979c3a3a9a18b600a8505b1115cfe354dfb2054468b4"}, + {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:60cdbd56f4cad9f69c35eaac0fbbdf1f77b0ff9456cebd4902f3dd1cf096464c"}, + {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8676e8fd73141ded15ea586de0b7cda1542960a7b9ad89b2b06428e97125d4fa"}, + {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da00da442a0e31f1c69d26d224e1efd3a1ca5bcbf210978a2ca7426dfcae9f58"}, + {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18f634d540dd099c262e9f887c8bbacc959847cfe5da7a0e2e1cf3f14dbf2daf"}, + {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:320e8618eda64e19d11bdb3bd04ccc0a816c17eaecb7e4945d01deee2a22f95f"}, + {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:2faa61a904b83142747fc6a6d7ad8fccff898c849123030f8e75d5d967fd4a81"}, + {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:8c64a6dc3fe5db7b1b4d2b5cb84c4f677768bdc340611eca673afb7cf416ef5a"}, + {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:393c7aba2b55559ef7ab791c94b44f7482a07bf7640d17b341b79081f5e5cd1a"}, + {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c671dc117c2c21a1ca10c116cfcd6e3e44da7fcde37bf83b2be485ab377b25da"}, + {file = "aiohttp-3.9.5-cp312-cp312-win32.whl", hash = "sha256:5a7ee16aab26e76add4afc45e8f8206c95d1d75540f1039b84a03c3b3800dd59"}, + {file = "aiohttp-3.9.5-cp312-cp312-win_amd64.whl", hash = "sha256:5ca51eadbd67045396bc92a4345d1790b7301c14d1848feaac1d6a6c9289e888"}, + {file = "aiohttp-3.9.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:694d828b5c41255e54bc2dddb51a9f5150b4eefa9886e38b52605a05d96566e8"}, + {file = "aiohttp-3.9.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0605cc2c0088fcaae79f01c913a38611ad09ba68ff482402d3410bf59039bfb8"}, + {file = "aiohttp-3.9.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4558e5012ee03d2638c681e156461d37b7a113fe13970d438d95d10173d25f78"}, + {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dbc053ac75ccc63dc3a3cc547b98c7258ec35a215a92bd9f983e0aac95d3d5b"}, + {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4109adee842b90671f1b689901b948f347325045c15f46b39797ae1bf17019de"}, + {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6ea1a5b409a85477fd8e5ee6ad8f0e40bf2844c270955e09360418cfd09abac"}, + {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3c2890ca8c59ee683fd09adf32321a40fe1cf164e3387799efb2acebf090c11"}, + {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3916c8692dbd9d55c523374a3b8213e628424d19116ac4308e434dbf6d95bbdd"}, + {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8d1964eb7617907c792ca00b341b5ec3e01ae8c280825deadbbd678447b127e1"}, + {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d5ab8e1f6bee051a4bf6195e38a5c13e5e161cb7bad83d8854524798bd9fcd6e"}, + {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:52c27110f3862a1afbcb2af4281fc9fdc40327fa286c4625dfee247c3ba90156"}, + {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:7f64cbd44443e80094309875d4f9c71d0401e966d191c3d469cde4642bc2e031"}, + {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8b4f72fbb66279624bfe83fd5eb6aea0022dad8eec62b71e7bf63ee1caadeafe"}, + {file = "aiohttp-3.9.5-cp38-cp38-win32.whl", hash = "sha256:6380c039ec52866c06d69b5c7aad5478b24ed11696f0e72f6b807cfb261453da"}, + {file = "aiohttp-3.9.5-cp38-cp38-win_amd64.whl", hash = "sha256:da22dab31d7180f8c3ac7c7635f3bcd53808f374f6aa333fe0b0b9e14b01f91a"}, + {file = "aiohttp-3.9.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1732102949ff6087589408d76cd6dea656b93c896b011ecafff418c9661dc4ed"}, + {file = "aiohttp-3.9.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c6021d296318cb6f9414b48e6a439a7f5d1f665464da507e8ff640848ee2a58a"}, + {file = "aiohttp-3.9.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:239f975589a944eeb1bad26b8b140a59a3a320067fb3cd10b75c3092405a1372"}, + {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b7b30258348082826d274504fbc7c849959f1989d86c29bc355107accec6cfb"}, + {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd2adf5c87ff6d8b277814a28a535b59e20bfea40a101db6b3bdca7e9926bc24"}, + {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e9a3d838441bebcf5cf442700e3963f58b5c33f015341f9ea86dcd7d503c07e2"}, + {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e3a1ae66e3d0c17cf65c08968a5ee3180c5a95920ec2731f53343fac9bad106"}, + {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c69e77370cce2d6df5d12b4e12bdcca60c47ba13d1cbbc8645dd005a20b738b"}, + {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf56238f4bbf49dab8c2dc2e6b1b68502b1e88d335bea59b3f5b9f4c001475"}, + {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d1469f228cd9ffddd396d9948b8c9cd8022b6d1bf1e40c6f25b0fb90b4f893ed"}, + {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:45731330e754f5811c314901cebdf19dd776a44b31927fa4b4dbecab9e457b0c"}, + {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3fcb4046d2904378e3aeea1df51f697b0467f2aac55d232c87ba162709478c46"}, + {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8cf142aa6c1a751fcb364158fd710b8a9be874b81889c2bd13aa8893197455e2"}, + {file = "aiohttp-3.9.5-cp39-cp39-win32.whl", hash = "sha256:7b179eea70833c8dee51ec42f3b4097bd6370892fa93f510f76762105568cf09"}, + {file = "aiohttp-3.9.5-cp39-cp39-win_amd64.whl", hash = "sha256:38d80498e2e169bc61418ff36170e0aad0cd268da8b38a17c4cf29d254a8b3f1"}, + {file = "aiohttp-3.9.5.tar.gz", hash = "sha256:edea7d15772ceeb29db4aff55e482d4bcfb6ae160ce144f2682de02f6d693551"}, +] + +[package.dependencies] +aiosignal = ">=1.1.2" +attrs = ">=17.3.0" +frozenlist = ">=1.1.1" +multidict = ">=4.5,<7.0" +yarl = ">=1.0,<2.0" + +[package.extras] +speedups = ["Brotli", "aiodns", "brotlicffi"] + +[[package]] +name = "aiosignal" +version = "1.3.1" +description = "aiosignal: a list of registered asynchronous callbacks" +optional = false +python-versions = ">=3.7" +files = [ + {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, + {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, +] + +[package.dependencies] +frozenlist = ">=1.1.0" + +[[package]] +name = "attrs" +version = "23.2.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.7" +files = [ + {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, + {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, +] + +[package.extras] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] +tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "frozenlist" +version = "1.4.1" +description = "A list-like structure which implements collections.abc.MutableSequence" +optional = false +python-versions = ">=3.8" +files = [ + {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f9aa1878d1083b276b0196f2dfbe00c9b7e752475ed3b682025ff20c1c1f51ac"}, + {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29acab3f66f0f24674b7dc4736477bcd4bc3ad4b896f5f45379a67bce8b96868"}, + {file = "frozenlist-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74fb4bee6880b529a0c6560885fce4dc95936920f9f20f53d99a213f7bf66776"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:590344787a90ae57d62511dd7c736ed56b428f04cd8c161fcc5e7232c130c69a"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:068b63f23b17df8569b7fdca5517edef76171cf3897eb68beb01341131fbd2ad"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c849d495bf5154cd8da18a9eb15db127d4dba2968d88831aff6f0331ea9bd4c"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9750cc7fe1ae3b1611bb8cfc3f9ec11d532244235d75901fb6b8e42ce9229dfe"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9b2de4cf0cdd5bd2dee4c4f63a653c61d2408055ab77b151c1957f221cabf2a"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0633c8d5337cb5c77acbccc6357ac49a1770b8c487e5b3505c57b949b4b82e98"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:27657df69e8801be6c3638054e202a135c7f299267f1a55ed3a598934f6c0d75"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:f9a3ea26252bd92f570600098783d1371354d89d5f6b7dfd87359d669f2109b5"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:4f57dab5fe3407b6c0c1cc907ac98e8a189f9e418f3b6e54d65a718aaafe3950"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e02a0e11cf6597299b9f3bbd3f93d79217cb90cfd1411aec33848b13f5c656cc"}, + {file = "frozenlist-1.4.1-cp310-cp310-win32.whl", hash = "sha256:a828c57f00f729620a442881cc60e57cfcec6842ba38e1b19fd3e47ac0ff8dc1"}, + {file = "frozenlist-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:f56e2333dda1fe0f909e7cc59f021eba0d2307bc6f012a1ccf2beca6ba362439"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a0cb6f11204443f27a1628b0e460f37fb30f624be6051d490fa7d7e26d4af3d0"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b46c8ae3a8f1f41a0d2ef350c0b6e65822d80772fe46b653ab6b6274f61d4a49"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fde5bd59ab5357e3853313127f4d3565fc7dad314a74d7b5d43c22c6a5ed2ced"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:722e1124aec435320ae01ee3ac7bec11a5d47f25d0ed6328f2273d287bc3abb0"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2471c201b70d58a0f0c1f91261542a03d9a5e088ed3dc6c160d614c01649c106"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c757a9dd70d72b076d6f68efdbb9bc943665ae954dad2801b874c8c69e185068"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f146e0911cb2f1da549fc58fc7bcd2b836a44b79ef871980d605ec392ff6b0d2"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9c515e7914626b2a2e1e311794b4c35720a0be87af52b79ff8e1429fc25f19"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c302220494f5c1ebeb0912ea782bcd5e2f8308037b3c7553fad0e48ebad6ad82"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:442acde1e068288a4ba7acfe05f5f343e19fac87bfc96d89eb886b0363e977ec"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:1b280e6507ea8a4fa0c0a7150b4e526a8d113989e28eaaef946cc77ffd7efc0a"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:fe1a06da377e3a1062ae5fe0926e12b84eceb8a50b350ddca72dc85015873f74"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:db9e724bebd621d9beca794f2a4ff1d26eed5965b004a97f1f1685a173b869c2"}, + {file = "frozenlist-1.4.1-cp311-cp311-win32.whl", hash = "sha256:e774d53b1a477a67838a904131c4b0eef6b3d8a651f8b138b04f748fccfefe17"}, + {file = "frozenlist-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:fb3c2db03683b5767dedb5769b8a40ebb47d6f7f45b1b3e3b4b51ec8ad9d9825"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1979bc0aeb89b33b588c51c54ab0161791149f2461ea7c7c946d95d5f93b56ae"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cc7b01b3754ea68a62bd77ce6020afaffb44a590c2289089289363472d13aedb"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9c92be9fd329ac801cc420e08452b70e7aeab94ea4233a4804f0915c14eba9b"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c3894db91f5a489fc8fa6a9991820f368f0b3cbdb9cd8849547ccfab3392d86"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba60bb19387e13597fb059f32cd4d59445d7b18b69a745b8f8e5db0346f33480"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8aefbba5f69d42246543407ed2461db31006b0f76c4e32dfd6f42215a2c41d09"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780d3a35680ced9ce682fbcf4cb9c2bad3136eeff760ab33707b71db84664e3a"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9acbb16f06fe7f52f441bb6f413ebae6c37baa6ef9edd49cdd567216da8600cd"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:23b701e65c7b36e4bf15546a89279bd4d8675faabc287d06bbcfac7d3c33e1e6"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3e0153a805a98f5ada7e09826255ba99fb4f7524bb81bf6b47fb702666484ae1"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:dd9b1baec094d91bf36ec729445f7769d0d0cf6b64d04d86e45baf89e2b9059b"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:1a4471094e146b6790f61b98616ab8e44f72661879cc63fa1049d13ef711e71e"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5667ed53d68d91920defdf4035d1cdaa3c3121dc0b113255124bcfada1cfa1b8"}, + {file = "frozenlist-1.4.1-cp312-cp312-win32.whl", hash = "sha256:beee944ae828747fd7cb216a70f120767fc9f4f00bacae8543c14a6831673f89"}, + {file = "frozenlist-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:64536573d0a2cb6e625cf309984e2d873979709f2cf22839bf2d61790b448ad5"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:20b51fa3f588ff2fe658663db52a41a4f7aa6c04f6201449c6c7c476bd255c0d"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:410478a0c562d1a5bcc2f7ea448359fcb050ed48b3c6f6f4f18c313a9bdb1826"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c6321c9efe29975232da3bd0af0ad216800a47e93d763ce64f291917a381b8eb"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48f6a4533887e189dae092f1cf981f2e3885175f7a0f33c91fb5b7b682b6bab6"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6eb73fa5426ea69ee0e012fb59cdc76a15b1283d6e32e4f8dc4482ec67d1194d"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fbeb989b5cc29e8daf7f976b421c220f1b8c731cbf22b9130d8815418ea45887"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32453c1de775c889eb4e22f1197fe3bdfe457d16476ea407472b9442e6295f7a"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693945278a31f2086d9bf3df0fe8254bbeaef1fe71e1351c3bd730aa7d31c41b"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1d0ce09d36d53bbbe566fe296965b23b961764c0bcf3ce2fa45f463745c04701"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3a670dc61eb0d0eb7080890c13de3066790f9049b47b0de04007090807c776b0"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:dca69045298ce5c11fd539682cff879cc1e664c245d1c64da929813e54241d11"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a06339f38e9ed3a64e4c4e43aec7f59084033647f908e4259d279a52d3757d09"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b7f2f9f912dca3934c1baec2e4585a674ef16fe00218d833856408c48d5beee7"}, + {file = "frozenlist-1.4.1-cp38-cp38-win32.whl", hash = "sha256:e7004be74cbb7d9f34553a5ce5fb08be14fb33bc86f332fb71cbe5216362a497"}, + {file = "frozenlist-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:5a7d70357e7cee13f470c7883a063aae5fe209a493c57d86eb7f5a6f910fae09"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bfa4a17e17ce9abf47a74ae02f32d014c5e9404b6d9ac7f729e01562bbee601e"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b7e3ed87d4138356775346e6845cccbe66cd9e207f3cd11d2f0b9fd13681359d"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c99169d4ff810155ca50b4da3b075cbde79752443117d89429595c2e8e37fed8"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edb678da49d9f72c9f6c609fbe41a5dfb9a9282f9e6a2253d5a91e0fc382d7c0"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6db4667b187a6742b33afbbaf05a7bc551ffcf1ced0000a571aedbb4aa42fc7b"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55fdc093b5a3cb41d420884cdaf37a1e74c3c37a31f46e66286d9145d2063bd0"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82e8211d69a4f4bc360ea22cd6555f8e61a1bd211d1d5d39d3d228b48c83a897"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89aa2c2eeb20957be2d950b85974b30a01a762f3308cd02bb15e1ad632e22dc7"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d3e0c25a2350080e9319724dede4f31f43a6c9779be48021a7f4ebde8b2d742"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7268252af60904bf52c26173cbadc3a071cece75f873705419c8681f24d3edea"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0c250a29735d4f15321007fb02865f0e6b6a41a6b88f1f523ca1596ab5f50bd5"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:96ec70beabbd3b10e8bfe52616a13561e58fe84c0101dd031dc78f250d5128b9"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:23b2d7679b73fe0e5a4560b672a39f98dfc6f60df63823b0a9970525325b95f6"}, + {file = "frozenlist-1.4.1-cp39-cp39-win32.whl", hash = "sha256:a7496bfe1da7fb1a4e1cc23bb67c58fab69311cc7d32b5a99c2007b4b2a0e932"}, + {file = "frozenlist-1.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:e6a20a581f9ce92d389a8c7d7c3dd47c81fd5d6e655c8dddf341e14aa48659d0"}, + {file = "frozenlist-1.4.1-py3-none-any.whl", hash = "sha256:04ced3e6a46b4cfffe20f9ae482818e34eba9b5fb0ce4056e4cc9b6e212d09b7"}, + {file = "frozenlist-1.4.1.tar.gz", hash = "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b"}, +] + +[[package]] +name = "idna" +version = "3.7" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, + {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, +] + [[package]] name = "linkify-it-py" version = "2.0.3" @@ -76,6 +326,170 @@ files = [ {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, ] +[[package]] +name = "msgpack" +version = "1.0.8" +description = "MessagePack serializer" +optional = false +python-versions = ">=3.8" +files = [ + {file = "msgpack-1.0.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:505fe3d03856ac7d215dbe005414bc28505d26f0c128906037e66d98c4e95868"}, + {file = "msgpack-1.0.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e6b7842518a63a9f17107eb176320960ec095a8ee3b4420b5f688e24bf50c53c"}, + {file = "msgpack-1.0.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:376081f471a2ef24828b83a641a02c575d6103a3ad7fd7dade5486cad10ea659"}, + {file = "msgpack-1.0.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e390971d082dba073c05dbd56322427d3280b7cc8b53484c9377adfbae67dc2"}, + {file = "msgpack-1.0.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00e073efcba9ea99db5acef3959efa45b52bc67b61b00823d2a1a6944bf45982"}, + {file = "msgpack-1.0.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82d92c773fbc6942a7a8b520d22c11cfc8fd83bba86116bfcf962c2f5c2ecdaa"}, + {file = "msgpack-1.0.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9ee32dcb8e531adae1f1ca568822e9b3a738369b3b686d1477cbc643c4a9c128"}, + {file = "msgpack-1.0.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e3aa7e51d738e0ec0afbed661261513b38b3014754c9459508399baf14ae0c9d"}, + {file = "msgpack-1.0.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:69284049d07fce531c17404fcba2bb1df472bc2dcdac642ae71a2d079d950653"}, + {file = "msgpack-1.0.8-cp310-cp310-win32.whl", hash = "sha256:13577ec9e247f8741c84d06b9ece5f654920d8365a4b636ce0e44f15e07ec693"}, + {file = "msgpack-1.0.8-cp310-cp310-win_amd64.whl", hash = "sha256:e532dbd6ddfe13946de050d7474e3f5fb6ec774fbb1a188aaf469b08cf04189a"}, + {file = "msgpack-1.0.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9517004e21664f2b5a5fd6333b0731b9cf0817403a941b393d89a2f1dc2bd836"}, + {file = "msgpack-1.0.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d16a786905034e7e34098634b184a7d81f91d4c3d246edc6bd7aefb2fd8ea6ad"}, + {file = "msgpack-1.0.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e2872993e209f7ed04d963e4b4fbae72d034844ec66bc4ca403329db2074377b"}, + {file = "msgpack-1.0.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c330eace3dd100bdb54b5653b966de7f51c26ec4a7d4e87132d9b4f738220ba"}, + {file = "msgpack-1.0.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83b5c044f3eff2a6534768ccfd50425939e7a8b5cf9a7261c385de1e20dcfc85"}, + {file = "msgpack-1.0.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1876b0b653a808fcd50123b953af170c535027bf1d053b59790eebb0aeb38950"}, + {file = "msgpack-1.0.8-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:dfe1f0f0ed5785c187144c46a292b8c34c1295c01da12e10ccddfc16def4448a"}, + {file = "msgpack-1.0.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3528807cbbb7f315bb81959d5961855e7ba52aa60a3097151cb21956fbc7502b"}, + {file = "msgpack-1.0.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e2f879ab92ce502a1e65fce390eab619774dda6a6ff719718069ac94084098ce"}, + {file = "msgpack-1.0.8-cp311-cp311-win32.whl", hash = "sha256:26ee97a8261e6e35885c2ecd2fd4a6d38252246f94a2aec23665a4e66d066305"}, + {file = "msgpack-1.0.8-cp311-cp311-win_amd64.whl", hash = "sha256:eadb9f826c138e6cf3c49d6f8de88225a3c0ab181a9b4ba792e006e5292d150e"}, + {file = "msgpack-1.0.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:114be227f5213ef8b215c22dde19532f5da9652e56e8ce969bf0a26d7c419fee"}, + {file = "msgpack-1.0.8-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d661dc4785affa9d0edfdd1e59ec056a58b3dbb9f196fa43587f3ddac654ac7b"}, + {file = "msgpack-1.0.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d56fd9f1f1cdc8227d7b7918f55091349741904d9520c65f0139a9755952c9e8"}, + {file = "msgpack-1.0.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0726c282d188e204281ebd8de31724b7d749adebc086873a59efb8cf7ae27df3"}, + {file = "msgpack-1.0.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8db8e423192303ed77cff4dce3a4b88dbfaf43979d280181558af5e2c3c71afc"}, + {file = "msgpack-1.0.8-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99881222f4a8c2f641f25703963a5cefb076adffd959e0558dc9f803a52d6a58"}, + {file = "msgpack-1.0.8-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b5505774ea2a73a86ea176e8a9a4a7c8bf5d521050f0f6f8426afe798689243f"}, + {file = "msgpack-1.0.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:ef254a06bcea461e65ff0373d8a0dd1ed3aa004af48839f002a0c994a6f72d04"}, + {file = "msgpack-1.0.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e1dd7839443592d00e96db831eddb4111a2a81a46b028f0facd60a09ebbdd543"}, + {file = "msgpack-1.0.8-cp312-cp312-win32.whl", hash = "sha256:64d0fcd436c5683fdd7c907eeae5e2cbb5eb872fafbc03a43609d7941840995c"}, + {file = "msgpack-1.0.8-cp312-cp312-win_amd64.whl", hash = "sha256:74398a4cf19de42e1498368c36eed45d9528f5fd0155241e82c4082b7e16cffd"}, + {file = "msgpack-1.0.8-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0ceea77719d45c839fd73abcb190b8390412a890df2f83fb8cf49b2a4b5c2f40"}, + {file = "msgpack-1.0.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1ab0bbcd4d1f7b6991ee7c753655b481c50084294218de69365f8f1970d4c151"}, + {file = "msgpack-1.0.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1cce488457370ffd1f953846f82323cb6b2ad2190987cd4d70b2713e17268d24"}, + {file = "msgpack-1.0.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3923a1778f7e5ef31865893fdca12a8d7dc03a44b33e2a5f3295416314c09f5d"}, + {file = "msgpack-1.0.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a22e47578b30a3e199ab067a4d43d790249b3c0587d9a771921f86250c8435db"}, + {file = "msgpack-1.0.8-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd739c9251d01e0279ce729e37b39d49a08c0420d3fee7f2a4968c0576678f77"}, + {file = "msgpack-1.0.8-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d3420522057ebab1728b21ad473aa950026d07cb09da41103f8e597dfbfaeb13"}, + {file = "msgpack-1.0.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5845fdf5e5d5b78a49b826fcdc0eb2e2aa7191980e3d2cfd2a30303a74f212e2"}, + {file = "msgpack-1.0.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a0e76621f6e1f908ae52860bdcb58e1ca85231a9b0545e64509c931dd34275a"}, + {file = "msgpack-1.0.8-cp38-cp38-win32.whl", hash = "sha256:374a8e88ddab84b9ada695d255679fb99c53513c0a51778796fcf0944d6c789c"}, + {file = "msgpack-1.0.8-cp38-cp38-win_amd64.whl", hash = "sha256:f3709997b228685fe53e8c433e2df9f0cdb5f4542bd5114ed17ac3c0129b0480"}, + {file = "msgpack-1.0.8-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f51bab98d52739c50c56658cc303f190785f9a2cd97b823357e7aeae54c8f68a"}, + {file = "msgpack-1.0.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:73ee792784d48aa338bba28063e19a27e8d989344f34aad14ea6e1b9bd83f596"}, + {file = "msgpack-1.0.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f9904e24646570539a8950400602d66d2b2c492b9010ea7e965025cb71d0c86d"}, + {file = "msgpack-1.0.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e75753aeda0ddc4c28dce4c32ba2f6ec30b1b02f6c0b14e547841ba5b24f753f"}, + {file = "msgpack-1.0.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5dbf059fb4b7c240c873c1245ee112505be27497e90f7c6591261c7d3c3a8228"}, + {file = "msgpack-1.0.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4916727e31c28be8beaf11cf117d6f6f188dcc36daae4e851fee88646f5b6b18"}, + {file = "msgpack-1.0.8-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7938111ed1358f536daf311be244f34df7bf3cdedb3ed883787aca97778b28d8"}, + {file = "msgpack-1.0.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:493c5c5e44b06d6c9268ce21b302c9ca055c1fd3484c25ba41d34476c76ee746"}, + {file = "msgpack-1.0.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fbb160554e319f7b22ecf530a80a3ff496d38e8e07ae763b9e82fadfe96f273"}, + {file = "msgpack-1.0.8-cp39-cp39-win32.whl", hash = "sha256:f9af38a89b6a5c04b7d18c492c8ccf2aee7048aff1ce8437c4683bb5a1df893d"}, + {file = "msgpack-1.0.8-cp39-cp39-win_amd64.whl", hash = "sha256:ed59dd52075f8fc91da6053b12e8c89e37aa043f8986efd89e61fae69dc1b011"}, + {file = "msgpack-1.0.8.tar.gz", hash = "sha256:95c02b0e27e706e48d0e5426d1710ca78e0f0628d6e89d5b5a5b91a5f12274f3"}, +] + +[[package]] +name = "multidict" +version = "6.0.5" +description = "multidict implementation" +optional = false +python-versions = ">=3.7" +files = [ + {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:228b644ae063c10e7f324ab1ab6b548bdf6f8b47f3ec234fef1093bc2735e5f9"}, + {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:896ebdcf62683551312c30e20614305f53125750803b614e9e6ce74a96232604"}, + {file = "multidict-6.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:411bf8515f3be9813d06004cac41ccf7d1cd46dfe233705933dd163b60e37600"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d147090048129ce3c453f0292e7697d333db95e52616b3793922945804a433c"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:215ed703caf15f578dca76ee6f6b21b7603791ae090fbf1ef9d865571039ade5"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c6390cf87ff6234643428991b7359b5f59cc15155695deb4eda5c777d2b880f"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fd81c4ebdb4f214161be351eb5bcf385426bf023041da2fd9e60681f3cebae"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3cc2ad10255f903656017363cd59436f2111443a76f996584d1077e43ee51182"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6939c95381e003f54cd4c5516740faba40cf5ad3eeff460c3ad1d3e0ea2549bf"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:220dd781e3f7af2c2c1053da9fa96d9cf3072ca58f057f4c5adaaa1cab8fc442"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:766c8f7511df26d9f11cd3a8be623e59cca73d44643abab3f8c8c07620524e4a"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:fe5d7785250541f7f5019ab9cba2c71169dc7d74d0f45253f8313f436458a4ef"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1c1496e73051918fcd4f58ff2e0f2f3066d1c76a0c6aeffd9b45d53243702cc"}, + {file = "multidict-6.0.5-cp310-cp310-win32.whl", hash = "sha256:7afcdd1fc07befad18ec4523a782cde4e93e0a2bf71239894b8d61ee578c1319"}, + {file = "multidict-6.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:99f60d34c048c5c2fabc766108c103612344c46e35d4ed9ae0673d33c8fb26e8"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f285e862d2f153a70586579c15c44656f888806ed0e5b56b64489afe4a2dbfba"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:53689bb4e102200a4fafa9de9c7c3c212ab40a7ab2c8e474491914d2305f187e"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:612d1156111ae11d14afaf3a0669ebf6c170dbb735e510a7438ffe2369a847fd"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7be7047bd08accdb7487737631d25735c9a04327911de89ff1b26b81745bd4e3"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de170c7b4fe6859beb8926e84f7d7d6c693dfe8e27372ce3b76f01c46e489fcf"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04bde7a7b3de05732a4eb39c94574db1ec99abb56162d6c520ad26f83267de29"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85f67aed7bb647f93e7520633d8f51d3cbc6ab96957c71272b286b2f30dc70ed"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425bf820055005bfc8aa9a0b99ccb52cc2f4070153e34b701acc98d201693733"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d3eb1ceec286eba8220c26f3b0096cf189aea7057b6e7b7a2e60ed36b373b77f"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7901c05ead4b3fb75113fb1dd33eb1253c6d3ee37ce93305acd9d38e0b5f21a4"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e0e79d91e71b9867c73323a3444724d496c037e578a0e1755ae159ba14f4f3d1"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:29bfeb0dff5cb5fdab2023a7a9947b3b4af63e9c47cae2a10ad58394b517fddc"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e030047e85cbcedbfc073f71836d62dd5dadfbe7531cae27789ff66bc551bd5e"}, + {file = "multidict-6.0.5-cp311-cp311-win32.whl", hash = "sha256:2f4848aa3baa109e6ab81fe2006c77ed4d3cd1e0ac2c1fbddb7b1277c168788c"}, + {file = "multidict-6.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:2faa5ae9376faba05f630d7e5e6be05be22913782b927b19d12b8145968a85ea"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:51d035609b86722963404f711db441cf7134f1889107fb171a970c9701f92e1e"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cbebcd5bcaf1eaf302617c114aa67569dd3f090dd0ce8ba9e35e9985b41ac35b"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2ffc42c922dbfddb4a4c3b438eb056828719f07608af27d163191cb3e3aa6cc5"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ceb3b7e6a0135e092de86110c5a74e46bda4bd4fbfeeb3a3bcec79c0f861e450"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:79660376075cfd4b2c80f295528aa6beb2058fd289f4c9252f986751a4cd0496"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4428b29611e989719874670fd152b6625500ad6c686d464e99f5aaeeaca175a"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d84a5c3a5f7ce6db1f999fb9438f686bc2e09d38143f2d93d8406ed2dd6b9226"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76c0de87358b192de7ea9649beb392f107dcad9ad27276324c24c91774ca5271"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:79a6d2ba910adb2cbafc95dad936f8b9386e77c84c35bc0add315b856d7c3abb"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:92d16a3e275e38293623ebf639c471d3e03bb20b8ebb845237e0d3664914caef"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:fb616be3538599e797a2017cccca78e354c767165e8858ab5116813146041a24"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:14c2976aa9038c2629efa2c148022ed5eb4cb939e15ec7aace7ca932f48f9ba6"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:435a0984199d81ca178b9ae2c26ec3d49692d20ee29bc4c11a2a8d4514c67eda"}, + {file = "multidict-6.0.5-cp312-cp312-win32.whl", hash = "sha256:9fe7b0653ba3d9d65cbe7698cca585bf0f8c83dbbcc710db9c90f478e175f2d5"}, + {file = "multidict-6.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:01265f5e40f5a17f8241d52656ed27192be03bfa8764d88e8220141d1e4b3556"}, + {file = "multidict-6.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:19fe01cea168585ba0f678cad6f58133db2aa14eccaf22f88e4a6dccadfad8b3"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf7a982604375a8d49b6cc1b781c1747f243d91b81035a9b43a2126c04766f5"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:107c0cdefe028703fb5dafe640a409cb146d44a6ae201e55b35a4af8e95457dd"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:403c0911cd5d5791605808b942c88a8155c2592e05332d2bf78f18697a5fa15e"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aeaf541ddbad8311a87dd695ed9642401131ea39ad7bc8cf3ef3967fd093b626"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4972624066095e52b569e02b5ca97dbd7a7ddd4294bf4e7247d52635630dd83"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d946b0a9eb8aaa590df1fe082cee553ceab173e6cb5b03239716338629c50c7a"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b55358304d7a73d7bdf5de62494aaf70bd33015831ffd98bc498b433dfe5b10c"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a3145cb08d8625b2d3fee1b2d596a8766352979c9bffe5d7833e0503d0f0b5e5"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d65f25da8e248202bd47445cec78e0025c0fe7582b23ec69c3b27a640dd7a8e3"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c9bf56195c6bbd293340ea82eafd0071cb3d450c703d2c93afb89f93b8386ccc"}, + {file = "multidict-6.0.5-cp37-cp37m-win32.whl", hash = "sha256:69db76c09796b313331bb7048229e3bee7928eb62bab5e071e9f7fcc4879caee"}, + {file = "multidict-6.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:fce28b3c8a81b6b36dfac9feb1de115bab619b3c13905b419ec71d03a3fc1423"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:76f067f5121dcecf0d63a67f29080b26c43c71a98b10c701b0677e4a065fbd54"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b82cc8ace10ab5bd93235dfaab2021c70637005e1ac787031f4d1da63d493c1d"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5cb241881eefd96b46f89b1a056187ea8e9ba14ab88ba632e68d7a2ecb7aadf7"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8e94e6912639a02ce173341ff62cc1201232ab86b8a8fcc05572741a5dc7d93"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09a892e4a9fb47331da06948690ae38eaa2426de97b4ccbfafbdcbe5c8f37ff8"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55205d03e8a598cfc688c71ca8ea5f66447164efff8869517f175ea632c7cb7b"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37b15024f864916b4951adb95d3a80c9431299080341ab9544ed148091b53f50"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2a1dee728b52b33eebff5072817176c172050d44d67befd681609b4746e1c2e"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:edd08e6f2f1a390bf137080507e44ccc086353c8e98c657e666c017718561b89"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:60d698e8179a42ec85172d12f50b1668254628425a6bd611aba022257cac1386"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:3d25f19500588cbc47dc19081d78131c32637c25804df8414463ec908631e453"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4cc0ef8b962ac7a5e62b9e826bd0cd5040e7d401bc45a6835910ed699037a461"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:eca2e9d0cc5a889850e9bbd68e98314ada174ff6ccd1129500103df7a94a7a44"}, + {file = "multidict-6.0.5-cp38-cp38-win32.whl", hash = "sha256:4a6a4f196f08c58c59e0b8ef8ec441d12aee4125a7d4f4fef000ccb22f8d7241"}, + {file = "multidict-6.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:0275e35209c27a3f7951e1ce7aaf93ce0d163b28948444bec61dd7badc6d3f8c"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e7be68734bd8c9a513f2b0cfd508802d6609da068f40dc57d4e3494cefc92929"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1d9ea7a7e779d7a3561aade7d596649fbecfa5c08a7674b11b423783217933f9"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ea1456df2a27c73ce51120fa2f519f1bea2f4a03a917f4a43c8707cf4cbbae1a"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf590b134eb70629e350691ecca88eac3e3b8b3c86992042fb82e3cb1830d5e1"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5c0631926c4f58e9a5ccce555ad7747d9a9f8b10619621f22f9635f069f6233e"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dce1c6912ab9ff5f179eaf6efe7365c1f425ed690b03341911bf4939ef2f3046"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0868d64af83169e4d4152ec612637a543f7a336e4a307b119e98042e852ad9c"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:141b43360bfd3bdd75f15ed811850763555a251e38b2405967f8e25fb43f7d40"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7df704ca8cf4a073334e0427ae2345323613e4df18cc224f647f251e5e75a527"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6214c5a5571802c33f80e6c84713b2c79e024995b9c5897f794b43e714daeec9"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:cd6c8fca38178e12c00418de737aef1261576bd1b6e8c6134d3e729a4e858b38"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e02021f87a5b6932fa6ce916ca004c4d441509d33bbdbeca70d05dff5e9d2479"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ebd8d160f91a764652d3e51ce0d2956b38efe37c9231cd82cfc0bed2e40b581c"}, + {file = "multidict-6.0.5-cp39-cp39-win32.whl", hash = "sha256:04da1bb8c8dbadf2a18a452639771951c662c5ad03aefe4884775454be322c9b"}, + {file = "multidict-6.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:d6f6d4f185481c9669b9447bf9d9cf3b95a0e9df9d169bbc17e363b7d5487755"}, + {file = "multidict-6.0.5-py3-none-any.whl", hash = "sha256:0d63c74e3d7ab26de115c49bffc92cc77ed23395303d496eae515d4204a625e7"}, + {file = "multidict-6.0.5.tar.gz", hash = "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da"}, +] + [[package]] name = "pygments" version = "2.18.0" @@ -127,6 +541,24 @@ typing-extensions = ">=4.4.0,<5.0.0" [package.extras] syntax = ["tree-sitter (>=0.20.1,<0.21.0)", "tree-sitter-languages (==1.10.2)"] +[[package]] +name = "textual-dev" +version = "1.5.1" +description = "Development tools for working with Textual" +optional = false +python-versions = ">=3.8,<4.0" +files = [ + {file = "textual_dev-1.5.1-py3-none-any.whl", hash = "sha256:bb37dd769ae6b67e1422aa97f6d6ef952e0a6d2aafe08327449e8bdd70474776"}, + {file = "textual_dev-1.5.1.tar.gz", hash = "sha256:e0366ab6f42c128d7daa37a7c418e61fe7aa83731983da990808e4bf2de922a1"}, +] + +[package.dependencies] +aiohttp = ">=3.8.1" +click = ">=8.1.2" +msgpack = ">=1.0.3" +textual = ">=0.36.0" +typing-extensions = ">=4.4.0,<5.0.0" + [[package]] name = "typing-extensions" version = "4.11.0" @@ -152,7 +584,110 @@ files = [ [package.extras] test = ["coverage", "pytest", "pytest-cov"] +[[package]] +name = "yarl" +version = "1.9.4" +description = "Yet another URL library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c38c9ddb6103ceae4e4498f9c08fac9b590c5c71b0370f98714768e22ac6fa66"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9e09c9d74f4566e905a0b8fa668c58109f7624db96a2171f21747abc7524234"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8477c1ee4bd47c57d49621a062121c3023609f7a13b8a46953eb6c9716ca392"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5ff2c858f5f6a42c2a8e751100f237c5e869cbde669a724f2062d4c4ef93551"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:357495293086c5b6d34ca9616a43d329317feab7917518bc97a08f9e55648455"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54525ae423d7b7a8ee81ba189f131054defdb122cde31ff17477951464c1691c"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:801e9264d19643548651b9db361ce3287176671fb0117f96b5ac0ee1c3530d53"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e516dc8baf7b380e6c1c26792610230f37147bb754d6426462ab115a02944385"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7d5aaac37d19b2904bb9dfe12cdb08c8443e7ba7d2852894ad448d4b8f442863"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:54beabb809ffcacbd9d28ac57b0db46e42a6e341a030293fb3185c409e626b8b"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bac8d525a8dbc2a1507ec731d2867025d11ceadcb4dd421423a5d42c56818541"}, + {file = "yarl-1.9.4-cp310-cp310-win32.whl", hash = "sha256:7855426dfbddac81896b6e533ebefc0af2f132d4a47340cee6d22cac7190022d"}, + {file = "yarl-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:848cd2a1df56ddbffeb375535fb62c9d1645dde33ca4d51341378b3f5954429b"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:35a2b9396879ce32754bd457d31a51ff0a9d426fd9e0e3c33394bf4b9036b099"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c7d56b293cc071e82532f70adcbd8b61909eec973ae9d2d1f9b233f3d943f2c"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8a1c6c0be645c745a081c192e747c5de06e944a0d21245f4cf7c05e457c36e0"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b3c1ffe10069f655ea2d731808e76e0f452fc6c749bea04781daf18e6039525"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:549d19c84c55d11687ddbd47eeb348a89df9cb30e1993f1b128f4685cd0ebbf8"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7409f968456111140c1c95301cadf071bd30a81cbd7ab829169fb9e3d72eae9"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e23a6d84d9d1738dbc6e38167776107e63307dfc8ad108e580548d1f2c587f42"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8b889777de69897406c9fb0b76cdf2fd0f31267861ae7501d93003d55f54fbe"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:03caa9507d3d3c83bca08650678e25364e1843b484f19986a527630ca376ecce"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e9035df8d0880b2f1c7f5031f33f69e071dfe72ee9310cfc76f7b605958ceb9"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:c0ec0ed476f77db9fb29bca17f0a8fcc7bc97ad4c6c1d8959c507decb22e8572"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:ee04010f26d5102399bd17f8df8bc38dc7ccd7701dc77f4a68c5b8d733406958"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:49a180c2e0743d5d6e0b4d1a9e5f633c62eca3f8a86ba5dd3c471060e352ca98"}, + {file = "yarl-1.9.4-cp311-cp311-win32.whl", hash = "sha256:81eb57278deb6098a5b62e88ad8281b2ba09f2f1147c4767522353eaa6260b31"}, + {file = "yarl-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:d1d2532b340b692880261c15aee4dc94dd22ca5d61b9db9a8a361953d36410b1"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d2454f0aef65ea81037759be5ca9947539667eecebca092733b2eb43c965a81"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:44d8ffbb9c06e5a7f529f38f53eda23e50d1ed33c6c869e01481d3fafa6b8142"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aaaea1e536f98754a6e5c56091baa1b6ce2f2700cc4a00b0d49eca8dea471074"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3777ce5536d17989c91696db1d459574e9a9bd37660ea7ee4d3344579bb6f129"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fc5fc1eeb029757349ad26bbc5880557389a03fa6ada41703db5e068881e5f2"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea65804b5dc88dacd4a40279af0cdadcfe74b3e5b4c897aa0d81cf86927fee78"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa102d6d280a5455ad6a0f9e6d769989638718e938a6a0a2ff3f4a7ff8c62cc4"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09efe4615ada057ba2d30df871d2f668af661e971dfeedf0c159927d48bbeff0"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:008d3e808d03ef28542372d01057fd09168419cdc8f848efe2804f894ae03e51"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6f5cb257bc2ec58f437da2b37a8cd48f666db96d47b8a3115c29f316313654ff"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:992f18e0ea248ee03b5a6e8b3b4738850ae7dbb172cc41c966462801cbf62cf7"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0e9d124c191d5b881060a9e5060627694c3bdd1fe24c5eecc8d5d7d0eb6faabc"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3986b6f41ad22988e53d5778f91855dc0399b043fc8946d4f2e68af22ee9ff10"}, + {file = "yarl-1.9.4-cp312-cp312-win32.whl", hash = "sha256:4b21516d181cd77ebd06ce160ef8cc2a5e9ad35fb1c5930882baff5ac865eee7"}, + {file = "yarl-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a9bd00dc3bc395a662900f33f74feb3e757429e545d831eef5bb280252631984"}, + {file = "yarl-1.9.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63b20738b5aac74e239622d2fe30df4fca4942a86e31bf47a81a0e94c14df94f"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d7f7de27b8944f1fee2c26a88b4dabc2409d2fea7a9ed3df79b67277644e17"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c74018551e31269d56fab81a728f683667e7c28c04e807ba08f8c9e3bba32f14"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca06675212f94e7a610e85ca36948bb8fc023e458dd6c63ef71abfd482481aa5"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aef935237d60a51a62b86249839b51345f47564208c6ee615ed2a40878dccdd"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b134fd795e2322b7684155b7855cc99409d10b2e408056db2b93b51a52accc7"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d25039a474c4c72a5ad4b52495056f843a7ff07b632c1b92ea9043a3d9950f6e"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f7d6b36dd2e029b6bcb8a13cf19664c7b8e19ab3a58e0fefbb5b8461447ed5ec"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:957b4774373cf6f709359e5c8c4a0af9f6d7875db657adb0feaf8d6cb3c3964c"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d7eeb6d22331e2fd42fce928a81c697c9ee2d51400bd1a28803965883e13cead"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6a962e04b8f91f8c4e5917e518d17958e3bdee71fd1d8b88cdce74dd0ebbf434"}, + {file = "yarl-1.9.4-cp37-cp37m-win32.whl", hash = "sha256:f3bc6af6e2b8f92eced34ef6a96ffb248e863af20ef4fde9448cc8c9b858b749"}, + {file = "yarl-1.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4d7a90a92e528aadf4965d685c17dacff3df282db1121136c382dc0b6014d2"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ec61d826d80fc293ed46c9dd26995921e3a82146feacd952ef0757236fc137be"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8be9e837ea9113676e5754b43b940b50cce76d9ed7d2461df1af39a8ee674d9f"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bef596fdaa8f26e3d66af846bbe77057237cb6e8efff8cd7cc8dff9a62278bbf"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d47552b6e52c3319fede1b60b3de120fe83bde9b7bddad11a69fb0af7db32f1"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84fc30f71689d7fc9168b92788abc977dc8cefa806909565fc2951d02f6b7d57"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4aa9741085f635934f3a2583e16fcf62ba835719a8b2b28fb2917bb0537c1dfa"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:206a55215e6d05dbc6c98ce598a59e6fbd0c493e2de4ea6cc2f4934d5a18d130"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07574b007ee20e5c375a8fe4a0789fad26db905f9813be0f9fef5a68080de559"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a2e2433eb9344a163aced6a5f6c9222c0786e5a9e9cac2c89f0b28433f56e23"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6ad6d10ed9b67a382b45f29ea028f92d25bc0bc1daf6c5b801b90b5aa70fb9ec"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6fe79f998a4052d79e1c30eeb7d6c1c1056ad33300f682465e1b4e9b5a188b78"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a825ec844298c791fd28ed14ed1bffc56a98d15b8c58a20e0e08c1f5f2bea1be"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8619d6915b3b0b34420cf9b2bb6d81ef59d984cb0fde7544e9ece32b4b3043c3"}, + {file = "yarl-1.9.4-cp38-cp38-win32.whl", hash = "sha256:686a0c2f85f83463272ddffd4deb5e591c98aac1897d65e92319f729c320eece"}, + {file = "yarl-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:a00862fb23195b6b8322f7d781b0dc1d82cb3bcac346d1e38689370cc1cc398b"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:604f31d97fa493083ea21bd9b92c419012531c4e17ea6da0f65cacdcf5d0bd27"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a854227cf581330ffa2c4824d96e52ee621dd571078a252c25e3a3b3d94a1b1"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ba6f52cbc7809cd8d74604cce9c14868306ae4aa0282016b641c661f981a6e91"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6327976c7c2f4ee6816eff196e25385ccc02cb81427952414a64811037bbc8b"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8397a3817d7dcdd14bb266283cd1d6fc7264a48c186b986f32e86d86d35fbac5"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0381b4ce23ff92f8170080c97678040fc5b08da85e9e292292aba67fdac6c34"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d32a2594cb5d565d358a92e151315d1b2268bc10f4610d098f96b147370136"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddb2a5c08a4eaaba605340fdee8fc08e406c56617566d9643ad8bf6852778fc7"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:26a1dc6285e03f3cc9e839a2da83bcbf31dcb0d004c72d0730e755b33466c30e"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:18580f672e44ce1238b82f7fb87d727c4a131f3a9d33a5e0e82b793362bf18b4"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:29e0f83f37610f173eb7e7b5562dd71467993495e568e708d99e9d1944f561ec"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:1f23e4fe1e8794f74b6027d7cf19dc25f8b63af1483d91d595d4a07eca1fb26c"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db8e58b9d79200c76956cefd14d5c90af54416ff5353c5bfd7cbe58818e26ef0"}, + {file = "yarl-1.9.4-cp39-cp39-win32.whl", hash = "sha256:c7224cab95645c7ab53791022ae77a4509472613e839dab722a72abe5a684575"}, + {file = "yarl-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:824d6c50492add5da9374875ce72db7a0733b29c2394890aef23d533106e2b15"}, + {file = "yarl-1.9.4-py3-none-any.whl", hash = "sha256:928cecb0ef9d5a7946eb6ff58417ad2fe9375762382f1bf5c55e61645f2c43ad"}, + {file = "yarl-1.9.4.tar.gz", hash = "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf"}, +] + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" + [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "fa9b3cdc594956ef1a244adc1c453b0177c1dfc117145b722f0cc4979fe9499d" +content-hash = "26205cc9e95c22fb868dd6f2b655b5e445be3d0cfa0bac835c7da9c4e3749b7a" diff --git a/pyproject.toml b/pyproject.toml index b5cd15e..11614fe 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,6 +10,9 @@ python = "^3.12" textual = "^0.60.1" +[tool.poetry.group.dev.dependencies] +textual-dev = "^1.5.1" + [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" From bf324d069526e21741335ad92e7d66fd41217009 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Sun, 19 May 2024 22:04:06 -0600 Subject: [PATCH 003/108] chore: Setup Ruff --- .../util/__pycache__/settings.cpython-312.pyc | Bin 436 -> 0 bytes poetry.lock | 28 ++++++++++++++- pyproject.toml | 32 ++++++++++++++++++ 3 files changed, 59 insertions(+), 1 deletion(-) delete mode 100644 ignori/util/__pycache__/settings.cpython-312.pyc diff --git a/ignori/util/__pycache__/settings.cpython-312.pyc b/ignori/util/__pycache__/settings.cpython-312.pyc deleted file mode 100644 index e0be131cf6602d2bb3cff96ad0da7f39a5691924..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 436 zcmX@j%ge<81inhHX_JBUV-N=hn4yf%Z9v9!h7^Vr#vF!R#wbQc1}277##E-&j1U!B z>@Y0|dNq`p#eoomv4|CmVohaDVXES0V2EN%VUA+2WYJ`O2{J^J@fJ%!VoAm=w&Ie? zoYdl5Y@X?P`9+z2njE*-3xE-Mw5K~Z;pOuBwiHH{mSpC{6sMMyWagz8>lIY~;;_lhPbtkwwJQ<;8UqTe zVrwArftit!@h*eJLvH>F9Nl);xfL&RD_-VSzRs<6kz4CJx8X%@!|U7@7r8AOI3Dnc V&5*drr`W*#fJdZ}vxpC<9{}L3W#s?> diff --git a/poetry.lock b/poetry.lock index edad9d2..08cfc03 100644 --- a/poetry.lock +++ b/poetry.lock @@ -522,6 +522,32 @@ pygments = ">=2.13.0,<3.0.0" [package.extras] jupyter = ["ipywidgets (>=7.5.1,<9)"] +[[package]] +name = "ruff" +version = "0.4.4" +description = "An extremely fast Python linter and code formatter, written in Rust." +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruff-0.4.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:29d44ef5bb6a08e235c8249294fa8d431adc1426bfda99ed493119e6f9ea1bf6"}, + {file = "ruff-0.4.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:c4efe62b5bbb24178c950732ddd40712b878a9b96b1d02b0ff0b08a090cbd891"}, + {file = "ruff-0.4.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c8e2f1e8fc12d07ab521a9005d68a969e167b589cbcaee354cb61e9d9de9c15"}, + {file = "ruff-0.4.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:60ed88b636a463214905c002fa3eaab19795679ed55529f91e488db3fe8976ab"}, + {file = "ruff-0.4.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b90fc5e170fc71c712cc4d9ab0e24ea505c6a9e4ebf346787a67e691dfb72e85"}, + {file = "ruff-0.4.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:8e7e6ebc10ef16dcdc77fd5557ee60647512b400e4a60bdc4849468f076f6eef"}, + {file = "ruff-0.4.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b9ddb2c494fb79fc208cd15ffe08f32b7682519e067413dbaf5f4b01a6087bcd"}, + {file = "ruff-0.4.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c51c928a14f9f0a871082603e25a1588059b7e08a920f2f9fa7157b5bf08cfe9"}, + {file = "ruff-0.4.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b5eb0a4bfd6400b7d07c09a7725e1a98c3b838be557fee229ac0f84d9aa49c36"}, + {file = "ruff-0.4.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b1867ee9bf3acc21778dcb293db504692eda5f7a11a6e6cc40890182a9f9e595"}, + {file = "ruff-0.4.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:1aecced1269481ef2894cc495647392a34b0bf3e28ff53ed95a385b13aa45768"}, + {file = "ruff-0.4.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9da73eb616b3241a307b837f32756dc20a0b07e2bcb694fec73699c93d04a69e"}, + {file = "ruff-0.4.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:958b4ea5589706a81065e2a776237de2ecc3e763342e5cc8e02a4a4d8a5e6f95"}, + {file = "ruff-0.4.4-py3-none-win32.whl", hash = "sha256:cb53473849f011bca6e754f2cdf47cafc9c4f4ff4570003a0dad0b9b6890e876"}, + {file = "ruff-0.4.4-py3-none-win_amd64.whl", hash = "sha256:424e5b72597482543b684c11def82669cc6b395aa8cc69acc1858b5ef3e5daae"}, + {file = "ruff-0.4.4-py3-none-win_arm64.whl", hash = "sha256:39df0537b47d3b597293edbb95baf54ff5b49589eb7ff41926d8243caa995ea6"}, + {file = "ruff-0.4.4.tar.gz", hash = "sha256:f87ea42d5cdebdc6a69761a9d0bc83ae9b3b30d0ad78952005ba6568d6c022af"}, +] + [[package]] name = "textual" version = "0.60.1" @@ -690,4 +716,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "26205cc9e95c22fb868dd6f2b655b5e445be3d0cfa0bac835c7da9c4e3749b7a" +content-hash = "14f5e58dc5df0f68cd5edf196a9b1b1e73139f1c56e6a884b3f972ccde846e47" diff --git a/pyproject.toml b/pyproject.toml index 11614fe..b458775 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,7 +12,39 @@ textual = "^0.60.1" [tool.poetry.group.dev.dependencies] textual-dev = "^1.5.1" +ruff = "^0.4.4" [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" + +[tool.ruff] + +target-version = "py312" + +[tool.ruff.lint] +select = [ + "F", + "E", + "W", + "N", + "UP", + "ANN", + "BLE", + "A", + "COM", + "C4", + "DTZ", + "Q", + "SLF", + "SIM", + "PTH", +] +ignore = [] + +fixable = ["ALL"] + +[tool.ruff.format] +quote-style = "double" +skip-magic-trailing-comma = false +line-ending = "auto" From 87b32fedae1f3f282bbd1dea10fb70ba9c7e45b0 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Mon, 20 May 2024 06:03:08 -0600 Subject: [PATCH 004/108] feat: Attempt to implement basic feature of path detection --- ignori/app.py | 35 ++++++++++++++++++++++++++++++----- styles/global.tcss | 9 +++++++++ 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/ignori/app.py b/ignori/app.py index eef555a..62267d6 100644 --- a/ignori/app.py +++ b/ignori/app.py @@ -1,6 +1,11 @@ -import os +from pathlib import Path +from typing import Self + +from textual import on from textual.app import App, ComposeResult -from textual.widgets import Header, Footer, Label, Input +from textual.widgets import Header, Footer, Button, Input +from textual.containers import Horizontal +from textual.binding import Binding from ignori.util.settings import APP_TITLE, STYLES_PATH @@ -9,8 +14,28 @@ class IgnoriApp(App): TITLE = APP_TITLE CSS_PATH = str(STYLES_PATH / "global.tcss") - def compose(self) -> ComposeResult: + BINDINGS = [Binding(key="d", action="toggle_dark", description="Toggle Dark Mode")] + + @on(Button.Pressed, selector="#path-button") + def generate_file(self: Self, event: Button.Pressed) -> None: + path_input = self.query_one(selector="#path-input", expect_type=Input) + path = Path(path_input.value) + if not path.exists(): + self.notify("Path does not exist", severity="error") + return + if not path.is_dir(): + self.notify("Path is not a directory", severity="error") + return + + self.notify(f"Path: {path}") + + def compose(self: Self) -> ComposeResult: yield Header() - yield Input(placeholder="Search...") - yield Label(os.getcwd()) + with Horizontal(id="path-container"): + yield Input( + id="path-input", + placeholder=f"{Path.cwd()}", + type="text", + ) + yield Button("Generate", id="path-button") yield Footer() diff --git a/styles/global.tcss b/styles/global.tcss index e69de29..afe3165 100644 --- a/styles/global.tcss +++ b/styles/global.tcss @@ -0,0 +1,9 @@ +#path-container{ + & #path-input{ + width: 1fr + } + + & #path-button{ + width: auto + } +} \ No newline at end of file From bb15bd60f5f2f6f729f36d98acc7e3f9b97b487d Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Mon, 20 May 2024 09:37:29 -0600 Subject: [PATCH 005/108] chore(ruff): Added isort rules --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index b458775..5316e86 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,6 +39,7 @@ select = [ "SLF", "SIM", "PTH", + "I", ] ignore = [] From 0afbad33b1afcecb5208c9c2c2eb8210028a41b1 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Mon, 20 May 2024 10:19:36 -0600 Subject: [PATCH 006/108] feat: Designed basic layout for application (main screen) --- ignori/app.py | 28 +++++++++++++++++++--------- styles/global.tcss | 31 ++++++++++++++++++++++++++++--- 2 files changed, 47 insertions(+), 12 deletions(-) diff --git a/ignori/app.py b/ignori/app.py index 62267d6..10c5407 100644 --- a/ignori/app.py +++ b/ignori/app.py @@ -3,9 +3,9 @@ from textual import on from textual.app import App, ComposeResult -from textual.widgets import Header, Footer, Button, Input -from textual.containers import Horizontal from textual.binding import Binding +from textual.containers import Container, Horizontal, Vertical +from textual.widgets import Button, Footer, Header, Input, OptionList, Placeholder from ignori.util.settings import APP_TITLE, STYLES_PATH @@ -23,6 +23,7 @@ def generate_file(self: Self, event: Button.Pressed) -> None: if not path.exists(): self.notify("Path does not exist", severity="error") return + if not path.is_dir(): self.notify("Path is not a directory", severity="error") return @@ -31,11 +32,20 @@ def generate_file(self: Self, event: Button.Pressed) -> None: def compose(self: Self) -> ComposeResult: yield Header() - with Horizontal(id="path-container"): - yield Input( - id="path-input", - placeholder=f"{Path.cwd()}", - type="text", - ) - yield Button("Generate", id="path-button") + with Vertical(): + with Container(): + with Horizontal(id="search-container"): + yield Input(placeholder="Search...", type="text") + yield Button("Search") + with Horizontal(): + yield OptionList(*[f"Option {position}" for position in range(20)]) + yield Placeholder() + + with Horizontal(id="path-container"): + yield Input( + id="path-input", + placeholder=f"{Path.cwd()}", + type="text", + ) + yield Button("Generate", id="path-button") yield Footer() diff --git a/styles/global.tcss b/styles/global.tcss index afe3165..b585580 100644 --- a/styles/global.tcss +++ b/styles/global.tcss @@ -1,9 +1,34 @@ #path-container{ & #path-input{ - width: 1fr + width: 1fr; } & #path-button{ - width: auto + width: auto; } -} \ No newline at end of file +} + +Placeholder{ + width: 50%; +} + +Vertical { + & Container{ + height: 1fr; + } + + & #path-container{ + height: auto; + } +} + +#search-container{ + height: auto; + & Input{ + width: 1fr; + } + + & Button{ + width: auto; + } +} From 85c381af2d19f8f88416c895d31c61c2ab4892de Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Mon, 20 May 2024 10:33:34 -0600 Subject: [PATCH 007/108] ci(lint): Added workflow to check for linting --- .github/workflows/lint.yml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 .github/workflows/lint.yml diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..d81255f --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,26 @@ +name: Linting + +on: + - push + +jobs: + test: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest] + python-version: ['3.12'] + + steps: + - uses: actions/checkout@v3 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v3 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install poetry + poetry install + - name: Linting + run: poetry run ruff check \ No newline at end of file From 50850f877bea186924ad2ca2c9243749023781ae Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Mon, 20 May 2024 10:52:37 -0600 Subject: [PATCH 008/108] ci(linter): Added type checking to linter workflow --- .github/workflows/{lint.yml => linter.yml} | 6 ++- poetry.lock | 59 +++++++++++++++++++++- pyproject.toml | 25 ++++++++- 3 files changed, 86 insertions(+), 4 deletions(-) rename .github/workflows/{lint.yml => linter.yml} (80%) diff --git a/.github/workflows/lint.yml b/.github/workflows/linter.yml similarity index 80% rename from .github/workflows/lint.yml rename to .github/workflows/linter.yml index d81255f..659184c 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/linter.yml @@ -1,4 +1,4 @@ -name: Linting +name: Linting and type checking on: - push @@ -23,4 +23,6 @@ jobs: pip install poetry poetry install - name: Linting - run: poetry run ruff check \ No newline at end of file + run: poetry run ruff check + - name: Type checking + run: poetry run mypy ignori \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index 08cfc03..0529523 100644 --- a/poetry.lock +++ b/poetry.lock @@ -490,6 +490,63 @@ files = [ {file = "multidict-6.0.5.tar.gz", hash = "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da"}, ] +[[package]] +name = "mypy" +version = "1.10.0" +description = "Optional static typing for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mypy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da1cbf08fb3b851ab3b9523a884c232774008267b1f83371ace57f412fe308c2"}, + {file = "mypy-1.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:12b6bfc1b1a66095ab413160a6e520e1dc076a28f3e22f7fb25ba3b000b4ef99"}, + {file = "mypy-1.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e36fb078cce9904c7989b9693e41cb9711e0600139ce3970c6ef814b6ebc2b2"}, + {file = "mypy-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2b0695d605ddcd3eb2f736cd8b4e388288c21e7de85001e9f85df9187f2b50f9"}, + {file = "mypy-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:cd777b780312ddb135bceb9bc8722a73ec95e042f911cc279e2ec3c667076051"}, + {file = "mypy-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3be66771aa5c97602f382230165b856c231d1277c511c9a8dd058be4784472e1"}, + {file = "mypy-1.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8b2cbaca148d0754a54d44121b5825ae71868c7592a53b7292eeb0f3fdae95ee"}, + {file = "mypy-1.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ec404a7cbe9fc0e92cb0e67f55ce0c025014e26d33e54d9e506a0f2d07fe5de"}, + {file = "mypy-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e22e1527dc3d4aa94311d246b59e47f6455b8729f4968765ac1eacf9a4760bc7"}, + {file = "mypy-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:a87dbfa85971e8d59c9cc1fcf534efe664d8949e4c0b6b44e8ca548e746a8d53"}, + {file = "mypy-1.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a781f6ad4bab20eef8b65174a57e5203f4be627b46291f4589879bf4e257b97b"}, + {file = "mypy-1.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b808e12113505b97d9023b0b5e0c0705a90571c6feefc6f215c1df9381256e30"}, + {file = "mypy-1.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f55583b12156c399dce2df7d16f8a5095291354f1e839c252ec6c0611e86e2e"}, + {file = "mypy-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cf18f9d0efa1b16478c4c129eabec36148032575391095f73cae2e722fcf9d5"}, + {file = "mypy-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:bc6ac273b23c6b82da3bb25f4136c4fd42665f17f2cd850771cb600bdd2ebeda"}, + {file = "mypy-1.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9fd50226364cd2737351c79807775136b0abe084433b55b2e29181a4c3c878c0"}, + {file = "mypy-1.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f90cff89eea89273727d8783fef5d4a934be2fdca11b47def50cf5d311aff727"}, + {file = "mypy-1.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fcfc70599efde5c67862a07a1aaf50e55bce629ace26bb19dc17cece5dd31ca4"}, + {file = "mypy-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:075cbf81f3e134eadaf247de187bd604748171d6b79736fa9b6c9685b4083061"}, + {file = "mypy-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:3f298531bca95ff615b6e9f2fc0333aae27fa48052903a0ac90215021cdcfa4f"}, + {file = "mypy-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa7ef5244615a2523b56c034becde4e9e3f9b034854c93639adb667ec9ec2976"}, + {file = "mypy-1.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3236a4c8f535a0631f85f5fcdffba71c7feeef76a6002fcba7c1a8e57c8be1ec"}, + {file = "mypy-1.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a2b5cdbb5dd35aa08ea9114436e0d79aceb2f38e32c21684dcf8e24e1e92821"}, + {file = "mypy-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92f93b21c0fe73dc00abf91022234c79d793318b8a96faac147cd579c1671746"}, + {file = "mypy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:28d0e038361b45f099cc086d9dd99c15ff14d0188f44ac883010e172ce86c38a"}, + {file = "mypy-1.10.0-py3-none-any.whl", hash = "sha256:f8c083976eb530019175aabadb60921e73b4f45736760826aa1689dda8208aee"}, + {file = "mypy-1.10.0.tar.gz", hash = "sha256:3d087fcbec056c4ee34974da493a826ce316947485cef3901f511848e687c131"}, +] + +[package.dependencies] +mypy-extensions = ">=1.0.0" +typing-extensions = ">=4.1.0" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +install-types = ["pip"] +mypyc = ["setuptools (>=50)"] +reports = ["lxml"] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + [[package]] name = "pygments" version = "2.18.0" @@ -716,4 +773,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "14f5e58dc5df0f68cd5edf196a9b1b1e73139f1c56e6a884b3f972ccde846e47" +content-hash = "8a58e3a7c3d3ad5ba02bb43bd443cf8f3d4b9c853ce2c82ebef9eb8fcacbcedd" diff --git a/pyproject.toml b/pyproject.toml index 5316e86..f2781e1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,14 +13,18 @@ textual = "^0.60.1" [tool.poetry.group.dev.dependencies] textual-dev = "^1.5.1" ruff = "^0.4.4" +mypy = "^1.10.0" [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" [tool.ruff] +line-length = 88 +indent-width = 4 +target-version = "py310" -target-version = "py312" +exclude = [".git", "__pycache__", "styles", ".vscode"] [tool.ruff.lint] select = [ @@ -49,3 +53,22 @@ fixable = ["ALL"] quote-style = "double" skip-magic-trailing-comma = false line-ending = "auto" + + +[tool.mypy] +check_untyped_defs = true + +ignore_missing_imports = true +no_implicit_optional = true +strict_equality = true + +warn_redundant_casts = true +warn_return_any = true +warn_unreachable = true +warn_unused_configs = true +warn_unused_ignores = true + +no_implicit_reexport = true +allow_redefinition = true + +show_error_codes = true From 948cdce583b9cb1c240e884ee7edd73be4b6e34f Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Mon, 20 May 2024 17:34:30 -0600 Subject: [PATCH 009/108] chore: Added extensions recommendations --- .vscode/extensions.json | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .vscode/extensions.json diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..fd21859 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,6 @@ +{ + "recommendations": [ + "ms-python.mypy-type-checker", + "charliermarsh.ruff" + ] +} \ No newline at end of file From 358c0a166531225cddd034b261acc3ba4ca19570 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Mon, 20 May 2024 17:46:37 -0600 Subject: [PATCH 010/108] feat: Created base layout for file preview component --- ignori/app.py | 5 +++-- ignori/widgets/file_preview.py | 40 ++++++++++++++++++++++++++++++++++ styles/global.tcss | 8 ++++++- 3 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 ignori/widgets/file_preview.py diff --git a/ignori/app.py b/ignori/app.py index 10c5407..caedce7 100644 --- a/ignori/app.py +++ b/ignori/app.py @@ -5,9 +5,10 @@ from textual.app import App, ComposeResult from textual.binding import Binding from textual.containers import Container, Horizontal, Vertical -from textual.widgets import Button, Footer, Header, Input, OptionList, Placeholder +from textual.widgets import Button, Footer, Header, Input, OptionList from ignori.util.settings import APP_TITLE, STYLES_PATH +from ignori.widgets.file_preview import FilePreview class IgnoriApp(App): @@ -39,7 +40,7 @@ def compose(self: Self) -> ComposeResult: yield Button("Search") with Horizontal(): yield OptionList(*[f"Option {position}" for position in range(20)]) - yield Placeholder() + yield FilePreview("sample\ncode\nsampl\n" * 15) with Horizontal(id="path-container"): yield Input( diff --git a/ignori/widgets/file_preview.py b/ignori/widgets/file_preview.py new file mode 100644 index 0000000..668e44d --- /dev/null +++ b/ignori/widgets/file_preview.py @@ -0,0 +1,40 @@ +from typing import Self + +from rich.syntax import Syntax +from textual.app import ComposeResult +from textual.containers import Container, VerticalScroll +from textual.widget import Widget +from textual.widgets import Label, Static + + +class FilePreview(Widget): + + DEFAULT_CSS = """ + FilePreview{ + width: auto; + + & #file-name { + width: 100%; + background: $primary; + color: $text; + } + } + """ + + def __init__(self: "FilePreview", code: str) -> None: + super().__init__() + self.code = code + + def on_mount(self: Self) -> None: + self.query_one("#preview", expect_type=Static).update( + Syntax(self.code, "plain", line_numbers=True, word_wrap=False), + ) + + def compose(self: Self) -> ComposeResult: + with Container(): + yield Label("Preview", id="file-name") + with VerticalScroll(): + yield Static( + id="preview", + expand=True, + ) diff --git a/styles/global.tcss b/styles/global.tcss index b585580..9837da1 100644 --- a/styles/global.tcss +++ b/styles/global.tcss @@ -1,3 +1,7 @@ +* { + box-sizing: border-box; +} + #path-container{ & #path-input{ width: 1fr; @@ -8,7 +12,7 @@ } } -Placeholder{ +FilePreview{ width: 50%; } @@ -24,6 +28,8 @@ Vertical { #search-container{ height: auto; + padding: 1; + & Input{ width: 1fr; } From 9555169b96a4063ce10c05c2893159a0e33c0f5a Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Tue, 21 May 2024 11:52:26 -0600 Subject: [PATCH 011/108] chore: Updated textual --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 0529523..da83edb 100644 --- a/poetry.lock +++ b/poetry.lock @@ -607,13 +607,13 @@ files = [ [[package]] name = "textual" -version = "0.60.1" +version = "0.62.0" description = "Modern Text User Interface framework" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "textual-0.60.1-py3-none-any.whl", hash = "sha256:701715dfe000396c226dccaedd52fd0f56071bbdef2a1497a4f0211063ceba19"}, - {file = "textual-0.60.1.tar.gz", hash = "sha256:258565923f55487876b48b53c1104ad660355e1853af60381ef6b10b3ed3723e"}, + {file = "textual-0.62.0-py3-none-any.whl", hash = "sha256:5208c1df961848889ff0a0c7628f203a2bc773fc2a45d6e842b27a8e34c15499"}, + {file = "textual-0.62.0.tar.gz", hash = "sha256:563c1c13a087c8f4fef8a47aae43e1274139e85d00e0b0898b8eb89c5e494997"}, ] [package.dependencies] @@ -773,4 +773,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "8a58e3a7c3d3ad5ba02bb43bd443cf8f3d4b9c853ce2c82ebef9eb8fcacbcedd" +content-hash = "471aa1a1936e102633ec81df83577d983275eb0e12f8104767b251d8ada92533" diff --git a/pyproject.toml b/pyproject.toml index f2781e1..9f183fc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ readme = "README.md" [tool.poetry.dependencies] python = "^3.12" -textual = "^0.60.1" +textual = "^0.62.0" [tool.poetry.group.dev.dependencies] From f0f79fcd6c7a835c03223af799355e3157d8d6b1 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Tue, 21 May 2024 11:58:15 -0600 Subject: [PATCH 012/108] ci(linter): Modified triggers and branches where to apply --- .github/workflows/linter.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index 659184c..a425c2c 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -1,7 +1,10 @@ name: Linting and type checking on: - - push + pull_request: + branches: [master] + push: + branches: [master] jobs: test: From 418dd3fd1a0339cd339c3a77bb7510806bf2812f Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Tue, 21 May 2024 21:54:32 -0600 Subject: [PATCH 013/108] refactor: Created GenerationForm widget to compound the UI --- ignori/app.py | 25 ++------------- ignori/widgets/file_preview.py | 1 + ignori/widgets/generation_form.py | 52 +++++++++++++++++++++++++++++++ styles/global.tcss | 10 ++---- 4 files changed, 57 insertions(+), 31 deletions(-) create mode 100644 ignori/widgets/generation_form.py diff --git a/ignori/app.py b/ignori/app.py index caedce7..88525fc 100644 --- a/ignori/app.py +++ b/ignori/app.py @@ -1,7 +1,5 @@ -from pathlib import Path from typing import Self -from textual import on from textual.app import App, ComposeResult from textual.binding import Binding from textual.containers import Container, Horizontal, Vertical @@ -9,6 +7,7 @@ from ignori.util.settings import APP_TITLE, STYLES_PATH from ignori.widgets.file_preview import FilePreview +from ignori.widgets.generation_form import GenerationForm class IgnoriApp(App): @@ -17,20 +16,6 @@ class IgnoriApp(App): BINDINGS = [Binding(key="d", action="toggle_dark", description="Toggle Dark Mode")] - @on(Button.Pressed, selector="#path-button") - def generate_file(self: Self, event: Button.Pressed) -> None: - path_input = self.query_one(selector="#path-input", expect_type=Input) - path = Path(path_input.value) - if not path.exists(): - self.notify("Path does not exist", severity="error") - return - - if not path.is_dir(): - self.notify("Path is not a directory", severity="error") - return - - self.notify(f"Path: {path}") - def compose(self: Self) -> ComposeResult: yield Header() with Vertical(): @@ -42,11 +27,5 @@ def compose(self: Self) -> ComposeResult: yield OptionList(*[f"Option {position}" for position in range(20)]) yield FilePreview("sample\ncode\nsampl\n" * 15) - with Horizontal(id="path-container"): - yield Input( - id="path-input", - placeholder=f"{Path.cwd()}", - type="text", - ) - yield Button("Generate", id="path-button") + yield GenerationForm() yield Footer() diff --git a/ignori/widgets/file_preview.py b/ignori/widgets/file_preview.py index 668e44d..94fbf4f 100644 --- a/ignori/widgets/file_preview.py +++ b/ignori/widgets/file_preview.py @@ -26,6 +26,7 @@ def __init__(self: "FilePreview", code: str) -> None: self.code = code def on_mount(self: Self) -> None: + # TODO: Change for Syntaz.from_path() self.query_one("#preview", expect_type=Static).update( Syntax(self.code, "plain", line_numbers=True, word_wrap=False), ) diff --git a/ignori/widgets/generation_form.py b/ignori/widgets/generation_form.py new file mode 100644 index 0000000..1b6cbc4 --- /dev/null +++ b/ignori/widgets/generation_form.py @@ -0,0 +1,52 @@ +from pathlib import Path +from typing import Self + +from textual import on +from textual.app import ComposeResult +from textual.containers import Horizontal +from textual.widget import Widget +from textual.widgets import Button, Input + + +class GenerationForm(Widget): + + DEFAULT_CSS = """ + GenerationForm{ + & #path-container{ + & #path-input{ + width: 1fr; + } + + & #path-button{ + width: auto; + } + } + } + """ + + def __init__(self: "GenerationForm") -> None: + super().__init__() + self.log("ASD") + + @on(Button.Pressed, selector="#path-button") + def generate_file(self: Self, event: Button.Pressed) -> None: + path_input = self.query_one(selector="#path-input", expect_type=Input) + path = Path(path_input.value) + if not path.exists(): + self.notify("Path does not exist", severity="error") + return + + if not path.is_dir(): + self.notify("Path is not a directory", severity="error") + return + + self.notify(f"Path: {path}") + + def compose(self: Self) -> ComposeResult: + with Horizontal(id="path-container"): + yield Input( + id="path-input", + placeholder=f"{Path.cwd()}", + type="text", + ) + yield Button("Generate", id="path-button") diff --git a/styles/global.tcss b/styles/global.tcss index 9837da1..30af99c 100644 --- a/styles/global.tcss +++ b/styles/global.tcss @@ -2,14 +2,8 @@ box-sizing: border-box; } -#path-container{ - & #path-input{ - width: 1fr; - } - - & #path-button{ - width: auto; - } +GenerationForm{ + height: auto; } FilePreview{ From 2542e6251d8d1f4d789ab4d9df40f5c19169e853 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Wed, 22 May 2024 08:07:57 -0600 Subject: [PATCH 014/108] feat: Moved widgets from App class to its own widget, SearchForm --- ignori/app.py | 17 ++++-------- ignori/widgets/generation_form.py | 1 + ignori/widgets/search_form.py | 45 +++++++++++++++++++++++++++++++ styles/global.tcss | 27 +++---------------- 4 files changed, 54 insertions(+), 36 deletions(-) create mode 100644 ignori/widgets/search_form.py diff --git a/ignori/app.py b/ignori/app.py index 88525fc..b69423a 100644 --- a/ignori/app.py +++ b/ignori/app.py @@ -2,12 +2,12 @@ from textual.app import App, ComposeResult from textual.binding import Binding -from textual.containers import Container, Horizontal, Vertical -from textual.widgets import Button, Footer, Header, Input, OptionList +from textual.containers import Vertical +from textual.widgets import Footer, Header from ignori.util.settings import APP_TITLE, STYLES_PATH -from ignori.widgets.file_preview import FilePreview from ignori.widgets.generation_form import GenerationForm +from ignori.widgets.search_form import SearchForm class IgnoriApp(App): @@ -18,14 +18,7 @@ class IgnoriApp(App): def compose(self: Self) -> ComposeResult: yield Header() - with Vertical(): - with Container(): - with Horizontal(id="search-container"): - yield Input(placeholder="Search...", type="text") - yield Button("Search") - with Horizontal(): - yield OptionList(*[f"Option {position}" for position in range(20)]) - yield FilePreview("sample\ncode\nsampl\n" * 15) - + with Vertical(id="container"): + yield SearchForm() yield GenerationForm() yield Footer() diff --git a/ignori/widgets/generation_form.py b/ignori/widgets/generation_form.py index 1b6cbc4..65e44d0 100644 --- a/ignori/widgets/generation_form.py +++ b/ignori/widgets/generation_form.py @@ -13,6 +13,7 @@ class GenerationForm(Widget): DEFAULT_CSS = """ GenerationForm{ & #path-container{ + height: auto; & #path-input{ width: 1fr; } diff --git a/ignori/widgets/search_form.py b/ignori/widgets/search_form.py new file mode 100644 index 0000000..1f59ea4 --- /dev/null +++ b/ignori/widgets/search_form.py @@ -0,0 +1,45 @@ +from typing import Self + +from textual.app import ComposeResult +from textual.containers import Container, Horizontal +from textual.widget import Widget +from textual.widgets import Button, Input, OptionList + +from ignori.widgets.file_preview import FilePreview + + +class SearchForm(Widget): + + DEFAULT_CSS = """ + SearchForm{ + width: 100%; + + & OptionList{ + width: 1fr; + } + & FilePreview{ + width: 1fr !important; + } + + & #search-container{ + height: auto; + + & Input{ + width: 1fr; + } + + & Button{ + width: auto; + } + } + } + """ + + def compose(self: Self) -> ComposeResult: + with Container(): + with Horizontal(id="search-container"): + yield Input(placeholder="Search...", type="text") + yield Button("Search") + with Horizontal(): + yield OptionList(*[f"Option {position}" for position in range(20)]) + yield FilePreview("sample\ncode\nsampl\n" * 15) diff --git a/styles/global.tcss b/styles/global.tcss index 30af99c..fc74b0e 100644 --- a/styles/global.tcss +++ b/styles/global.tcss @@ -2,33 +2,12 @@ box-sizing: border-box; } -GenerationForm{ - height: auto; -} - -FilePreview{ - width: 50%; -} - -Vertical { - & Container{ +#container { + & SearchForm{ height: 1fr; } - & #path-container{ + & GenerationForm{ height: auto; } } - -#search-container{ - height: auto; - padding: 1; - - & Input{ - width: 1fr; - } - - & Button{ - width: auto; - } -} From 0da03265f105735b913d85e67d073cbfd9a5c8a7 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Wed, 22 May 2024 09:12:22 -0600 Subject: [PATCH 015/108] chore: Upgraded textual --- poetry.lock | 2 +- pyproject.toml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/poetry.lock b/poetry.lock index da83edb..387278d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -773,4 +773,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "471aa1a1936e102633ec81df83577d983275eb0e12f8104767b251d8ada92533" +content-hash = "cc2436b262abf06f2ca33264789bce858dd143a25c6582adf4a2e18442b19098" diff --git a/pyproject.toml b/pyproject.toml index 9f183fc..f1339fd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,6 +8,7 @@ readme = "README.md" [tool.poetry.dependencies] python = "^3.12" textual = "^0.62.0" +rich = "^13.7.1" [tool.poetry.group.dev.dependencies] From f4934ba2822581db78710fd806b8a93607a055ca Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Wed, 22 May 2024 09:17:21 -0600 Subject: [PATCH 016/108] refactor: Moved CSS from global.tcss to the corresponding widgets --- ignori/app.py | 4 +++- ignori/widgets/file_preview.py | 4 ++-- ignori/widgets/search_form.py | 30 +++++++++++++++++------------- 3 files changed, 22 insertions(+), 16 deletions(-) diff --git a/ignori/app.py b/ignori/app.py index b69423a..128155c 100644 --- a/ignori/app.py +++ b/ignori/app.py @@ -14,7 +14,9 @@ class IgnoriApp(App): TITLE = APP_TITLE CSS_PATH = str(STYLES_PATH / "global.tcss") - BINDINGS = [Binding(key="d", action="toggle_dark", description="Toggle Dark Mode")] + BINDINGS = [ + Binding(key="d", action="toggle_dark", description="Toggle Dark Mode"), + ] def compose(self: Self) -> ComposeResult: yield Header() diff --git a/ignori/widgets/file_preview.py b/ignori/widgets/file_preview.py index 94fbf4f..433a5b2 100644 --- a/ignori/widgets/file_preview.py +++ b/ignori/widgets/file_preview.py @@ -21,8 +21,8 @@ class FilePreview(Widget): } """ - def __init__(self: "FilePreview", code: str) -> None: - super().__init__() + def __init__(self: "FilePreview", code: str, _id: str) -> None: + super().__init__(id=_id) self.code = code def on_mount(self: Self) -> None: diff --git a/ignori/widgets/search_form.py b/ignori/widgets/search_form.py index 1f59ea4..63678b8 100644 --- a/ignori/widgets/search_form.py +++ b/ignori/widgets/search_form.py @@ -13,22 +13,23 @@ class SearchForm(Widget): DEFAULT_CSS = """ SearchForm{ width: 100%; - - & OptionList{ - width: 1fr; - } - & FilePreview{ - width: 1fr !important; + & #ignore-container{ + & #ignore-list{ + width: 1fr; + } + & #ignore-code{ + width: 1fr !important; + } } & #search-container{ height: auto; - & Input{ + & #search-input { width: 1fr; } - & Button{ + & #search-button { width: auto; } } @@ -38,8 +39,11 @@ class SearchForm(Widget): def compose(self: Self) -> ComposeResult: with Container(): with Horizontal(id="search-container"): - yield Input(placeholder="Search...", type="text") - yield Button("Search") - with Horizontal(): - yield OptionList(*[f"Option {position}" for position in range(20)]) - yield FilePreview("sample\ncode\nsampl\n" * 15) + yield Input(placeholder="Search...", type="text", id="search-input") + yield Button("Search", id="search-button") + with Horizontal(id="ignore-container"): + yield OptionList( + *[f"Option {position}" for position in range(20)], + id="ignore-list", + ) + yield FilePreview("sample\ncode\nsampl\n" * 15, _id="ignore-code") From 9e2bbfa2c5798cdc580e9ebce8e88f794296f730 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Thu, 23 May 2024 00:48:44 -0600 Subject: [PATCH 017/108] chore: Upgraded textual --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 387278d..c7ad1da 100644 --- a/poetry.lock +++ b/poetry.lock @@ -607,13 +607,13 @@ files = [ [[package]] name = "textual" -version = "0.62.0" +version = "0.63.1" description = "Modern Text User Interface framework" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "textual-0.62.0-py3-none-any.whl", hash = "sha256:5208c1df961848889ff0a0c7628f203a2bc773fc2a45d6e842b27a8e34c15499"}, - {file = "textual-0.62.0.tar.gz", hash = "sha256:563c1c13a087c8f4fef8a47aae43e1274139e85d00e0b0898b8eb89c5e494997"}, + {file = "textual-0.63.1-py3-none-any.whl", hash = "sha256:10ccbd60b30582fab545e734ccb9ff3d1cb8550dc520bc1862274f3d8427ca04"}, + {file = "textual-0.63.1.tar.gz", hash = "sha256:281803c428c7207e1bbdb6c7e9f831556fc585d5b9bd5ad33f39ee288def616c"}, ] [package.dependencies] @@ -773,4 +773,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "cc2436b262abf06f2ca33264789bce858dd143a25c6582adf4a2e18442b19098" +content-hash = "f71c327345a2d209d59a65cd8618fcff9a76c19143aa3e07dc1086e27584bbdf" diff --git a/pyproject.toml b/pyproject.toml index f1339fd..22264de 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ readme = "README.md" [tool.poetry.dependencies] python = "^3.12" -textual = "^0.62.0" +textual = "^0.63.1" rich = "^13.7.1" From ca12de6f59e00d020b7295c9d8c73c2bb4cbb5fb Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Thu, 23 May 2024 01:45:28 -0600 Subject: [PATCH 018/108] feat: Get list of gitignore by name sorted alphabetically --- ignori/ignore_file.py | 21 +++++ ignori/util/file.py | 12 +++ ignori/util/settings.py | 2 + ignori/widgets/search_form.py | 22 ++++- templates/Kotlin.gitignore | 24 +++++ templates/Python.gitignore | 162 ++++++++++++++++++++++++++++++++++ 6 files changed, 241 insertions(+), 2 deletions(-) create mode 100644 ignori/ignore_file.py create mode 100644 ignori/util/file.py create mode 100644 templates/Kotlin.gitignore create mode 100644 templates/Python.gitignore diff --git a/ignori/ignore_file.py b/ignori/ignore_file.py new file mode 100644 index 0000000..628dcc1 --- /dev/null +++ b/ignori/ignore_file.py @@ -0,0 +1,21 @@ +from dataclasses import dataclass, field +from pathlib import Path +from typing import Self + + +@dataclass +class IgnoreFile: + id: str = field(init=False) + path: Path + language: str = field(init=False) + + def __post_init__(self: Self) -> None: + self.language = self.path.stem + self.id = self.language.lower()[:3] + + +if __name__ == "__main__": + test_path = Path("Python.gitignore") + ignore_file = IgnoreFile(test_path) + assert ignore_file.language == "Python" + assert ignore_file.id == "pyt" diff --git a/ignori/util/file.py b/ignori/util/file.py new file mode 100644 index 0000000..2714e19 --- /dev/null +++ b/ignori/util/file.py @@ -0,0 +1,12 @@ +from ignori.ignore_file import IgnoreFile +from ignori.util.settings import TEMPLATES_PATH + + +def search_files_by_name(template_name: str | None = None) -> list[IgnoreFile]: + template_files = [ + IgnoreFile(file) + for file in TEMPLATES_PATH.iterdir() + if template_name is None or template_name.lower() in file.stem.lower() + ] + + return sorted(template_files, key=lambda file: file.language) diff --git a/ignori/util/settings.py b/ignori/util/settings.py index dd75657..cc57e75 100644 --- a/ignori/util/settings.py +++ b/ignori/util/settings.py @@ -4,4 +4,6 @@ STYLES_PATH = BASE_DIR / "styles" +TEMPLATES_PATH = BASE_DIR / "templates" + APP_TITLE = "Ignori" diff --git a/ignori/widgets/search_form.py b/ignori/widgets/search_form.py index 63678b8..278176b 100644 --- a/ignori/widgets/search_form.py +++ b/ignori/widgets/search_form.py @@ -1,10 +1,14 @@ from typing import Self +from textual import on from textual.app import ComposeResult from textual.containers import Container, Horizontal +from textual.reactive import reactive from textual.widget import Widget from textual.widgets import Button, Input, OptionList +from ignori.ignore_file import IgnoreFile +from ignori.util.file import search_files_by_name from ignori.widgets.file_preview import FilePreview @@ -14,8 +18,9 @@ class SearchForm(Widget): SearchForm{ width: 100%; & #ignore-container{ - & #ignore-list{ + & OptionList { width: 1fr; + height:100%; } & #ignore-code{ width: 1fr !important; @@ -36,6 +41,20 @@ class SearchForm(Widget): } """ + ignore_files: reactive[list[IgnoreFile]] = reactive(search_files_by_name()) + + @on(Button.Pressed, selector="#search-button") + def search_ignore_file(self: Self, event: Button.Pressed) -> None: + path_input = self.query_one(selector="#search-input", expect_type=Input) + + self.ignore_files = search_files_by_name(path_input.value) + + def watch_ignore_files(self: Self, ignore_files: list[IgnoreFile]) -> None: + ignore_list = self.query_one("#ignore-list", expect_type=OptionList) + ignore_list.clear_options() + + ignore_list.add_options([file.language for file in ignore_files]) + def compose(self: Self) -> ComposeResult: with Container(): with Horizontal(id="search-container"): @@ -43,7 +62,6 @@ def compose(self: Self) -> ComposeResult: yield Button("Search", id="search-button") with Horizontal(id="ignore-container"): yield OptionList( - *[f"Option {position}" for position in range(20)], id="ignore-list", ) yield FilePreview("sample\ncode\nsampl\n" * 15, _id="ignore-code") diff --git a/templates/Kotlin.gitignore b/templates/Kotlin.gitignore new file mode 100644 index 0000000..38105ec --- /dev/null +++ b/templates/Kotlin.gitignore @@ -0,0 +1,24 @@ +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* +replay_pid* \ No newline at end of file diff --git a/templates/Python.gitignore b/templates/Python.gitignore new file mode 100644 index 0000000..efa407c --- /dev/null +++ b/templates/Python.gitignore @@ -0,0 +1,162 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/latest/usage/project/#working-with-version-control +.pdm.toml +.pdm-python +.pdm-build/ + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ \ No newline at end of file From eb5154949e26ecdeda855ecf65800fd4727ff9ff Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Thu, 23 May 2024 02:16:27 -0600 Subject: [PATCH 019/108] feat: Selection and preview of gitignore files --- ignori/util/file.py | 2 +- ignori/widgets/file_preview.py | 22 +++++++++++++++------- ignori/widgets/search_form.py | 27 +++++++++++++++++++++++++-- 3 files changed, 41 insertions(+), 10 deletions(-) diff --git a/ignori/util/file.py b/ignori/util/file.py index 2714e19..05de1db 100644 --- a/ignori/util/file.py +++ b/ignori/util/file.py @@ -2,7 +2,7 @@ from ignori.util.settings import TEMPLATES_PATH -def search_files_by_name(template_name: str | None = None) -> list[IgnoreFile]: +def search_files_by_name(template_name: str = "") -> list[IgnoreFile]: template_files = [ IgnoreFile(file) for file in TEMPLATES_PATH.iterdir() diff --git a/ignori/widgets/file_preview.py b/ignori/widgets/file_preview.py index 433a5b2..ea593b0 100644 --- a/ignori/widgets/file_preview.py +++ b/ignori/widgets/file_preview.py @@ -3,9 +3,12 @@ from rich.syntax import Syntax from textual.app import ComposeResult from textual.containers import Container, VerticalScroll +from textual.reactive import reactive from textual.widget import Widget from textual.widgets import Label, Static +from ignori.ignore_file import IgnoreFile + class FilePreview(Widget): @@ -21,15 +24,20 @@ class FilePreview(Widget): } """ - def __init__(self: "FilePreview", code: str, _id: str) -> None: + selected_ignore_file: reactive[IgnoreFile | None] = reactive(None) + + def __init__(self: "FilePreview", _id: str) -> None: super().__init__(id=_id) - self.code = code - def on_mount(self: Self) -> None: - # TODO: Change for Syntaz.from_path() - self.query_one("#preview", expect_type=Static).update( - Syntax(self.code, "plain", line_numbers=True, word_wrap=False), - ) + def watch_selected_ignore_file(self: Self, ignore_file: IgnoreFile | None) -> None: + if ignore_file is not None: + self.query_one("#preview", expect_type=Static).update( + Syntax.from_path( + str(ignore_file.path), + line_numbers=True, + word_wrap=True, + ), + ) def compose(self: Self) -> ComposeResult: with Container(): diff --git a/ignori/widgets/search_form.py b/ignori/widgets/search_form.py index 278176b..348010b 100644 --- a/ignori/widgets/search_form.py +++ b/ignori/widgets/search_form.py @@ -6,6 +6,7 @@ from textual.reactive import reactive from textual.widget import Widget from textual.widgets import Button, Input, OptionList +from textual.widgets.option_list import Option from ignori.ignore_file import IgnoreFile from ignori.util.file import search_files_by_name @@ -43,17 +44,37 @@ class SearchForm(Widget): ignore_files: reactive[list[IgnoreFile]] = reactive(search_files_by_name()) + selected_ignore_file: reactive[IgnoreFile | None] = reactive(None) + @on(Button.Pressed, selector="#search-button") def search_ignore_file(self: Self, event: Button.Pressed) -> None: path_input = self.query_one(selector="#search-input", expect_type=Input) self.ignore_files = search_files_by_name(path_input.value) + @on(OptionList.OptionHighlighted, selector="#ignore-list") + def show_file_content(self: Self, event: OptionList.OptionHighlighted) -> None: + pass + + @on(OptionList.OptionSelected, selector="#ignore-list") + def select_file(self: Self, event: OptionList.OptionSelected) -> None: + if event.option_id is not None: + ignore_file = list( + filter(lambda file: file.id == event.option_id, self.ignore_files), + )[0] + self.selected_ignore_file = ignore_file + self.notify(ignore_file.language) + def watch_ignore_files(self: Self, ignore_files: list[IgnoreFile]) -> None: ignore_list = self.query_one("#ignore-list", expect_type=OptionList) ignore_list.clear_options() - ignore_list.add_options([file.language for file in ignore_files]) + if ignore_files: + ignore_list.add_options( + [Option(file.language, id=file.id) for file in ignore_files], + ) + else: + ignore_list.add_option(Option("No files found", disabled=True)) def compose(self: Self) -> ComposeResult: with Container(): @@ -64,4 +85,6 @@ def compose(self: Self) -> ComposeResult: yield OptionList( id="ignore-list", ) - yield FilePreview("sample\ncode\nsampl\n" * 15, _id="ignore-code") + yield FilePreview(_id="ignore-code").data_bind( + SearchForm.selected_ignore_file, + ) From 69aba88de0d5db0db84d8ec8e063ef2b2729867d Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Fri, 24 May 2024 17:26:50 -0600 Subject: [PATCH 020/108] feat: Added preview of file on highlighted option --- ignori/widgets/file_preview.py | 6 ++++-- ignori/widgets/generation_form.py | 4 ---- ignori/widgets/search_form.py | 27 ++++++++++++++++++++------- 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/ignori/widgets/file_preview.py b/ignori/widgets/file_preview.py index ea593b0..b8bd966 100644 --- a/ignori/widgets/file_preview.py +++ b/ignori/widgets/file_preview.py @@ -24,12 +24,14 @@ class FilePreview(Widget): } """ - selected_ignore_file: reactive[IgnoreFile | None] = reactive(None) + highlighted_ignore_file: reactive[IgnoreFile | None] = reactive(None) def __init__(self: "FilePreview", _id: str) -> None: super().__init__(id=_id) - def watch_selected_ignore_file(self: Self, ignore_file: IgnoreFile | None) -> None: + def watch_highlighted_ignore_file( + self: Self, ignore_file: IgnoreFile | None, + ) -> None: if ignore_file is not None: self.query_one("#preview", expect_type=Static).update( Syntax.from_path( diff --git a/ignori/widgets/generation_form.py b/ignori/widgets/generation_form.py index 65e44d0..e331947 100644 --- a/ignori/widgets/generation_form.py +++ b/ignori/widgets/generation_form.py @@ -25,10 +25,6 @@ class GenerationForm(Widget): } """ - def __init__(self: "GenerationForm") -> None: - super().__init__() - self.log("ASD") - @on(Button.Pressed, selector="#path-button") def generate_file(self: Self, event: Button.Pressed) -> None: path_input = self.query_one(selector="#path-input", expect_type=Input) diff --git a/ignori/widgets/search_form.py b/ignori/widgets/search_form.py index 348010b..369e9fa 100644 --- a/ignori/widgets/search_form.py +++ b/ignori/widgets/search_form.py @@ -46,6 +46,8 @@ class SearchForm(Widget): selected_ignore_file: reactive[IgnoreFile | None] = reactive(None) + highlighted_ignore_file: reactive[IgnoreFile | None] = reactive(None) + @on(Button.Pressed, selector="#search-button") def search_ignore_file(self: Self, event: Button.Pressed) -> None: path_input = self.query_one(selector="#search-input", expect_type=Input) @@ -54,16 +56,27 @@ def search_ignore_file(self: Self, event: Button.Pressed) -> None: @on(OptionList.OptionHighlighted, selector="#ignore-list") def show_file_content(self: Self, event: OptionList.OptionHighlighted) -> None: - pass + if event.option_id is not None: + highligted_file = next( + (file for file in self.ignore_files if file.id == event.option_id), + None, + ) + + if highligted_file: + self.highlighted_ignore_file = highligted_file + print(highligted_file) @on(OptionList.OptionSelected, selector="#ignore-list") def select_file(self: Self, event: OptionList.OptionSelected) -> None: if event.option_id is not None: - ignore_file = list( - filter(lambda file: file.id == event.option_id, self.ignore_files), - )[0] - self.selected_ignore_file = ignore_file - self.notify(ignore_file.language) + selected_file = next( + (file for file in self.ignore_files if file.id == event.option_id), + None, + ) + + if selected_file: + self.selected_ignore_file = selected_file + self.notify(f"{selected_file.language} selected") def watch_ignore_files(self: Self, ignore_files: list[IgnoreFile]) -> None: ignore_list = self.query_one("#ignore-list", expect_type=OptionList) @@ -86,5 +99,5 @@ def compose(self: Self) -> ComposeResult: id="ignore-list", ) yield FilePreview(_id="ignore-code").data_bind( - SearchForm.selected_ignore_file, + SearchForm.highlighted_ignore_file, ) From d4c81410c197e353ef36cd22633927d6035ce0ed Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Fri, 24 May 2024 17:34:20 -0600 Subject: [PATCH 021/108] refator: Created function to get option by id --- ignori/widgets/search_form.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/ignori/widgets/search_form.py b/ignori/widgets/search_form.py index 369e9fa..fffd950 100644 --- a/ignori/widgets/search_form.py +++ b/ignori/widgets/search_form.py @@ -13,6 +13,17 @@ from ignori.widgets.file_preview import FilePreview +def get_option_by_id( + ignore_files: list[IgnoreFile], + option_id: str, +) -> IgnoreFile | None: + selected_file = next( + (file for file in ignore_files if file.id == option_id), + None, + ) + return selected_file + + class SearchForm(Widget): DEFAULT_CSS = """ @@ -57,22 +68,15 @@ def search_ignore_file(self: Self, event: Button.Pressed) -> None: @on(OptionList.OptionHighlighted, selector="#ignore-list") def show_file_content(self: Self, event: OptionList.OptionHighlighted) -> None: if event.option_id is not None: - highligted_file = next( - (file for file in self.ignore_files if file.id == event.option_id), - None, - ) + highligted_file = get_option_by_id(self.ignore_files, event.option_id) if highligted_file: self.highlighted_ignore_file = highligted_file - print(highligted_file) @on(OptionList.OptionSelected, selector="#ignore-list") def select_file(self: Self, event: OptionList.OptionSelected) -> None: if event.option_id is not None: - selected_file = next( - (file for file in self.ignore_files if file.id == event.option_id), - None, - ) + selected_file = get_option_by_id(self.ignore_files, event.option_id) if selected_file: self.selected_ignore_file = selected_file From d19afdbe1faa862ef2d8ba2c8694c8886ce32dfa Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Sat, 25 May 2024 10:42:51 -0600 Subject: [PATCH 022/108] style: Code formatting --- README.md | 1 + ignori/widgets/file_preview.py | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e69de29..4986a53 100644 --- a/README.md +++ b/README.md @@ -0,0 +1 @@ +# Ignori \ No newline at end of file diff --git a/ignori/widgets/file_preview.py b/ignori/widgets/file_preview.py index b8bd966..9054fc7 100644 --- a/ignori/widgets/file_preview.py +++ b/ignori/widgets/file_preview.py @@ -30,9 +30,11 @@ def __init__(self: "FilePreview", _id: str) -> None: super().__init__(id=_id) def watch_highlighted_ignore_file( - self: Self, ignore_file: IgnoreFile | None, + self: Self, + ignore_file: IgnoreFile | None, ) -> None: if ignore_file is not None: + self.query_one(VerticalScroll).scroll_home(animate=False) self.query_one("#preview", expect_type=Static).update( Syntax.from_path( str(ignore_file.path), From ff8514e44de5386a4d21b53ebe08261be933ee43 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Mon, 27 May 2024 06:28:03 -0600 Subject: [PATCH 023/108] chore: Installed pipe package --- poetry.lock | 13 ++++++++++++- pyproject.toml | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/poetry.lock b/poetry.lock index c7ad1da..feea034 100644 --- a/poetry.lock +++ b/poetry.lock @@ -547,6 +547,17 @@ files = [ {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] +[[package]] +name = "pipe" +version = "2.2" +description = "Module enabling a sh like infix syntax (using pipes)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pipe-2.2-py3-none-any.whl", hash = "sha256:0a5c3202ff35122f69a34ccbd40c9658646f033cc941055304fe8bfa7e13376e"}, + {file = "pipe-2.2.tar.gz", hash = "sha256:6a253198e3bc542ffaf0a4222376586bce8583b27a9ddbc2cfbaa554c049230d"}, +] + [[package]] name = "pygments" version = "2.18.0" @@ -773,4 +784,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "f71c327345a2d209d59a65cd8618fcff9a76c19143aa3e07dc1086e27584bbdf" +content-hash = "367e6de6a0af669da05ee4105071dc87d5d5e7309373062f42093a565b58135f" diff --git a/pyproject.toml b/pyproject.toml index 22264de..84a3412 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,6 +9,7 @@ readme = "README.md" python = "^3.12" textual = "^0.63.1" rich = "^13.7.1" +pipe = "^2.2" [tool.poetry.group.dev.dependencies] From d21889dded8411df9f6414941a8b26b196bf90fc Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Mon, 27 May 2024 15:52:22 -0600 Subject: [PATCH 024/108] feat: Added message of selected file to show its info on generation form --- ignori/app.py | 11 +++++++- ignori/util/file.py | 12 ++++++++- ignori/util/validators.py | 20 ++++++++++++++ ignori/widgets/generation_form.py | 43 ++++++++++++++++++++++++------- ignori/widgets/search_form.py | 13 +++++++--- 5 files changed, 84 insertions(+), 15 deletions(-) create mode 100644 ignori/util/validators.py diff --git a/ignori/app.py b/ignori/app.py index 128155c..65f07d8 100644 --- a/ignori/app.py +++ b/ignori/app.py @@ -1,10 +1,13 @@ from typing import Self +from textual import on from textual.app import App, ComposeResult from textual.binding import Binding from textual.containers import Vertical +from textual.reactive import reactive from textual.widgets import Footer, Header +from ignori.ignore_file import IgnoreFile from ignori.util.settings import APP_TITLE, STYLES_PATH from ignori.widgets.generation_form import GenerationForm from ignori.widgets.search_form import SearchForm @@ -18,9 +21,15 @@ class IgnoriApp(App): Binding(key="d", action="toggle_dark", description="Toggle Dark Mode"), ] + selected_ignore_file: reactive[IgnoreFile | None] = reactive(None) + + @on(SearchForm.Selected) + def selected_file(self: Self, event: SearchForm.Selected) -> None: + self.selected_ignore_file = event.selected_file + def compose(self: Self) -> ComposeResult: yield Header() with Vertical(id="container"): yield SearchForm() - yield GenerationForm() + yield GenerationForm().data_bind(IgnoriApp.selected_ignore_file) yield Footer() diff --git a/ignori/util/file.py b/ignori/util/file.py index 05de1db..eeef0a4 100644 --- a/ignori/util/file.py +++ b/ignori/util/file.py @@ -1,3 +1,5 @@ +from pathlib import Path + from ignori.ignore_file import IgnoreFile from ignori.util.settings import TEMPLATES_PATH @@ -6,7 +8,15 @@ def search_files_by_name(template_name: str = "") -> list[IgnoreFile]: template_files = [ IgnoreFile(file) for file in TEMPLATES_PATH.iterdir() - if template_name is None or template_name.lower() in file.stem.lower() + if template_name.lower() in file.stem.lower() ] return sorted(template_files, key=lambda file: file.language) + + +def copy_file_content(source_file: Path, destination_file: Path) -> None: + with Path.open(source_file) as source, Path.open( + destination_file, + "w", + ) as destination: + destination.write(source.read()) diff --git a/ignori/util/validators.py b/ignori/util/validators.py new file mode 100644 index 0000000..c75a0ff --- /dev/null +++ b/ignori/util/validators.py @@ -0,0 +1,20 @@ +from pathlib import Path +from typing import Self + +from textual.validation import ValidationResult, Validator + + +class PathValidator(Validator): + def validate(self: Self, value: str) -> ValidationResult: + if not self.validate_path(value): + return self.failure("Path does not exist or is not a directory") + return self.success() + + @staticmethod + def validate_path(value: str) -> bool: + path = Path(value) + if not path.exists(): + return False + if not path.is_dir(): + return False + return True diff --git a/ignori/widgets/generation_form.py b/ignori/widgets/generation_form.py index e331947..c094816 100644 --- a/ignori/widgets/generation_form.py +++ b/ignori/widgets/generation_form.py @@ -3,16 +3,24 @@ from textual import on from textual.app import ComposeResult -from textual.containers import Horizontal +from textual.containers import Container, Horizontal +from textual.reactive import reactive from textual.widget import Widget -from textual.widgets import Button, Input +from textual.widgets import Button, Input, Label + +from ignori.ignore_file import IgnoreFile +from ignori.util.validators import PathValidator class GenerationForm(Widget): DEFAULT_CSS = """ - GenerationForm{ - & #path-container{ + GenerationForm { + & #path-container { + height: auto; + } + + & #path-form-container{ height: auto; & #path-input{ width: 1fr; @@ -25,6 +33,13 @@ class GenerationForm(Widget): } """ + selected_ignore_file: reactive[IgnoreFile | None] = reactive(None) + + def watch_selected_ignore_file(self: Self, ignore_file: IgnoreFile | None) -> None: + if ignore_file: + label = self.query_one("#path-label", expect_type=Label) + label.update("Language: " + ignore_file.language) + @on(Button.Pressed, selector="#path-button") def generate_file(self: Self, event: Button.Pressed) -> None: path_input = self.query_one(selector="#path-input", expect_type=Input) @@ -40,10 +55,18 @@ def generate_file(self: Self, event: Button.Pressed) -> None: self.notify(f"Path: {path}") def compose(self: Self) -> ComposeResult: - with Horizontal(id="path-container"): - yield Input( - id="path-input", - placeholder=f"{Path.cwd()}", - type="text", + with Container(id="path-container"): + yield Label( + "Path", + id="path-label", ) - yield Button("Generate", id="path-button") + with Horizontal(id="path-form-container"): + yield Input( + id="path-input", + placeholder=f"{Path.cwd()}", + type="text", + validators=[ + PathValidator(), + ], + ) + yield Button("Generate", id="path-button") diff --git a/ignori/widgets/search_form.py b/ignori/widgets/search_form.py index fffd950..beec5c6 100644 --- a/ignori/widgets/search_form.py +++ b/ignori/widgets/search_form.py @@ -3,6 +3,7 @@ from textual import on from textual.app import ComposeResult from textual.containers import Container, Horizontal +from textual.message import Message from textual.reactive import reactive from textual.widget import Widget from textual.widgets import Button, Input, OptionList @@ -53,9 +54,15 @@ class SearchForm(Widget): } """ - ignore_files: reactive[list[IgnoreFile]] = reactive(search_files_by_name()) + class Selected(Message): + def __init__( + self: "SearchForm.Selected", + selected_file: IgnoreFile | None, + ) -> None: + self.selected_file = selected_file + super().__init__() - selected_ignore_file: reactive[IgnoreFile | None] = reactive(None) + ignore_files: reactive[list[IgnoreFile]] = reactive(search_files_by_name()) highlighted_ignore_file: reactive[IgnoreFile | None] = reactive(None) @@ -79,7 +86,7 @@ def select_file(self: Self, event: OptionList.OptionSelected) -> None: selected_file = get_option_by_id(self.ignore_files, event.option_id) if selected_file: - self.selected_ignore_file = selected_file + self.post_message(self.Selected(selected_file)) self.notify(f"{selected_file.language} selected") def watch_ignore_files(self: Self, ignore_files: list[IgnoreFile]) -> None: From 7c80c668d380702eaea700154b84979dc505f8f2 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Mon, 27 May 2024 15:52:57 -0600 Subject: [PATCH 025/108] chore: Installed pyfunctional --- poetry.lock | 49 ++++++++++++++++++++++++++++++++++++++++++++++++- pyproject.toml | 1 + 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/poetry.lock b/poetry.lock index feea034..12c814c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -153,6 +153,21 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +[[package]] +name = "dill" +version = "0.3.8" +description = "serialize all of Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "dill-0.3.8-py3-none-any.whl", hash = "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7"}, + {file = "dill-0.3.8.tar.gz", hash = "sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca"}, +] + +[package.extras] +graph = ["objgraph (>=1.7.2)"] +profile = ["gprof2dot (>=2022.7.29)"] + [[package]] name = "frozenlist" version = "1.4.1" @@ -558,6 +573,24 @@ files = [ {file = "pipe-2.2.tar.gz", hash = "sha256:6a253198e3bc542ffaf0a4222376586bce8583b27a9ddbc2cfbaa554c049230d"}, ] +[[package]] +name = "pyfunctional" +version = "1.5.0" +description = "Package for creating data pipelines with chain functional programming" +optional = false +python-versions = ">=3.8.0,<4.0.0" +files = [ + {file = "pyfunctional-1.5.0-py3-none-any.whl", hash = "sha256:dfee0f4110f4167801bb12f8d497230793392f694655103b794460daefbebf2b"}, + {file = "pyfunctional-1.5.0.tar.gz", hash = "sha256:e184f3d7167e5822b227c95292c3557cf59edf258b1f06a08c8e82991de98769"}, +] + +[package.dependencies] +dill = ">=0.2.5" +tabulate = "<=1.0.0" + +[package.extras] +all = ["pandas (>=1.0.3)"] + [[package]] name = "pygments" version = "2.18.0" @@ -616,6 +649,20 @@ files = [ {file = "ruff-0.4.4.tar.gz", hash = "sha256:f87ea42d5cdebdc6a69761a9d0bc83ae9b3b30d0ad78952005ba6568d6c022af"}, ] +[[package]] +name = "tabulate" +version = "0.9.0" +description = "Pretty-print tabular data" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, + {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, +] + +[package.extras] +widechars = ["wcwidth"] + [[package]] name = "textual" version = "0.63.1" @@ -784,4 +831,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "367e6de6a0af669da05ee4105071dc87d5d5e7309373062f42093a565b58135f" +content-hash = "cb009b9414b9bc3e7d6f8d3f675153e175aa2cb9a7d13d48321697d4a0221d54" diff --git a/pyproject.toml b/pyproject.toml index 84a3412..2203bb9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,6 +10,7 @@ python = "^3.12" textual = "^0.63.1" rich = "^13.7.1" pipe = "^2.2" +pyfunctional = "^1.5.0" [tool.poetry.group.dev.dependencies] From 08bd9417a929136a603ea670d48c7d06e3250b39 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Mon, 27 May 2024 22:08:09 -0600 Subject: [PATCH 026/108] feat: Added the feature to generate the gitignore file --- ignori/util/file.py | 13 ++++++++----- ignori/widgets/generation_form.py | 16 ++++++++++++++-- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/ignori/util/file.py b/ignori/util/file.py index eeef0a4..0b576ef 100644 --- a/ignori/util/file.py +++ b/ignori/util/file.py @@ -14,9 +14,12 @@ def search_files_by_name(template_name: str = "") -> list[IgnoreFile]: return sorted(template_files, key=lambda file: file.language) -def copy_file_content(source_file: Path, destination_file: Path) -> None: - with Path.open(source_file) as source, Path.open( - destination_file, - "w", - ) as destination: +def copy_file_content( + source_file: Path, + destination_path: Path, + file_name: str = ".gitignore", +) -> None: + destination_file = destination_path / file_name + + with source_file.open("r") as source, destination_file.open("w") as destination: destination.write(source.read()) diff --git a/ignori/widgets/generation_form.py b/ignori/widgets/generation_form.py index c094816..18dd1a7 100644 --- a/ignori/widgets/generation_form.py +++ b/ignori/widgets/generation_form.py @@ -9,6 +9,7 @@ from textual.widgets import Button, Input, Label from ignori.ignore_file import IgnoreFile +from ignori.util.file import copy_file_content from ignori.util.validators import PathValidator @@ -43,6 +44,7 @@ def watch_selected_ignore_file(self: Self, ignore_file: IgnoreFile | None) -> No @on(Button.Pressed, selector="#path-button") def generate_file(self: Self, event: Button.Pressed) -> None: path_input = self.query_one(selector="#path-input", expect_type=Input) + path = Path(path_input.value) if not path.exists(): self.notify("Path does not exist", severity="error") @@ -52,12 +54,22 @@ def generate_file(self: Self, event: Button.Pressed) -> None: self.notify("Path is not a directory", severity="error") return - self.notify(f"Path: {path}") + if self.selected_ignore_file: + copy_file_content(self.selected_ignore_file.path, path) + + self.notify("File generated successfully") + self.reset_form() + + def reset_form(self: Self) -> None: + self.query_one(selector="#path-input", expect_type=Input).clear() + self.query_one(selector="#path-label", expect_type=Label).update( + "No language selected", + ) def compose(self: Self) -> ComposeResult: with Container(id="path-container"): yield Label( - "Path", + "No language selected", id="path-label", ) with Horizontal(id="path-form-container"): From e6fc72fead0802c894956beb652075646dd2a654 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Mon, 27 May 2024 22:49:19 -0600 Subject: [PATCH 027/108] refactor: Improved validation and readability of it --- ignori/util/file.py | 2 +- ignori/util/validators.py | 6 +---- ignori/widgets/generation_form.py | 40 +++++++++++++++++++------------ ignori/widgets/search_form.py | 2 +- 4 files changed, 28 insertions(+), 22 deletions(-) diff --git a/ignori/util/file.py b/ignori/util/file.py index 0b576ef..e9da80d 100644 --- a/ignori/util/file.py +++ b/ignori/util/file.py @@ -14,7 +14,7 @@ def search_files_by_name(template_name: str = "") -> list[IgnoreFile]: return sorted(template_files, key=lambda file: file.language) -def copy_file_content( +def copy_file_content(*, source_file: Path, destination_path: Path, file_name: str = ".gitignore", diff --git a/ignori/util/validators.py b/ignori/util/validators.py index c75a0ff..5634149 100644 --- a/ignori/util/validators.py +++ b/ignori/util/validators.py @@ -13,8 +13,4 @@ def validate(self: Self, value: str) -> ValidationResult: @staticmethod def validate_path(value: str) -> bool: path = Path(value) - if not path.exists(): - return False - if not path.is_dir(): - return False - return True + return path.exists() and path.is_dir() diff --git a/ignori/widgets/generation_form.py b/ignori/widgets/generation_form.py index 18dd1a7..41de046 100644 --- a/ignori/widgets/generation_form.py +++ b/ignori/widgets/generation_form.py @@ -37,28 +37,38 @@ class GenerationForm(Widget): selected_ignore_file: reactive[IgnoreFile | None] = reactive(None) def watch_selected_ignore_file(self: Self, ignore_file: IgnoreFile | None) -> None: - if ignore_file: - label = self.query_one("#path-label", expect_type=Label) - label.update("Language: " + ignore_file.language) + label = self.query_one("#path-label", expect_type=Label) + label.update( + ( + f"Language: {ignore_file.language}" + if ignore_file + else "No language selected" + ), + ) @on(Button.Pressed, selector="#path-button") - def generate_file(self: Self, event: Button.Pressed) -> None: - path_input = self.query_one(selector="#path-input", expect_type=Input) - - path = Path(path_input.value) - if not path.exists(): - self.notify("Path does not exist", severity="error") + def generate_file(self: Self) -> None: + input_field = self.query_one("#path-input", expect_type=Input) + + if not input_field.is_valid: + self.notify( + "Path does not exist or is not a directory", + title="Error", + severity="error", + ) return - if not path.is_dir(): - self.notify("Path is not a directory", severity="error") + if self.selected_ignore_file is None: + self.notify("No language selected", title="Error", severity="error") return - if self.selected_ignore_file: - copy_file_content(self.selected_ignore_file.path, path) + copy_file_content( + source_file=self.selected_ignore_file.path, + destination_path=Path(input_field.value), + ) - self.notify("File generated successfully") - self.reset_form() + self.notify("File generated successfully", title="Success") + self.reset_form() def reset_form(self: Self) -> None: self.query_one(selector="#path-input", expect_type=Input).clear() diff --git a/ignori/widgets/search_form.py b/ignori/widgets/search_form.py index beec5c6..e70fa5f 100644 --- a/ignori/widgets/search_form.py +++ b/ignori/widgets/search_form.py @@ -87,7 +87,7 @@ def select_file(self: Self, event: OptionList.OptionSelected) -> None: if selected_file: self.post_message(self.Selected(selected_file)) - self.notify(f"{selected_file.language} selected") + self.notify(f"{selected_file.language} selected", title="Success") def watch_ignore_files(self: Self, ignore_files: list[IgnoreFile]) -> None: ignore_list = self.query_one("#ignore-list", expect_type=OptionList) From 9d1c20ee272331e830978f6a9e7d10be805eaa6f Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Mon, 27 May 2024 22:53:36 -0600 Subject: [PATCH 028/108] chore: Upgrade textual --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 12c814c..595874b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -665,13 +665,13 @@ widechars = ["wcwidth"] [[package]] name = "textual" -version = "0.63.1" +version = "0.63.4" description = "Modern Text User Interface framework" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "textual-0.63.1-py3-none-any.whl", hash = "sha256:10ccbd60b30582fab545e734ccb9ff3d1cb8550dc520bc1862274f3d8427ca04"}, - {file = "textual-0.63.1.tar.gz", hash = "sha256:281803c428c7207e1bbdb6c7e9f831556fc585d5b9bd5ad33f39ee288def616c"}, + {file = "textual-0.63.4-py3-none-any.whl", hash = "sha256:ca1e7a365b55ef96ea4664754268047d87b3aed33587858001514a0e60bbdc36"}, + {file = "textual-0.63.4.tar.gz", hash = "sha256:c0f72915c1f3d8349d410b2014d3cfaa7909d594105e158ad91d25f9d9857eec"}, ] [package.dependencies] @@ -831,4 +831,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "cb009b9414b9bc3e7d6f8d3f675153e175aa2cb9a7d13d48321697d4a0221d54" +content-hash = "eef7e2b97f7cb2ae1ea8a29b2a7e9ce9916883f85901e04ebe2cce3268917d18" diff --git a/pyproject.toml b/pyproject.toml index 2203bb9..ac0c456 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ readme = "README.md" [tool.poetry.dependencies] python = "^3.12" -textual = "^0.63.1" +textual = "^0.63.4" rich = "^13.7.1" pipe = "^2.2" pyfunctional = "^1.5.0" From 2f57384f658f02b453988093847dc31a3184edc7 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Mon, 27 May 2024 23:07:21 -0600 Subject: [PATCH 029/108] style: Removed overexplicit code --- ignori/widgets/search_form.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ignori/widgets/search_form.py b/ignori/widgets/search_form.py index e70fa5f..96c09cf 100644 --- a/ignori/widgets/search_form.py +++ b/ignori/widgets/search_form.py @@ -74,7 +74,7 @@ def search_ignore_file(self: Self, event: Button.Pressed) -> None: @on(OptionList.OptionHighlighted, selector="#ignore-list") def show_file_content(self: Self, event: OptionList.OptionHighlighted) -> None: - if event.option_id is not None: + if event.option_id: highligted_file = get_option_by_id(self.ignore_files, event.option_id) if highligted_file: @@ -82,7 +82,7 @@ def show_file_content(self: Self, event: OptionList.OptionHighlighted) -> None: @on(OptionList.OptionSelected, selector="#ignore-list") def select_file(self: Self, event: OptionList.OptionSelected) -> None: - if event.option_id is not None: + if event.option_id: selected_file = get_option_by_id(self.ignore_files, event.option_id) if selected_file: From 95c8d7beee46731debfd6a706a4b2934781008e0 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Tue, 28 May 2024 09:01:35 -0600 Subject: [PATCH 030/108] chore: Removed pyfunctional and pipe, and upgraded textual and rich to latest version --- poetry.lock | 97 +++++++++++++++++++++++++------------------------- pyproject.toml | 5 ++- 2 files changed, 50 insertions(+), 52 deletions(-) diff --git a/poetry.lock b/poetry.lock index 595874b..58019de 100644 --- a/poetry.lock +++ b/poetry.lock @@ -153,21 +153,6 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -[[package]] -name = "dill" -version = "0.3.8" -description = "serialize all of Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "dill-0.3.8-py3-none-any.whl", hash = "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7"}, - {file = "dill-0.3.8.tar.gz", hash = "sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca"}, -] - -[package.extras] -graph = ["objgraph (>=1.7.2)"] -profile = ["gprof2dot (>=2022.7.29)"] - [[package]] name = "frozenlist" version = "1.4.1" @@ -265,6 +250,17 @@ files = [ {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, ] +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + [[package]] name = "linkify-it-py" version = "2.0.3" @@ -563,33 +559,30 @@ files = [ ] [[package]] -name = "pipe" -version = "2.2" -description = "Module enabling a sh like infix syntax (using pipes)" +name = "packaging" +version = "24.0" +description = "Core utilities for Python packages" optional = false -python-versions = ">=3.8" +python-versions = ">=3.7" files = [ - {file = "pipe-2.2-py3-none-any.whl", hash = "sha256:0a5c3202ff35122f69a34ccbd40c9658646f033cc941055304fe8bfa7e13376e"}, - {file = "pipe-2.2.tar.gz", hash = "sha256:6a253198e3bc542ffaf0a4222376586bce8583b27a9ddbc2cfbaa554c049230d"}, + {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, + {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, ] [[package]] -name = "pyfunctional" +name = "pluggy" version = "1.5.0" -description = "Package for creating data pipelines with chain functional programming" +description = "plugin and hook calling mechanisms for python" optional = false -python-versions = ">=3.8.0,<4.0.0" +python-versions = ">=3.8" files = [ - {file = "pyfunctional-1.5.0-py3-none-any.whl", hash = "sha256:dfee0f4110f4167801bb12f8d497230793392f694655103b794460daefbebf2b"}, - {file = "pyfunctional-1.5.0.tar.gz", hash = "sha256:e184f3d7167e5822b227c95292c3557cf59edf258b1f06a08c8e82991de98769"}, + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, ] -[package.dependencies] -dill = ">=0.2.5" -tabulate = "<=1.0.0" - [package.extras] -all = ["pandas (>=1.0.3)"] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] [[package]] name = "pygments" @@ -605,6 +598,26 @@ files = [ [package.extras] windows-terminal = ["colorama (>=0.4.6)"] +[[package]] +name = "pytest" +version = "8.2.1" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest-8.2.1-py3-none-any.whl", hash = "sha256:faccc5d332b8c3719f40283d0d44aa5cf101cec36f88cde9ed8f2bc0538612b1"}, + {file = "pytest-8.2.1.tar.gz", hash = "sha256:5046e5b46d8e4cac199c373041f26be56fdb81eb4e67dc11d4e10811fc3408fd"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=1.5,<2.0" + +[package.extras] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + [[package]] name = "rich" version = "13.7.1" @@ -649,29 +662,15 @@ files = [ {file = "ruff-0.4.4.tar.gz", hash = "sha256:f87ea42d5cdebdc6a69761a9d0bc83ae9b3b30d0ad78952005ba6568d6c022af"}, ] -[[package]] -name = "tabulate" -version = "0.9.0" -description = "Pretty-print tabular data" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, - {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, -] - -[package.extras] -widechars = ["wcwidth"] - [[package]] name = "textual" -version = "0.63.4" +version = "0.63.5" description = "Modern Text User Interface framework" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "textual-0.63.4-py3-none-any.whl", hash = "sha256:ca1e7a365b55ef96ea4664754268047d87b3aed33587858001514a0e60bbdc36"}, - {file = "textual-0.63.4.tar.gz", hash = "sha256:c0f72915c1f3d8349d410b2014d3cfaa7909d594105e158ad91d25f9d9857eec"}, + {file = "textual-0.63.5-py3-none-any.whl", hash = "sha256:28ae178de544b297000b07ddf55b0f20d281c31e0956cd79cdf307208cf18095"}, + {file = "textual-0.63.5.tar.gz", hash = "sha256:c55b7e96d4ddfd075e88d99414a53c18907e532a29d7f13931a455e66532c271"}, ] [package.dependencies] @@ -831,4 +830,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "eef7e2b97f7cb2ae1ea8a29b2a7e9ce9916883f85901e04ebe2cce3268917d18" +content-hash = "fdc58b9244f2080edb482b62dabd90632ca43259c28b2c5b2e35c7379650303a" diff --git a/pyproject.toml b/pyproject.toml index ac0c456..acb67a5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,16 +7,15 @@ readme = "README.md" [tool.poetry.dependencies] python = "^3.12" -textual = "^0.63.4" +textual = "^0.63.5" rich = "^13.7.1" -pipe = "^2.2" -pyfunctional = "^1.5.0" [tool.poetry.group.dev.dependencies] textual-dev = "^1.5.1" ruff = "^0.4.4" mypy = "^1.10.0" +pytest = "^8.2.1" [build-system] requires = ["poetry-core"] From 0c0528962e4b4f485215bd19bf1b197df06b4852 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Tue, 28 May 2024 09:12:00 -0600 Subject: [PATCH 031/108] fix(GenerationForm): After file generation, the parent reactive value is set to None --- ignori/app.py | 4 ++++ ignori/widgets/generation_form.py | 16 ++++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/ignori/app.py b/ignori/app.py index 65f07d8..1f034e1 100644 --- a/ignori/app.py +++ b/ignori/app.py @@ -27,6 +27,10 @@ class IgnoriApp(App): def selected_file(self: Self, event: SearchForm.Selected) -> None: self.selected_ignore_file = event.selected_file + @on(GenerationForm.Generated) + def generated_file(self: Self, event: GenerationForm.Generated) -> None: + self.selected_ignore_file = event.selected_file + def compose(self: Self) -> ComposeResult: yield Header() with Vertical(id="container"): diff --git a/ignori/widgets/generation_form.py b/ignori/widgets/generation_form.py index 41de046..15fd9f2 100644 --- a/ignori/widgets/generation_form.py +++ b/ignori/widgets/generation_form.py @@ -4,6 +4,7 @@ from textual import on from textual.app import ComposeResult from textual.containers import Container, Horizontal +from textual.message import Message from textual.reactive import reactive from textual.widget import Widget from textual.widgets import Button, Input, Label @@ -34,6 +35,11 @@ class GenerationForm(Widget): } """ + class Generated(Message): + def __init__(self: "GenerationForm.Generated") -> None: + self.selected_file = None + super().__init__() + selected_ignore_file: reactive[IgnoreFile | None] = reactive(None) def watch_selected_ignore_file(self: Self, ignore_file: IgnoreFile | None) -> None: @@ -49,10 +55,10 @@ def watch_selected_ignore_file(self: Self, ignore_file: IgnoreFile | None) -> No @on(Button.Pressed, selector="#path-button") def generate_file(self: Self) -> None: input_field = self.query_one("#path-input", expect_type=Input) - - if not input_field.is_valid: + result = input_field.validate(input_field.value) + if not input_field.is_valid and result: self.notify( - "Path does not exist or is not a directory", + "".join(result.failure_descriptions), title="Error", severity="error", ) @@ -72,9 +78,7 @@ def generate_file(self: Self) -> None: def reset_form(self: Self) -> None: self.query_one(selector="#path-input", expect_type=Input).clear() - self.query_one(selector="#path-label", expect_type=Label).update( - "No language selected", - ) + self.post_message(self.Generated()) def compose(self: Self) -> ComposeResult: with Container(id="path-container"): From 8284a471ff41f5f359d9fba43f74f5ef704498b5 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Tue, 28 May 2024 14:49:41 -0600 Subject: [PATCH 032/108] style: Some CSS formatting --- ignori/widgets/generation_form.py | 2 +- ignori/widgets/search_form.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ignori/widgets/generation_form.py b/ignori/widgets/generation_form.py index 15fd9f2..60879c0 100644 --- a/ignori/widgets/generation_form.py +++ b/ignori/widgets/generation_form.py @@ -46,7 +46,7 @@ def watch_selected_ignore_file(self: Self, ignore_file: IgnoreFile | None) -> No label = self.query_one("#path-label", expect_type=Label) label.update( ( - f"Language: {ignore_file.language}" + f"Language: [b]{ignore_file.language}[/b]" if ignore_file else "No language selected" ), diff --git a/ignori/widgets/search_form.py b/ignori/widgets/search_form.py index 96c09cf..75440db 100644 --- a/ignori/widgets/search_form.py +++ b/ignori/widgets/search_form.py @@ -28,7 +28,7 @@ def get_option_by_id( class SearchForm(Widget): DEFAULT_CSS = """ - SearchForm{ + SearchForm { width: 100%; & #ignore-container{ & OptionList { @@ -109,6 +109,6 @@ def compose(self: Self) -> ComposeResult: yield OptionList( id="ignore-list", ) - yield FilePreview(_id="ignore-code").data_bind( + yield FilePreview(id="ignore-code").data_bind( SearchForm.highlighted_ignore_file, ) From 2df2e834e088a1aef51692eb829dc418f6d6737b Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Tue, 28 May 2024 14:50:49 -0600 Subject: [PATCH 033/108] chore: Installed pipe --- poetry.lock | 13 ++++++++++++- pyproject.toml | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/poetry.lock b/poetry.lock index 58019de..5c90240 100644 --- a/poetry.lock +++ b/poetry.lock @@ -569,6 +569,17 @@ files = [ {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, ] +[[package]] +name = "pipe" +version = "2.2" +description = "Module enabling a sh like infix syntax (using pipes)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pipe-2.2-py3-none-any.whl", hash = "sha256:0a5c3202ff35122f69a34ccbd40c9658646f033cc941055304fe8bfa7e13376e"}, + {file = "pipe-2.2.tar.gz", hash = "sha256:6a253198e3bc542ffaf0a4222376586bce8583b27a9ddbc2cfbaa554c049230d"}, +] + [[package]] name = "pluggy" version = "1.5.0" @@ -830,4 +841,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "fdc58b9244f2080edb482b62dabd90632ca43259c28b2c5b2e35c7379650303a" +content-hash = "1e40fa6e89250d6fab449c55123e41e6c633915d7d5976c619a8408760f2242f" diff --git a/pyproject.toml b/pyproject.toml index acb67a5..87e5087 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,6 +9,7 @@ readme = "README.md" python = "^3.12" textual = "^0.63.5" rich = "^13.7.1" +pipe = "^2.2" [tool.poetry.group.dev.dependencies] From 83bf971a92bfe3333f8980c00dea32978ec99512 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Tue, 28 May 2024 14:51:19 -0600 Subject: [PATCH 034/108] refactor: Change bold section for label --- ignori/widgets/generation_form.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ignori/widgets/generation_form.py b/ignori/widgets/generation_form.py index 60879c0..e2d7f6f 100644 --- a/ignori/widgets/generation_form.py +++ b/ignori/widgets/generation_form.py @@ -46,7 +46,7 @@ def watch_selected_ignore_file(self: Self, ignore_file: IgnoreFile | None) -> No label = self.query_one("#path-label", expect_type=Label) label.update( ( - f"Language: [b]{ignore_file.language}[/b]" + f"[b]Language:[/b] {ignore_file.language}" if ignore_file else "No language selected" ), From 584e09c7307b4643a55d4ee14d219fe99bc7ba1e Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Tue, 28 May 2024 14:59:28 -0600 Subject: [PATCH 035/108] refactor: Simplified the code for GenerationForm Message --- ignori/app.py | 2 +- ignori/widgets/generation_form.py | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/ignori/app.py b/ignori/app.py index 1f034e1..71c1e3b 100644 --- a/ignori/app.py +++ b/ignori/app.py @@ -29,7 +29,7 @@ def selected_file(self: Self, event: SearchForm.Selected) -> None: @on(GenerationForm.Generated) def generated_file(self: Self, event: GenerationForm.Generated) -> None: - self.selected_ignore_file = event.selected_file + self.selected_ignore_file = None def compose(self: Self) -> ComposeResult: yield Header() diff --git a/ignori/widgets/generation_form.py b/ignori/widgets/generation_form.py index e2d7f6f..a027ff1 100644 --- a/ignori/widgets/generation_form.py +++ b/ignori/widgets/generation_form.py @@ -36,9 +36,7 @@ class GenerationForm(Widget): """ class Generated(Message): - def __init__(self: "GenerationForm.Generated") -> None: - self.selected_file = None - super().__init__() + pass selected_ignore_file: reactive[IgnoreFile | None] = reactive(None) From d61779f5a78011cfd020b8fbfc65902b7051556d Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Fri, 31 May 2024 17:30:20 -0600 Subject: [PATCH 036/108] chore: Installed pytest --- poetry.lock | 38 +++++++++++++++++++------------------- pyproject.toml | 1 + 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index 5c90240..0be4b71 100644 --- a/poetry.lock +++ b/poetry.lock @@ -649,28 +649,28 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.4.4" +version = "0.4.6" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.4.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:29d44ef5bb6a08e235c8249294fa8d431adc1426bfda99ed493119e6f9ea1bf6"}, - {file = "ruff-0.4.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:c4efe62b5bbb24178c950732ddd40712b878a9b96b1d02b0ff0b08a090cbd891"}, - {file = "ruff-0.4.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c8e2f1e8fc12d07ab521a9005d68a969e167b589cbcaee354cb61e9d9de9c15"}, - {file = "ruff-0.4.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:60ed88b636a463214905c002fa3eaab19795679ed55529f91e488db3fe8976ab"}, - {file = "ruff-0.4.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b90fc5e170fc71c712cc4d9ab0e24ea505c6a9e4ebf346787a67e691dfb72e85"}, - {file = "ruff-0.4.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:8e7e6ebc10ef16dcdc77fd5557ee60647512b400e4a60bdc4849468f076f6eef"}, - {file = "ruff-0.4.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b9ddb2c494fb79fc208cd15ffe08f32b7682519e067413dbaf5f4b01a6087bcd"}, - {file = "ruff-0.4.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c51c928a14f9f0a871082603e25a1588059b7e08a920f2f9fa7157b5bf08cfe9"}, - {file = "ruff-0.4.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b5eb0a4bfd6400b7d07c09a7725e1a98c3b838be557fee229ac0f84d9aa49c36"}, - {file = "ruff-0.4.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b1867ee9bf3acc21778dcb293db504692eda5f7a11a6e6cc40890182a9f9e595"}, - {file = "ruff-0.4.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:1aecced1269481ef2894cc495647392a34b0bf3e28ff53ed95a385b13aa45768"}, - {file = "ruff-0.4.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9da73eb616b3241a307b837f32756dc20a0b07e2bcb694fec73699c93d04a69e"}, - {file = "ruff-0.4.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:958b4ea5589706a81065e2a776237de2ecc3e763342e5cc8e02a4a4d8a5e6f95"}, - {file = "ruff-0.4.4-py3-none-win32.whl", hash = "sha256:cb53473849f011bca6e754f2cdf47cafc9c4f4ff4570003a0dad0b9b6890e876"}, - {file = "ruff-0.4.4-py3-none-win_amd64.whl", hash = "sha256:424e5b72597482543b684c11def82669cc6b395aa8cc69acc1858b5ef3e5daae"}, - {file = "ruff-0.4.4-py3-none-win_arm64.whl", hash = "sha256:39df0537b47d3b597293edbb95baf54ff5b49589eb7ff41926d8243caa995ea6"}, - {file = "ruff-0.4.4.tar.gz", hash = "sha256:f87ea42d5cdebdc6a69761a9d0bc83ae9b3b30d0ad78952005ba6568d6c022af"}, + {file = "ruff-0.4.6-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ef995583a038cd4a7edf1422c9e19118e2511b8ba0b015861b4abd26ec5367c5"}, + {file = "ruff-0.4.6-py3-none-macosx_11_0_arm64.whl", hash = "sha256:602ebd7ad909eab6e7da65d3c091547781bb06f5f826974a53dbe563d357e53c"}, + {file = "ruff-0.4.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f9ced5cbb7510fd7525448eeb204e0a22cabb6e99a3cb160272262817d49786"}, + {file = "ruff-0.4.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:04a80acfc862e0e1630c8b738e70dcca03f350bad9e106968a8108379e12b31f"}, + {file = "ruff-0.4.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be47700ecb004dfa3fd4dcdddf7322d4e632de3c06cd05329d69c45c0280e618"}, + {file = "ruff-0.4.6-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:1ff930d6e05f444090a0139e4e13e1e2e1f02bd51bb4547734823c760c621e79"}, + {file = "ruff-0.4.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f13410aabd3b5776f9c5699f42b37a3a348d65498c4310589bc6e5c548dc8a2f"}, + {file = "ruff-0.4.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0cf5cc02d3ae52dfb0c8a946eb7a1d6ffe4d91846ffc8ce388baa8f627e3bd50"}, + {file = "ruff-0.4.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea3424793c29906407e3cf417f28fc33f689dacbbadfb52b7e9a809dd535dcef"}, + {file = "ruff-0.4.6-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:1fa8561489fadf483ffbb091ea94b9c39a00ed63efacd426aae2f197a45e67fc"}, + {file = "ruff-0.4.6-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:4d5b914818d8047270308fe3e85d9d7f4a31ec86c6475c9f418fbd1624d198e0"}, + {file = "ruff-0.4.6-py3-none-musllinux_1_2_i686.whl", hash = "sha256:4f02284335c766678778475e7698b7ab83abaf2f9ff0554a07b6f28df3b5c259"}, + {file = "ruff-0.4.6-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:3a6a0a4f4b5f54fff7c860010ab3dd81425445e37d35701a965c0248819dde7a"}, + {file = "ruff-0.4.6-py3-none-win32.whl", hash = "sha256:9018bf59b3aa8ad4fba2b1dc0299a6e4e60a4c3bc62bbeaea222679865453062"}, + {file = "ruff-0.4.6-py3-none-win_amd64.whl", hash = "sha256:a769ae07ac74ff1a019d6bd529426427c3e30d75bdf1e08bb3d46ac8f417326a"}, + {file = "ruff-0.4.6-py3-none-win_arm64.whl", hash = "sha256:735a16407a1a8f58e4c5b913ad6102722e80b562dd17acb88887685ff6f20cf6"}, + {file = "ruff-0.4.6.tar.gz", hash = "sha256:a797a87da50603f71e6d0765282098245aca6e3b94b7c17473115167d8dfb0b7"}, ] [[package]] @@ -841,4 +841,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "1e40fa6e89250d6fab449c55123e41e6c633915d7d5976c619a8408760f2242f" +content-hash = "6904751e80bd36a5e6d31c409e454baf8d8a1446d88f501cc78676252cf1af6f" diff --git a/pyproject.toml b/pyproject.toml index 87e5087..660fbb0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,6 +10,7 @@ python = "^3.12" textual = "^0.63.5" rich = "^13.7.1" pipe = "^2.2" +ruff = "^0.4.6" [tool.poetry.group.dev.dependencies] From 964e87aa8c0febf539c028f4793103cd17f1713c Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Fri, 31 May 2024 21:38:42 -0600 Subject: [PATCH 037/108] refactor: Set css variables for the app theme --- ignori/widgets/file_preview.py | 73 ++++++++++++++++++++++++++----- ignori/widgets/generation_form.py | 6 +++ styles/global.tcss | 31 ++++++++++++- 3 files changed, 96 insertions(+), 14 deletions(-) diff --git a/ignori/widgets/file_preview.py b/ignori/widgets/file_preview.py index 9054fc7..7592c15 100644 --- a/ignori/widgets/file_preview.py +++ b/ignori/widgets/file_preview.py @@ -2,6 +2,7 @@ from rich.syntax import Syntax from textual.app import ComposeResult +from textual.binding import Binding from textual.containers import Container, VerticalScroll from textual.reactive import reactive from textual.widget import Widget @@ -10,44 +11,92 @@ from ignori.ignore_file import IgnoreFile -class FilePreview(Widget): +class FilePreview( + Widget, + can_focus=True, + can_focus_children=False, + inherit_bindings=False, +): DEFAULT_CSS = """ - FilePreview{ - width: auto; + FilePreview { + height: auto; + max-height: 100%; + background: $boost; + overflow-x: hidden; + border: tall transparent; + padding: 0 1; - & #file-name { + & #file-preview-label { width: 100%; background: $primary; color: $text; + text-style: bold; + padding: 0 1; } } + + FilePreview:focus { + border: tall $accent; + } """ + BINDINGS = [ + Binding("up", "scroll_up", "Scroll Up", show=False), + Binding("down", "scroll_down", "Scroll Down", show=False), + Binding("home", "scroll_home", "Scroll Home", show=False), + Binding("end", "scroll_end", "Scroll End", show=False), + Binding("pageup", "page_up", "Page Up", show=False), + Binding("pagedown", "page_down", "Page Down", show=False), + ] + highlighted_ignore_file: reactive[IgnoreFile | None] = reactive(None) - def __init__(self: "FilePreview", _id: str) -> None: - super().__init__(id=_id) + def action_scroll_up(self: Self) -> None: + self.query_one(VerticalScroll).scroll_up() + + def action_scroll_down(self: Self) -> None: + self.query_one(VerticalScroll).scroll_down() + + def action_scroll_home(self: Self) -> None: + self.query_one(VerticalScroll).scroll_home() + + def action_scroll_end(self: Self) -> None: + self.query_one(VerticalScroll).scroll_end() + + def action_page_up(self: Self) -> None: + self.query_one(VerticalScroll).scroll_page_up() + + def action_page_down(self: Self) -> None: + self.query_one(VerticalScroll).scroll_page_down() def watch_highlighted_ignore_file( self: Self, ignore_file: IgnoreFile | None, ) -> None: - if ignore_file is not None: - self.query_one(VerticalScroll).scroll_home(animate=False) - self.query_one("#preview", expect_type=Static).update( + vertical_scroll = self.query_one(VerticalScroll) + preview = self.query_one("#file-preview-code", expect_type=Static) + + preview.set_class(ignore_file is None, "muted-text") + if ignore_file: + vertical_scroll.scroll_home(animate=False) + preview.update( Syntax.from_path( str(ignore_file.path), line_numbers=True, word_wrap=True, + theme="github-dark", ), ) + else: + preview.update("No file selected") + def compose(self: Self) -> ComposeResult: - with Container(): - yield Label("Preview", id="file-name") + with Container(id="file-preview-container"): + yield Label("Preview", id="file-preview-label") with VerticalScroll(): yield Static( - id="preview", + id="file-preview-code", expand=True, ) diff --git a/ignori/widgets/generation_form.py b/ignori/widgets/generation_form.py index a027ff1..be12ca2 100644 --- a/ignori/widgets/generation_form.py +++ b/ignori/widgets/generation_form.py @@ -20,6 +20,9 @@ class GenerationForm(Widget): GenerationForm { & #path-container { height: auto; + & #path-label{ + offset-x: 1; + } } & #path-form-container{ @@ -50,6 +53,9 @@ def watch_selected_ignore_file(self: Self, ignore_file: IgnoreFile | None) -> No ), ) + label.set_class(ignore_file is None, "muted-text") + label.set_class(ignore_file is not None, "highlighted-text") + @on(Button.Pressed, selector="#path-button") def generate_file(self: Self) -> None: input_field = self.query_one("#path-input", expect_type=Input) diff --git a/styles/global.tcss b/styles/global.tcss index fc74b0e..7f73000 100644 --- a/styles/global.tcss +++ b/styles/global.tcss @@ -1,13 +1,40 @@ +$primary: #F35530; +$secondary: #F3AE9B; +$background: #000000; +# $panel: #000000; +$accent: #F35530; + +$error: #EE678E; +$warning: #F6D661; +$success: #66EAC6; + * { box-sizing: border-box; } #container { - & SearchForm{ + & SearchForm { height: 1fr; } - & GenerationForm{ + & GenerationForm { height: auto; } } + +.show { + display: block; +} + +.hide { + display: none; +} + +.muted-text { + color: $text 20%; +} + +.highlighted-text { + background: $accent; + color: $text 80%; +} \ No newline at end of file From d58f5035dbbf61c60e3f3c02baa1be8de76d741a Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Sat, 1 Jun 2024 21:59:05 -0600 Subject: [PATCH 038/108] feat: Created LanguageList widget with the action to the explorer in the templates directory --- ignori/app.py | 15 ++++++-- ignori/screens/modals/info_modal.py | 53 +++++++++++++++++++++++++++++ ignori/util/explorer.py | 19 +++++++++++ ignori/widgets/language_label.py | 5 +++ ignori/widgets/language_list.py | 21 ++++++++++++ ignori/widgets/search_form.py | 5 ++- 6 files changed, 113 insertions(+), 5 deletions(-) create mode 100644 ignori/screens/modals/info_modal.py create mode 100644 ignori/util/explorer.py create mode 100644 ignori/widgets/language_label.py create mode 100644 ignori/widgets/language_list.py diff --git a/ignori/app.py b/ignori/app.py index 71c1e3b..40dd837 100644 --- a/ignori/app.py +++ b/ignori/app.py @@ -13,12 +13,23 @@ from ignori.widgets.search_form import SearchForm -class IgnoriApp(App): +class IgnoriApp(App[None], inherit_bindings=False): TITLE = APP_TITLE CSS_PATH = str(STYLES_PATH / "global.tcss") BINDINGS = [ - Binding(key="d", action="toggle_dark", description="Toggle Dark Mode"), + Binding( + key="ctrl+q", + action="quit", + description="Quit", + priority=True, + ), + Binding( + key="ctrl+d", + action="toggle_dark", + description="Toggle Dark Mode", + priority=True, + ), ] selected_ignore_file: reactive[IgnoreFile | None] = reactive(None) diff --git a/ignori/screens/modals/info_modal.py b/ignori/screens/modals/info_modal.py new file mode 100644 index 0000000..e38616a --- /dev/null +++ b/ignori/screens/modals/info_modal.py @@ -0,0 +1,53 @@ +from typing import Self + +from textual import on +from textual.app import ComposeResult +from textual.containers import Container +from textual.screen import ModalScreen +from textual.widgets import Button, Label + + +class InfoModal(ModalScreen): + + DEFAULT_CSS = """ + InfoModal { + align: center middle; + } + + InfoModal > Container { + width: auto; + height: auto; + border: tall $secondary 80%; + background: $surface; + padding: 2 4; + } + + InfoModal > Container > Label { + width: 100%; + content-align-horizontal: center; + margin-top: 1; + } + + InfoModal > Container > Button { + margin: 2 4; + width: auto; + height: auto; + } + """ + + message: str + button_text: str + + def __init__(self: "InfoModal", message: str, button_text: str = "Ok") -> None: + super().__init__() + self.message = message + self.button_text = button_text + + def compose(self: Self) -> ComposeResult: + with Container(): + yield Label(self.message) + yield Button(self.button_text, variant="primary", id="close-button") + + @on(Button.Pressed, "#close-button") + def close_modal(self: Self, event: Button.Pressed) -> None: + self.app.pop_screen() diff --git a/ignori/util/explorer.py b/ignori/util/explorer.py new file mode 100644 index 0000000..44b4831 --- /dev/null +++ b/ignori/util/explorer.py @@ -0,0 +1,19 @@ +import platform +import subprocess +from pathlib import Path + + +def open_file_explorer(path: Path) -> None: + system = platform.system().lower() + match system: + case "windows": + subprocess.run(["explorer", path]) + + case "linux": + subprocess.run(["xdg-open", path]) + + case "darwin": + subprocess.run(["open", path]) + + case _: + raise ValueError(f"Unsupported system: {system}") diff --git a/ignori/widgets/language_label.py b/ignori/widgets/language_label.py new file mode 100644 index 0000000..00bc40e --- /dev/null +++ b/ignori/widgets/language_label.py @@ -0,0 +1,5 @@ +from textual.widget import Widget + + +class LanguageLabel(Widget): + pass diff --git a/ignori/widgets/language_list.py b/ignori/widgets/language_list.py new file mode 100644 index 0000000..8275a22 --- /dev/null +++ b/ignori/widgets/language_list.py @@ -0,0 +1,21 @@ +from typing import Self + +from textual.binding import Binding +from textual.widgets import OptionList + +from ignori.screens.modals.info_modal import InfoModal +from ignori.util.explorer import open_file_explorer +from ignori.util.settings import TEMPLATES_PATH + + +class LanguageList(OptionList): + BINDINGS = [ + Binding("ctrl+o", "open_templates", "Open explorer", show=True), + ] + + def action_open_templates(self: Self) -> None: + try: + open_file_explorer(TEMPLATES_PATH) + except ValueError as error: + error_message = str(error) + self.app.push_screen(InfoModal(error_message)) diff --git a/ignori/widgets/search_form.py b/ignori/widgets/search_form.py index 75440db..aaa1890 100644 --- a/ignori/widgets/search_form.py +++ b/ignori/widgets/search_form.py @@ -12,6 +12,7 @@ from ignori.ignore_file import IgnoreFile from ignori.util.file import search_files_by_name from ignori.widgets.file_preview import FilePreview +from ignori.widgets.language_list import LanguageList def get_option_by_id( @@ -106,9 +107,7 @@ def compose(self: Self) -> ComposeResult: yield Input(placeholder="Search...", type="text", id="search-input") yield Button("Search", id="search-button") with Horizontal(id="ignore-container"): - yield OptionList( - id="ignore-list", - ) + yield LanguageList(id="ignore-list") yield FilePreview(id="ignore-code").data_bind( SearchForm.highlighted_ignore_file, ) From af8faac4ac09d846217e18b48e535d0d3e835789 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Thu, 13 Jun 2024 18:37:12 -0600 Subject: [PATCH 039/108] chore: Installed ruff-lsp --- poetry.lock | 79 +++++++++++++++++++++++++++++++++++++++++++++++++- pyproject.toml | 1 + 2 files changed, 79 insertions(+), 1 deletion(-) diff --git a/poetry.lock b/poetry.lock index 0be4b71..65e7abb 100644 --- a/poetry.lock +++ b/poetry.lock @@ -128,6 +128,29 @@ tests = ["attrs[tests-no-zope]", "zope-interface"] tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] +[[package]] +name = "cattrs" +version = "23.2.3" +description = "Composable complex class support for attrs and dataclasses." +optional = false +python-versions = ">=3.8" +files = [ + {file = "cattrs-23.2.3-py3-none-any.whl", hash = "sha256:0341994d94971052e9ee70662542699a3162ea1e0c62f7ce1b4a57f563685108"}, + {file = "cattrs-23.2.3.tar.gz", hash = "sha256:a934090d95abaa9e911dac357e3a8699e0b4b14f8529bcc7d2b1ad9d51672b9f"}, +] + +[package.dependencies] +attrs = ">=23.1.0" + +[package.extras] +bson = ["pymongo (>=4.4.0)"] +cbor2 = ["cbor2 (>=5.4.6)"] +msgpack = ["msgpack (>=1.0.5)"] +orjson = ["orjson (>=3.9.2)"] +pyyaml = ["pyyaml (>=6.0)"] +tomlkit = ["tomlkit (>=0.11.8)"] +ujson = ["ujson (>=5.7.0)"] + [[package]] name = "click" version = "8.1.7" @@ -281,6 +304,21 @@ dev = ["black", "flake8", "isort", "pre-commit", "pyproject-flake8"] doc = ["myst-parser", "sphinx", "sphinx-book-theme"] test = ["coverage", "pytest", "pytest-cov"] +[[package]] +name = "lsprotocol" +version = "2023.0.1" +description = "Python implementation of the Language Server Protocol." +optional = false +python-versions = ">=3.7" +files = [ + {file = "lsprotocol-2023.0.1-py3-none-any.whl", hash = "sha256:c75223c9e4af2f24272b14c6375787438279369236cd568f596d4951052a60f2"}, + {file = "lsprotocol-2023.0.1.tar.gz", hash = "sha256:cc5c15130d2403c18b734304339e51242d3018a05c4f7d0f198ad6e0cd21861d"}, +] + +[package.dependencies] +attrs = ">=21.3.0" +cattrs = "!=23.2.1" + [[package]] name = "markdown-it-py" version = "3.0.0" @@ -595,6 +633,24 @@ files = [ dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] +[[package]] +name = "pygls" +version = "1.3.1" +description = "A pythonic generic language server (pronounced like 'pie glass')" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pygls-1.3.1-py3-none-any.whl", hash = "sha256:6e00f11efc56321bdeb6eac04f6d86131f654c7d49124344a9ebb968da3dd91e"}, + {file = "pygls-1.3.1.tar.gz", hash = "sha256:140edceefa0da0e9b3c533547c892a42a7d2fd9217ae848c330c53d266a55018"}, +] + +[package.dependencies] +cattrs = ">=23.1.2" +lsprotocol = "2023.0.1" + +[package.extras] +ws = ["websockets (>=11.0.3)"] + [[package]] name = "pygments" version = "2.18.0" @@ -673,6 +729,27 @@ files = [ {file = "ruff-0.4.6.tar.gz", hash = "sha256:a797a87da50603f71e6d0765282098245aca6e3b94b7c17473115167d8dfb0b7"}, ] +[[package]] +name = "ruff-lsp" +version = "0.0.53" +description = "A Language Server Protocol implementation for Ruff." +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruff_lsp-0.0.53-py3-none-any.whl", hash = "sha256:5ea39968510d046b3c62dc5a7e3b52e867c2de14af34a406883fe05d55bab2b0"}, + {file = "ruff_lsp-0.0.53.tar.gz", hash = "sha256:de38eccd06020350630ac3518fe04a9640c8f66908758d8a623b5ea021bf84b0"}, +] + +[package.dependencies] +lsprotocol = ">=2023.0.0" +packaging = ">=23.1" +pygls = ">=1.1.0" +ruff = ">=0.0.274" +typing-extensions = "*" + +[package.extras] +dev = ["mypy (==1.4.1)", "pip-tools (>=6.13.0,<7.0.0)", "pytest (>=7.3.1,<8.0.0)", "pytest-asyncio (==0.21.1)", "python-lsp-jsonrpc (==1.0.0)"] + [[package]] name = "textual" version = "0.63.5" @@ -841,4 +918,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "6904751e80bd36a5e6d31c409e454baf8d8a1446d88f501cc78676252cf1af6f" +content-hash = "cc10e5f66f4066bf515436da4363c5d51fdfe6eed97de95e512a8d1c315823b4" diff --git a/pyproject.toml b/pyproject.toml index 660fbb0..32446d7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,6 +18,7 @@ textual-dev = "^1.5.1" ruff = "^0.4.4" mypy = "^1.10.0" pytest = "^8.2.1" +ruff-lsp = "^0.0.53" [build-system] requires = ["poetry-core"] From bbf770bbc546cfffe5e9c6e2546468a33e02a5d6 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Sun, 16 Jun 2024 12:35:21 -0600 Subject: [PATCH 040/108] refactor: Generation form redesign to be simplier --- ignori/widgets/generation_form.py | 94 +++++++++++++++++++++---------- ignori/widgets/language_label.py | 5 -- 2 files changed, 63 insertions(+), 36 deletions(-) delete mode 100644 ignori/widgets/language_label.py diff --git a/ignori/widgets/generation_form.py b/ignori/widgets/generation_form.py index be12ca2..91553cb 100644 --- a/ignori/widgets/generation_form.py +++ b/ignori/widgets/generation_form.py @@ -3,7 +3,7 @@ from textual import on from textual.app import ComposeResult -from textual.containers import Container, Horizontal +from textual.containers import Horizontal from textual.message import Message from textual.reactive import reactive from textual.widget import Widget @@ -14,32 +14,62 @@ from ignori.util.validators import PathValidator -class GenerationForm(Widget): +class PathInput(Input): - DEFAULT_CSS = """ - GenerationForm { - & #path-container { - height: auto; - & #path-label{ - offset-x: 1; + DEFAULT_CSS = """\ + PathInput { + border: none; + width: 1fr; + height: 1; + + &:focus { + /* TODO: CHECK WHY IS REQUIRED THE IMPORTANT */ + border: none !important; + width: 1fr; + height: 1 !important; + + & .input--cursor { + color: $text; + background: $accent-lighten-2; } } + } + """ - & #path-form-container{ - height: auto; - & #path-input{ - width: 1fr; - } +class PathGenerationButton(Button): + + DEFAULT_CSS = """\ + PathGenerationButton { + padding: 0 1; + height: 1; + min-width: 5; + background: $primary; + color: $text; + border: none; + text-style: none; + + &:hover { + text-style: b; + padding: 0 1; + border: none; + background: $primary-darken-1; + } + } + """ - & #path-button{ - width: auto; - } +class GenerationForm(Widget): + + DEFAULT_CSS = """\ + GenerationForm { + padding: 1; + & #path-form-container{ + height: 1; } } """ class Generated(Message): - pass + ... selected_ignore_file: reactive[IgnoreFile | None] = reactive(None) @@ -85,18 +115,20 @@ def reset_form(self: Self) -> None: self.post_message(self.Generated()) def compose(self: Self) -> ComposeResult: - with Container(id="path-container"): - yield Label( - "No language selected", - id="path-label", + yield Label( + "No language selected", + id="path-label", + ) + with Horizontal(id="path-form-container"): + yield PathInput( + id="path-input", + placeholder=f"{Path.cwd()}", + type="text", + validators=[ + PathValidator(), + ], + ) + yield PathGenerationButton( + "Generate", + id="path-button", ) - with Horizontal(id="path-form-container"): - yield Input( - id="path-input", - placeholder=f"{Path.cwd()}", - type="text", - validators=[ - PathValidator(), - ], - ) - yield Button("Generate", id="path-button") diff --git a/ignori/widgets/language_label.py b/ignori/widgets/language_label.py deleted file mode 100644 index 00bc40e..0000000 --- a/ignori/widgets/language_label.py +++ /dev/null @@ -1,5 +0,0 @@ -from textual.widget import Widget - - -class LanguageLabel(Widget): - pass From 17eafda77f7f5eaac548ca5783794530effd99a3 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Wed, 19 Jun 2024 18:25:16 -0600 Subject: [PATCH 041/108] refactor: Created Header component, empty for the moment --- ignori/app.py | 3 ++- ignori/util/settings.py | 3 +++ ignori/widgets/header.py | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 ignori/widgets/header.py diff --git a/ignori/app.py b/ignori/app.py index 40dd837..887700f 100644 --- a/ignori/app.py +++ b/ignori/app.py @@ -5,11 +5,12 @@ from textual.binding import Binding from textual.containers import Vertical from textual.reactive import reactive -from textual.widgets import Footer, Header +from textual.widgets import Footer from ignori.ignore_file import IgnoreFile from ignori.util.settings import APP_TITLE, STYLES_PATH from ignori.widgets.generation_form import GenerationForm +from ignori.widgets.header import Header from ignori.widgets.search_form import SearchForm diff --git a/ignori/util/settings.py b/ignori/util/settings.py index cc57e75..e54b9da 100644 --- a/ignori/util/settings.py +++ b/ignori/util/settings.py @@ -7,3 +7,6 @@ TEMPLATES_PATH = BASE_DIR / "templates" APP_TITLE = "Ignori" + +APP_VERSION = "" + diff --git a/ignori/widgets/header.py b/ignori/widgets/header.py new file mode 100644 index 0000000..10e1363 --- /dev/null +++ b/ignori/widgets/header.py @@ -0,0 +1,34 @@ +from typing import Self + +from textual.app import ComposeResult +from textual.containers import Horizontal +from textual.widgets import Label + +from ignori.util.settings import APP_TITLE, APP_VERSION + + +class Header(Horizontal): + + DEFAULT_CSS ="""\ + Header { + background: $primary; + height: 1; + margin-bottom: 1; + padding: 0 2; + + & #app-title { + width: 1fr; + content-align: center middle; + } + + & #app-version { + content-align: left middle; + color: $text 40%; + text-style: italic; + } + } + """ + + def compose(self: Self) -> ComposeResult: + yield Label(APP_TITLE, id="app-title") + yield Label(APP_VERSION, id="app-version") From 19ddb7de62c791a1c0b7028b180d275169566c53 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Thu, 20 Jun 2024 11:09:41 -0600 Subject: [PATCH 042/108] fix: No more duplicated id for OptionList in templates list --- .gitignore | 2 +- ignori/ignore_file.py | 2 +- templates/AL.gitignore | 22 + templates/Actionscript.gitignore | 18 + templates/Ada.gitignore | 5 + templates/Agda.gitignore | 2 + templates/Android.gitignore | 33 + templates/AppEngine.gitignore | 2 + templates/AppceleratorTitanium.gitignore | 3 + templates/ArchLinuxPackages.gitignore | 13 + templates/Autotools.gitignore | 52 ++ templates/Ballerina.gitignore | 11 + templates/C++.gitignore | 32 + templates/C.gitignore | 52 ++ templates/CFWheels.gitignore | 12 + templates/CMake.gitignore | 12 + templates/CUDA.gitignore | 6 + templates/CakePHP.gitignore | 25 + templates/ChefCookbook.gitignore | 9 + templates/Clojure.gitignore | 1 + templates/CodeIgniter.gitignore | 18 + templates/CommonLisp.gitignore | 17 + templates/Composer.gitignore | 6 + templates/Concrete5.gitignore | 21 + templates/Coq.gitignore | 45 ++ templates/CraftCMS.gitignore | 4 + templates/D.gitignore | 24 + templates/DM.gitignore | 5 + templates/Dart.gitignore | 27 + templates/Delphi.gitignore | 81 ++ templates/Drupal.gitignore | 62 ++ templates/EPiServer.gitignore | 4 + templates/Eagle.gitignore | 51 ++ templates/Elisp.gitignore | 11 + templates/Elixir.gitignore | 10 + templates/Elm.gitignore | 4 + templates/Erlang.gitignore | 17 + templates/ExpressionEngine.gitignore | 19 + templates/ExtJs.gitignore | 14 + templates/Fancy.gitignore | 2 + templates/Finale.gitignore | 13 + templates/FlaxEngine.gitignore | 45 ++ templates/ForceDotCom.gitignore | 4 + templates/Fortran.gitignore | 1 + templates/FuelPHP.gitignore | 21 + templates/GWT.gitignore | 25 + templates/Gcov.gitignore | 5 + templates/GitBook.gitignore | 16 + templates/GitHubPages.gitignore | 18 + templates/Global/AL.gitignore | 11 + templates/Global/Anjuta.gitignore | 3 + templates/Global/Ansible.gitignore | 1 + templates/Global/Archives.gitignore | 34 + templates/Global/Backup.gitignore | 5 + templates/Global/Bazaar.gitignore | 2 + templates/Global/BricxCC.gitignore | 4 + templates/Global/CVS.gitignore | 4 + templates/Global/Calabash.gitignore | 10 + templates/Global/Cloud9.gitignore | 3 + templates/Global/CodeKit.gitignore | 4 + templates/Global/DartEditor.gitignore | 2 + templates/Global/Diff.gitignore | 2 + templates/Global/Dreamweaver.gitignore | 7 + templates/Global/Dropbox.gitignore | 4 + templates/Global/Eclipse.gitignore | 60 ++ templates/Global/EiffelStudio.gitignore | 2 + templates/Global/Emacs.gitignore | 49 ++ templates/Global/Ensime.gitignore | 4 + templates/Global/Espresso.gitignore | 1 + templates/Global/FlexBuilder.gitignore | 3 + templates/Global/GPG.gitignore | 2 + templates/Global/Images.gitignore | 63 ++ templates/Global/JDeveloper.gitignore | 13 + templates/Global/JEnv.gitignore | 5 + templates/Global/JetBrains.gitignore | 77 ++ templates/Global/KDevelop4.gitignore | 2 + templates/Global/Kate.gitignore | 3 + templates/Global/Lazarus.gitignore | 30 + templates/Global/LibreOffice.gitignore | 2 + templates/Global/Linux.gitignore | 13 + templates/Global/LyX.gitignore | 4 + templates/Global/MATLAB.gitignore | 31 + templates/Global/Mercurial.gitignore | 6 + templates/Global/Metals.gitignore | 5 + templates/Global/MicrosoftOffice.gitignore | 19 + templates/Global/ModelSim.gitignore | 23 + templates/Global/Momentics.gitignore | 8 + templates/Global/MonoDevelop.gitignore | 8 + templates/Global/NetBeans.gitignore | 8 + templates/Global/Ninja.gitignore | 2 + templates/Global/NotepadPP.gitignore | 2 + templates/Global/Octave.gitignore | 1 + templates/Global/Otto.gitignore | 1 + templates/Global/PSoCCreator.gitignore | 18 + templates/Global/Patch.gitignore | 2 + templates/Global/PuTTY.gitignore | 2 + templates/Global/README.md | 10 + templates/Global/Redcar.gitignore | 1 + templates/Global/Redis.gitignore | 3 + templates/Global/SBT.gitignore | 12 + templates/Global/SVN.gitignore | 1 + templates/Global/SlickEdit.gitignore | 11 + templates/Global/Stata.gitignore | 24 + templates/Global/SublimeText.gitignore | 31 + templates/Global/Syncthing.gitignore | 2 + templates/Global/SynopsysVCS.gitignore | 36 + templates/Global/Tags.gitignore | 17 + templates/Global/TextMate.gitignore | 3 + templates/Global/TortoiseGit.gitignore | 2 + templates/Global/Vagrant.gitignore | 5 + templates/Global/Vim.gitignore | 19 + templates/Global/VirtualEnv.gitignore | 12 + templates/Global/Virtuoso.gitignore | 18 + templates/Global/VisualStudioCode.gitignore | 12 + templates/Global/WebMethods.gitignore | 14 + templates/Global/Windows.gitignore | 24 + templates/Global/Xcode.gitignore | 2 + templates/Global/XilinxISE.gitignore | 67 ++ templates/Global/macOS.gitignore | 26 + templates/Go.gitignore | 25 + templates/Godot.gitignore | 15 + templates/Gradle.gitignore | 21 + templates/Grails.gitignore | 33 + templates/Haskell.gitignore | 23 + templates/IAR.gitignore | 47 ++ templates/IGORPro.gitignore | 5 + templates/Idris.gitignore | 7 + templates/JBoss.gitignore | 19 + templates/JENKINS_HOME.gitignore | 50 ++ templates/Java.gitignore | 24 + templates/Jekyll.gitignore | 7 + templates/Joomla.gitignore | 705 ++++++++++++++++++ templates/Julia.gitignore | 24 + templates/KiCad.gitignore | 29 + templates/Kohana.gitignore | 2 + templates/Kotlin.gitignore | 25 +- templates/LabVIEW.gitignore | 17 + templates/Laravel.gitignore | 23 + templates/Leiningen.gitignore | 14 + templates/LemonStand.gitignore | 21 + templates/Lilypond.gitignore | 6 + templates/Lithium.gitignore | 2 + templates/Lua.gitignore | 41 + templates/Magento.gitignore | 45 ++ templates/Maven.gitignore | 17 + templates/Mercury.gitignore | 13 + templates/MetaProgrammingSystem.gitignore | 16 + templates/Nanoc.gitignore | 10 + templates/Nim.gitignore | 3 + templates/Node.gitignore | 130 ++++ templates/OCaml.gitignore | 29 + templates/Objective-C.gitignore | 44 ++ templates/Opa.gitignore | 13 + templates/OpenCart.gitignore | 20 + templates/OracleForms.gitignore | 8 + templates/Packer.gitignore | 16 + templates/Perl.gitignore | 35 + templates/Phalcon.gitignore | 2 + templates/PlayFramework.gitignore | 16 + templates/Plone.gitignore | 18 + templates/Prestashop.gitignore | 173 +++++ templates/Processing.gitignore | 10 + templates/PureScript.gitignore | 9 + templates/Python.gitignore | 2 +- templates/Qooxdoo.gitignore | 5 + templates/Qt.gitignore | 54 ++ templates/R.gitignore | 49 ++ templates/ROS.gitignore | 51 ++ templates/Racket.gitignore | 7 + templates/Rails.gitignore | 69 ++ templates/Raku.gitignore | 7 + templates/RhodesRhomobile.gitignore | 9 + templates/Ruby.gitignore | 56 ++ templates/Rust.gitignore | 21 + templates/SCons.gitignore | 6 + templates/Sass.gitignore | 4 + templates/Scala.gitignore | 5 + templates/Scheme.gitignore | 7 + templates/Scrivener.gitignore | 8 + templates/Sdcc.gitignore | 8 + templates/SeamGen.gitignore | 26 + templates/SketchUp.gitignore | 1 + templates/Smalltalk.gitignore | 31 + templates/Stella.gitignore | 12 + templates/SugarCRM.gitignore | 27 + templates/Swift.gitignore | 62 ++ templates/Symfony.gitignore | 52 ++ templates/SymphonyCMS.gitignore | 6 + templates/TeX.gitignore | 306 ++++++++ templates/Terraform.gitignore | 37 + templates/Textpattern.gitignore | 11 + templates/TurboGears2.gitignore | 20 + templates/TwinCAT3.gitignore | 25 + templates/Typo3.gitignore | 23 + templates/Unity.gitignore | 72 ++ templates/UnrealEngine.gitignore | 74 ++ templates/VVVV.gitignore | 6 + templates/VisualStudio.gitignore | 398 ++++++++++ templates/Waf.gitignore | 9 + templates/WordPress.gitignore | 48 ++ templates/Xojo.gitignore | 11 + templates/Yeoman.gitignore | 6 + templates/Yii.gitignore | 6 + templates/ZendFramework.gitignore | 24 + templates/Zephir.gitignore | 26 + templates/community/AWS/CDK.gitignore | 4 + templates/community/AWS/SAM.gitignore | 5 + templates/community/Alteryx.gitignore | 44 ++ templates/community/AltiumDesigner.gitignore | 20 + templates/community/AutoIt.gitignore | 8 + templates/community/B4X.gitignore | 3 + templates/community/Bazel.gitignore | 13 + templates/community/Beef.gitignore | 3 + templates/community/DotNet/InforCMS.gitignore | 15 + templates/community/DotNet/Kentico.gitignore | 64 ++ templates/community/DotNet/Umbraco.gitignore | 52 ++ templates/community/DotNet/core.gitignore | 38 + templates/community/Elixir/Phoenix.gitignore | 22 + templates/community/Exercism.gitignore | 5 + .../GNOME/GNOMEShellExtension.gitignore | 3 + .../community/Golang/Go.AllowList.gitignore | 23 + templates/community/Golang/Hugo.gitignore | 13 + templates/community/Gretl.gitignore | 8 + templates/community/Java/JBoss4.gitignore | 19 + templates/community/Java/JBoss6.gitignore | 33 + .../community/JavaScript/Cordova.gitignore | 10 + .../community/JavaScript/Meteor.gitignore | 12 + templates/community/JavaScript/NWjs.gitignore | 29 + templates/community/JavaScript/Vue.gitignore | 9 + templates/community/LensStudio.gitignore | 16 + templates/community/Linux/Snap.gitignore | 14 + templates/community/Logtalk.gitignore | 19 + templates/community/NasaSpecsIntact.gitignore | 40 + templates/community/Nix.gitignore | 3 + templates/community/OpenSSL.gitignore | 34 + templates/community/PHP/Bitrix.gitignore | 23 + templates/community/PHP/CodeSniffer.gitignore | 6 + templates/community/PHP/Drupal7.gitignore | 43 ++ templates/community/PHP/Jigsaw.gitignore | 6 + templates/community/PHP/Magento1.gitignore | 45 ++ templates/community/PHP/Magento2.gitignore | 54 ++ templates/community/PHP/Pimcore.gitignore | 53 ++ templates/community/PHP/ThinkPHP.gitignore | 8 + templates/community/Puppet.gitignore | 16 + .../Python/JupyterNotebooks.gitignore | 12 + templates/community/Python/Nikola.gitignore | 7 + templates/community/ROS2.gitignore | 29 + templates/community/Racket.gitignore | 15 + templates/community/Red.gitignore | 16 + templates/community/SPFx.gitignore | 33 + templates/community/Splunk.gitignore | 8 + templates/community/Strapi.gitignore | 135 ++++ templates/community/Toit.gitignore | 2 + templates/community/UiPath.gitignore | 11 + templates/community/V.gitignore | 11 + templates/community/Xilinx.gitignore | 105 +++ .../community/embedded/AtmelStudio.gitignore | 22 + .../community/embedded/IAR_EWARM.gitignore | 19 + .../community/embedded/esp-idf.gitignore | 6 + .../community/embedded/uVision.gitignore | 45 ++ 260 files changed, 6604 insertions(+), 27 deletions(-) create mode 100644 templates/AL.gitignore create mode 100644 templates/Actionscript.gitignore create mode 100644 templates/Ada.gitignore create mode 100644 templates/Agda.gitignore create mode 100644 templates/Android.gitignore create mode 100644 templates/AppEngine.gitignore create mode 100644 templates/AppceleratorTitanium.gitignore create mode 100644 templates/ArchLinuxPackages.gitignore create mode 100644 templates/Autotools.gitignore create mode 100644 templates/Ballerina.gitignore create mode 100644 templates/C++.gitignore create mode 100644 templates/C.gitignore create mode 100644 templates/CFWheels.gitignore create mode 100644 templates/CMake.gitignore create mode 100644 templates/CUDA.gitignore create mode 100644 templates/CakePHP.gitignore create mode 100644 templates/ChefCookbook.gitignore create mode 100644 templates/Clojure.gitignore create mode 100644 templates/CodeIgniter.gitignore create mode 100644 templates/CommonLisp.gitignore create mode 100644 templates/Composer.gitignore create mode 100644 templates/Concrete5.gitignore create mode 100644 templates/Coq.gitignore create mode 100644 templates/CraftCMS.gitignore create mode 100644 templates/D.gitignore create mode 100644 templates/DM.gitignore create mode 100644 templates/Dart.gitignore create mode 100644 templates/Delphi.gitignore create mode 100644 templates/Drupal.gitignore create mode 100644 templates/EPiServer.gitignore create mode 100644 templates/Eagle.gitignore create mode 100644 templates/Elisp.gitignore create mode 100644 templates/Elixir.gitignore create mode 100644 templates/Elm.gitignore create mode 100644 templates/Erlang.gitignore create mode 100644 templates/ExpressionEngine.gitignore create mode 100644 templates/ExtJs.gitignore create mode 100644 templates/Fancy.gitignore create mode 100644 templates/Finale.gitignore create mode 100644 templates/FlaxEngine.gitignore create mode 100644 templates/ForceDotCom.gitignore create mode 100644 templates/Fortran.gitignore create mode 100644 templates/FuelPHP.gitignore create mode 100644 templates/GWT.gitignore create mode 100644 templates/Gcov.gitignore create mode 100644 templates/GitBook.gitignore create mode 100644 templates/GitHubPages.gitignore create mode 100644 templates/Global/AL.gitignore create mode 100644 templates/Global/Anjuta.gitignore create mode 100644 templates/Global/Ansible.gitignore create mode 100644 templates/Global/Archives.gitignore create mode 100644 templates/Global/Backup.gitignore create mode 100644 templates/Global/Bazaar.gitignore create mode 100644 templates/Global/BricxCC.gitignore create mode 100644 templates/Global/CVS.gitignore create mode 100644 templates/Global/Calabash.gitignore create mode 100644 templates/Global/Cloud9.gitignore create mode 100644 templates/Global/CodeKit.gitignore create mode 100644 templates/Global/DartEditor.gitignore create mode 100644 templates/Global/Diff.gitignore create mode 100644 templates/Global/Dreamweaver.gitignore create mode 100644 templates/Global/Dropbox.gitignore create mode 100644 templates/Global/Eclipse.gitignore create mode 100644 templates/Global/EiffelStudio.gitignore create mode 100644 templates/Global/Emacs.gitignore create mode 100644 templates/Global/Ensime.gitignore create mode 100644 templates/Global/Espresso.gitignore create mode 100644 templates/Global/FlexBuilder.gitignore create mode 100644 templates/Global/GPG.gitignore create mode 100644 templates/Global/Images.gitignore create mode 100644 templates/Global/JDeveloper.gitignore create mode 100644 templates/Global/JEnv.gitignore create mode 100644 templates/Global/JetBrains.gitignore create mode 100644 templates/Global/KDevelop4.gitignore create mode 100644 templates/Global/Kate.gitignore create mode 100644 templates/Global/Lazarus.gitignore create mode 100644 templates/Global/LibreOffice.gitignore create mode 100644 templates/Global/Linux.gitignore create mode 100644 templates/Global/LyX.gitignore create mode 100644 templates/Global/MATLAB.gitignore create mode 100644 templates/Global/Mercurial.gitignore create mode 100644 templates/Global/Metals.gitignore create mode 100644 templates/Global/MicrosoftOffice.gitignore create mode 100644 templates/Global/ModelSim.gitignore create mode 100644 templates/Global/Momentics.gitignore create mode 100644 templates/Global/MonoDevelop.gitignore create mode 100644 templates/Global/NetBeans.gitignore create mode 100644 templates/Global/Ninja.gitignore create mode 100644 templates/Global/NotepadPP.gitignore create mode 100644 templates/Global/Octave.gitignore create mode 100644 templates/Global/Otto.gitignore create mode 100644 templates/Global/PSoCCreator.gitignore create mode 100644 templates/Global/Patch.gitignore create mode 100644 templates/Global/PuTTY.gitignore create mode 100644 templates/Global/README.md create mode 100644 templates/Global/Redcar.gitignore create mode 100644 templates/Global/Redis.gitignore create mode 100644 templates/Global/SBT.gitignore create mode 100644 templates/Global/SVN.gitignore create mode 100644 templates/Global/SlickEdit.gitignore create mode 100644 templates/Global/Stata.gitignore create mode 100644 templates/Global/SublimeText.gitignore create mode 100644 templates/Global/Syncthing.gitignore create mode 100644 templates/Global/SynopsysVCS.gitignore create mode 100644 templates/Global/Tags.gitignore create mode 100644 templates/Global/TextMate.gitignore create mode 100644 templates/Global/TortoiseGit.gitignore create mode 100644 templates/Global/Vagrant.gitignore create mode 100644 templates/Global/Vim.gitignore create mode 100644 templates/Global/VirtualEnv.gitignore create mode 100644 templates/Global/Virtuoso.gitignore create mode 100644 templates/Global/VisualStudioCode.gitignore create mode 100644 templates/Global/WebMethods.gitignore create mode 100644 templates/Global/Windows.gitignore create mode 100644 templates/Global/Xcode.gitignore create mode 100644 templates/Global/XilinxISE.gitignore create mode 100644 templates/Global/macOS.gitignore create mode 100644 templates/Go.gitignore create mode 100644 templates/Godot.gitignore create mode 100644 templates/Gradle.gitignore create mode 100644 templates/Grails.gitignore create mode 100644 templates/Haskell.gitignore create mode 100644 templates/IAR.gitignore create mode 100644 templates/IGORPro.gitignore create mode 100644 templates/Idris.gitignore create mode 100644 templates/JBoss.gitignore create mode 100644 templates/JENKINS_HOME.gitignore create mode 100644 templates/Java.gitignore create mode 100644 templates/Jekyll.gitignore create mode 100644 templates/Joomla.gitignore create mode 100644 templates/Julia.gitignore create mode 100644 templates/KiCad.gitignore create mode 100644 templates/Kohana.gitignore create mode 100644 templates/LabVIEW.gitignore create mode 100644 templates/Laravel.gitignore create mode 100644 templates/Leiningen.gitignore create mode 100644 templates/LemonStand.gitignore create mode 100644 templates/Lilypond.gitignore create mode 100644 templates/Lithium.gitignore create mode 100644 templates/Lua.gitignore create mode 100644 templates/Magento.gitignore create mode 100644 templates/Maven.gitignore create mode 100644 templates/Mercury.gitignore create mode 100644 templates/MetaProgrammingSystem.gitignore create mode 100644 templates/Nanoc.gitignore create mode 100644 templates/Nim.gitignore create mode 100644 templates/Node.gitignore create mode 100644 templates/OCaml.gitignore create mode 100644 templates/Objective-C.gitignore create mode 100644 templates/Opa.gitignore create mode 100644 templates/OpenCart.gitignore create mode 100644 templates/OracleForms.gitignore create mode 100644 templates/Packer.gitignore create mode 100644 templates/Perl.gitignore create mode 100644 templates/Phalcon.gitignore create mode 100644 templates/PlayFramework.gitignore create mode 100644 templates/Plone.gitignore create mode 100644 templates/Prestashop.gitignore create mode 100644 templates/Processing.gitignore create mode 100644 templates/PureScript.gitignore create mode 100644 templates/Qooxdoo.gitignore create mode 100644 templates/Qt.gitignore create mode 100644 templates/R.gitignore create mode 100644 templates/ROS.gitignore create mode 100644 templates/Racket.gitignore create mode 100644 templates/Rails.gitignore create mode 100644 templates/Raku.gitignore create mode 100644 templates/RhodesRhomobile.gitignore create mode 100644 templates/Ruby.gitignore create mode 100644 templates/Rust.gitignore create mode 100644 templates/SCons.gitignore create mode 100644 templates/Sass.gitignore create mode 100644 templates/Scala.gitignore create mode 100644 templates/Scheme.gitignore create mode 100644 templates/Scrivener.gitignore create mode 100644 templates/Sdcc.gitignore create mode 100644 templates/SeamGen.gitignore create mode 100644 templates/SketchUp.gitignore create mode 100644 templates/Smalltalk.gitignore create mode 100644 templates/Stella.gitignore create mode 100644 templates/SugarCRM.gitignore create mode 100644 templates/Swift.gitignore create mode 100644 templates/Symfony.gitignore create mode 100644 templates/SymphonyCMS.gitignore create mode 100644 templates/TeX.gitignore create mode 100644 templates/Terraform.gitignore create mode 100644 templates/Textpattern.gitignore create mode 100644 templates/TurboGears2.gitignore create mode 100644 templates/TwinCAT3.gitignore create mode 100644 templates/Typo3.gitignore create mode 100644 templates/Unity.gitignore create mode 100644 templates/UnrealEngine.gitignore create mode 100644 templates/VVVV.gitignore create mode 100644 templates/VisualStudio.gitignore create mode 100644 templates/Waf.gitignore create mode 100644 templates/WordPress.gitignore create mode 100644 templates/Xojo.gitignore create mode 100644 templates/Yeoman.gitignore create mode 100644 templates/Yii.gitignore create mode 100644 templates/ZendFramework.gitignore create mode 100644 templates/Zephir.gitignore create mode 100644 templates/community/AWS/CDK.gitignore create mode 100644 templates/community/AWS/SAM.gitignore create mode 100644 templates/community/Alteryx.gitignore create mode 100644 templates/community/AltiumDesigner.gitignore create mode 100644 templates/community/AutoIt.gitignore create mode 100644 templates/community/B4X.gitignore create mode 100644 templates/community/Bazel.gitignore create mode 100644 templates/community/Beef.gitignore create mode 100644 templates/community/DotNet/InforCMS.gitignore create mode 100644 templates/community/DotNet/Kentico.gitignore create mode 100644 templates/community/DotNet/Umbraco.gitignore create mode 100644 templates/community/DotNet/core.gitignore create mode 100644 templates/community/Elixir/Phoenix.gitignore create mode 100644 templates/community/Exercism.gitignore create mode 100644 templates/community/GNOME/GNOMEShellExtension.gitignore create mode 100644 templates/community/Golang/Go.AllowList.gitignore create mode 100644 templates/community/Golang/Hugo.gitignore create mode 100644 templates/community/Gretl.gitignore create mode 100644 templates/community/Java/JBoss4.gitignore create mode 100644 templates/community/Java/JBoss6.gitignore create mode 100644 templates/community/JavaScript/Cordova.gitignore create mode 100644 templates/community/JavaScript/Meteor.gitignore create mode 100644 templates/community/JavaScript/NWjs.gitignore create mode 100644 templates/community/JavaScript/Vue.gitignore create mode 100644 templates/community/LensStudio.gitignore create mode 100644 templates/community/Linux/Snap.gitignore create mode 100644 templates/community/Logtalk.gitignore create mode 100644 templates/community/NasaSpecsIntact.gitignore create mode 100644 templates/community/Nix.gitignore create mode 100644 templates/community/OpenSSL.gitignore create mode 100644 templates/community/PHP/Bitrix.gitignore create mode 100644 templates/community/PHP/CodeSniffer.gitignore create mode 100644 templates/community/PHP/Drupal7.gitignore create mode 100644 templates/community/PHP/Jigsaw.gitignore create mode 100644 templates/community/PHP/Magento1.gitignore create mode 100644 templates/community/PHP/Magento2.gitignore create mode 100644 templates/community/PHP/Pimcore.gitignore create mode 100644 templates/community/PHP/ThinkPHP.gitignore create mode 100644 templates/community/Puppet.gitignore create mode 100644 templates/community/Python/JupyterNotebooks.gitignore create mode 100644 templates/community/Python/Nikola.gitignore create mode 100644 templates/community/ROS2.gitignore create mode 100644 templates/community/Racket.gitignore create mode 100644 templates/community/Red.gitignore create mode 100644 templates/community/SPFx.gitignore create mode 100644 templates/community/Splunk.gitignore create mode 100644 templates/community/Strapi.gitignore create mode 100644 templates/community/Toit.gitignore create mode 100644 templates/community/UiPath.gitignore create mode 100644 templates/community/V.gitignore create mode 100644 templates/community/Xilinx.gitignore create mode 100644 templates/community/embedded/AtmelStudio.gitignore create mode 100644 templates/community/embedded/IAR_EWARM.gitignore create mode 100644 templates/community/embedded/esp-idf.gitignore create mode 100644 templates/community/embedded/uVision.gitignore diff --git a/.gitignore b/.gitignore index efa407c..82f9275 100644 --- a/.gitignore +++ b/.gitignore @@ -159,4 +159,4 @@ cython_debug/ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. -#.idea/ \ No newline at end of file +#.idea/ diff --git a/ignori/ignore_file.py b/ignori/ignore_file.py index 628dcc1..1be4eb1 100644 --- a/ignori/ignore_file.py +++ b/ignori/ignore_file.py @@ -11,7 +11,7 @@ class IgnoreFile: def __post_init__(self: Self) -> None: self.language = self.path.stem - self.id = self.language.lower()[:3] + self.id = self.language.lower() if __name__ == "__main__": diff --git a/templates/AL.gitignore b/templates/AL.gitignore new file mode 100644 index 0000000..02eac69 --- /dev/null +++ b/templates/AL.gitignore @@ -0,0 +1,22 @@ +### AL ### +#Template for AL projects for Dynamics 365 Business Central +#launch.json folder +.vscode/ +#Cache folder +.alcache/ +#Symbols folder +.alpackages/ +#Snapshots folder +.snapshots/ +#Testing Output folder +.output/ +#Extension App-file +*.app +#Rapid Application Development File +rad.json +#Translation Base-file +*.g.xlf +#License-file +*.flf +#Test results file +TestResults.xml \ No newline at end of file diff --git a/templates/Actionscript.gitignore b/templates/Actionscript.gitignore new file mode 100644 index 0000000..5d947ca --- /dev/null +++ b/templates/Actionscript.gitignore @@ -0,0 +1,18 @@ +# Build and Release Folders +bin-debug/ +bin-release/ +[Oo]bj/ +[Bb]in/ + +# Other files and folders +.settings/ + +# Executables +*.swf +*.air +*.ipa +*.apk + +# Project files, i.e. `.project`, `.actionScriptProperties` and `.flexProperties` +# should NOT be excluded as they contain compiler settings and other important +# information for Eclipse / Flash Builder. diff --git a/templates/Ada.gitignore b/templates/Ada.gitignore new file mode 100644 index 0000000..b4d7039 --- /dev/null +++ b/templates/Ada.gitignore @@ -0,0 +1,5 @@ +# Object file +*.o + +# Ada Library Information +*.ali diff --git a/templates/Agda.gitignore b/templates/Agda.gitignore new file mode 100644 index 0000000..58ab67f --- /dev/null +++ b/templates/Agda.gitignore @@ -0,0 +1,2 @@ +*.agdai +MAlonzo/** diff --git a/templates/Android.gitignore b/templates/Android.gitignore new file mode 100644 index 0000000..347e252 --- /dev/null +++ b/templates/Android.gitignore @@ -0,0 +1,33 @@ +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Log/OS Files +*.log + +# Android Studio generated files and folders +captures/ +.externalNativeBuild/ +.cxx/ +*.apk +output.json + +# IntelliJ +*.iml +.idea/ +misc.xml +deploymentTargetDropDown.xml +render.experimental.xml + +# Keystore files +*.jks +*.keystore + +# Google Services (e.g. APIs or Firebase) +google-services.json + +# Android Profiling +*.hprof diff --git a/templates/AppEngine.gitignore b/templates/AppEngine.gitignore new file mode 100644 index 0000000..6227345 --- /dev/null +++ b/templates/AppEngine.gitignore @@ -0,0 +1,2 @@ +# Google App Engine generated folder +appengine-generated/ diff --git a/templates/AppceleratorTitanium.gitignore b/templates/AppceleratorTitanium.gitignore new file mode 100644 index 0000000..3abea55 --- /dev/null +++ b/templates/AppceleratorTitanium.gitignore @@ -0,0 +1,3 @@ +# Build folder and log file +build/ +build.log diff --git a/templates/ArchLinuxPackages.gitignore b/templates/ArchLinuxPackages.gitignore new file mode 100644 index 0000000..b739055 --- /dev/null +++ b/templates/ArchLinuxPackages.gitignore @@ -0,0 +1,13 @@ +*.tar +*.tar.* +*.jar +*.exe +*.msi +*.zip +*.tgz +*.log +*.log.* +*.sig + +pkg/ +src/ diff --git a/templates/Autotools.gitignore b/templates/Autotools.gitignore new file mode 100644 index 0000000..617156f --- /dev/null +++ b/templates/Autotools.gitignore @@ -0,0 +1,52 @@ +# http://www.gnu.org/software/automake + +Makefile.in +/ar-lib +/mdate-sh +/py-compile +/test-driver +/ylwrap +.deps/ +.dirstamp + +# http://www.gnu.org/software/autoconf + +autom4te.cache +/autoscan.log +/autoscan-*.log +/aclocal.m4 +/compile +/config.cache +/config.guess +/config.h.in +/config.log +/config.status +/config.sub +/configure +/configure.scan +/depcomp +/install-sh +/missing +/stamp-h1 + +# https://www.gnu.org/software/libtool/ + +/ltmain.sh + +# http://www.gnu.org/software/texinfo + +/texinfo.tex + +# http://www.gnu.org/software/m4/ + +m4/libtool.m4 +m4/ltoptions.m4 +m4/ltsugar.m4 +m4/ltversion.m4 +m4/lt~obsolete.m4 + +# Generated Makefile +# (meta build system like autotools, +# can automatically generate from config.status script +# (which is called by configure script)) +Makefile diff --git a/templates/Ballerina.gitignore b/templates/Ballerina.gitignore new file mode 100644 index 0000000..030a350 --- /dev/null +++ b/templates/Ballerina.gitignore @@ -0,0 +1,11 @@ +# generated files +target/ +generated/ + +# dependencies +Dependencies.toml + +# config files +Config.toml +# the config files used for testing, Uncomment the following line if you want to commit the test config files +#!**/tests/Config.toml diff --git a/templates/C++.gitignore b/templates/C++.gitignore new file mode 100644 index 0000000..259148f --- /dev/null +++ b/templates/C++.gitignore @@ -0,0 +1,32 @@ +# Prerequisites +*.d + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod +*.smod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app diff --git a/templates/C.gitignore b/templates/C.gitignore new file mode 100644 index 0000000..c6127b3 --- /dev/null +++ b/templates/C.gitignore @@ -0,0 +1,52 @@ +# Prerequisites +*.d + +# Object files +*.o +*.ko +*.obj +*.elf + +# Linker output +*.ilk +*.map +*.exp + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + +# Debug files +*.dSYM/ +*.su +*.idb +*.pdb + +# Kernel Module Compile Results +*.mod* +*.cmd +.tmp_versions/ +modules.order +Module.symvers +Mkfile.old +dkms.conf diff --git a/templates/CFWheels.gitignore b/templates/CFWheels.gitignore new file mode 100644 index 0000000..f2fec34 --- /dev/null +++ b/templates/CFWheels.gitignore @@ -0,0 +1,12 @@ +# unpacked plugin folders +plugins/**/* + +# files directory where uploads go +files + +# DBMigrate plugin: generated SQL +db/sql + +# AssetBundler plugin: generated bundles +javascripts/bundles +stylesheets/bundles diff --git a/templates/CMake.gitignore b/templates/CMake.gitignore new file mode 100644 index 0000000..11c7643 --- /dev/null +++ b/templates/CMake.gitignore @@ -0,0 +1,12 @@ +CMakeLists.txt.user +CMakeCache.txt +CMakeFiles +CMakeScripts +Testing +Makefile +cmake_install.cmake +install_manifest.txt +compile_commands.json +CTestTestfile.cmake +_deps +CMakeUserPresets.json diff --git a/templates/CUDA.gitignore b/templates/CUDA.gitignore new file mode 100644 index 0000000..cb385db --- /dev/null +++ b/templates/CUDA.gitignore @@ -0,0 +1,6 @@ +*.i +*.ii +*.gpu +*.ptx +*.cubin +*.fatbin diff --git a/templates/CakePHP.gitignore b/templates/CakePHP.gitignore new file mode 100644 index 0000000..c6597e4 --- /dev/null +++ b/templates/CakePHP.gitignore @@ -0,0 +1,25 @@ +# CakePHP 3 + +/vendor/* +/config/app.php + +/tmp/cache/models/* +!/tmp/cache/models/empty +/tmp/cache/persistent/* +!/tmp/cache/persistent/empty +/tmp/cache/views/* +!/tmp/cache/views/empty +/tmp/sessions/* +!/tmp/sessions/empty +/tmp/tests/* +!/tmp/tests/empty + +/logs/* +!/logs/empty + +# CakePHP 2 + +/app/tmp/* +/app/Config/core.php +/app/Config/database.php +/vendors/* diff --git a/templates/ChefCookbook.gitignore b/templates/ChefCookbook.gitignore new file mode 100644 index 0000000..5ee7b7a --- /dev/null +++ b/templates/ChefCookbook.gitignore @@ -0,0 +1,9 @@ +.vagrant +/cookbooks + +# Bundler +bin/* +.bundle/* + +.kitchen/ +.kitchen.local.yml diff --git a/templates/Clojure.gitignore b/templates/Clojure.gitignore new file mode 100644 index 0000000..7657a27 --- /dev/null +++ b/templates/Clojure.gitignore @@ -0,0 +1 @@ +Leiningen.gitignore \ No newline at end of file diff --git a/templates/CodeIgniter.gitignore b/templates/CodeIgniter.gitignore new file mode 100644 index 0000000..f447dc3 --- /dev/null +++ b/templates/CodeIgniter.gitignore @@ -0,0 +1,18 @@ +*/config/development +*/logs/log-*.php +!*/logs/index.html +*/cache/* +!system/cache/* +!*/cache/index.html +!*/cache/.htaccess + +user_guide_src/build/* +user_guide_src/cilexer/build/* +user_guide_src/cilexer/dist/* +user_guide_src/cilexer/pycilexer.egg-info/* + +#codeigniter 3 +application/logs/* +!application/logs/index.html +!application/logs/.htaccess +/vendor/ diff --git a/templates/CommonLisp.gitignore b/templates/CommonLisp.gitignore new file mode 100644 index 0000000..e7de127 --- /dev/null +++ b/templates/CommonLisp.gitignore @@ -0,0 +1,17 @@ +*.FASL +*.fasl +*.lisp-temp +*.dfsl +*.pfsl +*.d64fsl +*.p64fsl +*.lx64fsl +*.lx32fsl +*.dx64fsl +*.dx32fsl +*.fx64fsl +*.fx32fsl +*.sx64fsl +*.sx32fsl +*.wx64fsl +*.wx32fsl diff --git a/templates/Composer.gitignore b/templates/Composer.gitignore new file mode 100644 index 0000000..a67d42b --- /dev/null +++ b/templates/Composer.gitignore @@ -0,0 +1,6 @@ +composer.phar +/vendor/ + +# Commit your application's lock file https://getcomposer.org/doc/01-basic-usage.md#commit-your-composer-lock-file-to-version-control +# You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file +# composer.lock diff --git a/templates/Concrete5.gitignore b/templates/Concrete5.gitignore new file mode 100644 index 0000000..d6c11ad --- /dev/null +++ b/templates/Concrete5.gitignore @@ -0,0 +1,21 @@ +# ignore the error log and .htaccess and others +error_log +.htaccess + +# concrete5 5.6 specific + +config/site.php +files/cache/* +files/tmp/* + +# concrete5 5.7 specific + +# ignore everything but the index.html +/application/files/* +!/application/files/index.html + +# ignore updates folder +/updates/* + +# ignore sitemap.xml +/sitemap.xml diff --git a/templates/Coq.gitignore b/templates/Coq.gitignore new file mode 100644 index 0000000..66596b2 --- /dev/null +++ b/templates/Coq.gitignore @@ -0,0 +1,45 @@ +.*.aux +.*.d +*.a +*.cma +*.cmi +*.cmo +*.cmx +*.cmxa +*.cmxs +*.glob +*.ml.d +*.ml4.d +*.mlg.d +*.mli.d +*.mllib.d +*.mlpack.d +*.native +*.o +*.v.d +*.vio +*.vo +*.vok +*.vos +.coq-native +.csdp.cache +.lia.cache +.nia.cache +.nlia.cache +.nra.cache +csdp.cache +lia.cache +nia.cache +nlia.cache +nra.cache +native_compute_profile_*.data + +# generated timing files +*.timing.diff +*.v.after-timing +*.v.before-timing +*.v.timing +time-of-build-after.log +time-of-build-before.log +time-of-build-both.log +time-of-build-pretty.log diff --git a/templates/CraftCMS.gitignore b/templates/CraftCMS.gitignore new file mode 100644 index 0000000..0d81b39 --- /dev/null +++ b/templates/CraftCMS.gitignore @@ -0,0 +1,4 @@ +# Craft 2 Storage (https://craftcms.com/support/craft-storage-gitignore) +# not necessary for Craft 3 (https://github.com/craftcms/craft/issues/26) +/craft/storage/* +!/craft/storage/rebrand diff --git a/templates/D.gitignore b/templates/D.gitignore new file mode 100644 index 0000000..74b926f --- /dev/null +++ b/templates/D.gitignore @@ -0,0 +1,24 @@ +# Compiled Object files +*.o +*.obj + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Compiled Static libraries +*.a +*.lib + +# Executables +*.exe + +# DUB +.dub +docs.json +__dummy.html +docs/ + +# Code coverage +*.lst diff --git a/templates/DM.gitignore b/templates/DM.gitignore new file mode 100644 index 0000000..ba5abda --- /dev/null +++ b/templates/DM.gitignore @@ -0,0 +1,5 @@ +*.dmb +*.rsc +*.int +*.lk +*.zip diff --git a/templates/Dart.gitignore b/templates/Dart.gitignore new file mode 100644 index 0000000..3a83c2f --- /dev/null +++ b/templates/Dart.gitignore @@ -0,0 +1,27 @@ +# See https://www.dartlang.org/guides/libraries/private-files + +# Files and directories created by pub +.dart_tool/ +.packages +build/ +# If you're building an application, you may want to check-in your pubspec.lock +pubspec.lock + +# Directory created by dartdoc +# If you don't generate documentation locally you can remove this line. +doc/api/ + +# dotenv environment variables file +.env* + +# Avoid committing generated Javascript files: +*.dart.js +*.info.json # Produced by the --dump-info flag. +*.js # When generated by dart2js. Don't specify *.js if your + # project includes source files written in JavaScript. +*.js_ +*.js.deps +*.js.map + +.flutter-plugins +.flutter-plugins-dependencies diff --git a/templates/Delphi.gitignore b/templates/Delphi.gitignore new file mode 100644 index 0000000..8df99b6 --- /dev/null +++ b/templates/Delphi.gitignore @@ -0,0 +1,81 @@ +# Uncomment these types if you want even more clean repository. But be careful. +# It can make harm to an existing project source. Read explanations below. +# +# Resource files are binaries containing manifest, project icon and version info. +# They can not be viewed as text or compared by diff-tools. Consider replacing them with .rc files. +#*.res +# +# Type library file (binary). In old Delphi versions it should be stored. +# Since Delphi 2009 it is produced from .ridl file and can safely be ignored. +#*.tlb +# +# Diagram Portfolio file. Used by the diagram editor up to Delphi 7. +# Uncomment this if you are not using diagrams or use newer Delphi version. +#*.ddp +# +# Visual LiveBindings file. Added in Delphi XE2. +# Uncomment this if you are not using LiveBindings Designer. +#*.vlb +# +# Deployment Manager configuration file for your project. Added in Delphi XE2. +# Uncomment this if it is not mobile development and you do not use remote debug feature. +#*.deployproj +# +# C++ object files produced when C/C++ Output file generation is configured. +# Uncomment this if you are not using external objects (zlib library for example). +#*.obj +# + +# Default Delphi compiler directories +# Content of this directories are generated with each Compile/Construct of a project. +# Most of the time, files here have not there place in a code repository. +#Win32/ +#Win64/ +#OSX64/ +#OSXARM64/ +#Android/ +#Android64/ +#iOSDevice64/ +#Linux64/ + +# Delphi compiler-generated binaries (safe to delete) +*.exe +*.dll +*.bpl +*.bpi +*.dcp +*.so +*.apk +*.drc +*.map +*.dres +*.rsm +*.tds +*.dcu +*.lib +*.a +*.o +*.ocx + +# Delphi autogenerated files (duplicated info) +*.cfg +*.hpp +*Resource.rc + +# Delphi local files (user-specific info) +*.local +*.identcache +*.projdata +*.tvsconfig +*.dsk + +# Delphi history and backups +__history/ +__recovery/ +*.~* + +# Castalia statistics file (since XE7 Castalia is distributed with Delphi) +*.stat + +# Boss dependency manager vendor folder https://github.com/HashLoad/boss +modules/ diff --git a/templates/Drupal.gitignore b/templates/Drupal.gitignore new file mode 100644 index 0000000..faae808 --- /dev/null +++ b/templates/Drupal.gitignore @@ -0,0 +1,62 @@ +# gitignore template for Drupal 8 projects +# +# earlier versions of Drupal are tracked in `community/PHP/` +# +# follows official upstream conventions: +# https://www.drupal.org/docs/develop/using-composer + +# Ignore configuration files that may contain sensitive information +/web/sites/*/*settings*.php +/web/sites/*/*services*.yml + +# Ignore paths that may contain user-generated content +/web/sites/*/files +/web/sites/*/public +/web/sites/*/private +/web/sites/*/files-public +/web/sites/*/files-private + +# Ignore paths that may contain temporary files +/web/sites/*/translations +/web/sites/*/tmp +/web/sites/*/cache + +# Ignore drupal core (if not versioning drupal sources) +/web/vendor +/web/core +/web/modules/README.txt +/web/profiles/README.txt +/web/sites/development.services.yml +/web/sites/example.settings.local.php +/web/sites/example.sites.php +/web/sites/README.txt +/web/themes/README.txt +/web/.csslintrc +/web/.editorconfig +/web/.eslintignore +/web/.eslintrc.json +/web/.gitattributes +/web/.htaccess +/web/.ht.router.php +/web/autoload.php +/web/composer.json +/web/composer.lock +/web/example.gitignore +/web/index.php +/web/INSTALL.txt +/web/LICENSE.txt +/web/README.txt +/web/robots.txt +/web/update.php +/web/web.config + +# Ignore vendor dependencies and scripts +/vendor +/composer.phar +/composer +/robo.phar +/robo +/drush.phar +/drush +/drupal.phar +/drupal diff --git a/templates/EPiServer.gitignore b/templates/EPiServer.gitignore new file mode 100644 index 0000000..97037de --- /dev/null +++ b/templates/EPiServer.gitignore @@ -0,0 +1,4 @@ +###################### +## EPiServer Files +###################### +*License.config diff --git a/templates/Eagle.gitignore b/templates/Eagle.gitignore new file mode 100644 index 0000000..28f0b97 --- /dev/null +++ b/templates/Eagle.gitignore @@ -0,0 +1,51 @@ +# Ignore list for Eagle, a PCB layout tool + +# Backup files +*.s#? +*.b#? +*.l#? +*.b$? +*.s$? +*.l$? + +# Eagle project file +# It contains a serial number and references to the file structure +# on your computer. +# comment the following line if you want to have your project file included. +eagle.epf + +# Autorouter files +*.pro +*.job + +# CAM files +*.$$$ +*.cmp +*.ly2 +*.l15 +*.sol +*.plc +*.stc +*.sts +*.crc +*.crs + +*.dri +*.drl +*.gpi +*.pls +*.ger +*.xln + +*.drd +*.drd.* + +*.s#* +*.b#* + +*.info + +*.eps + +# file locks introduced since 7.x +*.lck diff --git a/templates/Elisp.gitignore b/templates/Elisp.gitignore new file mode 100644 index 0000000..206569d --- /dev/null +++ b/templates/Elisp.gitignore @@ -0,0 +1,11 @@ +# Compiled +*.elc + +# Packaging +.cask + +# Backup files +*~ + +# Undo-tree save-files +*.~undo-tree diff --git a/templates/Elixir.gitignore b/templates/Elixir.gitignore new file mode 100644 index 0000000..b263cd1 --- /dev/null +++ b/templates/Elixir.gitignore @@ -0,0 +1,10 @@ +/_build +/cover +/deps +/doc +/.fetch +erl_crash.dump +*.ez +*.beam +/config/*.secret.exs +.elixir_ls/ diff --git a/templates/Elm.gitignore b/templates/Elm.gitignore new file mode 100644 index 0000000..8b631e7 --- /dev/null +++ b/templates/Elm.gitignore @@ -0,0 +1,4 @@ +# elm-package generated files +elm-stuff +# elm-repl generated files +repl-temp-* diff --git a/templates/Erlang.gitignore b/templates/Erlang.gitignore new file mode 100644 index 0000000..751a61d --- /dev/null +++ b/templates/Erlang.gitignore @@ -0,0 +1,17 @@ +.eunit +*.o +*.beam +*.plt +erl_crash.dump +.concrete/DEV_MODE + +# rebar 2.x +.rebar +rel/example_project +ebin/*.beam +deps + +# rebar 3 +.rebar3 +_build/ +_checkouts/ diff --git a/templates/ExpressionEngine.gitignore b/templates/ExpressionEngine.gitignore new file mode 100644 index 0000000..314e4df --- /dev/null +++ b/templates/ExpressionEngine.gitignore @@ -0,0 +1,19 @@ +.DS_Store + +# Images +images/avatars/ +images/captchas/ +images/smileys/ +images/member_photos/ +images/signature_attachments/ +images/pm_attachments/ + +# For security do not publish the following files +system/expressionengine/config/database.php +system/expressionengine/config/config.php + +# Caches +sized/ +thumbs/ +_thumbs/ +*/expressionengine/cache/* diff --git a/templates/ExtJs.gitignore b/templates/ExtJs.gitignore new file mode 100644 index 0000000..ab97a8c --- /dev/null +++ b/templates/ExtJs.gitignore @@ -0,0 +1,14 @@ +.architect +bootstrap.css +bootstrap.js +bootstrap.json +bootstrap.jsonp +build/ +classic.json +classic.jsonp +ext/ +modern.json +modern.jsonp +resources/sass/.sass-cache/ +resources/.arch-internal-preview.css +.arch-internal-preview.css diff --git a/templates/Fancy.gitignore b/templates/Fancy.gitignore new file mode 100644 index 0000000..70d6e63 --- /dev/null +++ b/templates/Fancy.gitignore @@ -0,0 +1,2 @@ +*.rbc +*.fyc diff --git a/templates/Finale.gitignore b/templates/Finale.gitignore new file mode 100644 index 0000000..7ef08e0 --- /dev/null +++ b/templates/Finale.gitignore @@ -0,0 +1,13 @@ +*.bak +*.db +*.avi +*.pdf +*.ps +*.mid +*.midi +*.mp3 +*.aif +*.wav +# Some versions of Finale have a bug and randomly save extra copies of +# the music source as " copy.mus" +*copy.mus diff --git a/templates/FlaxEngine.gitignore b/templates/FlaxEngine.gitignore new file mode 100644 index 0000000..b470568 --- /dev/null +++ b/templates/FlaxEngine.gitignore @@ -0,0 +1,45 @@ +# Ignore Flax project files +Binaries/ +Cache/ +Logs/ +Output/ +Screenshots/ +*.HotReload.* + +# Ignore Visual Studio project files (generated locally) +*.csproj +*.sln + +# Ignore thumbnails created by Windows +Thumbs.db + +# Ignore files built by Visual Studio +*.obj +*.exe +*.pdb +*.user +*.aps +*.pch +*.vspscc +*_i.c +*_p.c +*.ncb +*.suo +*.tlb +*.tlh +*.bak +*.cache +*.ilk +*.log +[Bb]in +[Dd]ebug*/ +*.lib +*.sbr +obj/ +[Rr]elease*/ +_ReSharper*/ +[Tt]est[Rr]esult* +.vs/ + +# Ignore Nuget packages folder +packages/ diff --git a/templates/ForceDotCom.gitignore b/templates/ForceDotCom.gitignore new file mode 100644 index 0000000..3933cd4 --- /dev/null +++ b/templates/ForceDotCom.gitignore @@ -0,0 +1,4 @@ +.project +.settings +salesforce.schema +Referenced Packages diff --git a/templates/Fortran.gitignore b/templates/Fortran.gitignore new file mode 100644 index 0000000..5daba98 --- /dev/null +++ b/templates/Fortran.gitignore @@ -0,0 +1 @@ +C++.gitignore \ No newline at end of file diff --git a/templates/FuelPHP.gitignore b/templates/FuelPHP.gitignore new file mode 100644 index 0000000..d69f71f --- /dev/null +++ b/templates/FuelPHP.gitignore @@ -0,0 +1,21 @@ +# the composer package lock file and install directory +# Commit your application's lock file http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file +# You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file +# /composer.lock +/fuel/vendor + +# the fuelphp document +/docs/ + +# you may install these packages with `oil package`. +# http://fuelphp.com/docs/packages/oil/package.html +# /fuel/packages/auth/ +# /fuel/packages/email/ +# /fuel/packages/oil/ +# /fuel/packages/orm/ +# /fuel/packages/parser/ + +# dynamically generated files +/fuel/app/logs/*/*/* +/fuel/app/cache/*/* +/fuel/app/config/crypt.php diff --git a/templates/GWT.gitignore b/templates/GWT.gitignore new file mode 100644 index 0000000..a01e7fc --- /dev/null +++ b/templates/GWT.gitignore @@ -0,0 +1,25 @@ +*.class + +# Package Files # +*.jar +*.war + +# gwt caches and compiled units # +war/gwt_bree/ +gwt-unitCache/ + +# boilerplate generated classes # +.apt_generated/ + +# more caches and things from deploy # +war/WEB-INF/deploy/ +war/WEB-INF/classes/ + +#compilation logs +.gwt/ + +#gwt junit compilation files +www-test/ + +#old GWT (1.5) created this dir +.gwt-tmp/ diff --git a/templates/Gcov.gitignore b/templates/Gcov.gitignore new file mode 100644 index 0000000..a645143 --- /dev/null +++ b/templates/Gcov.gitignore @@ -0,0 +1,5 @@ +# gcc coverage testing tool files + +*.gcno +*.gcda +*.gcov diff --git a/templates/GitBook.gitignore b/templates/GitBook.gitignore new file mode 100644 index 0000000..4cb12d8 --- /dev/null +++ b/templates/GitBook.gitignore @@ -0,0 +1,16 @@ +# Node rules: +## Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +## Dependency directory +## Commenting this out is preferred by some people, see +## https://docs.npmjs.com/misc/faq#should-i-check-my-node_modules-folder-into-git +node_modules + +# Book build output +_book + +# eBook build output +*.epub +*.mobi +*.pdf diff --git a/templates/GitHubPages.gitignore b/templates/GitHubPages.gitignore new file mode 100644 index 0000000..493e69b --- /dev/null +++ b/templates/GitHubPages.gitignore @@ -0,0 +1,18 @@ +# This .gitignore is appropriate for repositories deployed to GitHub Pages and using +# a Gemfile as specified at https://github.com/github/pages-gem#conventional + +# Basic Jekyll gitignores (synchronize to Jekyll.gitignore) +_site/ +.sass-cache/ +.jekyll-cache/ +.jekyll-metadata + +# Additional Ruby/bundler ignore for when you run: bundle install +/vendor + +# Specific ignore for GitHub Pages +# GitHub Pages will always use its own deployed version of pages-gem +# This means GitHub Pages will NOT use your Gemfile.lock and therefore it is +# counterproductive to check this file into the repository. +# Details at https://github.com/github/pages-gem/issues/768 +Gemfile.lock diff --git a/templates/Global/AL.gitignore b/templates/Global/AL.gitignore new file mode 100644 index 0000000..3cdf36b --- /dev/null +++ b/templates/Global/AL.gitignore @@ -0,0 +1,11 @@ +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ +*.app +.snapshots/* diff --git a/templates/Global/Anjuta.gitignore b/templates/Global/Anjuta.gitignore new file mode 100644 index 0000000..20dd42c --- /dev/null +++ b/templates/Global/Anjuta.gitignore @@ -0,0 +1,3 @@ +# Local configuration folder and symbol database +/.anjuta/ +/.anjuta_sym_db.db diff --git a/templates/Global/Ansible.gitignore b/templates/Global/Ansible.gitignore new file mode 100644 index 0000000..a8b42eb --- /dev/null +++ b/templates/Global/Ansible.gitignore @@ -0,0 +1 @@ +*.retry diff --git a/templates/Global/Archives.gitignore b/templates/Global/Archives.gitignore new file mode 100644 index 0000000..8c92521 --- /dev/null +++ b/templates/Global/Archives.gitignore @@ -0,0 +1,34 @@ +# It's better to unpack these files and commit the raw source because +# git has its own built in compression methods. +*.7z +*.jar +*.rar +*.zip +*.gz +*.gzip +*.tgz +*.bzip +*.bzip2 +*.bz2 +*.xz +*.lzma +*.cab +*.xar +*.zst +*.tzst + +# Packing-only formats +*.iso +*.tar + +# Package management formats +*.dmg +*.xpi +*.gem +*.egg +*.deb +*.rpm +*.msi +*.msm +*.msp +*.txz diff --git a/templates/Global/Backup.gitignore b/templates/Global/Backup.gitignore new file mode 100644 index 0000000..825ce52 --- /dev/null +++ b/templates/Global/Backup.gitignore @@ -0,0 +1,5 @@ +*.bak +*.gho +*.ori +*.orig +*.tmp diff --git a/templates/Global/Bazaar.gitignore b/templates/Global/Bazaar.gitignore new file mode 100644 index 0000000..3cbbcbd --- /dev/null +++ b/templates/Global/Bazaar.gitignore @@ -0,0 +1,2 @@ +.bzr/ +.bzrignore diff --git a/templates/Global/BricxCC.gitignore b/templates/Global/BricxCC.gitignore new file mode 100644 index 0000000..c1d16a4 --- /dev/null +++ b/templates/Global/BricxCC.gitignore @@ -0,0 +1,4 @@ +# Bricx Command Center IDE +# http://bricxcc.sourceforge.net +*.bak +*.sym diff --git a/templates/Global/CVS.gitignore b/templates/Global/CVS.gitignore new file mode 100644 index 0000000..1695352 --- /dev/null +++ b/templates/Global/CVS.gitignore @@ -0,0 +1,4 @@ +/CVS/* +**/CVS/* +.cvsignore +*/.cvsignore diff --git a/templates/Global/Calabash.gitignore b/templates/Global/Calabash.gitignore new file mode 100644 index 0000000..8a75b32 --- /dev/null +++ b/templates/Global/Calabash.gitignore @@ -0,0 +1,10 @@ +# Calabash / Cucumber +rerun/ +reports/ +screenshots/ +screenshot*.png +test-servers/ + +# bundler +.bundle +vendor diff --git a/templates/Global/Cloud9.gitignore b/templates/Global/Cloud9.gitignore new file mode 100644 index 0000000..3f4384d --- /dev/null +++ b/templates/Global/Cloud9.gitignore @@ -0,0 +1,3 @@ +# Cloud9 IDE - http://c9.io +.c9revisions +.c9 diff --git a/templates/Global/CodeKit.gitignore b/templates/Global/CodeKit.gitignore new file mode 100644 index 0000000..09b8412 --- /dev/null +++ b/templates/Global/CodeKit.gitignore @@ -0,0 +1,4 @@ +# General CodeKit files to ignore +config.codekit +config.codekit3 +/min diff --git a/templates/Global/DartEditor.gitignore b/templates/Global/DartEditor.gitignore new file mode 100644 index 0000000..948920b --- /dev/null +++ b/templates/Global/DartEditor.gitignore @@ -0,0 +1,2 @@ +.project +.buildlog diff --git a/templates/Global/Diff.gitignore b/templates/Global/Diff.gitignore new file mode 100644 index 0000000..59491b4 --- /dev/null +++ b/templates/Global/Diff.gitignore @@ -0,0 +1,2 @@ +*.patch +*.diff diff --git a/templates/Global/Dreamweaver.gitignore b/templates/Global/Dreamweaver.gitignore new file mode 100644 index 0000000..0621a3d --- /dev/null +++ b/templates/Global/Dreamweaver.gitignore @@ -0,0 +1,7 @@ +# DW Dreamweaver added files +_notes +_compareTemp +configs/ +dwsync.xml +dw_php_codehinting.config +*.mno diff --git a/templates/Global/Dropbox.gitignore b/templates/Global/Dropbox.gitignore new file mode 100644 index 0000000..40f4a46 --- /dev/null +++ b/templates/Global/Dropbox.gitignore @@ -0,0 +1,4 @@ +# Dropbox settings and caches +.dropbox +.dropbox.attr +.dropbox.cache diff --git a/templates/Global/Eclipse.gitignore b/templates/Global/Eclipse.gitignore new file mode 100644 index 0000000..acec74a --- /dev/null +++ b/templates/Global/Eclipse.gitignore @@ -0,0 +1,60 @@ +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.settings/ +.loadpath +.recommenders + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# PyDev specific (Python IDE for Eclipse) +*.pydevproject + +# CDT-specific (C/C++ Development Tooling) +.cproject + +# CDT- autotools +.autotools + +# Java annotation processor (APT) +.factorypath + +# PDT-specific (PHP Development Tools) +.buildpath + +# sbteclipse plugin +.target + +# Tern plugin +.tern-project + +# TeXlipse plugin +.texlipse + +# STS (Spring Tool Suite) +.springBeans + +# Code Recommenders +.recommenders/ + +# Annotation Processing +.apt_generated/ +.apt_generated_test/ + +# Scala IDE specific (Scala & Java development for Eclipse) +.cache-main +.scala_dependencies +.worksheet + +# Uncomment this line if you wish to ignore the project description file. +# Typically, this file would be tracked if it contains build/dependency configurations: +#.project diff --git a/templates/Global/EiffelStudio.gitignore b/templates/Global/EiffelStudio.gitignore new file mode 100644 index 0000000..f41b4f7 --- /dev/null +++ b/templates/Global/EiffelStudio.gitignore @@ -0,0 +1,2 @@ +# The compilation directory +EIFGENs diff --git a/templates/Global/Emacs.gitignore b/templates/Global/Emacs.gitignore new file mode 100644 index 0000000..d40e865 --- /dev/null +++ b/templates/Global/Emacs.gitignore @@ -0,0 +1,49 @@ +# -*- mode: gitignore; -*- +*~ +\#*\# +/.emacs.desktop +/.emacs.desktop.lock +*.elc +auto-save-list +tramp +.\#* + +# Org-mode +.org-id-locations +*_archive + +# flymake-mode +*_flymake.* + +# eshell files +/eshell/history +/eshell/lastdir + +# elpa packages +/elpa/ + +# reftex files +*.rel + +# AUCTeX auto folder +/auto/ + +# cask packages +.cask/ +dist/ + +# Flycheck +flycheck_*.el + +# server auth directory +/server/ + +# projectiles files +.projectile + +# directory configuration +.dir-locals.el + +# network security +/network-security.data + diff --git a/templates/Global/Ensime.gitignore b/templates/Global/Ensime.gitignore new file mode 100644 index 0000000..f2daebb --- /dev/null +++ b/templates/Global/Ensime.gitignore @@ -0,0 +1,4 @@ +# Ensime specific +.ensime +.ensime_cache/ +.ensime_lucene/ diff --git a/templates/Global/Espresso.gitignore b/templates/Global/Espresso.gitignore new file mode 100644 index 0000000..1234530 --- /dev/null +++ b/templates/Global/Espresso.gitignore @@ -0,0 +1 @@ +*.esproj diff --git a/templates/Global/FlexBuilder.gitignore b/templates/Global/FlexBuilder.gitignore new file mode 100644 index 0000000..bbbfb91 --- /dev/null +++ b/templates/Global/FlexBuilder.gitignore @@ -0,0 +1,3 @@ +bin/ +bin-debug/ +bin-release/ diff --git a/templates/Global/GPG.gitignore b/templates/Global/GPG.gitignore new file mode 100644 index 0000000..7740a01 --- /dev/null +++ b/templates/Global/GPG.gitignore @@ -0,0 +1,2 @@ +secring.* + diff --git a/templates/Global/Images.gitignore b/templates/Global/Images.gitignore new file mode 100644 index 0000000..97dcdbe --- /dev/null +++ b/templates/Global/Images.gitignore @@ -0,0 +1,63 @@ +# JPEG +*.jpg +*.jpeg +*.jpe +*.jif +*.jfif +*.jfi + +# JPEG 2000 +*.jp2 +*.j2k +*.jpf +*.jpx +*.jpm +*.mj2 + +# JPEG XR +*.jxr +*.hdp +*.wdp + +# Graphics Interchange Format +*.gif + +# RAW +*.raw + +# Web P +*.webp + +# Portable Network Graphics +*.png + +# Animated Portable Network Graphics +*.apng + +# Multiple-image Network Graphics +*.mng + +# Tagged Image File Format +*.tiff +*.tif + +# Scalable Vector Graphics +*.svg +*.svgz + +# Portable Document Format +*.pdf + +# X BitMap +*.xbm + +# BMP +*.bmp +*.dib + +# ICO +*.ico + +# 3D Images +*.3dm +*.max diff --git a/templates/Global/JDeveloper.gitignore b/templates/Global/JDeveloper.gitignore new file mode 100644 index 0000000..5bba6f3 --- /dev/null +++ b/templates/Global/JDeveloper.gitignore @@ -0,0 +1,13 @@ +# default application storage directory used by the IDE Performance Cache feature +.data/ + +# used for ADF styles caching +temp/ + +# default output directories +classes/ +deploy/ +javadoc/ + +# lock file, a part of Oracle Credential Store Framework +cwallet.sso.lck \ No newline at end of file diff --git a/templates/Global/JEnv.gitignore b/templates/Global/JEnv.gitignore new file mode 100644 index 0000000..d838300 --- /dev/null +++ b/templates/Global/JEnv.gitignore @@ -0,0 +1,5 @@ +# JEnv local Java version configuration file +.java-version + +# Used by previous versions of JEnv +.jenv-version diff --git a/templates/Global/JetBrains.gitignore b/templates/Global/JetBrains.gitignore new file mode 100644 index 0000000..3649d6d --- /dev/null +++ b/templates/Global/JetBrains.gitignore @@ -0,0 +1,77 @@ +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser diff --git a/templates/Global/KDevelop4.gitignore b/templates/Global/KDevelop4.gitignore new file mode 100644 index 0000000..7ac57b1 --- /dev/null +++ b/templates/Global/KDevelop4.gitignore @@ -0,0 +1,2 @@ +*.kdev4 +.kdev4/ diff --git a/templates/Global/Kate.gitignore b/templates/Global/Kate.gitignore new file mode 100644 index 0000000..7ff06ce --- /dev/null +++ b/templates/Global/Kate.gitignore @@ -0,0 +1,3 @@ +# Swap Files # +.*.kate-swp +.swp.* diff --git a/templates/Global/Lazarus.gitignore b/templates/Global/Lazarus.gitignore new file mode 100644 index 0000000..b32943f --- /dev/null +++ b/templates/Global/Lazarus.gitignore @@ -0,0 +1,30 @@ +# Lazarus compiler-generated binaries (safe to delete) +*.exe +*.dll +*.so +*.dylib +*.lrs +*.res +*.compiled +*.dbg +*.ppu +*.o +*.or +*.a + +# Lazarus autogenerated files (duplicated info) +*.rst +*.rsj +*.lrt + +# Lazarus local files (user-specific info) +*.lps + +# Lazarus backups and unit output folders. +# These can be changed by user in Lazarus/project options. +backup/ +*.bak +lib/ + +# Application bundle for Mac OS +*.app/ diff --git a/templates/Global/LibreOffice.gitignore b/templates/Global/LibreOffice.gitignore new file mode 100644 index 0000000..586beac --- /dev/null +++ b/templates/Global/LibreOffice.gitignore @@ -0,0 +1,2 @@ +# LibreOffice locks +.~lock.*# diff --git a/templates/Global/Linux.gitignore b/templates/Global/Linux.gitignore new file mode 100644 index 0000000..b56bf65 --- /dev/null +++ b/templates/Global/Linux.gitignore @@ -0,0 +1,13 @@ +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* diff --git a/templates/Global/LyX.gitignore b/templates/Global/LyX.gitignore new file mode 100644 index 0000000..8efe019 --- /dev/null +++ b/templates/Global/LyX.gitignore @@ -0,0 +1,4 @@ +# Ignore LyX backup and autosave files +# http://www.lyx.org/ +*.lyx~ +*.lyx# diff --git a/templates/Global/MATLAB.gitignore b/templates/Global/MATLAB.gitignore new file mode 100644 index 0000000..01d02dd --- /dev/null +++ b/templates/Global/MATLAB.gitignore @@ -0,0 +1,31 @@ +# Windows default autosave extension +*.asv + +# OSX / *nix default autosave extension +*.m~ + +# Compiled MEX binaries (all platforms) +*.mex* + +# Packaged app and toolbox files +*.mlappinstall +*.mltbx + +# Generated helpsearch folders +helpsearch*/ + +# Simulink code generation folders +slprj/ +sccprj/ + +# Matlab code generation folders +codegen/ + +# Simulink autosave extension +*.autosave + +# Simulink cache files +*.slxc + +# Octave session info +octave-workspace diff --git a/templates/Global/Mercurial.gitignore b/templates/Global/Mercurial.gitignore new file mode 100644 index 0000000..e65d113 --- /dev/null +++ b/templates/Global/Mercurial.gitignore @@ -0,0 +1,6 @@ +.hg/ +.hgignore +.hgsigs +.hgsub +.hgsubstate +.hgtags diff --git a/templates/Global/Metals.gitignore b/templates/Global/Metals.gitignore new file mode 100644 index 0000000..516e7e3 --- /dev/null +++ b/templates/Global/Metals.gitignore @@ -0,0 +1,5 @@ + # Generated Metals (Scala Language Server) files + # Reference: https://scalameta.org/metals/ +.metals/ +.bloop/ +project/metals.sbt diff --git a/templates/Global/MicrosoftOffice.gitignore b/templates/Global/MicrosoftOffice.gitignore new file mode 100644 index 0000000..ddcc9cf --- /dev/null +++ b/templates/Global/MicrosoftOffice.gitignore @@ -0,0 +1,19 @@ +*.tmp + +# Word temporary +~$*.doc* + +# Word Auto Backup File +Backup of *.doc* + +# Excel temporary +~$*.xls* + +# Excel Backup File +*.xlk + +# PowerPoint temporary +~$*.ppt* + +# Visio autosave temporary files +*.~vsd* diff --git a/templates/Global/ModelSim.gitignore b/templates/Global/ModelSim.gitignore new file mode 100644 index 0000000..46592b8 --- /dev/null +++ b/templates/Global/ModelSim.gitignore @@ -0,0 +1,23 @@ +# ignore ModelSim generated files and directories (temp files and so on) +[_@]* + +# ignore compilation output of ModelSim +*.mti +*.dat +*.dbs +*.psm +*.bak +*.cmp +*.jpg +*.html +*.bsf + +# ignore simulation output of ModelSim +wlf* +*.wlf +*.vstf +*.ucdb +cov*/ +transcript* +sc_dpiheader.h +vsim.dbg diff --git a/templates/Global/Momentics.gitignore b/templates/Global/Momentics.gitignore new file mode 100644 index 0000000..b14db2d --- /dev/null +++ b/templates/Global/Momentics.gitignore @@ -0,0 +1,8 @@ +# Built files +x86/ +arm/ +arm-p/ +translations/*.qm + +# IDE settings +.settings/ diff --git a/templates/Global/MonoDevelop.gitignore b/templates/Global/MonoDevelop.gitignore new file mode 100644 index 0000000..ef38d06 --- /dev/null +++ b/templates/Global/MonoDevelop.gitignore @@ -0,0 +1,8 @@ +#User Specific +*.userprefs +*.usertasks + +#Mono Project Files +*.pidb +*.resources +test-results/ diff --git a/templates/Global/NetBeans.gitignore b/templates/Global/NetBeans.gitignore new file mode 100644 index 0000000..4511287 --- /dev/null +++ b/templates/Global/NetBeans.gitignore @@ -0,0 +1,8 @@ +**/nbproject/private/ +**/nbproject/Makefile-*.mk +**/nbproject/Package-*.bash +build/ +nbbuild/ +dist/ +nbdist/ +.nb-gradle/ diff --git a/templates/Global/Ninja.gitignore b/templates/Global/Ninja.gitignore new file mode 100644 index 0000000..50e58f2 --- /dev/null +++ b/templates/Global/Ninja.gitignore @@ -0,0 +1,2 @@ +.ninja_deps +.ninja_log diff --git a/templates/Global/NotepadPP.gitignore b/templates/Global/NotepadPP.gitignore new file mode 100644 index 0000000..f858518 --- /dev/null +++ b/templates/Global/NotepadPP.gitignore @@ -0,0 +1,2 @@ +# Notepad++ backups # +*.bak diff --git a/templates/Global/Octave.gitignore b/templates/Global/Octave.gitignore new file mode 100644 index 0000000..b1d6054 --- /dev/null +++ b/templates/Global/Octave.gitignore @@ -0,0 +1 @@ +MATLAB.gitignore \ No newline at end of file diff --git a/templates/Global/Otto.gitignore b/templates/Global/Otto.gitignore new file mode 100644 index 0000000..5aa263f --- /dev/null +++ b/templates/Global/Otto.gitignore @@ -0,0 +1 @@ +.otto/ diff --git a/templates/Global/PSoCCreator.gitignore b/templates/Global/PSoCCreator.gitignore new file mode 100644 index 0000000..15ae040 --- /dev/null +++ b/templates/Global/PSoCCreator.gitignore @@ -0,0 +1,18 @@ +# Project Settings +*.cywrk.* +*.cyprj.* + +# Generated Assets and Resources +Debug/ +Release/ +Export/ +*/codegentemp +*/Generated_Source +*_datasheet.pdf +*_timing.html +*.cycdx +*.cyfit +*.rpt +*.svd +*.log +*.zip diff --git a/templates/Global/Patch.gitignore b/templates/Global/Patch.gitignore new file mode 100644 index 0000000..6ffab9a --- /dev/null +++ b/templates/Global/Patch.gitignore @@ -0,0 +1,2 @@ +*.orig +*.rej diff --git a/templates/Global/PuTTY.gitignore b/templates/Global/PuTTY.gitignore new file mode 100644 index 0000000..c37466b --- /dev/null +++ b/templates/Global/PuTTY.gitignore @@ -0,0 +1,2 @@ +# Private key +*.ppk diff --git a/templates/Global/README.md b/templates/Global/README.md new file mode 100644 index 0000000..6e57d87 --- /dev/null +++ b/templates/Global/README.md @@ -0,0 +1,10 @@ +## Globally Useful gitignores + +This directory contains globally useful gitignores, +e.g. OS-specific and editor specific. + +For more on global gitignores: + + +And a good blog post about 'em: + diff --git a/templates/Global/Redcar.gitignore b/templates/Global/Redcar.gitignore new file mode 100644 index 0000000..b4a9d1d --- /dev/null +++ b/templates/Global/Redcar.gitignore @@ -0,0 +1 @@ +.redcar diff --git a/templates/Global/Redis.gitignore b/templates/Global/Redis.gitignore new file mode 100644 index 0000000..57c1c23 --- /dev/null +++ b/templates/Global/Redis.gitignore @@ -0,0 +1,3 @@ +# Ignore redis binary dump (dump.rdb) files + +*.rdb diff --git a/templates/Global/SBT.gitignore b/templates/Global/SBT.gitignore new file mode 100644 index 0000000..5ed6acb --- /dev/null +++ b/templates/Global/SBT.gitignore @@ -0,0 +1,12 @@ +# Simple Build Tool +# http://www.scala-sbt.org/release/docs/Getting-Started/Directories.html#configuring-version-control + +dist/* +target/ +lib_managed/ +src_managed/ +project/boot/ +project/plugins/project/ +.history +.cache +.lib/ diff --git a/templates/Global/SVN.gitignore b/templates/Global/SVN.gitignore new file mode 100644 index 0000000..1b53ace --- /dev/null +++ b/templates/Global/SVN.gitignore @@ -0,0 +1 @@ +.svn/ diff --git a/templates/Global/SlickEdit.gitignore b/templates/Global/SlickEdit.gitignore new file mode 100644 index 0000000..f30b8da --- /dev/null +++ b/templates/Global/SlickEdit.gitignore @@ -0,0 +1,11 @@ +# SlickEdit workspace and project files are ignored by default because +# typically they are considered to be developer-specific and not part of a +# project. +*.vpw +*.vpj + +# SlickEdit workspace history and tag files always contain user-specific +# data so they should not be stored in a repository. +*.vpwhistu +*.vpwhist +*.vtg diff --git a/templates/Global/Stata.gitignore b/templates/Global/Stata.gitignore new file mode 100644 index 0000000..07997bb --- /dev/null +++ b/templates/Global/Stata.gitignore @@ -0,0 +1,24 @@ +# .gitignore file for git projects containing Stata files +# Commercial statistical software: http://www.stata.com + +# Stata dataset and output files +*.dta +*.gph +*.log +*.smcl +*.stpr +*.stsem + +# Graphic export files from Stata +# Stata command graph export: http://www.stata.com/manuals14/g-2graphexport.pdf +# +# You may add graphic export files to your .gitignore. However you should be +# aware that this will exclude all image files from this main directory +# and subdirectories. +# *.ps +# *.eps +# *.wmf +# *.emf +# *.pdf +# *.png +# *.tif diff --git a/templates/Global/SublimeText.gitignore b/templates/Global/SublimeText.gitignore new file mode 100644 index 0000000..fdf0abb --- /dev/null +++ b/templates/Global/SublimeText.gitignore @@ -0,0 +1,31 @@ +# Cache files for Sublime Text +*.tmlanguage.cache +*.tmPreferences.cache +*.stTheme.cache + +# Workspace files are user-specific +*.sublime-workspace + +# Project files should be checked into the repository, unless a significant +# proportion of contributors will probably not be using Sublime Text +# *.sublime-project + +# SFTP configuration file +sftp-config.json +sftp-config-alt*.json + +# Package control specific files +Package Control.last-run +Package Control.ca-list +Package Control.ca-bundle +Package Control.system-ca-bundle +Package Control.cache/ +Package Control.ca-certs/ +Package Control.merged-ca-bundle +Package Control.user-ca-bundle +oscrypto-ca-bundle.crt +bh_unicode_properties.cache + +# Sublime-github package stores a github token in this file +# https://packagecontrol.io/packages/sublime-github +GitHub.sublime-settings diff --git a/templates/Global/Syncthing.gitignore b/templates/Global/Syncthing.gitignore new file mode 100644 index 0000000..e18c9a8 --- /dev/null +++ b/templates/Global/Syncthing.gitignore @@ -0,0 +1,2 @@ +# Syncthing caches +.stversions diff --git a/templates/Global/SynopsysVCS.gitignore b/templates/Global/SynopsysVCS.gitignore new file mode 100644 index 0000000..ad751f6 --- /dev/null +++ b/templates/Global/SynopsysVCS.gitignore @@ -0,0 +1,36 @@ +# Waveform formats +*.vcd +*.vpd +*.evcd +*.fsdb + +# Default name of the simulation executable. A different name can be +# specified with this switch (the associated daidir database name is +# also taken from here): -o / +simv + +# Generated for Verilog and VHDL top configs +simv.daidir/ +simv.db.dir/ + +# Infrastructure necessary to co-simulate SystemC models with +# Verilog/VHDL models. An alternate directory may be specified with this +# switch: -Mdir= +csrc/ + +# Log file - the following switch allows to specify the file that will be +# used to write all messages from simulation: -l +*.log + +# Coverage results (generated with urg) and database location. The +# following switch can also be used: urg -dir .vdb +simv.vdb/ +urgReport/ + +# DVE and UCLI related files. +DVEfiles/ +ucli.key + +# When the design is elaborated for DirectC, the following file is created +# with declarations for C/C++ functions. +vc_hdrs.h diff --git a/templates/Global/Tags.gitignore b/templates/Global/Tags.gitignore new file mode 100644 index 0000000..91927af --- /dev/null +++ b/templates/Global/Tags.gitignore @@ -0,0 +1,17 @@ +# Ignore tags created by etags, ctags, gtags (GNU global) and cscope +TAGS +.TAGS +!TAGS/ +tags +.tags +!tags/ +gtags.files +GTAGS +GRTAGS +GPATH +GSYMS +cscope.files +cscope.out +cscope.in.out +cscope.po.out + diff --git a/templates/Global/TextMate.gitignore b/templates/Global/TextMate.gitignore new file mode 100644 index 0000000..41e8d07 --- /dev/null +++ b/templates/Global/TextMate.gitignore @@ -0,0 +1,3 @@ +*.tmproj +*.tmproject +tmtags diff --git a/templates/Global/TortoiseGit.gitignore b/templates/Global/TortoiseGit.gitignore new file mode 100644 index 0000000..db89590 --- /dev/null +++ b/templates/Global/TortoiseGit.gitignore @@ -0,0 +1,2 @@ +# Project-level settings +/.tgitconfig diff --git a/templates/Global/Vagrant.gitignore b/templates/Global/Vagrant.gitignore new file mode 100644 index 0000000..a8e2345 --- /dev/null +++ b/templates/Global/Vagrant.gitignore @@ -0,0 +1,5 @@ +# General +.vagrant/ + +# Log files (if you are creating logs in debug mode, uncomment this) +# *.log diff --git a/templates/Global/Vim.gitignore b/templates/Global/Vim.gitignore new file mode 100644 index 0000000..19fa632 --- /dev/null +++ b/templates/Global/Vim.gitignore @@ -0,0 +1,19 @@ +# Swap +[._]*.s[a-v][a-z] +!*.svg # comment out if you don't need vector files +[._]*.sw[a-p] +[._]s[a-rt-v][a-z] +[._]ss[a-gi-z] +[._]sw[a-p] + +# Session +Session.vim +Sessionx.vim + +# Temporary +.netrwhist +*~ +# Auto-generated tag files +tags +# Persistent undo +[._]*.un~ diff --git a/templates/Global/VirtualEnv.gitignore b/templates/Global/VirtualEnv.gitignore new file mode 100644 index 0000000..b2c22f2 --- /dev/null +++ b/templates/Global/VirtualEnv.gitignore @@ -0,0 +1,12 @@ +# Virtualenv +# http://iamzed.com/2009/05/07/a-primer-on-virtualenv/ +.Python +[Bb]in +[Ii]nclude +[Ll]ib +[Ll]ib64 +[Ll]ocal +[Ss]cripts +pyvenv.cfg +.venv +pip-selfcheck.json diff --git a/templates/Global/Virtuoso.gitignore b/templates/Global/Virtuoso.gitignore new file mode 100644 index 0000000..2de0367 --- /dev/null +++ b/templates/Global/Virtuoso.gitignore @@ -0,0 +1,18 @@ +# Gitignore for Cadence Virtuoso +################################################################ + +# Log files +*.log +panic*.log.* + +# OpenAccess database lock files +*.cdslck* + +# Run directories for layout vs. schematic and design rule check +lvsRunDir/* +drcRunDir/* + +# Abstract generation tool +abstract.log* +abstract.record* + diff --git a/templates/Global/VisualStudioCode.gitignore b/templates/Global/VisualStudioCode.gitignore new file mode 100644 index 0000000..45fce1d --- /dev/null +++ b/templates/Global/VisualStudioCode.gitignore @@ -0,0 +1,12 @@ +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets + +# Local History for Visual Studio Code +.history/ + +# Built Visual Studio Code Extensions +*.vsix diff --git a/templates/Global/WebMethods.gitignore b/templates/Global/WebMethods.gitignore new file mode 100644 index 0000000..b383c25 --- /dev/null +++ b/templates/Global/WebMethods.gitignore @@ -0,0 +1,14 @@ +**/IntegrationServer/datastore/ +**/IntegrationServer/db/ +**/IntegrationServer/DocumentStore/ +**/IntegrationServer/lib/ +**/IntegrationServer/logs/ +**/IntegrationServer/replicate/ +**/IntegrationServer/sdk/ +**/IntegrationServer/support/ +**/IntegrationServer/update/ +**/IntegrationServer/userFtpRoot/ +**/IntegrationServer/web/ +**/IntegrationServer/WmRepository4/ +**/IntegrationServer/XAStore/ +**/IntegrationServer/packages/Wm*/ diff --git a/templates/Global/Windows.gitignore b/templates/Global/Windows.gitignore new file mode 100644 index 0000000..84bffec --- /dev/null +++ b/templates/Global/Windows.gitignore @@ -0,0 +1,24 @@ +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk diff --git a/templates/Global/Xcode.gitignore b/templates/Global/Xcode.gitignore new file mode 100644 index 0000000..5073505 --- /dev/null +++ b/templates/Global/Xcode.gitignore @@ -0,0 +1,2 @@ +## User settings +xcuserdata/ diff --git a/templates/Global/XilinxISE.gitignore b/templates/Global/XilinxISE.gitignore new file mode 100644 index 0000000..4475f84 --- /dev/null +++ b/templates/Global/XilinxISE.gitignore @@ -0,0 +1,67 @@ +# intermediate build files +*.bgn +*.bit +*.bld +*.cmd_log +*.drc +*.ll +*.lso +*.msd +*.msk +*.ncd +*.ngc +*.ngd +*.ngr +*.pad +*.par +*.pcf +*.prj +*.ptwx +*.rbb +*.rbd +*.stx +*.syr +*.twr +*.twx +*.unroutes +*.ut +*.xpi +*.xst +*_bitgen.xwbt +*_envsettings.html +*_map.map +*_map.mrp +*_map.ngm +*_map.xrpt +*_ngdbuild.xrpt +*_pad.csv +*_pad.txt +*_par.xrpt +*_summary.html +*_summary.xml +*_usage.xml +*_xst.xrpt + +# iMPACT generated files +_impactbatch.log +impact.xsl +impact_impact.xwbt +ise_impact.cmd +webtalk_impact.xml + +# Core Generator generated files +xaw2verilog.log + +# project-wide generated files +*.gise +par_usage_statistics.html +usage_statistics_webtalk.html +webtalk.log +webtalk_pn.xml + +# generated folders +iseconfig/ +xlnx_auto_0_xdb/ +xst/ +_ngo/ +_xmsgs/ diff --git a/templates/Global/macOS.gitignore b/templates/Global/macOS.gitignore new file mode 100644 index 0000000..135767f --- /dev/null +++ b/templates/Global/macOS.gitignore @@ -0,0 +1,26 @@ +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk diff --git a/templates/Go.gitignore b/templates/Go.gitignore new file mode 100644 index 0000000..6f72f89 --- /dev/null +++ b/templates/Go.gitignore @@ -0,0 +1,25 @@ +# If you prefer the allow list template instead of the deny list, see community template: +# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore +# +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Dependency directories (remove the comment below to include it) +# vendor/ + +# Go workspace file +go.work +go.work.sum + +# env file +.env diff --git a/templates/Godot.gitignore b/templates/Godot.gitignore new file mode 100644 index 0000000..d9aac21 --- /dev/null +++ b/templates/Godot.gitignore @@ -0,0 +1,15 @@ +# Godot 4+ specific ignores +.godot/ + +# Godot-specific ignores +.import/ +export.cfg +export_presets.cfg + +# Imported translations (automatically generated from CSV files) +*.translation + +# Mono-specific ignores +.mono/ +data_*/ +mono_crash.*.json diff --git a/templates/Gradle.gitignore b/templates/Gradle.gitignore new file mode 100644 index 0000000..a5b1113 --- /dev/null +++ b/templates/Gradle.gitignore @@ -0,0 +1,21 @@ +.gradle +**/build/ +!src/**/build/ + +# Ignore Gradle GUI config +gradle-app.setting + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar + +# Avoid ignore Gradle wrappper properties +!gradle-wrapper.properties + +# Cache of project +.gradletasknamecache + +# Eclipse Gradle plugin generated files +# Eclipse Core +.project +# JDT-specific (Eclipse Java Development Tools) +.classpath diff --git a/templates/Grails.gitignore b/templates/Grails.gitignore new file mode 100644 index 0000000..9185f14 --- /dev/null +++ b/templates/Grails.gitignore @@ -0,0 +1,33 @@ +# .gitignore for Grails 1.2 and 1.3 +# Although this should work for most versions of grails, it is +# suggested that you use the "grails integrate-with --git" command +# to generate your .gitignore file. + +# web application files +/web-app/WEB-INF/classes + +# default HSQL database files for production mode +/prodDb.* + +# general HSQL database files +*Db.properties +*Db.script + +# logs +/stacktrace.log +/test/reports +/logs + +# project release file +/*.war + +# plugin release files +/*.zip +/plugin.xml + +# older plugin install locations +/plugins +/web-app/plugins + +# "temporary" build files +/target diff --git a/templates/Haskell.gitignore b/templates/Haskell.gitignore new file mode 100644 index 0000000..4c9e245 --- /dev/null +++ b/templates/Haskell.gitignore @@ -0,0 +1,23 @@ +dist +dist-* +cabal-dev +*.o +*.hi +*.hie +*.chi +*.chs.h +*.dyn_o +*.dyn_hi +.hpc +.hsenv +.cabal-sandbox/ +cabal.sandbox.config +*.prof +*.aux +*.hp +*.eventlog +.stack-work/ +cabal.project.local +cabal.project.local~ +.HTF/ +.ghc.environment.* diff --git a/templates/IAR.gitignore b/templates/IAR.gitignore new file mode 100644 index 0000000..e8938b3 --- /dev/null +++ b/templates/IAR.gitignore @@ -0,0 +1,47 @@ +# Compiled binaries +*.o +*.bin +*.elf +*.hex +*.map +*.out +*.obj + +# Trash +*.bak +thumbs.db +*.~* + +# IAR Settings +**/settings/*.crun +**/settings/*.dbgdt +**/settings/*.cspy +**/settings/*.cspy.* +**/settings/*.xcl +**/settings/*.dni +**/settings/*.wsdt +**/settings/*.wspos + +# IAR Debug Exe +**/Exe/*.sim + +# IAR Debug Obj +**/Obj/*.pbd +**/Obj/*.pbd.* +**/Obj/*.pbi +**/Obj/*.pbi.* + +# IAR project "Debug" directory +Debug/ + +# IAR project "Release" directory +Release/ + +# IAR project settings directory +settings/ + +# IAR backup files +Backup* + +# IAR .dep files +*.dep \ No newline at end of file diff --git a/templates/IGORPro.gitignore b/templates/IGORPro.gitignore new file mode 100644 index 0000000..c62be65 --- /dev/null +++ b/templates/IGORPro.gitignore @@ -0,0 +1,5 @@ +# Avoid including Experiment files: they can be created and edited locally to test the ipf files +*.pxp +*.pxt +*.uxp +*.uxt diff --git a/templates/Idris.gitignore b/templates/Idris.gitignore new file mode 100644 index 0000000..0f4e72c --- /dev/null +++ b/templates/Idris.gitignore @@ -0,0 +1,7 @@ +# Idris 2 +*.ttc +*.ttm + +# Idris 1 +*.ibc +*.o diff --git a/templates/JBoss.gitignore b/templates/JBoss.gitignore new file mode 100644 index 0000000..75d1731 --- /dev/null +++ b/templates/JBoss.gitignore @@ -0,0 +1,19 @@ +jboss/server/all/deploy/project.ext +jboss/server/default/deploy/project.ext +jboss/server/minimal/deploy/project.ext +jboss/server/all/log/*.log +jboss/server/all/tmp/**/* +jboss/server/all/data/**/* +jboss/server/all/work/**/* +jboss/server/default/log/*.log +jboss/server/default/tmp/**/* +jboss/server/default/data/**/* +jboss/server/default/work/**/* +jboss/server/minimal/log/*.log +jboss/server/minimal/tmp/**/* +jboss/server/minimal/data/**/* +jboss/server/minimal/work/**/* + +# deployed package files # + +*.DEPLOYED diff --git a/templates/JENKINS_HOME.gitignore b/templates/JENKINS_HOME.gitignore new file mode 100644 index 0000000..2516c09 --- /dev/null +++ b/templates/JENKINS_HOME.gitignore @@ -0,0 +1,50 @@ +# Learn more about Jenkins and JENKINS_HOME directory for which this file is +# intended. +# +# http://jenkins-ci.org/ +# https://wiki.jenkins-ci.org/display/JENKINS/Administering+Jenkins +# +# Note: secret.key is purposefully not tracked by git. This should be backed up +# separately because configs may contain secrets which were encrypted using the +# secret.key. To back up secrets use 'tar -czf /tmp/secrets.tgz secret*' and +# save the file separate from your repository. If you want secrets backed up +# with configuration, then see the bottom of this file for an example. + +# Ignore all JENKINS_HOME except jobs directory, root xml config, and +# .gitignore file. +/* +!/jobs +!/.gitignore +!/*.xml + +# Ignore all files in jobs subdirectories except for folders. +# Note: git doesn't track folders, only file content. +jobs/** +!jobs/**/ + +# Uncomment the following line to save next build numbers with config. + +#!jobs/**/nextBuildNumber + +# For performance reasons, we want to ignore builds in Jenkins jobs because it +# contains many tiny files on large installations. This can impact git +# performance when running even basic commands like 'git status'. +builds +indexing + +# Exclude only config.xml files in repository subdirectories. +!config.xml + +# Don't track workspaces (when users build on the master). +jobs/**/*workspace + +# Security warning: If secrets are included with your configuration, then an +# adversary will be able to decrypt all encrypted secrets within Jenkins +# config. Including secrets is a bad practice, but the example is included in +# case someone still wants it for convenience. Uncomment the following line to +# include secrets for decryption with repository configuration in Git. + +#!/secret* + +# As a result, only Jenkins settings and job config.xml files in JENKINS_HOME +# will be tracked by git. diff --git a/templates/Java.gitignore b/templates/Java.gitignore new file mode 100644 index 0000000..524f096 --- /dev/null +++ b/templates/Java.gitignore @@ -0,0 +1,24 @@ +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* +replay_pid* diff --git a/templates/Jekyll.gitignore b/templates/Jekyll.gitignore new file mode 100644 index 0000000..74a9223 --- /dev/null +++ b/templates/Jekyll.gitignore @@ -0,0 +1,7 @@ +_site/ +.sass-cache/ +.jekyll-cache/ +.jekyll-metadata +# Ignore folders generated by Bundler +.bundle/ +vendor/ diff --git a/templates/Joomla.gitignore b/templates/Joomla.gitignore new file mode 100644 index 0000000..41a9ba4 --- /dev/null +++ b/templates/Joomla.gitignore @@ -0,0 +1,705 @@ +/.htaccess +/administrator/cache/* +/administrator/components/com_actionlogs/* +/administrator/components/com_admin/* +/administrator/components/com_ajax/* +/administrator/components/com_associations/* +/administrator/components/com_banners/* +/administrator/components/com_cache/* +/administrator/components/com_categories/* +/administrator/components/com_checkin/* +/administrator/components/com_config/* +/administrator/components/com_contact/* +/administrator/components/com_content/* +/administrator/components/com_contenthistory/* +/administrator/components/com_cpanel/* +/administrator/components/com_fields/* +/administrator/components/com_finder/* +/administrator/components/com_installer/* +/administrator/components/com_joomlaupdate/* +/administrator/components/com_languages/* +/administrator/components/com_login/* +/administrator/components/com_media/* +/administrator/components/com_menus/* +/administrator/components/com_messages/* +/administrator/components/com_modules/* +/administrator/components/com_newsfeeds/* +/administrator/components/com_plugins/* +/administrator/components/com_postinstall/* +/administrator/components/com_privacy/* +/administrator/components/com_redirect/* +/administrator/components/com_search/* +/administrator/components/com_tags/* +/administrator/components/com_templates/* +/administrator/components/com_users/* +/administrator/help/* +/administrator/includes/* +/administrator/index.php +/administrator/language/en-GB/en-GB.com_actionlogs.ini +/administrator/language/en-GB/en-GB.com_actionlogs.sys.ini +/administrator/language/en-GB/en-GB.com_admin.ini +/administrator/language/en-GB/en-GB.com_admin.sys.ini +/administrator/language/en-GB/en-GB.com_ajax.ini +/administrator/language/en-GB/en-GB.com_ajax.sys.ini +/administrator/language/en-GB/en-GB.com_associations.ini +/administrator/language/en-GB/en-GB.com_associations.sys.ini +/administrator/language/en-GB/en-GB.com_banners.ini +/administrator/language/en-GB/en-GB.com_banners.sys.ini +/administrator/language/en-GB/en-GB.com_cache.ini +/administrator/language/en-GB/en-GB.com_cache.sys.ini +/administrator/language/en-GB/en-GB.com_categories.ini +/administrator/language/en-GB/en-GB.com_categories.sys.ini +/administrator/language/en-GB/en-GB.com_checkin.ini +/administrator/language/en-GB/en-GB.com_checkin.sys.ini +/administrator/language/en-GB/en-GB.com_config.ini +/administrator/language/en-GB/en-GB.com_config.sys.ini +/administrator/language/en-GB/en-GB.com_contact.ini +/administrator/language/en-GB/en-GB.com_contact.sys.ini +/administrator/language/en-GB/en-GB.com_content.ini +/administrator/language/en-GB/en-GB.com_content.sys.ini +/administrator/language/en-GB/en-GB.com_contenthistory.ini +/administrator/language/en-GB/en-GB.com_contenthistory.sys.ini +/administrator/language/en-GB/en-GB.com_cpanel.ini +/administrator/language/en-GB/en-GB.com_cpanel.sys.ini +/administrator/language/en-GB/en-GB.com_fields.ini +/administrator/language/en-GB/en-GB.com_fields.sys.ini +/administrator/language/en-GB/en-GB.com_finder.ini +/administrator/language/en-GB/en-GB.com_finder.sys.ini +/administrator/language/en-GB/en-GB.com_installer.ini +/administrator/language/en-GB/en-GB.com_installer.sys.ini +/administrator/language/en-GB/en-GB.com_joomlaupdate.ini +/administrator/language/en-GB/en-GB.com_joomlaupdate.sys.ini +/administrator/language/en-GB/en-GB.com_languages.ini +/administrator/language/en-GB/en-GB.com_languages.sys.ini +/administrator/language/en-GB/en-GB.com_login.ini +/administrator/language/en-GB/en-GB.com_login.sys.ini +/administrator/language/en-GB/en-GB.com_mailto.sys.ini +/administrator/language/en-GB/en-GB.com_media.ini +/administrator/language/en-GB/en-GB.com_media.sys.ini +/administrator/language/en-GB/en-GB.com_menus.ini +/administrator/language/en-GB/en-GB.com_menus.sys.ini +/administrator/language/en-GB/en-GB.com_messages.ini +/administrator/language/en-GB/en-GB.com_messages.sys.ini +/administrator/language/en-GB/en-GB.com_modules.ini +/administrator/language/en-GB/en-GB.com_modules.sys.ini +/administrator/language/en-GB/en-GB.com_newsfeeds.ini +/administrator/language/en-GB/en-GB.com_newsfeeds.sys.ini +/administrator/language/en-GB/en-GB.com_plugins.ini +/administrator/language/en-GB/en-GB.com_plugins.sys.ini +/administrator/language/en-GB/en-GB.com_postinstall.ini +/administrator/language/en-GB/en-GB.com_postinstall.sys.ini +/administrator/language/en-GB/en-GB.com_privacy.ini +/administrator/language/en-GB/en-GB.com_privacy.sys.ini +/administrator/language/en-GB/en-GB.com_redirect.ini +/administrator/language/en-GB/en-GB.com_redirect.sys.ini +/administrator/language/en-GB/en-GB.com_search.ini +/administrator/language/en-GB/en-GB.com_search.sys.ini +/administrator/language/en-GB/en-GB.com_tags.ini +/administrator/language/en-GB/en-GB.com_tags.sys.ini +/administrator/language/en-GB/en-GB.com_templates.ini +/administrator/language/en-GB/en-GB.com_templates.sys.ini +/administrator/language/en-GB/en-GB.com_users.ini +/administrator/language/en-GB/en-GB.com_users.sys.ini +/administrator/language/en-GB/en-GB.com_weblinks.ini +/administrator/language/en-GB/en-GB.com_weblinks.sys.ini +/administrator/language/en-GB/en-GB.com_wrapper.ini +/administrator/language/en-GB/en-GB.com_wrapper.sys.ini +/administrator/language/en-GB/en-GB.ini +/administrator/language/en-GB/en-GB.lib_joomla.ini +/administrator/language/en-GB/en-GB.localise.php +/administrator/language/en-GB/en-GB.mod_custom.ini +/administrator/language/en-GB/en-GB.mod_custom.sys.ini +/administrator/language/en-GB/en-GB.mod_feed.ini +/administrator/language/en-GB/en-GB.mod_feed.sys.ini +/administrator/language/en-GB/en-GB.mod_latest.ini +/administrator/language/en-GB/en-GB.mod_latest.sys.ini +/administrator/language/en-GB/en-GB.mod_latestactions.ini +/administrator/language/en-GB/en-GB.mod_latestactions.sys.ini +/administrator/language/en-GB/en-GB.mod_logged.ini +/administrator/language/en-GB/en-GB.mod_logged.sys.ini +/administrator/language/en-GB/en-GB.mod_login.ini +/administrator/language/en-GB/en-GB.mod_login.sys.ini +/administrator/language/en-GB/en-GB.mod_menu.ini +/administrator/language/en-GB/en-GB.mod_menu.sys.ini +/administrator/language/en-GB/en-GB.mod_multilangstatus.ini +/administrator/language/en-GB/en-GB.mod_multilangstatus.sys.ini +/administrator/language/en-GB/en-GB.mod_online.ini +/administrator/language/en-GB/en-GB.mod_online.sys.ini +/administrator/language/en-GB/en-GB.mod_popular.ini +/administrator/language/en-GB/en-GB.mod_popular.sys.ini +/administrator/language/en-GB/en-GB.mod_privacy_dashboard.ini +/administrator/language/en-GB/en-GB.mod_privacy_dashboard.sys.ini +/administrator/language/en-GB/en-GB.mod_quickicon.ini +/administrator/language/en-GB/en-GB.mod_quickicon.sys.ini +/administrator/language/en-GB/en-GB.mod_sampledata.ini +/administrator/language/en-GB/en-GB.mod_sampledata.sys.ini +/administrator/language/en-GB/en-GB.mod_stats_admin.ini +/administrator/language/en-GB/en-GB.mod_stats_admin.sys.ini +/administrator/language/en-GB/en-GB.mod_status.ini +/administrator/language/en-GB/en-GB.mod_status.sys.ini +/administrator/language/en-GB/en-GB.mod_submenu.ini +/administrator/language/en-GB/en-GB.mod_submenu.sys.ini +/administrator/language/en-GB/en-GB.mod_title.ini +/administrator/language/en-GB/en-GB.mod_title.sys.ini +/administrator/language/en-GB/en-GB.mod_toolbar.ini +/administrator/language/en-GB/en-GB.mod_toolbar.sys.ini +/administrator/language/en-GB/en-GB.mod_unread.ini +/administrator/language/en-GB/en-GB.mod_unread.sys.ini +/administrator/language/en-GB/en-GB.mod_version.ini +/administrator/language/en-GB/en-GB.mod_version.sys.ini +/administrator/language/en-GB/en-GB.plg_actionlog_joomla.ini +/administrator/language/en-GB/en-GB.plg_actionlog_joomla.sys.ini +/administrator/language/en-GB/en-GB.plg_authentication_cookie.ini +/administrator/language/en-GB/en-GB.plg_authentication_cookie.sys.ini +/administrator/language/en-GB/en-GB.plg_authentication_example.ini +/administrator/language/en-GB/en-GB.plg_authentication_example.sys.ini +/administrator/language/en-GB/en-GB.plg_authentication_gmail.ini +/administrator/language/en-GB/en-GB.plg_authentication_gmail.sys.ini +/administrator/language/en-GB/en-GB.plg_authentication_joomla.ini +/administrator/language/en-GB/en-GB.plg_authentication_joomla.sys.ini +/administrator/language/en-GB/en-GB.plg_authentication_ldap.ini +/administrator/language/en-GB/en-GB.plg_authentication_ldap.sys.ini +/administrator/language/en-GB/en-GB.plg_captcha_recaptcha.ini +/administrator/language/en-GB/en-GB.plg_captcha_recaptcha.sys.ini +/administrator/language/en-GB/en-GB.plg_captcha_recaptcha_invisible.ini +/administrator/language/en-GB/en-GB.plg_captcha_recaptcha_invisible.sys.ini +/administrator/language/en-GB/en-GB.plg_content_confirmconsent.ini +/administrator/language/en-GB/en-GB.plg_content_confirmconsent.sys.ini +/administrator/language/en-GB/en-GB.plg_content_contact.ini +/administrator/language/en-GB/en-GB.plg_content_contact.sys.ini +/administrator/language/en-GB/en-GB.plg_content_emailcloak.ini +/administrator/language/en-GB/en-GB.plg_content_emailcloak.sys.ini +/administrator/language/en-GB/en-GB.plg_content_fields.ini +/administrator/language/en-GB/en-GB.plg_content_fields.sys.ini +/administrator/language/en-GB/en-GB.plg_content_finder.ini +/administrator/language/en-GB/en-GB.plg_content_finder.sys.ini +/administrator/language/en-GB/en-GB.plg_content_geshi.ini +/administrator/language/en-GB/en-GB.plg_content_geshi.sys.ini +/administrator/language/en-GB/en-GB.plg_content_joomla.ini +/administrator/language/en-GB/en-GB.plg_content_joomla.sys.ini +/administrator/language/en-GB/en-GB.plg_content_loadmodule.ini +/administrator/language/en-GB/en-GB.plg_content_loadmodule.sys.ini +/administrator/language/en-GB/en-GB.plg_content_pagebreak.ini +/administrator/language/en-GB/en-GB.plg_content_pagebreak.sys.ini +/administrator/language/en-GB/en-GB.plg_content_pagenavigation.ini +/administrator/language/en-GB/en-GB.plg_content_pagenavigation.sys.ini +/administrator/language/en-GB/en-GB.plg_content_vote.ini +/administrator/language/en-GB/en-GB.plg_content_vote.sys.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_article.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_article.sys.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_contact.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_contact.sys.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_fields.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_fields.sys.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_image.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_image.sys.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_menu.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_menu.sys.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_module.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_module.sys.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_pagebreak.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_pagebreak.sys.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_readmore.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_readmore.sys.ini +/administrator/language/en-GB/en-GB.plg_editors_codemirror.ini +/administrator/language/en-GB/en-GB.plg_editors_codemirror.sys.ini +/administrator/language/en-GB/en-GB.plg_editors_none.ini +/administrator/language/en-GB/en-GB.plg_editors_none.sys.ini +/administrator/language/en-GB/en-GB.plg_editors_tinymce.ini +/administrator/language/en-GB/en-GB.plg_editors_tinymce.sys.ini +/administrator/language/en-GB/en-GB.plg_extension_joomla.ini +/administrator/language/en-GB/en-GB.plg_extension_joomla.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_calendar.ini +/administrator/language/en-GB/en-GB.plg_fields_calendar.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_checkboxes.ini +/administrator/language/en-GB/en-GB.plg_fields_checkboxes.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_color.ini +/administrator/language/en-GB/en-GB.plg_fields_color.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_editor.ini +/administrator/language/en-GB/en-GB.plg_fields_editor.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_image.ini +/administrator/language/en-GB/en-GB.plg_fields_image.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_imagelist.ini +/administrator/language/en-GB/en-GB.plg_fields_imagelist.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_integer.ini +/administrator/language/en-GB/en-GB.plg_fields_integer.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_list.ini +/administrator/language/en-GB/en-GB.plg_fields_list.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_media.ini +/administrator/language/en-GB/en-GB.plg_fields_media.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_radio.ini +/administrator/language/en-GB/en-GB.plg_fields_radio.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_repeatable.ini +/administrator/language/en-GB/en-GB.plg_fields_repeatable.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_sql.ini +/administrator/language/en-GB/en-GB.plg_fields_sql.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_text.ini +/administrator/language/en-GB/en-GB.plg_fields_text.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_textarea.ini +/administrator/language/en-GB/en-GB.plg_fields_textarea.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_url.ini +/administrator/language/en-GB/en-GB.plg_fields_url.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_user.ini +/administrator/language/en-GB/en-GB.plg_fields_user.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_usergrouplist.ini +/administrator/language/en-GB/en-GB.plg_fields_usergrouplist.sys.ini +/administrator/language/en-GB/en-GB.plg_finder_categories.ini +/administrator/language/en-GB/en-GB.plg_finder_categories.sys.ini +/administrator/language/en-GB/en-GB.plg_finder_contacts.ini +/administrator/language/en-GB/en-GB.plg_finder_contacts.sys.ini +/administrator/language/en-GB/en-GB.plg_finder_content.ini +/administrator/language/en-GB/en-GB.plg_finder_content.sys.ini +/administrator/language/en-GB/en-GB.plg_finder_newsfeeds.ini +/administrator/language/en-GB/en-GB.plg_finder_newsfeeds.sys.ini +/administrator/language/en-GB/en-GB.plg_finder_tags.ini +/administrator/language/en-GB/en-GB.plg_finder_tags.sys.ini +/administrator/language/en-GB/en-GB.plg_finder_weblinks.ini +/administrator/language/en-GB/en-GB.plg_finder_weblinks.sys.ini +/administrator/language/en-GB/en-GB.plg_installer_folderinstaller.ini +/administrator/language/en-GB/en-GB.plg_installer_folderinstaller.sys.ini +/administrator/language/en-GB/en-GB.plg_installer_packageinstaller.ini +/administrator/language/en-GB/en-GB.plg_installer_packageinstaller.sys.ini +/administrator/language/en-GB/en-GB.plg_installer_urlinstaller.ini +/administrator/language/en-GB/en-GB.plg_installer_urlinstaller.sys.ini +/administrator/language/en-GB/en-GB.plg_installer_webinstaller.ini +/administrator/language/en-GB/en-GB.plg_installer_webinstaller.sys.ini +/administrator/language/en-GB/en-GB.plg_privacy_actionlogs.ini +/administrator/language/en-GB/en-GB.plg_privacy_actionlogs.sys.ini +/administrator/language/en-GB/en-GB.plg_privacy_consents.ini +/administrator/language/en-GB/en-GB.plg_privacy_consents.sys.ini +/administrator/language/en-GB/en-GB.plg_privacy_contact.ini +/administrator/language/en-GB/en-GB.plg_privacy_contact.sys.ini +/administrator/language/en-GB/en-GB.plg_privacy_content.ini +/administrator/language/en-GB/en-GB.plg_privacy_content.sys.ini +/administrator/language/en-GB/en-GB.plg_privacy_message.ini +/administrator/language/en-GB/en-GB.plg_privacy_message.sys.ini +/administrator/language/en-GB/en-GB.plg_privacy_user.ini +/administrator/language/en-GB/en-GB.plg_privacy_user.sys.ini +/administrator/language/en-GB/en-GB.plg_quickicon_extensionupdate.ini +/administrator/language/en-GB/en-GB.plg_quickicon_extensionupdate.sys.ini +/administrator/language/en-GB/en-GB.plg_quickicon_joomlaupdate.ini +/administrator/language/en-GB/en-GB.plg_quickicon_joomlaupdate.sys.ini +/administrator/language/en-GB/en-GB.plg_quickicon_phpversioncheck.ini +/administrator/language/en-GB/en-GB.plg_quickicon_phpversioncheck.sys.ini +/administrator/language/en-GB/en-GB.plg_quickicon_privacycheck.ini +/administrator/language/en-GB/en-GB.plg_quickicon_privacycheck.sys.ini +/administrator/language/en-GB/en-GB.plg_sampledata_blog.ini +/administrator/language/en-GB/en-GB.plg_sampledata_blog.sys.ini +/administrator/language/en-GB/en-GB.plg_search_categories.ini +/administrator/language/en-GB/en-GB.plg_search_categories.sys.ini +/administrator/language/en-GB/en-GB.plg_search_contacts.ini +/administrator/language/en-GB/en-GB.plg_search_contacts.sys.ini +/administrator/language/en-GB/en-GB.plg_search_content.ini +/administrator/language/en-GB/en-GB.plg_search_content.sys.ini +/administrator/language/en-GB/en-GB.plg_search_newsfeeds.ini +/administrator/language/en-GB/en-GB.plg_search_newsfeeds.sys.ini +/administrator/language/en-GB/en-GB.plg_search_tags.ini +/administrator/language/en-GB/en-GB.plg_search_tags.sys.ini +/administrator/language/en-GB/en-GB.plg_search_weblinks.ini +/administrator/language/en-GB/en-GB.plg_search_weblinks.sys.ini +/administrator/language/en-GB/en-GB.plg_system_actionlogs.ini +/administrator/language/en-GB/en-GB.plg_system_actionlogs.sys.ini +/administrator/language/en-GB/en-GB.plg_system_cache.ini +/administrator/language/en-GB/en-GB.plg_system_cache.sys.ini +/administrator/language/en-GB/en-GB.plg_system_debug.ini +/administrator/language/en-GB/en-GB.plg_system_debug.sys.ini +/administrator/language/en-GB/en-GB.plg_system_fields.ini +/administrator/language/en-GB/en-GB.plg_system_fields.sys.ini +/administrator/language/en-GB/en-GB.plg_system_highlight.ini +/administrator/language/en-GB/en-GB.plg_system_highlight.sys.ini +/administrator/language/en-GB/en-GB.plg_system_languagecode.ini +/administrator/language/en-GB/en-GB.plg_system_languagecode.sys.ini +/administrator/language/en-GB/en-GB.plg_system_languagefilter.ini +/administrator/language/en-GB/en-GB.plg_system_languagefilter.sys.ini +/administrator/language/en-GB/en-GB.plg_system_log.ini +/administrator/language/en-GB/en-GB.plg_system_log.sys.ini +/administrator/language/en-GB/en-GB.plg_system_logout.ini +/administrator/language/en-GB/en-GB.plg_system_logout.sys.ini +/administrator/language/en-GB/en-GB.plg_system_logrotation.ini +/administrator/language/en-GB/en-GB.plg_system_logrotation.sys.ini +/administrator/language/en-GB/en-GB.plg_system_p3p.ini +/administrator/language/en-GB/en-GB.plg_system_p3p.sys.ini +/administrator/language/en-GB/en-GB.plg_system_privacyconsent.ini +/administrator/language/en-GB/en-GB.plg_system_privacyconsent.sys.ini +/administrator/language/en-GB/en-GB.plg_system_redirect.ini +/administrator/language/en-GB/en-GB.plg_system_redirect.sys.ini +/administrator/language/en-GB/en-GB.plg_system_remember.ini +/administrator/language/en-GB/en-GB.plg_system_remember.sys.ini +/administrator/language/en-GB/en-GB.plg_system_sef.ini +/administrator/language/en-GB/en-GB.plg_system_sef.sys.ini +/administrator/language/en-GB/en-GB.plg_system_sessiongc.ini +/administrator/language/en-GB/en-GB.plg_system_sessiongc.sys.ini +/administrator/language/en-GB/en-GB.plg_system_stats.ini +/administrator/language/en-GB/en-GB.plg_system_stats.sys.ini +/administrator/language/en-GB/en-GB.plg_system_updatenotification.ini +/administrator/language/en-GB/en-GB.plg_system_updatenotification.sys.ini +/administrator/language/en-GB/en-GB.plg_twofactorauth_totp.ini +/administrator/language/en-GB/en-GB.plg_twofactorauth_totp.sys.ini +/administrator/language/en-GB/en-GB.plg_twofactorauth_yubikey.ini +/administrator/language/en-GB/en-GB.plg_twofactorauth_yubikey.sys.ini +/administrator/language/en-GB/en-GB.plg_user_contactcreator.ini +/administrator/language/en-GB/en-GB.plg_user_contactcreator.sys.ini +/administrator/language/en-GB/en-GB.plg_user_joomla.ini +/administrator/language/en-GB/en-GB.plg_user_joomla.sys.ini +/administrator/language/en-GB/en-GB.plg_user_profile.ini +/administrator/language/en-GB/en-GB.plg_user_profile.sys.ini +/administrator/language/en-GB/en-GB.plg_user_terms.ini +/administrator/language/en-GB/en-GB.plg_user_terms.sys.ini +/administrator/language/en-GB/en-GB.tpl_hathor.ini +/administrator/language/en-GB/en-GB.tpl_hathor.sys.ini +/administrator/language/en-GB/en-GB.tpl_isis.ini +/administrator/language/en-GB/en-GB.tpl_isis.sys.ini +/administrator/language/en-GB/en-GB.xml +/administrator/language/en-GB/install.xml +/administrator/language/overrides/* +/administrator/language/index.html +/administrator/logs/* +/administrator/manifests/files/joomla.xml +/administrator/manifests/libraries/fof.xml +/administrator/manifests/libraries/idna_convert.xml +/administrator/manifests/libraries/joomla.xml +/administrator/manifests/libraries/phpass.xml +/administrator/manifests/libraries/phputf8.xml +/administrator/manifests/packages/pkg_en-GB.xml +/administrator/manifests/packages/index.html +/administrator/modules/mod_custom/* +/administrator/modules/mod_feed/* +/administrator/modules/mod_latest/* +/administrator/modules/mod_latestactions/* +/administrator/modules/mod_logged/* +/administrator/modules/mod_login/* +/administrator/modules/mod_menu/* +/administrator/modules/mod_multilangstatus/* +/administrator/modules/mod_online/* +/administrator/modules/mod_popular/* +/administrator/modules/mod_privacy_dashboard/* +/administrator/modules/mod_quickicon/* +/administrator/modules/mod_sampledata/* +/administrator/modules/mod_stats_admin/* +/administrator/modules/mod_status/* +/administrator/modules/mod_submenu/* +/administrator/modules/mod_title/* +/administrator/modules/mod_toolbar/* +/administrator/modules/mod_unread/* +/administrator/modules/mod_version/* +/administrator/templates/hathor/* +/administrator/templates/isis/* +/administrator/templates/system/* +/bin/* +/cache/* +/cli/* +/components/com_ajax/* +/components/com_banners/* +/components/com_config/* +/components/com_contact/* +/components/com_content/* +/components/com_contenthistory/* +/components/com_fields/* +/components/com_finder/* +/components/com_mailto/* +/components/com_media/* +/components/com_menus/* +/components/com_modules/* +/components/com_newsfeeds/* +/components/com_privacy/* +/components/com_search/* +/components/com_tags/* +/components/com_users/* +/components/com_wrapper/* +/components/index.html +/images/banners/* +/images/headers/* +/images/sampledata/* +/images/index.html +/images/joomla* +/images/powered_by.png +/includes/* +/installation/* +/language/en-GB/en-GB.com_ajax.ini +/language/en-GB/en-GB.com_config.ini +/language/en-GB/en-GB.com_contact.ini +/language/en-GB/en-GB.com_content.ini +/language/en-GB/en-GB.com_finder.ini +/language/en-GB/en-GB.com_mailto.ini +/language/en-GB/en-GB.com_media.ini +/language/en-GB/en-GB.com_messages.ini +/language/en-GB/en-GB.com_newsfeeds.ini +/language/en-GB/en-GB.com_privacy.ini +/language/en-GB/en-GB.com_search.ini +/language/en-GB/en-GB.com_tags.ini +/language/en-GB/en-GB.com_users.ini +/language/en-GB/en-GB.com_weblinks.ini +/language/en-GB/en-GB.com_wrapper.ini +/language/en-GB/en-GB.files_joomla.sys.ini +/language/en-GB/en-GB.finder_cli.ini +/language/en-GB/en-GB.ini +/language/en-GB/en-GB.lib_fof.ini +/language/en-GB/en-GB.lib_fof.sys.ini +/language/en-GB/en-GB.lib_idna_convert.sys.ini +/language/en-GB/en-GB.lib_joomla.ini +/language/en-GB/en-GB.lib_joomla.sys.ini +/language/en-GB/en-GB.lib_phpass.sys.ini +/language/en-GB/en-GB.lib_phpmailer.sys.ini +/language/en-GB/en-GB.lib_phputf8.sys.ini +/language/en-GB/en-GB.lib_simplepie.sys.ini +/language/en-GB/en-GB.localise.php +/language/en-GB/en-GB.mod_articles_archive.ini +/language/en-GB/en-GB.mod_articles_archive.sys.ini +/language/en-GB/en-GB.mod_articles_categories.ini +/language/en-GB/en-GB.mod_articles_categories.sys.ini +/language/en-GB/en-GB.mod_articles_category.ini +/language/en-GB/en-GB.mod_articles_category.sys.ini +/language/en-GB/en-GB.mod_articles_latest.ini +/language/en-GB/en-GB.mod_articles_latest.sys.ini +/language/en-GB/en-GB.mod_articles_news.ini +/language/en-GB/en-GB.mod_articles_news.sys.ini +/language/en-GB/en-GB.mod_articles_popular.ini +/language/en-GB/en-GB.mod_articles_popular.sys.ini +/language/en-GB/en-GB.mod_banners.ini +/language/en-GB/en-GB.mod_banners.sys.ini +/language/en-GB/en-GB.mod_breadcrumbs.ini +/language/en-GB/en-GB.mod_breadcrumbs.sys.ini +/language/en-GB/en-GB.mod_custom.ini +/language/en-GB/en-GB.mod_custom.sys.ini +/language/en-GB/en-GB.mod_feed.ini +/language/en-GB/en-GB.mod_feed.sys.ini +/language/en-GB/en-GB.mod_finder.ini +/language/en-GB/en-GB.mod_finder.sys.ini +/language/en-GB/en-GB.mod_footer.ini +/language/en-GB/en-GB.mod_footer.sys.ini +/language/en-GB/en-GB.mod_languages.ini +/language/en-GB/en-GB.mod_languages.sys.ini +/language/en-GB/en-GB.mod_login.ini +/language/en-GB/en-GB.mod_login.sys.ini +/language/en-GB/en-GB.mod_menu.ini +/language/en-GB/en-GB.mod_menu.sys.ini +/language/en-GB/en-GB.mod_random_image.ini +/language/en-GB/en-GB.mod_random_image.sys.ini +/language/en-GB/en-GB.mod_related_items.ini +/language/en-GB/en-GB.mod_related_items.sys.ini +/language/en-GB/en-GB.mod_search.ini +/language/en-GB/en-GB.mod_search.sys.ini +/language/en-GB/en-GB.mod_stats.ini +/language/en-GB/en-GB.mod_stats.sys.ini +/language/en-GB/en-GB.mod_syndicate.ini +/language/en-GB/en-GB.mod_syndicate.sys.ini +/language/en-GB/en-GB.mod_tags_popular.ini +/language/en-GB/en-GB.mod_tags_popular.sys.ini +/language/en-GB/en-GB.mod_tags_similar.ini +/language/en-GB/en-GB.mod_tags_similar.sys.ini +/language/en-GB/en-GB.mod_users_latest.ini +/language/en-GB/en-GB.mod_users_latest.sys.ini +/language/en-GB/en-GB.mod_weblinks.ini +/language/en-GB/en-GB.mod_weblinks.sys.ini +/language/en-GB/en-GB.mod_whosonline.ini +/language/en-GB/en-GB.mod_whosonline.sys.ini +/language/en-GB/en-GB.mod_wrapper.ini +/language/en-GB/en-GB.mod_wrapper.sys.ini +/language/en-GB/en-GB.tpl_atomic.ini +/language/en-GB/en-GB.tpl_atomic.sys.ini +/language/en-GB/en-GB.tpl_beez3.ini +/language/en-GB/en-GB.tpl_beez3.sys.ini +/language/en-GB/en-GB.tpl_beez5.ini +/language/en-GB/en-GB.tpl_beez5.sys.ini +/language/en-GB/en-GB.tpl_beez_20.ini +/language/en-GB/en-GB.tpl_beez_20.sys.ini +/language/en-GB/en-GB.tpl_protostar.ini +/language/en-GB/en-GB.tpl_protostar.sys.ini +/language/en-GB/en-GB.xml +/language/en-GB/install.xml +/language/overrides/* +/language/index.html +/layouts/joomla/* +/layouts/libraries/* +/layouts/plugins/* +/layouts/index.html +/libraries/cms/* +/libraries/fof/* +/libraries/idna_convert/* +/libraries/joomla/* +/libraries/legacy/* +/libraries/php-encryption/* +/libraries/phpass/* +/libraries/phpmailer/* +/libraries/phputf8/* +/libraries/simplepie/* +/libraries/src/* +/libraries/vendor/* +/libraries/classmap.php +/libraries/cms.php +/libraries/import.legacy.php +/libraries/import.php +/libraries/index.html +/libraries/loader.php +/media/cms/* +/media/com_associations/* +/media/com_contact/* +/media/com_content/* +/media/com_contenthistory/* +/media/com_fields/* +/media/com_finder/* +/media/com_joomlaupdate/* +/media/com_menus/* +/media/com_modules/* +/media/com_wrapper/* +/media/contacts/* +/media/editors/* +/media/jui/* +/media/mailto/* +/media/media/* +/media/mod_languages/* +/media/mod_sampledata/* +/media/overrider/* +/media/plg_captcha_recaptcha/* +/media/plg_captcha_recaptcha_invisible/* +/media/plg_quickicon_extensionupdate/* +/media/plg_quickicon_joomlaupdate/* +/media/plg_quickicon_privacycheck/* +/media/plg_system_highlight/* +/media/plg_system_stats/* +/media/plg_twofactorauth_totp/* +/media/system/* +/media/index.html +/modules/mod_articles_archive/* +/modules/mod_articles_categories/* +/modules/mod_articles_category/* +/modules/mod_articles_latest/* +/modules/mod_articles_news/* +/modules/mod_articles_popular/* +/modules/mod_banners/* +/modules/mod_breadcrumbs/* +/modules/mod_custom/* +/modules/mod_feed/* +/modules/mod_finder/* +/modules/mod_footer/* +/modules/mod_languages/* +/modules/mod_login/* +/modules/mod_menu/* +/modules/mod_random_image/* +/modules/mod_related_items/* +/modules/mod_search/* +/modules/mod_stats/* +/modules/mod_syndicate/* +/modules/mod_tags_popular/* +/modules/mod_tags_similar/* +/modules/mod_users_latest/* +/modules/mod_whosonline/* +/modules/mod_wrapper/* +/modules/index.html +/plugins/actionlog/joomla/* +/plugins/authentication/cookie/* +/plugins/authentication/example/* +/plugins/authentication/gmail/* +/plugins/authentication/joomla/* +/plugins/authentication/ldap/* +/plugins/captcha/recaptcha/* +/plugins/captcha/recaptcha_invisible/* +/plugins/content/confirmconsent/* +/plugins/content/contact/* +/plugins/content/emailcloak/* +/plugins/content/example/* +/plugins/content/fields/* +/plugins/content/finder/* +/plugins/content/geshi/* +/plugins/content/joomla/* +/plugins/content/loadmodule/* +/plugins/content/pagebreak/* +/plugins/content/pagenavigation/* +/plugins/content/vote/* +/plugins/editors/codemirror/* +/plugins/editors/none/* +/plugins/editors/tinymce/* +/plugins/editors-xtd/article/* +/plugins/editors-xtd/contact/* +/plugins/editors-xtd/fields/* +/plugins/editors-xtd/image/* +/plugins/editors-xtd/menu/* +/plugins/editors-xtd/module/* +/plugins/editors-xtd/pagebreak/* +/plugins/editors-xtd/readmore/* +/plugins/extension/example/* +/plugins/extension/joomla/* +/plugins/fields/calendar/* +/plugins/fields/checkboxes/* +/plugins/fields/color/* +/plugins/fields/editor/* +/plugins/fields/imagelist/* +/plugins/fields/integer/* +/plugins/fields/list/* +/plugins/fields/media/* +/plugins/fields/radio/* +/plugins/fields/repeatable/* +/plugins/fields/sql/* +/plugins/fields/text/* +/plugins/fields/textarea/* +/plugins/fields/url/* +/plugins/fields/user/* +/plugins/fields/usergrouplist/* +/plugins/finder/categories/* +/plugins/finder/contacts/* +/plugins/finder/content/* +/plugins/finder/newsfeeds/* +/plugins/finder/tags/* +/plugins/installer/folderinstaller/* +/plugins/installer/packageinstaller/* +/plugins/installer/urlinstaller/* +/plugins/privacy/actionlogs/* +/plugins/privacy/consents/* +/plugins/privacy/contact/* +/plugins/privacy/content/* +/plugins/privacy/message/* +/plugins/privacy/user/* +/plugins/quickicon/extensionupdate/* +/plugins/quickicon/joomlaupdate/* +/plugins/quickicon/phpversioncheck/* +/plugins/quickicon/privacycheck/* +/plugins/quickicon/index.html +/plugins/sampledata/blog/* +/plugins/search/categories/* +/plugins/search/contacts/* +/plugins/search/content/* +/plugins/search/newsfeeds/* +/plugins/search/tags/* +/plugins/search/weblinks/* +/plugins/search/index.html +/plugins/system/actionlogs/* +/plugins/system/cache/* +/plugins/system/debug/* +/plugins/system/fields/* +/plugins/system/highlight/* +/plugins/system/languagecode/* +/plugins/system/languagefilter/* +/plugins/system/log/* +/plugins/system/logout/* +/plugins/system/logrotation/* +/plugins/system/p3p/* +/plugins/system/privacyconsent/* +/plugins/system/redirect/* +/plugins/system/remember/* +/plugins/system/sef/* +/plugins/system/sessiongc/* +/plugins/system/stats/* +/plugins/system/updatenotification/* +/plugins/system/index.html +/plugins/twofactorauth/totp/* +/plugins/twofactorauth/yubikey/* +/plugins/user/contactcreator/* +/plugins/user/example/* +/plugins/user/joomla/* +/plugins/user/profile/* +/plugins/user/terms/* +/plugins/user/index.html +/plugins/index.html +/templates/beez3/* +/templates/protostar/* +/templates/system/* +/templates/index.html +/tmp/* +/configuration.php +/htaccess.txt +/index.php +/joomla.xml +/LICENSE.txt +/README.txt +/robots.txt.dist +/web.config.txt diff --git a/templates/Julia.gitignore b/templates/Julia.gitignore new file mode 100644 index 0000000..29126e4 --- /dev/null +++ b/templates/Julia.gitignore @@ -0,0 +1,24 @@ +# Files generated by invoking Julia with --code-coverage +*.jl.cov +*.jl.*.cov + +# Files generated by invoking Julia with --track-allocation +*.jl.mem + +# System-specific files and directories generated by the BinaryProvider and BinDeps packages +# They contain absolute paths specific to the host computer, and so should not be committed +deps/deps.jl +deps/build.log +deps/downloads/ +deps/usr/ +deps/src/ + +# Build artifacts for creating documentation generated by the Documenter package +docs/build/ +docs/site/ + +# File generated by Pkg, the package manager, based on a corresponding Project.toml +# It records a fixed state of all packages used by the project. As such, it should not be +# committed for packages, but should be committed for applications that require a static +# environment. +Manifest.toml diff --git a/templates/KiCad.gitignore b/templates/KiCad.gitignore new file mode 100644 index 0000000..a63bc0e --- /dev/null +++ b/templates/KiCad.gitignore @@ -0,0 +1,29 @@ +# For PCBs designed using KiCad: https://www.kicad.org/ +# Format documentation: https://kicad.org/help/file-formats/ + +# Temporary files +*.000 +*.bak +*.bck +*.kicad_pcb-bak +*.kicad_sch-bak +*-backups +*.kicad_prl +*.sch-bak +*~ +_autosave-* +*.tmp +*-save.pro +*-save.kicad_pcb +fp-info-cache + +# Netlist files (exported from Eeschema) +*.net + +# Autorouter files (exported from Pcbnew) +*.dsn +*.ses + +# Exported BOM files +*.xml +*.csv diff --git a/templates/Kohana.gitignore b/templates/Kohana.gitignore new file mode 100644 index 0000000..8b2ab01 --- /dev/null +++ b/templates/Kohana.gitignore @@ -0,0 +1,2 @@ +application/cache/* +application/logs/* diff --git a/templates/Kotlin.gitignore b/templates/Kotlin.gitignore index 38105ec..c48376e 100644 --- a/templates/Kotlin.gitignore +++ b/templates/Kotlin.gitignore @@ -1,24 +1 @@ -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* -replay_pid* \ No newline at end of file +Java.gitignore \ No newline at end of file diff --git a/templates/LabVIEW.gitignore b/templates/LabVIEW.gitignore new file mode 100644 index 0000000..31619f5 --- /dev/null +++ b/templates/LabVIEW.gitignore @@ -0,0 +1,17 @@ +# Libraries +*.lvlibp +*.llb + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe + +# Metadata +*.aliases +*.lvlps +.cache/ diff --git a/templates/Laravel.gitignore b/templates/Laravel.gitignore new file mode 100644 index 0000000..297959a --- /dev/null +++ b/templates/Laravel.gitignore @@ -0,0 +1,23 @@ +/vendor/ +node_modules/ +npm-debug.log +yarn-error.log + +# Laravel 4 specific +bootstrap/compiled.php +app/storage/ + +# Laravel 5 & Lumen specific +public/storage +public/hot + +# Laravel 5 & Lumen specific with changed public path +public_html/storage +public_html/hot + +storage/*.key +.env +Homestead.yaml +Homestead.json +/.vagrant +.phpunit.result.cache diff --git a/templates/Leiningen.gitignore b/templates/Leiningen.gitignore new file mode 100644 index 0000000..a4cb69a --- /dev/null +++ b/templates/Leiningen.gitignore @@ -0,0 +1,14 @@ +pom.xml +pom.xml.asc +*.jar +*.class +/lib/ +/classes/ +/target/ +/checkouts/ +.lein-deps-sum +.lein-repl-history +.lein-plugins/ +.lein-failures +.nrepl-port +.cpcache/ diff --git a/templates/LemonStand.gitignore b/templates/LemonStand.gitignore new file mode 100644 index 0000000..c7d94ad --- /dev/null +++ b/templates/LemonStand.gitignore @@ -0,0 +1,21 @@ +boot.php +index.php +install.php +/config/* +!/config/config.php +/controllers/* +/init/* +/logs/* +/phproad/* +/temp/* +/uploaded/* +/installer_files/* +/modules/backend/* +/modules/blog/* +/modules/cms/* +/modules/core/* +/modules/session/* +/modules/shop/* +/modules/system/* +/modules/users/* +# add content_*.php if you don't want erase client changes to content diff --git a/templates/Lilypond.gitignore b/templates/Lilypond.gitignore new file mode 100644 index 0000000..513e6ed --- /dev/null +++ b/templates/Lilypond.gitignore @@ -0,0 +1,6 @@ +*.pdf +*.ps +*.midi +*.mid +*.log +*~ diff --git a/templates/Lithium.gitignore b/templates/Lithium.gitignore new file mode 100644 index 0000000..7b22568 --- /dev/null +++ b/templates/Lithium.gitignore @@ -0,0 +1,2 @@ +libraries/* +resources/tmp/* diff --git a/templates/Lua.gitignore b/templates/Lua.gitignore new file mode 100644 index 0000000..6fd0a37 --- /dev/null +++ b/templates/Lua.gitignore @@ -0,0 +1,41 @@ +# Compiled Lua sources +luac.out + +# luarocks build files +*.src.rock +*.zip +*.tar.gz + +# Object files +*.o +*.os +*.ko +*.obj +*.elf + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo +*.def +*.exp + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + diff --git a/templates/Magento.gitignore b/templates/Magento.gitignore new file mode 100644 index 0000000..abe6d79 --- /dev/null +++ b/templates/Magento.gitignore @@ -0,0 +1,45 @@ +#--------------------------# +# Magento Default Files # +#--------------------------# + +/PATCH_*.sh + +/app/etc/local.xml + +/media/* +!/media/.htaccess + +!/media/customer +/media/customer/* +!/media/customer/.htaccess + +!/media/dhl +/media/dhl/* +!/media/dhl/logo.jpg + +!/media/downloadable +/media/downloadable/* +!/media/downloadable/.htaccess + +!/media/xmlconnect +/media/xmlconnect/* + +!/media/xmlconnect/custom +/media/xmlconnect/custom/* +!/media/xmlconnect/custom/ok.gif + +!/media/xmlconnect/original +/media/xmlconnect/original/* +!/media/xmlconnect/original/ok.gif + +!/media/xmlconnect/system +/media/xmlconnect/system/* +!/media/xmlconnect/system/ok.gif + +/var/* +!/var/.htaccess + +!/var/package +/var/package/* +!/var/package/*.xml + diff --git a/templates/Maven.gitignore b/templates/Maven.gitignore new file mode 100644 index 0000000..2f43530 --- /dev/null +++ b/templates/Maven.gitignore @@ -0,0 +1,17 @@ +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +# https://github.com/takari/maven-wrapper#usage-without-binary-jar +.mvn/wrapper/maven-wrapper.jar + +# Eclipse m2e generated files +# Eclipse Core +.project +# JDT-specific (Eclipse Java Development Tools) +.classpath diff --git a/templates/Mercury.gitignore b/templates/Mercury.gitignore new file mode 100644 index 0000000..70ec869 --- /dev/null +++ b/templates/Mercury.gitignore @@ -0,0 +1,13 @@ +Mercury/ +Mercury.modules +*.mh +*.err +*.init +*.dll +*.exe +*.a +*.so +*.dylib +*.beams +*.d +*.c_date diff --git a/templates/MetaProgrammingSystem.gitignore b/templates/MetaProgrammingSystem.gitignore new file mode 100644 index 0000000..3e75841 --- /dev/null +++ b/templates/MetaProgrammingSystem.gitignore @@ -0,0 +1,16 @@ +workspace.xml +junitvmwatcher*.properties +build.properties + +# generated java classes and java source files +# manually add any custom artifacts that can't be generated from the models +# http://confluence.jetbrains.com/display/MPSD25/HowTo+--+MPS+and+Git +classes_gen +source_gen +source_gen.caches + +# generated test code and test results +test_gen +test_gen.caches +TEST-*.xml +junit*.properties diff --git a/templates/Nanoc.gitignore b/templates/Nanoc.gitignore new file mode 100644 index 0000000..6f35daa --- /dev/null +++ b/templates/Nanoc.gitignore @@ -0,0 +1,10 @@ +# For projects using Nanoc (http://nanoc.ws/) + +# Default location for output (needs to match output_dir's value found in nanoc.yaml) +output/ + +# Temporary file directory +tmp/nanoc/ + +# Crash Log +crash.log diff --git a/templates/Nim.gitignore b/templates/Nim.gitignore new file mode 100644 index 0000000..32e1dc0 --- /dev/null +++ b/templates/Nim.gitignore @@ -0,0 +1,3 @@ +nimcache/ +nimblecache/ +htmldocs/ diff --git a/templates/Node.gitignore b/templates/Node.gitignore new file mode 100644 index 0000000..c6bba59 --- /dev/null +++ b/templates/Node.gitignore @@ -0,0 +1,130 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp +.cache + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* diff --git a/templates/OCaml.gitignore b/templates/OCaml.gitignore new file mode 100644 index 0000000..a18e084 --- /dev/null +++ b/templates/OCaml.gitignore @@ -0,0 +1,29 @@ +*.annot +*.cmo +*.cma +*.cmi +*.a +*.o +*.cmx +*.cmxs +*.cmxa + +# ocamlbuild working directory +_build/ + +# ocamlbuild targets +*.byte +*.native + +# oasis generated files +setup.data +setup.log + +# Merlin configuring file for Vim and Emacs +.merlin + +# Dune generated files +*.install + +# Local OPAM switch +_opam/ diff --git a/templates/Objective-C.gitignore b/templates/Objective-C.gitignore new file mode 100644 index 0000000..2ebce16 --- /dev/null +++ b/templates/Objective-C.gitignore @@ -0,0 +1,44 @@ +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## User settings +xcuserdata/ + +## Obj-C/Swift specific +*.hmap + +## App packaging +*.ipa +*.dSYM.zip +*.dSYM + +# CocoaPods +# +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# +# Pods/ +# +# Add this line if you want to avoid checking in source code from the Xcode workspace +# *.xcworkspace + +# Carthage +# +# Add this line if you want to avoid checking in source code from Carthage dependencies. +# Carthage/Checkouts + +Carthage/Build/ + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. +# Instead, use fastlane to re-generate the screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/#source-control + +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots/**/*.png +fastlane/test_output diff --git a/templates/Opa.gitignore b/templates/Opa.gitignore new file mode 100644 index 0000000..74c6219 --- /dev/null +++ b/templates/Opa.gitignore @@ -0,0 +1,13 @@ +_build +_tracks + +opa-debug-js + +*.opp +*.opx +*.opx.broken +*.dump +*.api +*.api-txt +*.exe +*.log diff --git a/templates/OpenCart.gitignore b/templates/OpenCart.gitignore new file mode 100644 index 0000000..97be41f --- /dev/null +++ b/templates/OpenCart.gitignore @@ -0,0 +1,20 @@ +.htaccess +/config.php +admin/config.php + +!index.html + +download/ +image/data/ +image/cache/ +system/cache/ +system/logs/ + +system/storage/ + +# vQmod log files +vqmod/logs/* +# vQmod cache files +vqmod/vqcache/* +vqmod/checked.cache +vqmod/mods.cache diff --git a/templates/OracleForms.gitignore b/templates/OracleForms.gitignore new file mode 100644 index 0000000..699a494 --- /dev/null +++ b/templates/OracleForms.gitignore @@ -0,0 +1,8 @@ +# Compiled Form Modules +*.fmx + +# Compiled Menu Modules +*.mmx + +# Compiled Pre-Linked Libraries +*.plx diff --git a/templates/Packer.gitignore b/templates/Packer.gitignore new file mode 100644 index 0000000..2cbc1ad --- /dev/null +++ b/templates/Packer.gitignore @@ -0,0 +1,16 @@ +# Cache objects +packer_cache/ + +# Crash log +crash.log + +# https://www.packer.io/guides/hcl/variables +# Exclude all .pkrvars.hcl files, which are likely to contain sensitive data, +# such as password, private keys, and other secrets. These should not be part of +# version control as they are data points which are potentially sensitive and +# subject to change depending on the environment. +# +*.pkrvars.hcl + +# For built boxes +*.box diff --git a/templates/Perl.gitignore b/templates/Perl.gitignore new file mode 100644 index 0000000..fb8b193 --- /dev/null +++ b/templates/Perl.gitignore @@ -0,0 +1,35 @@ +!Build/ +.last_cover_stats +/META.yml +/META.json +/MYMETA.* +*.o +*.pm.tdy +*.bs + +# Devel::Cover +cover_db/ + +# Devel::NYTProf +nytprof.out + +# Dist::Zilla +/.build/ + +# Module::Build +_build/ +Build +Build.bat + +# Module::Install +inc/ + +# ExtUtils::MakeMaker +/blib/ +/_eumm/ +/*.gz +/Makefile +/Makefile.old +/MANIFEST.bak +/pm_to_blib +/*.zip diff --git a/templates/Phalcon.gitignore b/templates/Phalcon.gitignore new file mode 100644 index 0000000..6ffe3aa --- /dev/null +++ b/templates/Phalcon.gitignore @@ -0,0 +1,2 @@ +/cache/ +/config/development/ diff --git a/templates/PlayFramework.gitignore b/templates/PlayFramework.gitignore new file mode 100644 index 0000000..ae5ec9f --- /dev/null +++ b/templates/PlayFramework.gitignore @@ -0,0 +1,16 @@ +# Ignore Play! working directory # +bin/ +/db +.eclipse +/lib/ +/logs/ +/modules +/project/project +/project/target +/target +tmp/ +test-result +server.pid +*.eml +/dist/ +.cache diff --git a/templates/Plone.gitignore b/templates/Plone.gitignore new file mode 100644 index 0000000..770a868 --- /dev/null +++ b/templates/Plone.gitignore @@ -0,0 +1,18 @@ +*.pyc +*.pyo +*.tmp* +*.mo +*.egg +*.EGG +*.egg-info +*.EGG-INFO +.*.cfg +bin/ +build/ +develop-eggs/ +downloads/ +eggs/ +fake-eggs/ +parts/ +dist/ +var/ diff --git a/templates/Prestashop.gitignore b/templates/Prestashop.gitignore new file mode 100644 index 0000000..9da6d29 --- /dev/null +++ b/templates/Prestashop.gitignore @@ -0,0 +1,173 @@ +# Cache, temp and personal files + +/.htaccess +*.log + +# Cache +/cache/* +!/cache/.htaccess +!/cache/cachefs/index.php +!/cache/deprecated.txt +!/cache/index.php +!/cache/purifier/index.php +!/cache/push/activity +!/cache/push/index.php +!/cache/push/trends +!/cache/sandbox/index.php +!/cache/smarty/cache/index.php +!/cache/smarty/compile/index.php +!/cache/smarty/index.php +!/cache/tcpdf/index.php + +# Download +/download/* +!/download/.htaccess +!/download/index.php + +# Images +/img/* +!/img/.htaccess +!/img/index.php +!/img/404.gif +!/img/bg_500.png +!/img/bg_loader.png +!/img/favicon.ico +!/img/loader.gif +!/img/loadingAnimation.gif +!/img/logo.jpg +!/img/logo.png +!/img/logo_invoice.jpg +!/img/logo_stores.png +!/img/macFFBgHack.png +!/img/prestashop-avatar.png +!/img/prestashop@2x.png +!/img/preston-login-wink@2x.png +!/img/preston-login@2x.png +!/img/questionmark.png +!/img/genders/index.php +!/img/admin/index.php +!/img/c/index.php +!/img/cms/index.php +!/img/co/index.php +!/img/jquery-ui +!/img/l/index.php +!/img/m/index.php +!/img/os/index.php +!/img/p/index.php +!/img/s/index.php +!/img/scenes +!/img/st/index.php +!/img/su/index.php +!/img/t/index.php +!/img/tmp/index.php + +# Upload +/upload/* +!/upload/.htaccess + +/vendor/* +/docs/phpdoc-sf/ +/composer.lock +*.hot-update.js +*.hot-update.json + + +/admin-dev/autoupgrade/* +!/admin-dev/autoupgrade/index.php +!/admin-dev/autoupgrade/backup/index.php + +/admin-dev/backups/* +!/admin-dev/backups/.htaccess + +/admin-dev/import/* +!/admin-dev/import/.htaccess +!/admin-dev/import/index.php + +/admin-dev/export/* +!/admin-dev/export/.htaccess +!/admin-dev/export/index.php + +# Downloaded RTL files +/admin-dev/themes/default/css/bundle/default_rtl.css +/admin-dev/themes/default/css/bundle/shared_rtl.css +/admin-dev/themes/default/css/font_rtl.css +/admin-dev/themes/default/css/overrides_rtl.css +/admin-dev/themes/default/css/vendor/font-awesome/font-awesome_rtl.css +/admin-dev/themes/default/css/vendor/nv.d3_rtl.css +/admin-dev/themes/default/css/vendor/titatoggle-min_rtl.css +/admin-dev/themes/default/public/theme_rtl.css +/admin-dev/themes/new-theme/css/module/drop_rtl.css +/admin-dev/themes/new-theme/css/right-sidebar_rtl.css + +themes/*/cache/* + +# Config + +config/settings.inc.php +config/settings.old.php +config/xml/* +config/themes/* +!config/xml/themes/default.xml +themes/*/config/settings_*.json +app/config/parameters.old.yml +app/config/config.php + +# Themes, modules and overrides + +modules/* +override/* +themes/*/ +!themes/classic +!themes/_core +!themes/_libraries + +# Vendors and dependencies + +bower_components/ +node_modules/ +composer.phar +php-cs-fixer +.grunt/* + +# Translations and emails templates + +translations/* +mails/* +!mails/themes/ +!mails/_partials/ +themes/default-bootstrap/lang/* +themes/default-bootstrap/modules/*/translations/*.php +themes/default-bootstrap/mails/* +!themes/default-bootstrap/mails/en/ +themes/default-bootstrap/modules/*/mails/* +!themes/default-bootstrap/modules/*/mails/en + +# MISC + +*sitemap.xml +/robots.txt + +# Symfony + +/bin/ +/app/Resources/geoip/GeoLite2-City.mmdb +/app/Resources/translations/* +!/app/Resources/translations/default +/app/config/parameters.yml +/app/config/parameters.php +/build/ +/phpunit.xml +/var/* +!/var/cache +/var/cache/* +!var/cache/.gitkeep +!/var/logs +/var/logs/* +!var/logs/.gitkeep +!/var/sessions +/var/sessions/* +!var/sessions/.gitkeep +!var/SymfonyRequirements.php +/vendor/ +/web/bundles/ + diff --git a/templates/Processing.gitignore b/templates/Processing.gitignore new file mode 100644 index 0000000..942ebbc --- /dev/null +++ b/templates/Processing.gitignore @@ -0,0 +1,10 @@ +.DS_Store +applet +application.linux-arm64 +application.linux-armv6hf +application.linux32 +application.linux64 +application.windows32 +application.windows64 +application.macosx +out diff --git a/templates/PureScript.gitignore b/templates/PureScript.gitignore new file mode 100644 index 0000000..de86604 --- /dev/null +++ b/templates/PureScript.gitignore @@ -0,0 +1,9 @@ +# Dependencies +.psci_modules +.spago +bower_components +node_modules + +# Generated files +.psci +output diff --git a/templates/Python.gitignore b/templates/Python.gitignore index efa407c..82f9275 100644 --- a/templates/Python.gitignore +++ b/templates/Python.gitignore @@ -159,4 +159,4 @@ cython_debug/ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. -#.idea/ \ No newline at end of file +#.idea/ diff --git a/templates/Qooxdoo.gitignore b/templates/Qooxdoo.gitignore new file mode 100644 index 0000000..d0c6410 --- /dev/null +++ b/templates/Qooxdoo.gitignore @@ -0,0 +1,5 @@ +cache +cache-downloads +inspector +api +source/inspector.html diff --git a/templates/Qt.gitignore b/templates/Qt.gitignore new file mode 100644 index 0000000..7f4826b --- /dev/null +++ b/templates/Qt.gitignore @@ -0,0 +1,54 @@ +# C++ objects and libs +*.slo +*.lo +*.o +*.a +*.la +*.lai +*.so +*.so.* +*.dll +*.dylib + +# Qt-es +object_script.*.Release +object_script.*.Debug +*_plugin_import.cpp +/.qmake.cache +/.qmake.stash +*.pro.user +*.pro.user.* +*.qbs.user +*.qbs.user.* +*.moc +moc_*.cpp +moc_*.h +qrc_*.cpp +ui_*.h +*.qmlc +*.jsc +Makefile* +*build-* +*.qm +*.prl + +# Qt unit tests +target_wrapper.* + +# QtCreator +*.autosave + +# QtCreator Qml +*.qmlproject.user +*.qmlproject.user.* + +# QtCreator CMake +CMakeLists.txt.user* + +# QtCreator 4.8< compilation database +compile_commands.json + +# QtCreator local machine specific files for imported projects +*creator.user* + +*_qmlcache.qrc diff --git a/templates/R.gitignore b/templates/R.gitignore new file mode 100644 index 0000000..e75435c --- /dev/null +++ b/templates/R.gitignore @@ -0,0 +1,49 @@ +# History files +.Rhistory +.Rapp.history + +# Session Data files +.RData +.RDataTmp + +# User-specific files +.Ruserdata + +# Example code in package build process +*-Ex.R + +# Output files from R CMD build +/*.tar.gz + +# Output files from R CMD check +/*.Rcheck/ + +# RStudio files +.Rproj.user/ + +# produced vignettes +vignettes/*.html +vignettes/*.pdf + +# OAuth2 token, see https://github.com/hadley/httr/releases/tag/v0.3 +.httr-oauth + +# knitr and R markdown default cache directories +*_cache/ +/cache/ + +# Temporary files created by R markdown +*.utf8.md +*.knit.md + +# R Environment Variables +.Renviron + +# pkgdown site +docs/ + +# translation temp files +po/*~ + +# RStudio Connect folder +rsconnect/ diff --git a/templates/ROS.gitignore b/templates/ROS.gitignore new file mode 100644 index 0000000..35d74bb --- /dev/null +++ b/templates/ROS.gitignore @@ -0,0 +1,51 @@ +devel/ +logs/ +build/ +bin/ +lib/ +msg_gen/ +srv_gen/ +msg/*Action.msg +msg/*ActionFeedback.msg +msg/*ActionGoal.msg +msg/*ActionResult.msg +msg/*Feedback.msg +msg/*Goal.msg +msg/*Result.msg +msg/_*.py +build_isolated/ +devel_isolated/ + +# Generated by dynamic reconfigure +*.cfgc +/cfg/cpp/ +/cfg/*.py + +# Ignore generated docs +*.dox +*.wikidoc + +# eclipse stuff +.project +.cproject + +# qcreator stuff +CMakeLists.txt.user + +srv/_*.py +*.pcd +*.pyc +qtcreator-* +*.user + +/planning/cfg +/planning/docs +/planning/src + +*~ + +# Emacs +.#* + +# Catkin custom files +CATKIN_IGNORE diff --git a/templates/Racket.gitignore b/templates/Racket.gitignore new file mode 100644 index 0000000..93e4072 --- /dev/null +++ b/templates/Racket.gitignore @@ -0,0 +1,7 @@ +.DS_Store +compiled/ +/doc/ +*~ +*.bak +\#* +.\#* diff --git a/templates/Rails.gitignore b/templates/Rails.gitignore new file mode 100644 index 0000000..c55bb71 --- /dev/null +++ b/templates/Rails.gitignore @@ -0,0 +1,69 @@ +*.rbc +capybara-*.html +.rspec +/db/*.sqlite3 +/db/*.sqlite3-journal +/db/*.sqlite3-[0-9]* +/public/system +/coverage/ +/spec/tmp +*.orig +rerun.txt +pickle-email-*.html + +# Ignore all logfiles and tempfiles. +/log/* +/tmp/* +!/log/.keep +!/tmp/.keep + +# TODO Comment out this rule if you are OK with secrets being uploaded to the repo +config/initializers/secret_token.rb +config/master.key + +# Only include if you have production secrets in this file, which is no longer a Rails default +# config/secrets.yml + +# dotenv, dotenv-rails +# TODO Comment out these rules if environment variables can be committed +.env +.env*.local + +## Environment normalization: +/.bundle +/vendor/bundle + +# these should all be checked in to normalize the environment: +# Gemfile.lock, .ruby-version, .ruby-gemset + +# unless supporting rvm < 1.11.0 or doing something fancy, ignore this: +.rvmrc + +# if using bower-rails ignore default bower_components path bower.json files +/vendor/assets/bower_components +*.bowerrc +bower.json + +# Ignore pow environment settings +.powenv + +# Ignore Byebug command history file. +.byebug_history + +# Ignore node_modules +node_modules/ + +# Ignore precompiled javascript packs +/public/packs +/public/packs-test +/public/assets + +# Ignore yarn files +/yarn-error.log +yarn-debug.log* +.yarn-integrity + +# Ignore uploaded files in development +/storage/* +!/storage/.keep +/public/uploads diff --git a/templates/Raku.gitignore b/templates/Raku.gitignore new file mode 100644 index 0000000..e792f6e --- /dev/null +++ b/templates/Raku.gitignore @@ -0,0 +1,7 @@ +# Gitignore for Raku (https://raku.org) +# As part of https://github.com/github/gitignore + +# precompiled files +.precomp +lib/.precomp + diff --git a/templates/RhodesRhomobile.gitignore b/templates/RhodesRhomobile.gitignore new file mode 100644 index 0000000..a211dcc --- /dev/null +++ b/templates/RhodesRhomobile.gitignore @@ -0,0 +1,9 @@ +rholog-* +sim-* +bin/libs +bin/RhoBundle +bin/tmp +bin/target +bin/*.ap_ +*.o +*.jar diff --git a/templates/Ruby.gitignore b/templates/Ruby.gitignore new file mode 100644 index 0000000..e3200e0 --- /dev/null +++ b/templates/Ruby.gitignore @@ -0,0 +1,56 @@ +*.gem +*.rbc +/.config +/coverage/ +/InstalledFiles +/pkg/ +/spec/reports/ +/spec/examples.txt +/test/tmp/ +/test/version_tmp/ +/tmp/ + +# Used by dotenv library to load environment variables. +# .env + +# Ignore Byebug command history file. +.byebug_history + +## Specific to RubyMotion: +.dat* +.repl_history +build/ +*.bridgesupport +build-iPhoneOS/ +build-iPhoneSimulator/ + +## Specific to RubyMotion (use of CocoaPods): +# +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# +# vendor/Pods/ + +## Documentation cache and generated files: +/.yardoc/ +/_yardoc/ +/doc/ +/rdoc/ + +## Environment normalization: +/.bundle/ +/vendor/bundle +/lib/bundler/man/ + +# for a library or gem, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# Gemfile.lock +# .ruby-version +# .ruby-gemset + +# unless supporting rvm < 1.11.0 or doing something fancy, ignore this: +.rvmrc + +# Used by RuboCop. Remote config files pulled in from inherit_from directive. +# .rubocop-https?--* diff --git a/templates/Rust.gitignore b/templates/Rust.gitignore new file mode 100644 index 0000000..d01bd1a --- /dev/null +++ b/templates/Rust.gitignore @@ -0,0 +1,21 @@ +# Generated by Cargo +# will have compiled files and executables +debug/ +target/ + +# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries +# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html +Cargo.lock + +# These are backup files generated by rustfmt +**/*.rs.bk + +# MSVC Windows builds of rustc generate these, which store debugging information +*.pdb + +# RustRover +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ \ No newline at end of file diff --git a/templates/SCons.gitignore b/templates/SCons.gitignore new file mode 100644 index 0000000..84eee81 --- /dev/null +++ b/templates/SCons.gitignore @@ -0,0 +1,6 @@ +# for projects that use SCons for building: http://http://www.scons.org/ +.sconsign.dblite + +# When configure fails, SCons outputs these +config.log +.sconf_temp diff --git a/templates/Sass.gitignore b/templates/Sass.gitignore new file mode 100644 index 0000000..159f515 --- /dev/null +++ b/templates/Sass.gitignore @@ -0,0 +1,4 @@ +.sass-cache/ +*.css.map +*.sass.map +*.scss.map diff --git a/templates/Scala.gitignore b/templates/Scala.gitignore new file mode 100644 index 0000000..7169cab --- /dev/null +++ b/templates/Scala.gitignore @@ -0,0 +1,5 @@ +*.class +*.log + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* diff --git a/templates/Scheme.gitignore b/templates/Scheme.gitignore new file mode 100644 index 0000000..cbb89d7 --- /dev/null +++ b/templates/Scheme.gitignore @@ -0,0 +1,7 @@ +*.ss~ +*.ss#* +.#*.ss + +*.scm~ +*.scm#* +.#*.scm diff --git a/templates/Scrivener.gitignore b/templates/Scrivener.gitignore new file mode 100644 index 0000000..5884b0c --- /dev/null +++ b/templates/Scrivener.gitignore @@ -0,0 +1,8 @@ +*/Files/binder.autosave +*/Files/binder.backup +*/Files/search.indexes +*/Files/user.lock +*/Files/Docs/docs.checksum +*/Files/Data/docs.checksum +*/QuickLook/ +*/Settings/ui.plist diff --git a/templates/Sdcc.gitignore b/templates/Sdcc.gitignore new file mode 100644 index 0000000..07ee7d5 --- /dev/null +++ b/templates/Sdcc.gitignore @@ -0,0 +1,8 @@ +# SDCC stuff +*.lnk +*.lst +*.map +*.mem +*.rel +*.rst +*.sym diff --git a/templates/SeamGen.gitignore b/templates/SeamGen.gitignore new file mode 100644 index 0000000..a418cf3 --- /dev/null +++ b/templates/SeamGen.gitignore @@ -0,0 +1,26 @@ +/bootstrap/data +/bootstrap/tmp +/classes/ +/dist/ +/exploded-archives/ +/test-build/ +/test-output/ +/test-report/ +/target/ +temp-testng-customsuite.xml + +# based on http://stackoverflow.com/a/8865858/422476 I am removing inline comments + +#/classes/ all class files +#/dist/ contains generated war files for deployment +#/exploded-archives/ war content generation during deploy (or explode) +#/test-build/ test compilation (ant target for Seam) +#/test-output/ test results +#/test-report/ test report generation for, e.g., Hudson +#/target/ maven output folder +#temp-testng-customsuite.xml generated when running test cases under Eclipse + +# Thanks to @VonC and @kraftan for their helpful answers on a related question +# on StackOverflow.com: +# http://stackoverflow.com/questions/4176687 +# /what-is-the-recommended-source-control-ignore-pattern-for-seam-projects diff --git a/templates/SketchUp.gitignore b/templates/SketchUp.gitignore new file mode 100644 index 0000000..5160df3 --- /dev/null +++ b/templates/SketchUp.gitignore @@ -0,0 +1 @@ +*.skb diff --git a/templates/Smalltalk.gitignore b/templates/Smalltalk.gitignore new file mode 100644 index 0000000..178d87a --- /dev/null +++ b/templates/Smalltalk.gitignore @@ -0,0 +1,31 @@ +# changes file +*.changes +*.chg + +# system image +*.image +*.img7 +*.img + +# Pharo Smalltalk Debug log file +PharoDebug.log + +# Squeak Smalltalk Debug log file +SqueakDebug.log + +# Dolphin Smalltalk source file +*.sml + +# Dolphin Smalltalk error file +*.errors + +# Monticello package cache +/package-cache + +# playground cache +/play-cache +/play-stash + +# Metacello-github cache +/github-cache +github-*.zip diff --git a/templates/Stella.gitignore b/templates/Stella.gitignore new file mode 100644 index 0000000..402a543 --- /dev/null +++ b/templates/Stella.gitignore @@ -0,0 +1,12 @@ +# Atari 2600 (Stella) support for multiple assemblers +# - DASM +# - CC65 + +# Assembled binaries and object directories +obj/ +a.out +*.bin +*.a26 + +# Add in special Atari 7800-based binaries for good measure +*.a78 diff --git a/templates/SugarCRM.gitignore b/templates/SugarCRM.gitignore new file mode 100644 index 0000000..6a183d1 --- /dev/null +++ b/templates/SugarCRM.gitignore @@ -0,0 +1,27 @@ +## SugarCRM +# Ignore custom .htaccess stuff. +/.htaccess +# Ignore the cache directory completely. +# This will break the current behaviour. Which was often leading to +# the misuse of the repository as backup replacement. +# For development the cache directory can be safely ignored and +# therefore it is ignored. +/cache/* +!/cache/index.html +# Ignore some files and directories from the custom directory. +/custom/history/ +/custom/modulebuilder/ +/custom/working/ +/custom/modules/*/Ext/ +/custom/application/Ext/ +# Custom configuration should also be ignored. +/config.php +/config_override.php +# The silent upgrade scripts aren't needed. +/silentUpgrade*.php +# Logs files can safely be ignored. +*.log +# Ignore the new upload directories. +/upload/* +!/upload/index.html +/upload_backup/ diff --git a/templates/Swift.gitignore b/templates/Swift.gitignore new file mode 100644 index 0000000..52fe2f7 --- /dev/null +++ b/templates/Swift.gitignore @@ -0,0 +1,62 @@ +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## User settings +xcuserdata/ + +## Obj-C/Swift specific +*.hmap + +## App packaging +*.ipa +*.dSYM.zip +*.dSYM + +## Playgrounds +timeline.xctimeline +playground.xcworkspace + +# Swift Package Manager +# +# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. +# Packages/ +# Package.pins +# Package.resolved +# *.xcodeproj +# +# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata +# hence it is not needed unless you have added a package configuration file to your project +# .swiftpm + +.build/ + +# CocoaPods +# +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# +# Pods/ +# +# Add this line if you want to avoid checking in source code from the Xcode workspace +# *.xcworkspace + +# Carthage +# +# Add this line if you want to avoid checking in source code from Carthage dependencies. +# Carthage/Checkouts + +Carthage/Build/ + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. +# Instead, use fastlane to re-generate the screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/#source-control + +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots/**/*.png +fastlane/test_output diff --git a/templates/Symfony.gitignore b/templates/Symfony.gitignore new file mode 100644 index 0000000..3dab634 --- /dev/null +++ b/templates/Symfony.gitignore @@ -0,0 +1,52 @@ +# Cache and logs (Symfony2) +/app/cache/* +/app/logs/* +!app/cache/.gitkeep +!app/logs/.gitkeep + +# Email spool folder +/app/spool/* + +# Cache, session files and logs (Symfony3) +/var/cache/* +/var/logs/* +/var/sessions/* +!var/cache/.gitkeep +!var/logs/.gitkeep +!var/sessions/.gitkeep + +# Logs (Symfony4) +/var/log/* +!var/log/.gitkeep + +# Parameters +/app/config/parameters.yml +/app/config/parameters.ini + +# Managed by Composer +/app/bootstrap.php.cache +/var/bootstrap.php.cache +/bin/* +!bin/console +!bin/symfony_requirements +/vendor/ + +# Assets and user uploads +/web/bundles/ +/web/uploads/ + +# PHPUnit +/app/phpunit.xml +/phpunit.xml + +# Build data +/build/ + +# Composer PHAR +/composer.phar + +# Backup entities generated with doctrine:generate:entities command +**/Entity/*~ + +# Embedded web-server pid file +/.web-server-pid diff --git a/templates/SymphonyCMS.gitignore b/templates/SymphonyCMS.gitignore new file mode 100644 index 0000000..671c7ff --- /dev/null +++ b/templates/SymphonyCMS.gitignore @@ -0,0 +1,6 @@ +manifest/cache/ +manifest/logs/ +manifest/tmp/ +symphony/ +workspace/uploads/ +install-log.txt diff --git a/templates/TeX.gitignore b/templates/TeX.gitignore new file mode 100644 index 0000000..a1f5212 --- /dev/null +++ b/templates/TeX.gitignore @@ -0,0 +1,306 @@ +## Core latex/pdflatex auxiliary files: +*.aux +*.lof +*.log +*.lot +*.fls +*.out +*.toc +*.fmt +*.fot +*.cb +*.cb2 +.*.lb + +## Intermediate documents: +*.dvi +*.xdv +*-converted-to.* +# these rules might exclude image files for figures etc. +# *.ps +# *.eps +# *.pdf + +## Generated if empty string is given at "Please type another file name for output:" +.pdf + +## Bibliography auxiliary files (bibtex/biblatex/biber): +*.bbl +*.bcf +*.blg +*-blx.aux +*-blx.bib +*.run.xml + +## Build tool auxiliary files: +*.fdb_latexmk +*.synctex +*.synctex(busy) +*.synctex.gz +*.synctex.gz(busy) +*.pdfsync +*.rubbercache +rubber.cache + +## Build tool directories for auxiliary files +# latexrun +latex.out/ + +## Auxiliary and intermediate files from other packages: +# algorithms +*.alg +*.loa + +# achemso +acs-*.bib + +# amsthm +*.thm + +# beamer +*.nav +*.pre +*.snm +*.vrb + +# changes +*.soc + +# comment +*.cut + +# cprotect +*.cpt + +# elsarticle (documentclass of Elsevier journals) +*.spl + +# endnotes +*.ent + +# fixme +*.lox + +# feynmf/feynmp +*.mf +*.mp +*.t[1-9] +*.t[1-9][0-9] +*.tfm + +#(r)(e)ledmac/(r)(e)ledpar +*.end +*.?end +*.[1-9] +*.[1-9][0-9] +*.[1-9][0-9][0-9] +*.[1-9]R +*.[1-9][0-9]R +*.[1-9][0-9][0-9]R +*.eledsec[1-9] +*.eledsec[1-9]R +*.eledsec[1-9][0-9] +*.eledsec[1-9][0-9]R +*.eledsec[1-9][0-9][0-9] +*.eledsec[1-9][0-9][0-9]R + +# glossaries +*.acn +*.acr +*.glg +*.glo +*.gls +*.glsdefs +*.lzo +*.lzs +*.slg +*.slo +*.sls + +# uncomment this for glossaries-extra (will ignore makeindex's style files!) +# *.ist + +# gnuplot +*.gnuplot +*.table + +# gnuplottex +*-gnuplottex-* + +# gregoriotex +*.gaux +*.glog +*.gtex + +# htlatex +*.4ct +*.4tc +*.idv +*.lg +*.trc +*.xref + +# hypdoc +*.hd + +# hyperref +*.brf + +# knitr +*-concordance.tex +# TODO Uncomment the next line if you use knitr and want to ignore its generated tikz files +# *.tikz +*-tikzDictionary + +# listings +*.lol + +# luatexja-ruby +*.ltjruby + +# makeidx +*.idx +*.ilg +*.ind + +# minitoc +*.maf +*.mlf +*.mlt +*.mtc[0-9]* +*.slf[0-9]* +*.slt[0-9]* +*.stc[0-9]* + +# minted +_minted* +*.pyg + +# morewrites +*.mw + +# newpax +*.newpax + +# nomencl +*.nlg +*.nlo +*.nls + +# pax +*.pax + +# pdfpcnotes +*.pdfpc + +# sagetex +*.sagetex.sage +*.sagetex.py +*.sagetex.scmd + +# scrwfile +*.wrt + +# svg +svg-inkscape/ + +# sympy +*.sout +*.sympy +sympy-plots-for-*.tex/ + +# pdfcomment +*.upa +*.upb + +# pythontex +*.pytxcode +pythontex-files-*/ + +# tcolorbox +*.listing + +# thmtools +*.loe + +# TikZ & PGF +*.dpth +*.md5 +*.auxlock + +# titletoc +*.ptc + +# todonotes +*.tdo + +# vhistory +*.hst +*.ver + +# easy-todo +*.lod + +# xcolor +*.xcp + +# xmpincl +*.xmpi + +# xindy +*.xdy + +# xypic precompiled matrices and outlines +*.xyc +*.xyd + +# endfloat +*.ttt +*.fff + +# Latexian +TSWLatexianTemp* + +## Editors: +# WinEdt +*.bak +*.sav + +# Texpad +.texpadtmp + +# LyX +*.lyx~ + +# Kile +*.backup + +# gummi +.*.swp + +# KBibTeX +*~[0-9]* + +# TeXnicCenter +*.tps + +# auto folder when using emacs and auctex +./auto/* +*.el + +# expex forward references with \gathertags +*-tags.tex + +# standalone packages +*.sta + +# Makeindex log files +*.lpz + +# xwatermark package +*.xwm + +# REVTeX puts footnotes in the bibliography by default, unless the nofootinbib +# option is specified. Footnotes are the stored in a file with suffix Notes.bib. +# Uncomment the next line to have this generated file ignored. +#*Notes.bib diff --git a/templates/Terraform.gitignore b/templates/Terraform.gitignore new file mode 100644 index 0000000..2faf43d --- /dev/null +++ b/templates/Terraform.gitignore @@ -0,0 +1,37 @@ +# Local .terraform directories +**/.terraform/* + +# .tfstate files +*.tfstate +*.tfstate.* + +# Crash log files +crash.log +crash.*.log + +# Exclude all .tfvars files, which are likely to contain sensitive data, such as +# password, private keys, and other secrets. These should not be part of version +# control as they are data points which are potentially sensitive and subject +# to change depending on the environment. +*.tfvars +*.tfvars.json + +# Ignore override files as they are usually used to override resources locally and so +# are not checked in +override.tf +override.tf.json +*_override.tf +*_override.tf.json + +# Ignore transient lock info files created by terraform apply +.terraform.tfstate.lock.info + +# Include override files you do wish to add to version control using negated pattern +# !example_override.tf + +# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan +# example: *tfplan* + +# Ignore CLI configuration files +.terraformrc +terraform.rc diff --git a/templates/Textpattern.gitignore b/templates/Textpattern.gitignore new file mode 100644 index 0000000..3805636 --- /dev/null +++ b/templates/Textpattern.gitignore @@ -0,0 +1,11 @@ +.htaccess +css.php +rpc/ +sites/site*/admin/ +sites/site*/private/ +sites/site*/public/admin/ +sites/site*/public/setup/ +sites/site*/public/theme/ +textpattern/ +HISTORY.txt +README.txt diff --git a/templates/TurboGears2.gitignore b/templates/TurboGears2.gitignore new file mode 100644 index 0000000..122b3de --- /dev/null +++ b/templates/TurboGears2.gitignore @@ -0,0 +1,20 @@ +*.py[co] + +# Default development database +devdata.db + +# Default data directory +data/* + +# Packages +*.egg +*.egg-info +dist +build + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox diff --git a/templates/TwinCAT3.gitignore b/templates/TwinCAT3.gitignore new file mode 100644 index 0000000..7bd6f87 --- /dev/null +++ b/templates/TwinCAT3.gitignore @@ -0,0 +1,25 @@ +# gitignore template for TwinCAT3 +# website: https://www.beckhoff.com/twincat3/ +# +# Recommended: VisualStudio.gitignore + +# TwinCAT files +*.tpy +*.tclrs +*.compiled-library +*.compileinfo +# Don't include the tmc-file rule if either of the following is true: +# 1. You've got TwinCAT C++ projects, as the information in the TMC-file is created manually for the C++ projects (in that case, only (manually) ignore the tmc-files for the PLC projects) +# 2. You've created a standalone PLC-project and added events to it, as these are stored in the TMC-file. +*.tmc +*.tmcRefac +*.library +*.project.~u +*.tsproj.bak +*.xti.bak +LineIDs.dbg +LineIDs.dbg.bak +_Boot/ +_CompileInfo/ +_Libraries/ +_ModuleInstall/ \ No newline at end of file diff --git a/templates/Typo3.gitignore b/templates/Typo3.gitignore new file mode 100644 index 0000000..200c2a2 --- /dev/null +++ b/templates/Typo3.gitignore @@ -0,0 +1,23 @@ +## TYPO3 v6.2 +# Ignore several upload and file directories. +/fileadmin/user_upload/ +/fileadmin/_temp_/ +/fileadmin/_processed_/ +/uploads/ +# Ignore cache +/typo3conf/temp_CACHED* +/typo3conf/temp_fieldInfo.php +/typo3conf/deprecation_*.log +/typo3conf/ENABLE_INSTALL_TOOL +/typo3conf/realurl_autoconf.php +/FIRST_INSTALL +# Ignore system folders, you should have them symlinked. +# If not comment out the following entries. +/typo3 +/typo3_src +/typo3_src-* +/Packages +/.htaccess +/index.php +# Ignore temp directory. +/typo3temp/ diff --git a/templates/Unity.gitignore b/templates/Unity.gitignore new file mode 100644 index 0000000..58cbc82 --- /dev/null +++ b/templates/Unity.gitignore @@ -0,0 +1,72 @@ +# This .gitignore file should be placed at the root of your Unity project directory +# +# Get latest from https://github.com/github/gitignore/blob/main/Unity.gitignore +# +/[Ll]ibrary/ +/[Tt]emp/ +/[Oo]bj/ +/[Bb]uild/ +/[Bb]uilds/ +/[Ll]ogs/ +/[Uu]ser[Ss]ettings/ + +# MemoryCaptures can get excessive in size. +# They also could contain extremely sensitive data +/[Mm]emoryCaptures/ + +# Recordings can get excessive in size +/[Rr]ecordings/ + +# Uncomment this line if you wish to ignore the asset store tools plugin +# /[Aa]ssets/AssetStoreTools* + +# Autogenerated Jetbrains Rider plugin +/[Aa]ssets/Plugins/Editor/JetBrains* + +# Visual Studio cache directory +.vs/ + +# Gradle cache directory +.gradle/ + +# Autogenerated VS/MD/Consulo solution and project files +ExportedObj/ +.consulo/ +*.csproj +*.unityproj +*.sln +*.suo +*.tmp +*.user +*.userprefs +*.pidb +*.booproj +*.svd +*.pdb +*.mdb +*.opendb +*.VC.db + +# Unity3D generated meta files +*.pidb.meta +*.pdb.meta +*.mdb.meta + +# Unity3D generated file on crash reports +sysinfo.txt + +# Builds +*.apk +*.aab +*.unitypackage +*.app + +# Crashlytics generated file +crashlytics-build.properties + +# Packed Addressables +/[Aa]ssets/[Aa]ddressable[Aa]ssets[Dd]ata/*/*.bin* + +# Temporary auto-generated Android Assets +/[Aa]ssets/[Ss]treamingAssets/aa.meta +/[Aa]ssets/[Ss]treamingAssets/aa/* diff --git a/templates/UnrealEngine.gitignore b/templates/UnrealEngine.gitignore new file mode 100644 index 0000000..6e0d95f --- /dev/null +++ b/templates/UnrealEngine.gitignore @@ -0,0 +1,74 @@ +# Visual Studio 2015 user specific files +.vs/ + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app +*.ipa + +# These project files can be generated by the engine +*.xcodeproj +*.xcworkspace +*.sln +*.suo +*.opensdf +*.sdf +*.VC.db +*.VC.opendb + +# Precompiled Assets +SourceArt/**/*.png +SourceArt/**/*.tga + +# Binary Files +Binaries/* +Plugins/**/Binaries/* + +# Builds +Build/* + +# Whitelist PakBlacklist-.txt files +!Build/*/ +Build/*/** +!Build/*/PakBlacklist*.txt + +# Don't ignore icon files in Build +!Build/**/*.ico + +# Built data for maps +*_BuiltData.uasset + +# Configuration files generated by the Editor +Saved/* + +# Compiled source files for the engine to use +Intermediate/* +Plugins/**/Intermediate/* + +# Cache files for the editor to use +DerivedDataCache/* diff --git a/templates/VVVV.gitignore b/templates/VVVV.gitignore new file mode 100644 index 0000000..5df4324 --- /dev/null +++ b/templates/VVVV.gitignore @@ -0,0 +1,6 @@ + +# .v4p backup files +*~.xml + +# Dynamic plugins .dll +bin/ diff --git a/templates/VisualStudio.gitignore b/templates/VisualStudio.gitignore new file mode 100644 index 0000000..8a30d25 --- /dev/null +++ b/templates/VisualStudio.gitignore @@ -0,0 +1,398 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files +*.ncb +*.aps + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml diff --git a/templates/Waf.gitignore b/templates/Waf.gitignore new file mode 100644 index 0000000..dad2b56 --- /dev/null +++ b/templates/Waf.gitignore @@ -0,0 +1,9 @@ +# For projects that use the Waf build system: https://waf.io/ +# Dot-hidden on Unix-like systems +.waf-*-*/ +.waf3-*-*/ +# Hidden directory on Windows (no dot) +waf-*-*/ +waf3-*-*/ +# Lockfile +.lock-waf_*_build diff --git a/templates/WordPress.gitignore b/templates/WordPress.gitignore new file mode 100644 index 0000000..5469669 --- /dev/null +++ b/templates/WordPress.gitignore @@ -0,0 +1,48 @@ +# Wordpress - ignore core, configuration, examples, uploads and logs. +# https://github.com/github/gitignore/blob/main/WordPress.gitignore + +# Core +# +# Note: if you want to stage/commit WP core files +# you can delete this whole section/until Configuration. +/wp-admin/ +/wp-content/index.php +/wp-content/languages +/wp-content/plugins/index.php +/wp-content/themes/index.php +/wp-includes/ +/index.php +/license.txt +/readme.html +/wp-*.php +/xmlrpc.php + +# Configuration +wp-config.php + +# Example themes +/wp-content/themes/twenty*/ + +# Example plugin +/wp-content/plugins/hello.php + +# Uploads +/wp-content/uploads/ + +# Log files +*.log + +# htaccess +/.htaccess + +# All plugins +# +# Note: If you wish to whitelist plugins, +# uncomment the next line +#/wp-content/plugins + +# All themes +# +# Note: If you wish to whitelist themes, +# uncomment the next line +#/wp-content/themes \ No newline at end of file diff --git a/templates/Xojo.gitignore b/templates/Xojo.gitignore new file mode 100644 index 0000000..4915783 --- /dev/null +++ b/templates/Xojo.gitignore @@ -0,0 +1,11 @@ +# Xojo (formerly REALbasic and Real Studio) + +Builds* +*.debug +*.debug.app +Debug*.exe +Debug*/Debug*.exe +Debug*/Debug*\ Libs +*.rbuistate +*.xojo_uistate +*.obsolete* diff --git a/templates/Yeoman.gitignore b/templates/Yeoman.gitignore new file mode 100644 index 0000000..7170d72 --- /dev/null +++ b/templates/Yeoman.gitignore @@ -0,0 +1,6 @@ +node_modules/ +bower_components/ +*.log + +build/ +dist/ diff --git a/templates/Yii.gitignore b/templates/Yii.gitignore new file mode 100644 index 0000000..70f0875 --- /dev/null +++ b/templates/Yii.gitignore @@ -0,0 +1,6 @@ +assets/* +!assets/.gitignore +protected/runtime/* +!protected/runtime/.gitignore +protected/data/*.db +themes/classic/views/ diff --git a/templates/ZendFramework.gitignore b/templates/ZendFramework.gitignore new file mode 100644 index 0000000..f0b7d85 --- /dev/null +++ b/templates/ZendFramework.gitignore @@ -0,0 +1,24 @@ +# Composer files +composer.phar +vendor/ + +# Local configs +config/autoload/*.local.php + +# Binary gettext files +*.mo + +# Data +data/logs/ +data/cache/ +data/sessions/ +data/tmp/ +temp/ + +#Doctrine 2 +data/DoctrineORMModule/Proxy/ +data/DoctrineORMModule/cache/ + +# Legacy ZF1 +demos/ +extras/documentation diff --git a/templates/Zephir.gitignore b/templates/Zephir.gitignore new file mode 100644 index 0000000..839cb5d --- /dev/null +++ b/templates/Zephir.gitignore @@ -0,0 +1,26 @@ +# Cache files, generates by Zephir +.temp/ +.libs/ + +# Object files, generates by linker +*.lo +*.la +*.o +*.loT + +# Files generated by configure and Zephir, +# not required for extension compilation. +ext/build/ +ext/modules/ +ext/Makefile* +ext/config* +ext/acinclude.m4 +ext/aclocal.m4 +ext/autom4te* +ext/install-sh +ext/ltmain.sh +ext/missing +ext/mkinstalldirs +ext/run-tests.php +ext/.deps +ext/libtool diff --git a/templates/community/AWS/CDK.gitignore b/templates/community/AWS/CDK.gitignore new file mode 100644 index 0000000..3fc2f79 --- /dev/null +++ b/templates/community/AWS/CDK.gitignore @@ -0,0 +1,4 @@ +# CDK asset staging directory. +# For more information about AWS-CDK, see https://docs.aws.amazon.com/cdk/ +.cdk.staging/ +cdk.out/ diff --git a/templates/community/AWS/SAM.gitignore b/templates/community/AWS/SAM.gitignore new file mode 100644 index 0000000..dc9d020 --- /dev/null +++ b/templates/community/AWS/SAM.gitignore @@ -0,0 +1,5 @@ +# gitignore template for AWS Serverless Application Model project +# website: https://docs.aws.amazon.com/serverless-application-model + +# Ignore build folder +.aws-sam/ diff --git a/templates/community/Alteryx.gitignore b/templates/community/Alteryx.gitignore new file mode 100644 index 0000000..a8e1341 --- /dev/null +++ b/templates/community/Alteryx.gitignore @@ -0,0 +1,44 @@ +# gitignore template for Alteryx Designer +# website: https://www.alteryx.com/ +# website: https://help.alteryx.com/current/designer/alteryx-file-types + +# Alteryx Data Files +*.yxdb +*.cydb +*.cyidx +*.rptx +*.vvf +*.aws + +# Alteryx Special Files +*.yxwv +*.yxft +*.yxbe +*.bak +*.pcxml +*.log +*.bin +*.yxlang +CASS.ini + +# Alteryx License Files +*.yxlc +*.slc +*.cylc +*.alc +*.gzlc + +## gitignore reference sites +# https://git-scm.com/book/en/v2/Git-Basics-Recording-Changes-to-the-Repository#Ignoring-Files +# https://git-scm.com/docs/gitignore +# https://help.github.com/articles/ignoring-files/ + +## Useful knowledge from stackoverflow +# Even if you haven't tracked the files so far, git seems to be able to "know" about them even after you add them to .gitignore. +# WARNING: First commit your current changes, or you will lose them. +# Then run the following commands from the top folder of your git repo: +# git rm -r --cached . +# git add . +# git commit -m "fixed untracked files" + +# author: Kacper Ksieski \ No newline at end of file diff --git a/templates/community/AltiumDesigner.gitignore b/templates/community/AltiumDesigner.gitignore new file mode 100644 index 0000000..5e41049 --- /dev/null +++ b/templates/community/AltiumDesigner.gitignore @@ -0,0 +1,20 @@ +# For PCBs designed using Altium Designer +# Website: https://www.altium.com/altium-designer/ + +# Directories containing cache data +History +__Previews + +# Directories containing logs and generated outputs +Project\ Logs* +Project\ Outputs* + +# Misc files generated by altium +debug.log +Status\ Report.txt +*.PcbDoc.htm +*.SchDocPreview +*.PcbDocPreview + +# Lock files sometimes left behind +.~lock.* diff --git a/templates/community/AutoIt.gitignore b/templates/community/AutoIt.gitignore new file mode 100644 index 0000000..1310b93 --- /dev/null +++ b/templates/community/AutoIt.gitignore @@ -0,0 +1,8 @@ +# Compiled Scripts +*.a3x + +# Tidy Auto-Generated Backups +Backup/* + +# Au3Stripper Auto-Generated Files +*_stripped.au3 diff --git a/templates/community/B4X.gitignore b/templates/community/B4X.gitignore new file mode 100644 index 0000000..197c7bb --- /dev/null +++ b/templates/community/B4X.gitignore @@ -0,0 +1,3 @@ +**/Objects +**/AutoBackups +*.meta diff --git a/templates/community/Bazel.gitignore b/templates/community/Bazel.gitignore new file mode 100644 index 0000000..bc3afc2 --- /dev/null +++ b/templates/community/Bazel.gitignore @@ -0,0 +1,13 @@ +# gitignore template for Bazel build system +# website: https://bazel.build/ + +# Ignore all bazel-* symlinks. There is no full list since this can change +# based on the name of the directory bazel is cloned into. +/bazel-* + +# Directories for the Bazel IntelliJ plugin containing the generated +# IntelliJ project files and plugin configuration. Seperate directories are +# for the IntelliJ, Android Studio and CLion versions of the plugin. +/.ijwb/ +/.aswb/ +/.clwb/ diff --git a/templates/community/Beef.gitignore b/templates/community/Beef.gitignore new file mode 100644 index 0000000..5c26f6a --- /dev/null +++ b/templates/community/Beef.gitignore @@ -0,0 +1,3 @@ +build/ +recovery/ +BeefSpace_User.toml diff --git a/templates/community/DotNet/InforCMS.gitignore b/templates/community/DotNet/InforCMS.gitignore new file mode 100644 index 0000000..29c7d8e --- /dev/null +++ b/templates/community/DotNet/InforCMS.gitignore @@ -0,0 +1,15 @@ +# gitignore template for InforCRM (formerly SalesLogix) +# website: https://www.infor.com/product-summary/cx/infor-crm/ +# +# Recommended: VisualStudio.gitignore + +# Ignore model files that are auto-generated +ModelIndex.xml +ExportedFiles.xml + +# Ignore deployment files +[Mm]odel/[Dd]eployment + +# Force include portal SupportFiles +!Model/Portal/*/SupportFiles/[Bb]in/ +!Model/Portal/PortalTemplates/*/SupportFiles/[Bb]in diff --git a/templates/community/DotNet/Kentico.gitignore b/templates/community/DotNet/Kentico.gitignore new file mode 100644 index 0000000..3b278b6 --- /dev/null +++ b/templates/community/DotNet/Kentico.gitignore @@ -0,0 +1,64 @@ +# gitignore template for using Kentico CMS +# website: http://www.kentico.com/ +# +# Recommended template: VisualStudio.gitignore + +# Include some Kentico folders excluded by Visual Studio rules +!CMS/CMSAdminControls/*/ +!CMS/CMSModules/System/*/ +!CMS/App_Data/CIRepository/** + +# Kentico temporary/environment files +CMS/App_Data/AzureCache +CMS/App_Data/AzureTemp +CMS/App_Data/CMSModules/DeviceProfile/logFiftyOne.txt +CMS/App_Data/CMSModules/DeviceProfiles/logFiftyOne.txt +CMS/App_Data/CMSModules/WebFarm/webfarm.sync +CMS/App_Data/CMSTemp +CMS/App_Data/Persistent +CMS/CMSSiteUtils/Export +CMS/CMSSiteUtils/Import + +# Ignore all smart search indexes, but not the other system folder contents +CMS/App_Data/CMSModules/SmartSearch/** +!CMS/App_Data/CMSModules/SmartSearch/*/ +!CMS/App_Data/CMSModules/SmartSearch/_StopWords/** +!CMS/App_Data/CMSModules/SmartSearch/_Synonyms/** + +## Kentico Starter Sites +# Starter site resource Files +CMS/App_Data/DancingGoat + +# Starter site web templates +CMS/App_Data/Templates/CommunitySite +CMS/App_Data/Templates/CorporateSite +CMS/App_Data/Templates/DancingGoat +CMS/App_Data/Templates/EcommerceSite +CMS/App_Data/Templates/IntranetPortal +CMS/App_Data/Templates/PersonalSite + +# Starter site app themes +CMS/App_Themes/CommunitySite +CMS/App_Themes/CorporateSite +CMS/App_Themes/EcommerceSite +CMS/App_Themes/IntranetPortal* +CMS/App_Themes/PersonalSite + +# Starter site ASPX templates +CMS/CMSTemplates/CorporateSite + +# Starter site media libraries +CMS/CommunitySite +CMS/CorporateSite +CMS/DancingGoat +CMS/EcommerceSite +CMS/IntranetPortal +CMS/PersonalSite + +## Project specific ignores +# Sensitive settings +AppSettings.config +ConnectionStrings.config + +# Project media libraries (recommend shared file storage) +# e.g. CMS/{SiteCodeName} diff --git a/templates/community/DotNet/Umbraco.gitignore b/templates/community/DotNet/Umbraco.gitignore new file mode 100644 index 0000000..1dc3da5 --- /dev/null +++ b/templates/community/DotNet/Umbraco.gitignore @@ -0,0 +1,52 @@ +## Ignore Umbraco files/folders generated for each instance +## +## Get latest from https://github.com/github/gitignore/blob/main/Umbraco.gitignore + +# Note: VisualStudio gitignore rules may also be relevant + +# Umbraco +# Ignore unimportant folders generated by Umbraco +**/App_Data/Logs/ +**/App_Data/[Pp]review/ +**/App_Data/TEMP/ +**/App_Data/NuGetBackup/ + +# Ignore Umbraco content cache file +**/App_Data/umbraco.config + +## this [Uu]mbraco/ folder should be created by cmd like `Install-Package UmbracoCms -Version 8.5.3` +## you can find your Umbraco version in your Web.config. (i.e. ) +## Uncomment this line if you think it fits the way you work on your project. +## **/[Uu]mbraco/ + +## The [Mm]edia/ folder contains content. Content may vary by environment and should therefore not be added to source control. +## Uncomment this line if you think it fits the way you work on your project. +## **/[Mm]edia/ + +# Don't ignore Umbraco packages (VisualStudio.gitignore mistakes this for a NuGet packages folder) +# Make sure to include details from VisualStudio.gitignore BEFORE this +!**/App_Data/[Pp]ackages/* +!**/[Uu]mbraco/[Dd]eveloper/[Pp]ackages/* +!**/[Uu]mbraco/[Vv]iews/[Pp]ackages/* + +# ImageProcessor DiskCache +**/App_Data/cache/ + +# Ignore the Models Builder models out of date flag +**/ood.flag + +# NEW for version 9 .Net 5 (Core) +#ignore umbraco backoffice assest from wwwroot +**/wwwroot/umbraco/ + +# SQLite files +*.sqlite.db* + +#ignore umbraco data/views/settings +**/umbraco/ + +#include default location for modelsbuilder output +!**/umbraco/models + +#include default location for packages +!**/umbraco/Data/packages diff --git a/templates/community/DotNet/core.gitignore b/templates/community/DotNet/core.gitignore new file mode 100644 index 0000000..c4d9393 --- /dev/null +++ b/templates/community/DotNet/core.gitignore @@ -0,0 +1,38 @@ +*.swp +*.*~ +project.lock.json +.DS_Store +*.pyc +nupkg/ + +# Visual Studio Code +.vscode + +# Rider +.idea + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +build/ +bld/ +[Bb]in/ +[Oo]bj/ +[Oo]ut/ +msbuild.log +msbuild.err +msbuild.wrn + +# Visual Studio 2015 +.vs/ + diff --git a/templates/community/Elixir/Phoenix.gitignore b/templates/community/Elixir/Phoenix.gitignore new file mode 100644 index 0000000..522c8d5 --- /dev/null +++ b/templates/community/Elixir/Phoenix.gitignore @@ -0,0 +1,22 @@ +# gitignore template for Phoenix projects +# website: http://www.phoenixframework.org/ +# +# Recommended template: Elixir.gitignore + +# Temporary files +/tmp + +# Static artifacts +/node_modules +/assets/node_modules + +# Since we are building assets from web/static, +# we ignore priv/static. You may want to comment +# this depending on your deployment strategy. +/priv/static/ + +# Installer-related files +/installer/_build +/installer/tmp +/installer/doc +/installer/deps diff --git a/templates/community/Exercism.gitignore b/templates/community/Exercism.gitignore new file mode 100644 index 0000000..b74882c --- /dev/null +++ b/templates/community/Exercism.gitignore @@ -0,0 +1,5 @@ +# gitignore template for Exercism project +# website: https://exercism.io/ + +# Ignore .exercism folder which contain sensitive data +.exercism diff --git a/templates/community/GNOME/GNOMEShellExtension.gitignore b/templates/community/GNOME/GNOMEShellExtension.gitignore new file mode 100644 index 0000000..a608cbb --- /dev/null +++ b/templates/community/GNOME/GNOMEShellExtension.gitignore @@ -0,0 +1,3 @@ +# Ignored files for GNOME extension git repository + +*.zip diff --git a/templates/community/Golang/Go.AllowList.gitignore b/templates/community/Golang/Go.AllowList.gitignore new file mode 100644 index 0000000..a309a01 --- /dev/null +++ b/templates/community/Golang/Go.AllowList.gitignore @@ -0,0 +1,23 @@ +# Allowlisting gitignore template for GO projects prevents us +# from adding various unwanted local files, such as generated +# files, developer configurations or IDE-specific files etc. +# +# Recommended: Go.AllowList.gitignore + +# Ignore everything +* + +# But not these files... +!/.gitignore + +!*.go +!go.sum +!go.mod + +!README.md +!LICENSE + +# !Makefile + +# ...even if they are in subdirectories +!*/ diff --git a/templates/community/Golang/Hugo.gitignore b/templates/community/Golang/Hugo.gitignore new file mode 100644 index 0000000..86c95ef --- /dev/null +++ b/templates/community/Golang/Hugo.gitignore @@ -0,0 +1,13 @@ +# Generated files by hugo +/public/ +/resources/_gen/ +/assets/jsconfig.json +hugo_stats.json + +# Executable may be added to repository +hugo.exe +hugo.darwin +hugo.linux + +# Temporary lock file while building +/.hugo_build.lock diff --git a/templates/community/Gretl.gitignore b/templates/community/Gretl.gitignore new file mode 100644 index 0000000..582489e --- /dev/null +++ b/templates/community/Gretl.gitignore @@ -0,0 +1,8 @@ +# gitignore template for Gretl +# website: http://gretl.sourceforge.net/ + +# Auto-generated log file is overwritten whenever you start a new session +session.inp + +# Auto-generated temporary string code table +string_table.txt diff --git a/templates/community/Java/JBoss4.gitignore b/templates/community/Java/JBoss4.gitignore new file mode 100644 index 0000000..d416538 --- /dev/null +++ b/templates/community/Java/JBoss4.gitignore @@ -0,0 +1,19 @@ +# gitignore for JBoss v4 projects + +/server/all/data +/server/all/log +/server/all/tmp +/server/all/work +/server/default/data +/server/default/log +/server/default/tmp +/server/default/work +/server/minimal/data +/server/minimal/log +/server/minimal/tmp +/server/minimal/work + +# Note: +# there may be other directories that contain *.xml.failed or *.war.failed files +/server/default/deploy/*.xml.failed +/server/default/deploy/*.war.failed diff --git a/templates/community/Java/JBoss6.gitignore b/templates/community/Java/JBoss6.gitignore new file mode 100644 index 0000000..dc7dce7 --- /dev/null +++ b/templates/community/Java/JBoss6.gitignore @@ -0,0 +1,33 @@ +# gitignore for JBoss v6 projects +# +# Note: to ensure empty directories remain part of the repository, like +# `/server/minimal/lib`, you should add an empty `.gitignore` or `.gitkeep` file +# to the directory - otherwise you may have issues when starting the service. + +/server/all/data +/server/all/log +/server/all/tmp +/server/all/work +/server/default/data +/server/default/log +/server/default/tmp +/server/default/work +/server/minimal/data +/server/minimal/log +/server/minimal/tmp +/server/minimal/work +/server/jbossweb-standalone/data +/server/jbossweb-standalone/log +/server/jbossweb-standalone/tmp +/server/jbossweb-standalone/work +/server/standard/data +/server/standard/log +/server/standard/tmp +/server/standard/work +/server/default/deploy/*.jar.failed +/server/default/deploy/*.jar.dodeploy +/server/default/deploy/*.xml.failed +/server/default/deploy/*.xml.dodeploy +/server/default/deploy/*.war.failed +/server/default/deploy/*.war.dodeploy + diff --git a/templates/community/JavaScript/Cordova.gitignore b/templates/community/JavaScript/Cordova.gitignore new file mode 100644 index 0000000..4bd8785 --- /dev/null +++ b/templates/community/JavaScript/Cordova.gitignore @@ -0,0 +1,10 @@ +# gitignore template for the Cordova framework +# website: https://cordova.apache.org/ +# +# Recommended template: Node.gitignore + +# App platform binaries and built files +/platforms + +# Optional to ignore plugin Git clones +#/plugins diff --git a/templates/community/JavaScript/Meteor.gitignore b/templates/community/JavaScript/Meteor.gitignore new file mode 100644 index 0000000..7194fd0 --- /dev/null +++ b/templates/community/JavaScript/Meteor.gitignore @@ -0,0 +1,12 @@ +# gitignore template for the Meteor framework +# website: https://www.meteor.com/ +# +# Recommended template: Node.gitignore + +# protect api keys in setting json +settings-production.json +settings.json + +# protect your mup.json settings +mup.json +mup.js diff --git a/templates/community/JavaScript/NWjs.gitignore b/templates/community/JavaScript/NWjs.gitignore new file mode 100644 index 0000000..f006b08 --- /dev/null +++ b/templates/community/JavaScript/NWjs.gitignore @@ -0,0 +1,29 @@ +# gitignore template for NW.js projects +# website: https://nwjs.io/ + +# Seen in standard and sdk versions +credits.html +locales/ +libEGL.dll +libGLEv2.dll +node.dll +nw.dll +nw.exe +natives_blob.bin +nw_100_percent.pak +nw_200_percent.pak +nw_elf.dll +snapshot_blob.bin +resources.pak + +# Seen only in standard +d3dcompiler_47.dll +ffmpeg.dll +icudtl.dat + +# Seen only in sdk +pnacl/ +chromedriver.exe +nacl_irt_x86_64.nexe +nwjc.exe +payload.exe diff --git a/templates/community/JavaScript/Vue.gitignore b/templates/community/JavaScript/Vue.gitignore new file mode 100644 index 0000000..4538951 --- /dev/null +++ b/templates/community/JavaScript/Vue.gitignore @@ -0,0 +1,9 @@ +# gitignore template for Vue.js projects +# +# Recommended template: Node.gitignore + +# TODO: where does this rule come from? +docs/_book + +# TODO: where does this rule come from? +test/ diff --git a/templates/community/LensStudio.gitignore b/templates/community/LensStudio.gitignore new file mode 100644 index 0000000..5aa2e95 --- /dev/null +++ b/templates/community/LensStudio.gitignore @@ -0,0 +1,16 @@ +# gitignore template for LensStudio +# website: https://lensstudio.snapchat.com/ + +# macOS/IDE # +.DS_Store +.idea + +# js # +node_modules +yarn.lock + +# Python # +__pycache__/ +*.py[cod] +*$py.class +[Bb]ackup* diff --git a/templates/community/Linux/Snap.gitignore b/templates/community/Linux/Snap.gitignore new file mode 100644 index 0000000..ea38c6d --- /dev/null +++ b/templates/community/Linux/Snap.gitignore @@ -0,0 +1,14 @@ +# gitginore template for creating Snap packages +# website: https://snapcraft.io/ + +parts/ +prime/ +stage/ +*.snap + +# Snapcraft global state tracking data(automatically generated) +# https://forum.snapcraft.io/t/location-to-save-global-state/768 +/snap/.snapcraft/ + +# Source archive packed by `snapcraft cleanbuild` before pushing to the LXD container +/*_source.tar.bz2 diff --git a/templates/community/Logtalk.gitignore b/templates/community/Logtalk.gitignore new file mode 100644 index 0000000..c680e64 --- /dev/null +++ b/templates/community/Logtalk.gitignore @@ -0,0 +1,19 @@ +# gitignore template for LogTalk, a programming language that builds upon Prolog +# website: https://logtalk.org/ + +# Logtalk temporary file directories +.lgt_tmp/ +lgt_tmp/ + +# Logtalk default unit testing and doclet results and logs directories +logtalk_tester_logs/ +logtalk_doclet_logs/ + +# backend Prolog compiler temporary files +.pl-history +*.out +*.xwam +*.qo +*.ql +*.itf +*.po diff --git a/templates/community/NasaSpecsIntact.gitignore b/templates/community/NasaSpecsIntact.gitignore new file mode 100644 index 0000000..be53af0 --- /dev/null +++ b/templates/community/NasaSpecsIntact.gitignore @@ -0,0 +1,40 @@ +# gitignore template for Nasa SpecsIntact (SI) +# Website: https://specsintact.ksc.nasa.gov/ +# +# Recommended: +# MicrosoftOffice.gitignore +# + +# SpecsIntact (SI) Locking file; this would lock everyone out. +*.se$ + +# SI Reports; auto-generated. They do not belong in the repository +# as they will be re-created exactly when using a specific checkout point. +*.RPT +ADDRVER.* +BRKTVER.* +DUPEREF.* +REFVER.* +SECTVER.* +SUBMVER.* +TTLDIFFS.* + +# SpecsIntact files that change a lot and don't actually affect SI +# PULL.TBL is an auto-generated file to help speed SI loading. +PULL.TBL +pulltbl.bck + +# Tailoring information. +# Keep tailor.tag; it is a list of tailoring options in SI. + +# JOB.OTL informs SI where a spec section came from. +# Keeping the old one isn't useful in git. +JOB.OTL.OLD + +# OneNote TOC Files; SI Work Directories may be installed in a location co-located with OneNote +# notebooks, and if so, OneNote will litter the SI folder with these. +*.onetoc* + +# Log files, typically tagfix or other auto generated logs that aren't useful +# outside of the user that made them and clutter up the index. +*.log diff --git a/templates/community/Nix.gitignore b/templates/community/Nix.gitignore new file mode 100644 index 0000000..1fd04ef --- /dev/null +++ b/templates/community/Nix.gitignore @@ -0,0 +1,3 @@ +# Ignore build outputs from performing a nix-build or `nix build` command +result +result-* diff --git a/templates/community/OpenSSL.gitignore b/templates/community/OpenSSL.gitignore new file mode 100644 index 0000000..732b1f1 --- /dev/null +++ b/templates/community/OpenSSL.gitignore @@ -0,0 +1,34 @@ +# OpenSSL-related files best not committed + +## Certificate Authority +*.ca + +## Certificate +*.crt + +## Certificate Sign Request +*.csr + +## Certificate +*.der + +## Key database file +*.kdb + +## OSCP request data +*.org + +## PKCS #12 +*.p12 + +## PEM-encoded certificate data +*.pem + +## Random number seed +*.rnd + +## SSLeay data +*.ssleay + +## S/MIME message +*.smime diff --git a/templates/community/PHP/Bitrix.gitignore b/templates/community/PHP/Bitrix.gitignore new file mode 100644 index 0000000..d288916 --- /dev/null +++ b/templates/community/PHP/Bitrix.gitignore @@ -0,0 +1,23 @@ +# gitignore template for 1C-Bitrix, a PHP-based CMS +# website: https://www.1c-bitrix.ru + +#Exclude all of core files +/bitrix/* + +#But not the templates and non bitrix components +!/bitrix/templates +!/bitrix/components +/bitrix/components/bitrix + +#Exclude bitrix gadgets +!/bitrix/gadgets +/bitrix/gadgets/bitrix + +#User can use that directory to store some stuff, but it's not really recommended, just use /local instead of this +!/bitrix/php_interface/ + +#Exclude database configs +/bitrix/php_interface/dbconn.php + +#Exclude default file storage directory +/upload/ diff --git a/templates/community/PHP/CodeSniffer.gitignore b/templates/community/PHP/CodeSniffer.gitignore new file mode 100644 index 0000000..cf8b8a9 --- /dev/null +++ b/templates/community/PHP/CodeSniffer.gitignore @@ -0,0 +1,6 @@ +# gitignore for the PHP Codesniffer framework +# website: https://github.com/squizlabs/PHP_CodeSniffer +# +# Recommended template: PHP.gitignore + +/wpcs/* diff --git a/templates/community/PHP/Drupal7.gitignore b/templates/community/PHP/Drupal7.gitignore new file mode 100644 index 0000000..da61e4a --- /dev/null +++ b/templates/community/PHP/Drupal7.gitignore @@ -0,0 +1,43 @@ +# gitignore template for Drupal 7 projects +# +# It is recommended that you use `Drupal.gitignore` as this is the latest version + +# Ignore configuration files that may contain sensitive information. +sites/*/*settings*.php +sites/example.sites.php + +# Ignore paths that contain generated content. +files/ +sites/*/files +sites/*/private +sites/*/translations + +# Ignore default text files +robots.txt +/CHANGELOG.txt +/COPYRIGHT.txt +/INSTALL*.txt +/LICENSE.txt +/MAINTAINERS.txt +/UPGRADE.txt +/README.txt +sites/README.txt +sites/all/libraries/README.txt +sites/all/modules/README.txt +sites/all/themes/README.txt + +# Ignore everything but the "sites" folder ( for non core developer ) +.htaccess +web.config +authorize.php +cron.php +index.php +install.php +update.php +xmlrpc.php +/includes +/misc +/modules +/profiles +/scripts +/themes diff --git a/templates/community/PHP/Jigsaw.gitignore b/templates/community/PHP/Jigsaw.gitignore new file mode 100644 index 0000000..7cf61e8 --- /dev/null +++ b/templates/community/PHP/Jigsaw.gitignore @@ -0,0 +1,6 @@ +# gitignore template for Jigsaw Static Site Generator +# +# website - https://jigsaw.tighten.co + +# Ignore build folder +build_* diff --git a/templates/community/PHP/Magento1.gitignore b/templates/community/PHP/Magento1.gitignore new file mode 100644 index 0000000..aac92ca --- /dev/null +++ b/templates/community/PHP/Magento1.gitignore @@ -0,0 +1,45 @@ +# gitignore template for Magento v1 projects +# +# It is recommended that you use `Magento.gitignore` as this is the latest version + +/PATCH_*.sh + +/app/etc/local.xml + +/media/* +!/media/.htaccess + +!/media/customer +/media/customer/* +!/media/customer/.htaccess + +!/media/dhl +/media/dhl/* +!/media/dhl/logo.jpg + +!/media/downloadable +/media/downloadable/* +!/media/downloadable/.htaccess + +!/media/xmlconnect +/media/xmlconnect/* + +!/media/xmlconnect/custom +/media/xmlconnect/custom/* +!/media/xmlconnect/custom/ok.gif + +!/media/xmlconnect/original +/media/xmlconnect/original/* +!/media/xmlconnect/original/ok.gif + +!/media/xmlconnect/system +/media/xmlconnect/system/* +!/media/xmlconnect/system/ok.gif + +/var/* +!/var/.htaccess + +!/var/package +/var/package/* +!/var/package/*.xml + diff --git a/templates/community/PHP/Magento2.gitignore b/templates/community/PHP/Magento2.gitignore new file mode 100644 index 0000000..98329d7 --- /dev/null +++ b/templates/community/PHP/Magento2.gitignore @@ -0,0 +1,54 @@ +/sitemap +/sitemap.xml +/pub/sitemap +/pub/sitemap.xml +/app/config_sandbox +/app/etc/config.php +/app/etc/env.php +/app/code/Magento/TestModule* +/lib/internal/flex/uploader/.actionScriptProperties +/lib/internal/flex/uploader/.flexProperties +/lib/internal/flex/uploader/.project +/lib/internal/flex/uploader/.settings +/lib/internal/flex/varien/.actionScriptProperties +/lib/internal/flex/varien/.flexLibProperties +/lib/internal/flex/varien/.project +/lib/internal/flex/varien/.settings +/.grunt +/.php_cs.cache +/grunt-config.json +/dev/tools/grunt/configs/local-themes.js + +/pub/media/*.* +!/pub/media/.htaccess +/pub/media/attribute/* +!/pub/media/attribute/.htaccess +/pub/media/analytics/* +/pub/media/catalog/* +!/pub/media/catalog/.htaccess +/pub/media/customer/* +!/pub/media/customer/.htaccess +/pub/media/downloadable/* +!/pub/media/downloadable/.htaccess +/pub/media/favicon/* +/pub/media/import/* +!/pub/media/import/.htaccess +/pub/media/logo/* +/pub/media/theme/* +/pub/media/theme_customization/* +!/pub/media/theme_customization/.htaccess +/pub/media/wysiwyg/* +!/pub/media/wysiwyg/.htaccess +/pub/media/tmp/* +!/pub/media/tmp/.htaccess +/pub/media/captcha/* +!/pub/media/captcha/.htaccess +/pub/static/* +!/pub/static/.htaccess + +/var/* +!/var/.htaccess +/vendor/* +!/vendor/.htaccess +/generated/* +!/generated/.htaccess diff --git a/templates/community/PHP/Pimcore.gitignore b/templates/community/PHP/Pimcore.gitignore new file mode 100644 index 0000000..4090b4a --- /dev/null +++ b/templates/community/PHP/Pimcore.gitignore @@ -0,0 +1,53 @@ +# gitignore template for Pimcore CMS + +# pimcore source files +/pimcore + +# asset files +/website/var/assets/* + +# backups +/website/var/backup/* + +# file cache +/website/var/cache/* + +# generated PHP classes, keep definition files (.psf) +/website/var/classes/Object* +!/website/var/classes/objectbricks + +# various configuration files +/website/var/config/system.xml +/website/var/config/cache.xml +/website/var/config/robots.txt +/website/var/config/Geo* +/website/var/config/object/* +/website/var/config/portal/* +/website/var/config/sqlreport/* + +# sent e-mail log files +/website/var/email/* + +# log files +/website/var/log/*.log + +# serialized recyclebin files +/website/var/recyclebin/* + +# search plugin +/website/var/search/* + +# various temp files +/website/var/system/* +/website/var/tmp/* + +# serialized version files +/website/var/versions/asset/* +/website/var/versions/document/* +/website/var/versions/object/* + +# user profile images +/website/var/user-image/* + +# keep .dummy files +!.dummy diff --git a/templates/community/PHP/ThinkPHP.gitignore b/templates/community/PHP/ThinkPHP.gitignore new file mode 100644 index 0000000..348ebf0 --- /dev/null +++ b/templates/community/PHP/ThinkPHP.gitignore @@ -0,0 +1,8 @@ +# gitignore template for ThinkPHP v3.2.3 +# website: http://www.thinkphp.cn/ + +# Logs and Cache files +/Application/Runtime/ + +# Common configure file +/Application/Common/Conf/config.php \ No newline at end of file diff --git a/templates/community/Puppet.gitignore b/templates/community/Puppet.gitignore new file mode 100644 index 0000000..4fcdca7 --- /dev/null +++ b/templates/community/Puppet.gitignore @@ -0,0 +1,16 @@ +# gitignore template for Puppet modules +# website: https://forge.puppet.com/ + +# Built packages +pkg/* + +# Should run on multiple platforms so don't check in +Gemfile.lock + +# Tests +spec/fixtures/* +coverage/* + +# Third-party +vendor/* +.bundle/* diff --git a/templates/community/Python/JupyterNotebooks.gitignore b/templates/community/Python/JupyterNotebooks.gitignore new file mode 100644 index 0000000..f27f90d --- /dev/null +++ b/templates/community/Python/JupyterNotebooks.gitignore @@ -0,0 +1,12 @@ +# gitignore template for Jupyter Notebooks +# website: http://jupyter.org/ + +.ipynb_checkpoints +*/.ipynb_checkpoints/* + +# IPython +profile_default/ +ipython_config.py + +# Remove previous ipynb_checkpoints +# git rm -r .ipynb_checkpoints/ diff --git a/templates/community/Python/Nikola.gitignore b/templates/community/Python/Nikola.gitignore new file mode 100644 index 0000000..dac64b4 --- /dev/null +++ b/templates/community/Python/Nikola.gitignore @@ -0,0 +1,7 @@ +# gitignore template for Nikola static site generator +# website: https://getnikola.com/ + +.doit.db +*.py[cod] +cache/ +output/ diff --git a/templates/community/ROS2.gitignore b/templates/community/ROS2.gitignore new file mode 100644 index 0000000..6cc824d --- /dev/null +++ b/templates/community/ROS2.gitignore @@ -0,0 +1,29 @@ +install/ +log/ +build/ + +# Ignore generated docs +*.dox +*.wikidoc + +# eclipse stuff +.project +.cproject + +# qcreator stuff +CMakeLists.txt.user + +srv/_*.py +*.pcd +*.pyc +qtcreator-* +*.user + +*~ + +# Emacs +.#* + +# Colcon custom files +COLCON_IGNORE +AMENT_IGNORE diff --git a/templates/community/Racket.gitignore b/templates/community/Racket.gitignore new file mode 100644 index 0000000..962478a --- /dev/null +++ b/templates/community/Racket.gitignore @@ -0,0 +1,15 @@ +# gitignore template for the Racket language +# website: http://www.racket-lang.org/ + +# DrRacket autosave files +*.rkt~ +*.rkt.bak +\#*.rkt# +\#*.rkt#*# + +# Compiled racket bytecode +compiled/ +*.zo + +# Dependency tracking files +*.dep diff --git a/templates/community/Red.gitignore b/templates/community/Red.gitignore new file mode 100644 index 0000000..b78a06f --- /dev/null +++ b/templates/community/Red.gitignore @@ -0,0 +1,16 @@ +# gitignore template for Red programming language +# website: http://www.red-lang.org/ + +# Red Compiled code +*.red + +# Libraries +crush.dll +crush.dylib +crush.so + +# Files generated during test +quick-test/quick-test.log +quick-test/runnable/ +system/tests/source/units/auto-tests/ +tests/source/units/auto-tests/ diff --git a/templates/community/SPFx.gitignore b/templates/community/SPFx.gitignore new file mode 100644 index 0000000..5a66b34 --- /dev/null +++ b/templates/community/SPFx.gitignore @@ -0,0 +1,33 @@ +#SharePoint Framework (SPFx) +# Logs +logs +*.log +npm-debug.log* + +# Dependency directories +node_modules + +# Build generated files +dist +lib +solution +temp +*.sppkg + +# Coverage directory used by tools like istanbul +coverage + +# OSX +.DS_Store + +# Visual Studio files +.ntvs_analysis.dat +.vs +bin +obj + +# Resx Generated Code +*.resx.ts + +# Styles Generated Code +*.scss.ts diff --git a/templates/community/Splunk.gitignore b/templates/community/Splunk.gitignore new file mode 100644 index 0000000..d063da0 --- /dev/null +++ b/templates/community/Splunk.gitignore @@ -0,0 +1,8 @@ +# gitignore template for Splunk apps +# documentation: http://docs.splunk.com/Documentation/Splunk/6.2.3/admin/Defaultmetaconf + +# Splunk local meta file +local.meta + +# Splunk local folder +local diff --git a/templates/community/Strapi.gitignore b/templates/community/Strapi.gitignore new file mode 100644 index 0000000..70e6542 --- /dev/null +++ b/templates/community/Strapi.gitignore @@ -0,0 +1,135 @@ +############################ +# OS X +############################ + +.DS_Store +.AppleDouble +.LSOverride +Icon +.Spotlight-V100 +.Trashes +._* + + +############################ +# Linux +############################ + +*~ + + +############################ +# Windows +############################ + +Thumbs.db +ehthumbs.db +Desktop.ini +$RECYCLE.BIN/ +*.cab +*.msi +*.msm +*.msp + + +############################ +# Packages +############################ + +*.7z +*.csv +*.dat +*.dmg +*.gz +*.iso +*.jar +*.rar +*.tar +*.zip +*.com +*.class +*.dll +*.exe +*.o +*.seed +*.so +*.swo +*.swp +*.swn +*.swm +*.out +*.pid + + +############################ +# Logs and databases +############################ + +.tmp +*.log +*.sql +*.sqlite + + +############################ +# Misc. +############################ + +*# +.idea +nbproject +.vscode/ + + +############################ +# Node.js +############################ + +lib-cov +lcov.info +pids +logs +results +build +node_modules +.node_history +package-lock.json +**/package-lock.json +!docs/package-lock.json +*.heapsnapshot + + +############################ +# Tests +############################ + +testApp +coverage +cypress/screenshots +cypress/videos + + +############################ +# Documentation +############################ + +dist + +############################ +# Builds +############################ + +packages/strapi-generate-new/files/public/ + +############################ +# Example app +############################ + +.dev +# *.cache + +############################ +# Visual Studio Code +############################ + +front-workspace.code-workspace diff --git a/templates/community/Toit.gitignore b/templates/community/Toit.gitignore new file mode 100644 index 0000000..1352ef7 --- /dev/null +++ b/templates/community/Toit.gitignore @@ -0,0 +1,2 @@ +.packages +*_pb.toit diff --git a/templates/community/UiPath.gitignore b/templates/community/UiPath.gitignore new file mode 100644 index 0000000..f0c2267 --- /dev/null +++ b/templates/community/UiPath.gitignore @@ -0,0 +1,11 @@ +# gitignore template for RPA development using UiPath Studio +# website: https://www.uipath.com/product/studio +# +# Recommended: n/a + +# Ignore folders that could cause issues if accidentally tracked +**/.local/** +**/.settings/** +**/.objects/** +**/.tmh/** +**/*.log diff --git a/templates/community/V.gitignore b/templates/community/V.gitignore new file mode 100644 index 0000000..dbbb046 --- /dev/null +++ b/templates/community/V.gitignore @@ -0,0 +1,11 @@ +*.exe +*.o +*.so +*.tmp.c +*.exp +*.ilk +*.pdb +*.dll +*.lib +*.bak +*.out diff --git a/templates/community/Xilinx.gitignore b/templates/community/Xilinx.gitignore new file mode 100644 index 0000000..afe5e82 --- /dev/null +++ b/templates/community/Xilinx.gitignore @@ -0,0 +1,105 @@ +# gitignore template for Xilinx Vivado Design Suite +# website: https://www.xilinx.com/support/download.html + +# [home] +*.jou +*.log +*.debug +*.str +*.zip +*.tmp +*.rst +*.os +*.js +*.pb +*.dcp +*.hwdef +*.vds +*.veo +*.wdf +*.vdi +*.dmp +*.rpx +*.rpt +*_stub.v +*_stub.vhdl +*_funcsim.v +*_funcsim.vhdl +.project + +# [dir] +*.cache +.metadata +*.data +*.ipdefs +.Xil +*.sdk +*.hw +*.ip_user_files + +### IP synth +*_synth_* + +.jobs + +### project synth +*/*.runs/synth*/*.xml +*/*.runs/synth*/*.txt +*/*.runs/synth*/*.sh +*/*.runs/synth*/*.tcl +*/*.runs/synth*/*.bat +*/*.runs/synth*/*.xdc +!*/*.runs/synth*/*utilization*.rpt + +*.runs/synth*/*.xml +*.runs/synth*/*.txt +*.runs/synth*/*.sh +*.runs/synth*/*.tcl +*.runs/synth*/*.bat +*.runs/synth*/*.xdc +!*.runs/synth*/*utilization*.rpt + +### project impl +*/*.runs/impl*/*.xml +*/*.runs/impl*/*.html +*/*.runs/impl*/*.txt +*/*.runs/impl*/*.sh +*/*.runs/impl*/*.tcl +*/*.runs/impl*/*.bat +!*/*.runs/impl*/*utilization*.rpt + +*.runs/impl*/*.xml +*.runs/impl*/*.html +*.runs/impl*/*.txt +*.runs/impl*/*.sh +*.runs/impl*/*.tcl +*.runs/impl*/*.bat +!*.runs/impl*/*utilization*.rpt + +### block design +*/*/bd/*/hdl +*/*/*/bd/*/hdl + +*/*/bd/*/*.xdc +*/*/*/bd/*/*.xdc + +*/*/bd/*/ip/*/*.xdc +*/*/*/bd/*/ip/*/*.xdc + +*/*/bd/*/ip/*/*/ +*/*/*/bd/*/ip/*/*/ + +*/*/bd/*/ip/*/*.vhd +*/*/*/bd/*/ip/*/*.vhd + +*/*/bd/*/ip/*/*.xml +*/*/*/bd/*/ip/*/*.xml + +*.c +*.h +*.vho +*.html +*/*/bd/*/ip/*/*.tcl +*/*/*/bd/*/ip/*/*.tcl +hw_handoff +ipshared diff --git a/templates/community/embedded/AtmelStudio.gitignore b/templates/community/embedded/AtmelStudio.gitignore new file mode 100644 index 0000000..5dfc469 --- /dev/null +++ b/templates/community/embedded/AtmelStudio.gitignore @@ -0,0 +1,22 @@ +## Ignore Atmel Studio temporary files and build results +# https://www.microchip.com/mplab/avr-support/atmel-studio-7 + +# Atmel Studio is powered by an older version of Visual Studio, +# so most of the project and solution files are the same as VS files, +# only prefixed by an `at`. + +#Build Directories +[Dd]ebug/ +[Rr]elease/ + +#Build Results +*.o +*.d +*.eep +*.elf +*.hex +*.map +*.srec + +#User Specific Files +*.atsuo diff --git a/templates/community/embedded/IAR_EWARM.gitignore b/templates/community/embedded/IAR_EWARM.gitignore new file mode 100644 index 0000000..2f04d86 --- /dev/null +++ b/templates/community/embedded/IAR_EWARM.gitignore @@ -0,0 +1,19 @@ +# gitignore template for the IAR EWARM +# website: https://www.iar.com/knowledge/support/technical-notes/ide/which-files-should-be-version-controlled/ + +# Some tools will put the EWARM files +# under a subdirectory with the same name +# as the configuration. +# Example +# EWARM/Config1/Obj /List /Exe +# EWARM/Config2/Obj /List /Exe +EWARM/**/Obj +EWARM/**/List +EWARM/**/Exe + +# Autogenerated project files +*.dep +*.ewt + +# Autogenerated folder for debugger +EWARM/settings diff --git a/templates/community/embedded/esp-idf.gitignore b/templates/community/embedded/esp-idf.gitignore new file mode 100644 index 0000000..3713b15 --- /dev/null +++ b/templates/community/embedded/esp-idf.gitignore @@ -0,0 +1,6 @@ +# gitignore template for esp-idf, the official development framework for ESP32 +# https://github.com/espressif/esp-idf + +build/ +sdkconfig +sdkconfig.old diff --git a/templates/community/embedded/uVision.gitignore b/templates/community/embedded/uVision.gitignore new file mode 100644 index 0000000..f69c404 --- /dev/null +++ b/templates/community/embedded/uVision.gitignore @@ -0,0 +1,45 @@ +# git ignore file for Keil µVision Project + +# µVision 5 and µVision 4 Project screen layout file +*.uvguix.* +*.uvgui.* + +# Listing Files +*.i +*.lst +*.m51 +*.m66 +*.map + +# Object Files +*.axf +*.b[0-2][0-9] +*.b3[0-1] +*.bak +*.build_log.htm +*.crf +*.d +*.dep +*.elf +*.htm +*.iex +*.lnp +*.o +*.obj +*.sbr + +# Firmware Files +*.bin +*.h86 +*.hex + +# Build Files +.bat + +# Debugger Files +.ini + +# JLink Files +JLinkLog.txt + +# Other Files From 0a0e916d0289ce28bf7604a41ba5ccce2c863d80 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Fri, 21 Jun 2024 10:35:48 -0600 Subject: [PATCH 043/108] refactor: Improve ignore files search using compute values --- ignori/ignore_file.py | 7 +- ignori/util/file.py | 51 +- ignori/widgets/search_form.py | 18 +- templates/AL.gitignore | 22 - templates/Agda.gitignore | 2 - templates/Android.gitignore | 33 - templates/AppEngine.gitignore | 2 - templates/AppceleratorTitanium.gitignore | 3 - templates/ArchLinuxPackages.gitignore | 13 - templates/Autotools.gitignore | 52 -- templates/Ballerina.gitignore | 11 - templates/C++.gitignore | 32 - templates/C.gitignore | 52 -- templates/CFWheels.gitignore | 12 - templates/CMake.gitignore | 12 - templates/CUDA.gitignore | 6 - templates/CakePHP.gitignore | 25 - templates/ChefCookbook.gitignore | 9 - templates/Clojure.gitignore | 1 - templates/CodeIgniter.gitignore | 18 - templates/CommonLisp.gitignore | 17 - templates/Composer.gitignore | 6 - templates/Concrete5.gitignore | 21 - templates/Coq.gitignore | 45 -- templates/CraftCMS.gitignore | 4 - templates/D.gitignore | 24 - templates/DM.gitignore | 5 - templates/Dart.gitignore | 27 - templates/Delphi.gitignore | 81 --- templates/Drupal.gitignore | 62 -- templates/EPiServer.gitignore | 4 - templates/Eagle.gitignore | 51 -- templates/Elisp.gitignore | 11 - templates/Elixir.gitignore | 10 - templates/Elm.gitignore | 4 - templates/Erlang.gitignore | 17 - templates/ExpressionEngine.gitignore | 19 - templates/ExtJs.gitignore | 14 - templates/Fancy.gitignore | 2 - templates/Finale.gitignore | 13 - templates/FlaxEngine.gitignore | 45 -- templates/ForceDotCom.gitignore | 4 - templates/Fortran.gitignore | 1 - templates/FuelPHP.gitignore | 21 - templates/GWT.gitignore | 25 - templates/Gcov.gitignore | 5 - templates/GitBook.gitignore | 16 - templates/GitHubPages.gitignore | 18 - templates/Global/Backup.gitignore | 5 - templates/Global/Bazaar.gitignore | 2 - templates/Global/BricxCC.gitignore | 4 - templates/Global/CVS.gitignore | 4 - templates/Global/Calabash.gitignore | 10 - templates/Global/Cloud9.gitignore | 3 - templates/Global/CodeKit.gitignore | 4 - templates/Global/DartEditor.gitignore | 2 - templates/Global/Diff.gitignore | 2 - templates/Global/Dreamweaver.gitignore | 7 - templates/Global/Dropbox.gitignore | 4 - templates/Global/Eclipse.gitignore | 60 -- templates/Global/EiffelStudio.gitignore | 2 - templates/Global/Emacs.gitignore | 49 -- templates/Global/Ensime.gitignore | 4 - templates/Global/Espresso.gitignore | 1 - templates/Global/FlexBuilder.gitignore | 3 - templates/Global/GPG.gitignore | 2 - templates/Global/Images.gitignore | 63 -- templates/Global/JDeveloper.gitignore | 13 - templates/Global/JEnv.gitignore | 5 - templates/Global/JetBrains.gitignore | 77 --- templates/Global/KDevelop4.gitignore | 2 - templates/Global/Kate.gitignore | 3 - templates/Global/Lazarus.gitignore | 30 - templates/Global/LibreOffice.gitignore | 2 - templates/Global/Linux.gitignore | 13 - templates/Global/LyX.gitignore | 4 - templates/Global/MATLAB.gitignore | 31 - templates/Global/Mercurial.gitignore | 6 - templates/Global/Metals.gitignore | 5 - templates/Global/MicrosoftOffice.gitignore | 19 - templates/Global/ModelSim.gitignore | 23 - templates/Global/Momentics.gitignore | 8 - templates/Global/MonoDevelop.gitignore | 8 - templates/Global/NetBeans.gitignore | 8 - templates/Global/Ninja.gitignore | 2 - templates/Global/NotepadPP.gitignore | 2 - templates/Global/Octave.gitignore | 1 - templates/Global/Otto.gitignore | 1 - templates/Global/PSoCCreator.gitignore | 18 - templates/Global/Patch.gitignore | 2 - templates/Global/PuTTY.gitignore | 2 - templates/Global/README.md | 10 - templates/Global/Redcar.gitignore | 1 - templates/Global/Redis.gitignore | 3 - templates/Global/SBT.gitignore | 12 - templates/Global/SVN.gitignore | 1 - templates/Global/SlickEdit.gitignore | 11 - templates/Global/Stata.gitignore | 24 - templates/Global/SublimeText.gitignore | 31 - templates/Global/Syncthing.gitignore | 2 - templates/Global/SynopsysVCS.gitignore | 36 - templates/Global/Tags.gitignore | 17 - templates/Global/TextMate.gitignore | 3 - templates/Global/TortoiseGit.gitignore | 2 - templates/Global/Vagrant.gitignore | 5 - templates/Global/Vim.gitignore | 19 - templates/Global/VirtualEnv.gitignore | 12 - templates/Global/Virtuoso.gitignore | 18 - templates/Global/VisualStudioCode.gitignore | 12 - templates/Global/WebMethods.gitignore | 14 - templates/Global/Windows.gitignore | 24 - templates/Global/Xcode.gitignore | 2 - templates/Global/XilinxISE.gitignore | 67 -- templates/Global/macOS.gitignore | 26 - templates/Go.gitignore | 25 - templates/Godot.gitignore | 15 - templates/Gradle.gitignore | 21 - templates/Grails.gitignore | 33 - templates/Haskell.gitignore | 23 - templates/IAR.gitignore | 47 -- templates/IGORPro.gitignore | 5 - templates/Idris.gitignore | 7 - templates/JBoss.gitignore | 19 - templates/JENKINS_HOME.gitignore | 50 -- templates/Java.gitignore | 24 - templates/Jekyll.gitignore | 7 - templates/Joomla.gitignore | 705 -------------------- templates/Julia.gitignore | 24 - templates/KiCad.gitignore | 29 - templates/Kohana.gitignore | 2 - templates/Kotlin.gitignore | 1 - templates/LabVIEW.gitignore | 17 - templates/Laravel.gitignore | 23 - templates/Leiningen.gitignore | 14 - templates/LemonStand.gitignore | 21 - templates/Lilypond.gitignore | 6 - templates/Lithium.gitignore | 2 - templates/Lua.gitignore | 41 -- templates/Magento.gitignore | 45 -- templates/Maven.gitignore | 17 - templates/Mercury.gitignore | 13 - templates/MetaProgrammingSystem.gitignore | 16 - templates/Nanoc.gitignore | 10 - templates/Nim.gitignore | 3 - templates/Node.gitignore | 130 ---- templates/OCaml.gitignore | 29 - templates/Objective-C.gitignore | 44 -- templates/Opa.gitignore | 13 - templates/OpenCart.gitignore | 20 - templates/OracleForms.gitignore | 8 - templates/Packer.gitignore | 16 - templates/Perl.gitignore | 35 - templates/Phalcon.gitignore | 2 - templates/PlayFramework.gitignore | 16 - templates/Plone.gitignore | 18 - templates/Prestashop.gitignore | 173 ----- templates/Processing.gitignore | 10 - templates/PureScript.gitignore | 9 - templates/Python.gitignore | 162 ----- templates/Qooxdoo.gitignore | 5 - templates/Qt.gitignore | 54 -- templates/R.gitignore | 49 -- templates/ROS.gitignore | 51 -- templates/Racket.gitignore | 7 - templates/Rails.gitignore | 69 -- templates/Raku.gitignore | 7 - templates/RhodesRhomobile.gitignore | 9 - templates/Ruby.gitignore | 56 -- templates/Rust.gitignore | 21 - templates/SCons.gitignore | 6 - templates/Sass.gitignore | 4 - templates/Scala.gitignore | 5 - templates/Scheme.gitignore | 7 - templates/Scrivener.gitignore | 8 - templates/Sdcc.gitignore | 8 - templates/SeamGen.gitignore | 26 - templates/SketchUp.gitignore | 1 - templates/Smalltalk.gitignore | 31 - templates/Stella.gitignore | 12 - templates/SugarCRM.gitignore | 27 - templates/Swift.gitignore | 62 -- templates/Symfony.gitignore | 52 -- templates/SymphonyCMS.gitignore | 6 - templates/TeX.gitignore | 306 --------- templates/Terraform.gitignore | 37 - templates/Textpattern.gitignore | 11 - templates/TurboGears2.gitignore | 20 - templates/TwinCAT3.gitignore | 25 - templates/Typo3.gitignore | 23 - templates/Unity.gitignore | 72 -- templates/UnrealEngine.gitignore | 74 -- templates/VVVV.gitignore | 6 - templates/VisualStudio.gitignore | 398 ----------- templates/Waf.gitignore | 9 - templates/WordPress.gitignore | 48 -- templates/Xojo.gitignore | 11 - templates/Yeoman.gitignore | 6 - templates/Yii.gitignore | 6 - templates/ZendFramework.gitignore | 24 - templates/Zephir.gitignore | 26 - 200 files changed, 60 insertions(+), 5396 deletions(-) delete mode 100644 templates/AL.gitignore delete mode 100644 templates/Agda.gitignore delete mode 100644 templates/Android.gitignore delete mode 100644 templates/AppEngine.gitignore delete mode 100644 templates/AppceleratorTitanium.gitignore delete mode 100644 templates/ArchLinuxPackages.gitignore delete mode 100644 templates/Autotools.gitignore delete mode 100644 templates/Ballerina.gitignore delete mode 100644 templates/C++.gitignore delete mode 100644 templates/C.gitignore delete mode 100644 templates/CFWheels.gitignore delete mode 100644 templates/CMake.gitignore delete mode 100644 templates/CUDA.gitignore delete mode 100644 templates/CakePHP.gitignore delete mode 100644 templates/ChefCookbook.gitignore delete mode 100644 templates/Clojure.gitignore delete mode 100644 templates/CodeIgniter.gitignore delete mode 100644 templates/CommonLisp.gitignore delete mode 100644 templates/Composer.gitignore delete mode 100644 templates/Concrete5.gitignore delete mode 100644 templates/Coq.gitignore delete mode 100644 templates/CraftCMS.gitignore delete mode 100644 templates/D.gitignore delete mode 100644 templates/DM.gitignore delete mode 100644 templates/Dart.gitignore delete mode 100644 templates/Delphi.gitignore delete mode 100644 templates/Drupal.gitignore delete mode 100644 templates/EPiServer.gitignore delete mode 100644 templates/Eagle.gitignore delete mode 100644 templates/Elisp.gitignore delete mode 100644 templates/Elixir.gitignore delete mode 100644 templates/Elm.gitignore delete mode 100644 templates/Erlang.gitignore delete mode 100644 templates/ExpressionEngine.gitignore delete mode 100644 templates/ExtJs.gitignore delete mode 100644 templates/Fancy.gitignore delete mode 100644 templates/Finale.gitignore delete mode 100644 templates/FlaxEngine.gitignore delete mode 100644 templates/ForceDotCom.gitignore delete mode 100644 templates/Fortran.gitignore delete mode 100644 templates/FuelPHP.gitignore delete mode 100644 templates/GWT.gitignore delete mode 100644 templates/Gcov.gitignore delete mode 100644 templates/GitBook.gitignore delete mode 100644 templates/GitHubPages.gitignore delete mode 100644 templates/Global/Backup.gitignore delete mode 100644 templates/Global/Bazaar.gitignore delete mode 100644 templates/Global/BricxCC.gitignore delete mode 100644 templates/Global/CVS.gitignore delete mode 100644 templates/Global/Calabash.gitignore delete mode 100644 templates/Global/Cloud9.gitignore delete mode 100644 templates/Global/CodeKit.gitignore delete mode 100644 templates/Global/DartEditor.gitignore delete mode 100644 templates/Global/Diff.gitignore delete mode 100644 templates/Global/Dreamweaver.gitignore delete mode 100644 templates/Global/Dropbox.gitignore delete mode 100644 templates/Global/Eclipse.gitignore delete mode 100644 templates/Global/EiffelStudio.gitignore delete mode 100644 templates/Global/Emacs.gitignore delete mode 100644 templates/Global/Ensime.gitignore delete mode 100644 templates/Global/Espresso.gitignore delete mode 100644 templates/Global/FlexBuilder.gitignore delete mode 100644 templates/Global/GPG.gitignore delete mode 100644 templates/Global/Images.gitignore delete mode 100644 templates/Global/JDeveloper.gitignore delete mode 100644 templates/Global/JEnv.gitignore delete mode 100644 templates/Global/JetBrains.gitignore delete mode 100644 templates/Global/KDevelop4.gitignore delete mode 100644 templates/Global/Kate.gitignore delete mode 100644 templates/Global/Lazarus.gitignore delete mode 100644 templates/Global/LibreOffice.gitignore delete mode 100644 templates/Global/Linux.gitignore delete mode 100644 templates/Global/LyX.gitignore delete mode 100644 templates/Global/MATLAB.gitignore delete mode 100644 templates/Global/Mercurial.gitignore delete mode 100644 templates/Global/Metals.gitignore delete mode 100644 templates/Global/MicrosoftOffice.gitignore delete mode 100644 templates/Global/ModelSim.gitignore delete mode 100644 templates/Global/Momentics.gitignore delete mode 100644 templates/Global/MonoDevelop.gitignore delete mode 100644 templates/Global/NetBeans.gitignore delete mode 100644 templates/Global/Ninja.gitignore delete mode 100644 templates/Global/NotepadPP.gitignore delete mode 100644 templates/Global/Octave.gitignore delete mode 100644 templates/Global/Otto.gitignore delete mode 100644 templates/Global/PSoCCreator.gitignore delete mode 100644 templates/Global/Patch.gitignore delete mode 100644 templates/Global/PuTTY.gitignore delete mode 100644 templates/Global/README.md delete mode 100644 templates/Global/Redcar.gitignore delete mode 100644 templates/Global/Redis.gitignore delete mode 100644 templates/Global/SBT.gitignore delete mode 100644 templates/Global/SVN.gitignore delete mode 100644 templates/Global/SlickEdit.gitignore delete mode 100644 templates/Global/Stata.gitignore delete mode 100644 templates/Global/SublimeText.gitignore delete mode 100644 templates/Global/Syncthing.gitignore delete mode 100644 templates/Global/SynopsysVCS.gitignore delete mode 100644 templates/Global/Tags.gitignore delete mode 100644 templates/Global/TextMate.gitignore delete mode 100644 templates/Global/TortoiseGit.gitignore delete mode 100644 templates/Global/Vagrant.gitignore delete mode 100644 templates/Global/Vim.gitignore delete mode 100644 templates/Global/VirtualEnv.gitignore delete mode 100644 templates/Global/Virtuoso.gitignore delete mode 100644 templates/Global/VisualStudioCode.gitignore delete mode 100644 templates/Global/WebMethods.gitignore delete mode 100644 templates/Global/Windows.gitignore delete mode 100644 templates/Global/Xcode.gitignore delete mode 100644 templates/Global/XilinxISE.gitignore delete mode 100644 templates/Global/macOS.gitignore delete mode 100644 templates/Go.gitignore delete mode 100644 templates/Godot.gitignore delete mode 100644 templates/Gradle.gitignore delete mode 100644 templates/Grails.gitignore delete mode 100644 templates/Haskell.gitignore delete mode 100644 templates/IAR.gitignore delete mode 100644 templates/IGORPro.gitignore delete mode 100644 templates/Idris.gitignore delete mode 100644 templates/JBoss.gitignore delete mode 100644 templates/JENKINS_HOME.gitignore delete mode 100644 templates/Java.gitignore delete mode 100644 templates/Jekyll.gitignore delete mode 100644 templates/Joomla.gitignore delete mode 100644 templates/Julia.gitignore delete mode 100644 templates/KiCad.gitignore delete mode 100644 templates/Kohana.gitignore delete mode 100644 templates/Kotlin.gitignore delete mode 100644 templates/LabVIEW.gitignore delete mode 100644 templates/Laravel.gitignore delete mode 100644 templates/Leiningen.gitignore delete mode 100644 templates/LemonStand.gitignore delete mode 100644 templates/Lilypond.gitignore delete mode 100644 templates/Lithium.gitignore delete mode 100644 templates/Lua.gitignore delete mode 100644 templates/Magento.gitignore delete mode 100644 templates/Maven.gitignore delete mode 100644 templates/Mercury.gitignore delete mode 100644 templates/MetaProgrammingSystem.gitignore delete mode 100644 templates/Nanoc.gitignore delete mode 100644 templates/Nim.gitignore delete mode 100644 templates/Node.gitignore delete mode 100644 templates/OCaml.gitignore delete mode 100644 templates/Objective-C.gitignore delete mode 100644 templates/Opa.gitignore delete mode 100644 templates/OpenCart.gitignore delete mode 100644 templates/OracleForms.gitignore delete mode 100644 templates/Packer.gitignore delete mode 100644 templates/Perl.gitignore delete mode 100644 templates/Phalcon.gitignore delete mode 100644 templates/PlayFramework.gitignore delete mode 100644 templates/Plone.gitignore delete mode 100644 templates/Prestashop.gitignore delete mode 100644 templates/Processing.gitignore delete mode 100644 templates/PureScript.gitignore delete mode 100644 templates/Python.gitignore delete mode 100644 templates/Qooxdoo.gitignore delete mode 100644 templates/Qt.gitignore delete mode 100644 templates/R.gitignore delete mode 100644 templates/ROS.gitignore delete mode 100644 templates/Racket.gitignore delete mode 100644 templates/Rails.gitignore delete mode 100644 templates/Raku.gitignore delete mode 100644 templates/RhodesRhomobile.gitignore delete mode 100644 templates/Ruby.gitignore delete mode 100644 templates/Rust.gitignore delete mode 100644 templates/SCons.gitignore delete mode 100644 templates/Sass.gitignore delete mode 100644 templates/Scala.gitignore delete mode 100644 templates/Scheme.gitignore delete mode 100644 templates/Scrivener.gitignore delete mode 100644 templates/Sdcc.gitignore delete mode 100644 templates/SeamGen.gitignore delete mode 100644 templates/SketchUp.gitignore delete mode 100644 templates/Smalltalk.gitignore delete mode 100644 templates/Stella.gitignore delete mode 100644 templates/SugarCRM.gitignore delete mode 100644 templates/Swift.gitignore delete mode 100644 templates/Symfony.gitignore delete mode 100644 templates/SymphonyCMS.gitignore delete mode 100644 templates/TeX.gitignore delete mode 100644 templates/Terraform.gitignore delete mode 100644 templates/Textpattern.gitignore delete mode 100644 templates/TurboGears2.gitignore delete mode 100644 templates/TwinCAT3.gitignore delete mode 100644 templates/Typo3.gitignore delete mode 100644 templates/Unity.gitignore delete mode 100644 templates/UnrealEngine.gitignore delete mode 100644 templates/VVVV.gitignore delete mode 100644 templates/VisualStudio.gitignore delete mode 100644 templates/Waf.gitignore delete mode 100644 templates/WordPress.gitignore delete mode 100644 templates/Xojo.gitignore delete mode 100644 templates/Yeoman.gitignore delete mode 100644 templates/Yii.gitignore delete mode 100644 templates/ZendFramework.gitignore delete mode 100644 templates/Zephir.gitignore diff --git a/ignori/ignore_file.py b/ignori/ignore_file.py index 1be4eb1..e993547 100644 --- a/ignori/ignore_file.py +++ b/ignori/ignore_file.py @@ -8,14 +8,9 @@ class IgnoreFile: id: str = field(init=False) path: Path language: str = field(init=False) + categories: list[str] = field(default_factory=list) def __post_init__(self: Self) -> None: self.language = self.path.stem self.id = self.language.lower() - -if __name__ == "__main__": - test_path = Path("Python.gitignore") - ignore_file = IgnoreFile(test_path) - assert ignore_file.language == "Python" - assert ignore_file.id == "pyt" diff --git a/ignori/util/file.py b/ignori/util/file.py index e9da80d..6ae4150 100644 --- a/ignori/util/file.py +++ b/ignori/util/file.py @@ -4,16 +4,55 @@ from ignori.util.settings import TEMPLATES_PATH -def search_files_by_name(template_name: str = "") -> list[IgnoreFile]: - template_files = [ - IgnoreFile(file) - for file in TEMPLATES_PATH.iterdir() - if template_name.lower() in file.stem.lower() - ] +def get_gitignore_templates() -> list[IgnoreFile]: + template_files: list[IgnoreFile] = [] + current_categories: list[str] = [] + + for path in TEMPLATES_PATH.iterdir(): + if path.is_dir(): + template_files.extend( + __get_files( + template_subpath=path, + categories=current_categories, + ), + ) + + else: + template_files.append( + IgnoreFile( + path=path, + categories=current_categories, + ), + ) return sorted(template_files, key=lambda file: file.language) +def __get_files(template_subpath: Path, categories: list[str]) -> list[IgnoreFile]: + template_files: list[IgnoreFile] = [] + + current_categories: list[str] = [*categories, template_subpath.name] + + for path in template_subpath.iterdir(): + if path.is_dir(): + template_files.extend( + __get_files( + template_subpath=path, + categories=current_categories, + ), + ) + + else: + template_files.append( + IgnoreFile( + path=path, + categories=current_categories, + ), + ) + + return template_files + + def copy_file_content(*, source_file: Path, destination_path: Path, diff --git a/ignori/widgets/search_form.py b/ignori/widgets/search_form.py index aaa1890..d982521 100644 --- a/ignori/widgets/search_form.py +++ b/ignori/widgets/search_form.py @@ -1,3 +1,4 @@ +from pathlib import Path from typing import Self from textual import on @@ -10,7 +11,7 @@ from textual.widgets.option_list import Option from ignori.ignore_file import IgnoreFile -from ignori.util.file import search_files_by_name +from ignori.util.file import get_gitignore_templates from ignori.widgets.file_preview import FilePreview from ignori.widgets.language_list import LanguageList @@ -63,7 +64,9 @@ def __init__( self.selected_file = selected_file super().__init__() - ignore_files: reactive[list[IgnoreFile]] = reactive(search_files_by_name()) + ignore_files: reactive[list[IgnoreFile]] = reactive(get_gitignore_templates()) + filtered_ignore_files: reactive[list[IgnoreFile]] = reactive([]) + search_name: reactive[str] = reactive("") highlighted_ignore_file: reactive[IgnoreFile | None] = reactive(None) @@ -71,7 +74,7 @@ def __init__( def search_ignore_file(self: Self, event: Button.Pressed) -> None: path_input = self.query_one(selector="#search-input", expect_type=Input) - self.ignore_files = search_files_by_name(path_input.value) + self.search_name = path_input.value @on(OptionList.OptionHighlighted, selector="#ignore-list") def show_file_content(self: Self, event: OptionList.OptionHighlighted) -> None: @@ -90,7 +93,14 @@ def select_file(self: Self, event: OptionList.OptionSelected) -> None: self.post_message(self.Selected(selected_file)) self.notify(f"{selected_file.language} selected", title="Success") - def watch_ignore_files(self: Self, ignore_files: list[IgnoreFile]) -> None: + + def compute_filtered_ignore_files(self: Self) -> list[IgnoreFile]: + return [ + file for file in self.ignore_files + if self.search_name in file.language + ] + + def watch_filtered_ignore_files(self: Self, ignore_files: list[IgnoreFile]) -> None: ignore_list = self.query_one("#ignore-list", expect_type=OptionList) ignore_list.clear_options() diff --git a/templates/AL.gitignore b/templates/AL.gitignore deleted file mode 100644 index 02eac69..0000000 --- a/templates/AL.gitignore +++ /dev/null @@ -1,22 +0,0 @@ -### AL ### -#Template for AL projects for Dynamics 365 Business Central -#launch.json folder -.vscode/ -#Cache folder -.alcache/ -#Symbols folder -.alpackages/ -#Snapshots folder -.snapshots/ -#Testing Output folder -.output/ -#Extension App-file -*.app -#Rapid Application Development File -rad.json -#Translation Base-file -*.g.xlf -#License-file -*.flf -#Test results file -TestResults.xml \ No newline at end of file diff --git a/templates/Agda.gitignore b/templates/Agda.gitignore deleted file mode 100644 index 58ab67f..0000000 --- a/templates/Agda.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.agdai -MAlonzo/** diff --git a/templates/Android.gitignore b/templates/Android.gitignore deleted file mode 100644 index 347e252..0000000 --- a/templates/Android.gitignore +++ /dev/null @@ -1,33 +0,0 @@ -# Gradle files -.gradle/ -build/ - -# Local configuration file (sdk path, etc) -local.properties - -# Log/OS Files -*.log - -# Android Studio generated files and folders -captures/ -.externalNativeBuild/ -.cxx/ -*.apk -output.json - -# IntelliJ -*.iml -.idea/ -misc.xml -deploymentTargetDropDown.xml -render.experimental.xml - -# Keystore files -*.jks -*.keystore - -# Google Services (e.g. APIs or Firebase) -google-services.json - -# Android Profiling -*.hprof diff --git a/templates/AppEngine.gitignore b/templates/AppEngine.gitignore deleted file mode 100644 index 6227345..0000000 --- a/templates/AppEngine.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Google App Engine generated folder -appengine-generated/ diff --git a/templates/AppceleratorTitanium.gitignore b/templates/AppceleratorTitanium.gitignore deleted file mode 100644 index 3abea55..0000000 --- a/templates/AppceleratorTitanium.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Build folder and log file -build/ -build.log diff --git a/templates/ArchLinuxPackages.gitignore b/templates/ArchLinuxPackages.gitignore deleted file mode 100644 index b739055..0000000 --- a/templates/ArchLinuxPackages.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -*.tar -*.tar.* -*.jar -*.exe -*.msi -*.zip -*.tgz -*.log -*.log.* -*.sig - -pkg/ -src/ diff --git a/templates/Autotools.gitignore b/templates/Autotools.gitignore deleted file mode 100644 index 617156f..0000000 --- a/templates/Autotools.gitignore +++ /dev/null @@ -1,52 +0,0 @@ -# http://www.gnu.org/software/automake - -Makefile.in -/ar-lib -/mdate-sh -/py-compile -/test-driver -/ylwrap -.deps/ -.dirstamp - -# http://www.gnu.org/software/autoconf - -autom4te.cache -/autoscan.log -/autoscan-*.log -/aclocal.m4 -/compile -/config.cache -/config.guess -/config.h.in -/config.log -/config.status -/config.sub -/configure -/configure.scan -/depcomp -/install-sh -/missing -/stamp-h1 - -# https://www.gnu.org/software/libtool/ - -/ltmain.sh - -# http://www.gnu.org/software/texinfo - -/texinfo.tex - -# http://www.gnu.org/software/m4/ - -m4/libtool.m4 -m4/ltoptions.m4 -m4/ltsugar.m4 -m4/ltversion.m4 -m4/lt~obsolete.m4 - -# Generated Makefile -# (meta build system like autotools, -# can automatically generate from config.status script -# (which is called by configure script)) -Makefile diff --git a/templates/Ballerina.gitignore b/templates/Ballerina.gitignore deleted file mode 100644 index 030a350..0000000 --- a/templates/Ballerina.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -# generated files -target/ -generated/ - -# dependencies -Dependencies.toml - -# config files -Config.toml -# the config files used for testing, Uncomment the following line if you want to commit the test config files -#!**/tests/Config.toml diff --git a/templates/C++.gitignore b/templates/C++.gitignore deleted file mode 100644 index 259148f..0000000 --- a/templates/C++.gitignore +++ /dev/null @@ -1,32 +0,0 @@ -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app diff --git a/templates/C.gitignore b/templates/C.gitignore deleted file mode 100644 index c6127b3..0000000 --- a/templates/C.gitignore +++ /dev/null @@ -1,52 +0,0 @@ -# Prerequisites -*.d - -# Object files -*.o -*.ko -*.obj -*.elf - -# Linker output -*.ilk -*.map -*.exp - -# Precompiled Headers -*.gch -*.pch - -# Libraries -*.lib -*.a -*.la -*.lo - -# Shared objects (inc. Windows DLLs) -*.dll -*.so -*.so.* -*.dylib - -# Executables -*.exe -*.out -*.app -*.i*86 -*.x86_64 -*.hex - -# Debug files -*.dSYM/ -*.su -*.idb -*.pdb - -# Kernel Module Compile Results -*.mod* -*.cmd -.tmp_versions/ -modules.order -Module.symvers -Mkfile.old -dkms.conf diff --git a/templates/CFWheels.gitignore b/templates/CFWheels.gitignore deleted file mode 100644 index f2fec34..0000000 --- a/templates/CFWheels.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -# unpacked plugin folders -plugins/**/* - -# files directory where uploads go -files - -# DBMigrate plugin: generated SQL -db/sql - -# AssetBundler plugin: generated bundles -javascripts/bundles -stylesheets/bundles diff --git a/templates/CMake.gitignore b/templates/CMake.gitignore deleted file mode 100644 index 11c7643..0000000 --- a/templates/CMake.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -CMakeLists.txt.user -CMakeCache.txt -CMakeFiles -CMakeScripts -Testing -Makefile -cmake_install.cmake -install_manifest.txt -compile_commands.json -CTestTestfile.cmake -_deps -CMakeUserPresets.json diff --git a/templates/CUDA.gitignore b/templates/CUDA.gitignore deleted file mode 100644 index cb385db..0000000 --- a/templates/CUDA.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -*.i -*.ii -*.gpu -*.ptx -*.cubin -*.fatbin diff --git a/templates/CakePHP.gitignore b/templates/CakePHP.gitignore deleted file mode 100644 index c6597e4..0000000 --- a/templates/CakePHP.gitignore +++ /dev/null @@ -1,25 +0,0 @@ -# CakePHP 3 - -/vendor/* -/config/app.php - -/tmp/cache/models/* -!/tmp/cache/models/empty -/tmp/cache/persistent/* -!/tmp/cache/persistent/empty -/tmp/cache/views/* -!/tmp/cache/views/empty -/tmp/sessions/* -!/tmp/sessions/empty -/tmp/tests/* -!/tmp/tests/empty - -/logs/* -!/logs/empty - -# CakePHP 2 - -/app/tmp/* -/app/Config/core.php -/app/Config/database.php -/vendors/* diff --git a/templates/ChefCookbook.gitignore b/templates/ChefCookbook.gitignore deleted file mode 100644 index 5ee7b7a..0000000 --- a/templates/ChefCookbook.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -.vagrant -/cookbooks - -# Bundler -bin/* -.bundle/* - -.kitchen/ -.kitchen.local.yml diff --git a/templates/Clojure.gitignore b/templates/Clojure.gitignore deleted file mode 100644 index 7657a27..0000000 --- a/templates/Clojure.gitignore +++ /dev/null @@ -1 +0,0 @@ -Leiningen.gitignore \ No newline at end of file diff --git a/templates/CodeIgniter.gitignore b/templates/CodeIgniter.gitignore deleted file mode 100644 index f447dc3..0000000 --- a/templates/CodeIgniter.gitignore +++ /dev/null @@ -1,18 +0,0 @@ -*/config/development -*/logs/log-*.php -!*/logs/index.html -*/cache/* -!system/cache/* -!*/cache/index.html -!*/cache/.htaccess - -user_guide_src/build/* -user_guide_src/cilexer/build/* -user_guide_src/cilexer/dist/* -user_guide_src/cilexer/pycilexer.egg-info/* - -#codeigniter 3 -application/logs/* -!application/logs/index.html -!application/logs/.htaccess -/vendor/ diff --git a/templates/CommonLisp.gitignore b/templates/CommonLisp.gitignore deleted file mode 100644 index e7de127..0000000 --- a/templates/CommonLisp.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -*.FASL -*.fasl -*.lisp-temp -*.dfsl -*.pfsl -*.d64fsl -*.p64fsl -*.lx64fsl -*.lx32fsl -*.dx64fsl -*.dx32fsl -*.fx64fsl -*.fx32fsl -*.sx64fsl -*.sx32fsl -*.wx64fsl -*.wx32fsl diff --git a/templates/Composer.gitignore b/templates/Composer.gitignore deleted file mode 100644 index a67d42b..0000000 --- a/templates/Composer.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -composer.phar -/vendor/ - -# Commit your application's lock file https://getcomposer.org/doc/01-basic-usage.md#commit-your-composer-lock-file-to-version-control -# You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file -# composer.lock diff --git a/templates/Concrete5.gitignore b/templates/Concrete5.gitignore deleted file mode 100644 index d6c11ad..0000000 --- a/templates/Concrete5.gitignore +++ /dev/null @@ -1,21 +0,0 @@ -# ignore the error log and .htaccess and others -error_log -.htaccess - -# concrete5 5.6 specific - -config/site.php -files/cache/* -files/tmp/* - -# concrete5 5.7 specific - -# ignore everything but the index.html -/application/files/* -!/application/files/index.html - -# ignore updates folder -/updates/* - -# ignore sitemap.xml -/sitemap.xml diff --git a/templates/Coq.gitignore b/templates/Coq.gitignore deleted file mode 100644 index 66596b2..0000000 --- a/templates/Coq.gitignore +++ /dev/null @@ -1,45 +0,0 @@ -.*.aux -.*.d -*.a -*.cma -*.cmi -*.cmo -*.cmx -*.cmxa -*.cmxs -*.glob -*.ml.d -*.ml4.d -*.mlg.d -*.mli.d -*.mllib.d -*.mlpack.d -*.native -*.o -*.v.d -*.vio -*.vo -*.vok -*.vos -.coq-native -.csdp.cache -.lia.cache -.nia.cache -.nlia.cache -.nra.cache -csdp.cache -lia.cache -nia.cache -nlia.cache -nra.cache -native_compute_profile_*.data - -# generated timing files -*.timing.diff -*.v.after-timing -*.v.before-timing -*.v.timing -time-of-build-after.log -time-of-build-before.log -time-of-build-both.log -time-of-build-pretty.log diff --git a/templates/CraftCMS.gitignore b/templates/CraftCMS.gitignore deleted file mode 100644 index 0d81b39..0000000 --- a/templates/CraftCMS.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Craft 2 Storage (https://craftcms.com/support/craft-storage-gitignore) -# not necessary for Craft 3 (https://github.com/craftcms/craft/issues/26) -/craft/storage/* -!/craft/storage/rebrand diff --git a/templates/D.gitignore b/templates/D.gitignore deleted file mode 100644 index 74b926f..0000000 --- a/templates/D.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Compiled Object files -*.o -*.obj - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Compiled Static libraries -*.a -*.lib - -# Executables -*.exe - -# DUB -.dub -docs.json -__dummy.html -docs/ - -# Code coverage -*.lst diff --git a/templates/DM.gitignore b/templates/DM.gitignore deleted file mode 100644 index ba5abda..0000000 --- a/templates/DM.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -*.dmb -*.rsc -*.int -*.lk -*.zip diff --git a/templates/Dart.gitignore b/templates/Dart.gitignore deleted file mode 100644 index 3a83c2f..0000000 --- a/templates/Dart.gitignore +++ /dev/null @@ -1,27 +0,0 @@ -# See https://www.dartlang.org/guides/libraries/private-files - -# Files and directories created by pub -.dart_tool/ -.packages -build/ -# If you're building an application, you may want to check-in your pubspec.lock -pubspec.lock - -# Directory created by dartdoc -# If you don't generate documentation locally you can remove this line. -doc/api/ - -# dotenv environment variables file -.env* - -# Avoid committing generated Javascript files: -*.dart.js -*.info.json # Produced by the --dump-info flag. -*.js # When generated by dart2js. Don't specify *.js if your - # project includes source files written in JavaScript. -*.js_ -*.js.deps -*.js.map - -.flutter-plugins -.flutter-plugins-dependencies diff --git a/templates/Delphi.gitignore b/templates/Delphi.gitignore deleted file mode 100644 index 8df99b6..0000000 --- a/templates/Delphi.gitignore +++ /dev/null @@ -1,81 +0,0 @@ -# Uncomment these types if you want even more clean repository. But be careful. -# It can make harm to an existing project source. Read explanations below. -# -# Resource files are binaries containing manifest, project icon and version info. -# They can not be viewed as text or compared by diff-tools. Consider replacing them with .rc files. -#*.res -# -# Type library file (binary). In old Delphi versions it should be stored. -# Since Delphi 2009 it is produced from .ridl file and can safely be ignored. -#*.tlb -# -# Diagram Portfolio file. Used by the diagram editor up to Delphi 7. -# Uncomment this if you are not using diagrams or use newer Delphi version. -#*.ddp -# -# Visual LiveBindings file. Added in Delphi XE2. -# Uncomment this if you are not using LiveBindings Designer. -#*.vlb -# -# Deployment Manager configuration file for your project. Added in Delphi XE2. -# Uncomment this if it is not mobile development and you do not use remote debug feature. -#*.deployproj -# -# C++ object files produced when C/C++ Output file generation is configured. -# Uncomment this if you are not using external objects (zlib library for example). -#*.obj -# - -# Default Delphi compiler directories -# Content of this directories are generated with each Compile/Construct of a project. -# Most of the time, files here have not there place in a code repository. -#Win32/ -#Win64/ -#OSX64/ -#OSXARM64/ -#Android/ -#Android64/ -#iOSDevice64/ -#Linux64/ - -# Delphi compiler-generated binaries (safe to delete) -*.exe -*.dll -*.bpl -*.bpi -*.dcp -*.so -*.apk -*.drc -*.map -*.dres -*.rsm -*.tds -*.dcu -*.lib -*.a -*.o -*.ocx - -# Delphi autogenerated files (duplicated info) -*.cfg -*.hpp -*Resource.rc - -# Delphi local files (user-specific info) -*.local -*.identcache -*.projdata -*.tvsconfig -*.dsk - -# Delphi history and backups -__history/ -__recovery/ -*.~* - -# Castalia statistics file (since XE7 Castalia is distributed with Delphi) -*.stat - -# Boss dependency manager vendor folder https://github.com/HashLoad/boss -modules/ diff --git a/templates/Drupal.gitignore b/templates/Drupal.gitignore deleted file mode 100644 index faae808..0000000 --- a/templates/Drupal.gitignore +++ /dev/null @@ -1,62 +0,0 @@ -# gitignore template for Drupal 8 projects -# -# earlier versions of Drupal are tracked in `community/PHP/` -# -# follows official upstream conventions: -# https://www.drupal.org/docs/develop/using-composer - -# Ignore configuration files that may contain sensitive information -/web/sites/*/*settings*.php -/web/sites/*/*services*.yml - -# Ignore paths that may contain user-generated content -/web/sites/*/files -/web/sites/*/public -/web/sites/*/private -/web/sites/*/files-public -/web/sites/*/files-private - -# Ignore paths that may contain temporary files -/web/sites/*/translations -/web/sites/*/tmp -/web/sites/*/cache - -# Ignore drupal core (if not versioning drupal sources) -/web/vendor -/web/core -/web/modules/README.txt -/web/profiles/README.txt -/web/sites/development.services.yml -/web/sites/example.settings.local.php -/web/sites/example.sites.php -/web/sites/README.txt -/web/themes/README.txt -/web/.csslintrc -/web/.editorconfig -/web/.eslintignore -/web/.eslintrc.json -/web/.gitattributes -/web/.htaccess -/web/.ht.router.php -/web/autoload.php -/web/composer.json -/web/composer.lock -/web/example.gitignore -/web/index.php -/web/INSTALL.txt -/web/LICENSE.txt -/web/README.txt -/web/robots.txt -/web/update.php -/web/web.config - -# Ignore vendor dependencies and scripts -/vendor -/composer.phar -/composer -/robo.phar -/robo -/drush.phar -/drush -/drupal.phar -/drupal diff --git a/templates/EPiServer.gitignore b/templates/EPiServer.gitignore deleted file mode 100644 index 97037de..0000000 --- a/templates/EPiServer.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -###################### -## EPiServer Files -###################### -*License.config diff --git a/templates/Eagle.gitignore b/templates/Eagle.gitignore deleted file mode 100644 index 28f0b97..0000000 --- a/templates/Eagle.gitignore +++ /dev/null @@ -1,51 +0,0 @@ -# Ignore list for Eagle, a PCB layout tool - -# Backup files -*.s#? -*.b#? -*.l#? -*.b$? -*.s$? -*.l$? - -# Eagle project file -# It contains a serial number and references to the file structure -# on your computer. -# comment the following line if you want to have your project file included. -eagle.epf - -# Autorouter files -*.pro -*.job - -# CAM files -*.$$$ -*.cmp -*.ly2 -*.l15 -*.sol -*.plc -*.stc -*.sts -*.crc -*.crs - -*.dri -*.drl -*.gpi -*.pls -*.ger -*.xln - -*.drd -*.drd.* - -*.s#* -*.b#* - -*.info - -*.eps - -# file locks introduced since 7.x -*.lck diff --git a/templates/Elisp.gitignore b/templates/Elisp.gitignore deleted file mode 100644 index 206569d..0000000 --- a/templates/Elisp.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -# Compiled -*.elc - -# Packaging -.cask - -# Backup files -*~ - -# Undo-tree save-files -*.~undo-tree diff --git a/templates/Elixir.gitignore b/templates/Elixir.gitignore deleted file mode 100644 index b263cd1..0000000 --- a/templates/Elixir.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -/_build -/cover -/deps -/doc -/.fetch -erl_crash.dump -*.ez -*.beam -/config/*.secret.exs -.elixir_ls/ diff --git a/templates/Elm.gitignore b/templates/Elm.gitignore deleted file mode 100644 index 8b631e7..0000000 --- a/templates/Elm.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# elm-package generated files -elm-stuff -# elm-repl generated files -repl-temp-* diff --git a/templates/Erlang.gitignore b/templates/Erlang.gitignore deleted file mode 100644 index 751a61d..0000000 --- a/templates/Erlang.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -.eunit -*.o -*.beam -*.plt -erl_crash.dump -.concrete/DEV_MODE - -# rebar 2.x -.rebar -rel/example_project -ebin/*.beam -deps - -# rebar 3 -.rebar3 -_build/ -_checkouts/ diff --git a/templates/ExpressionEngine.gitignore b/templates/ExpressionEngine.gitignore deleted file mode 100644 index 314e4df..0000000 --- a/templates/ExpressionEngine.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -.DS_Store - -# Images -images/avatars/ -images/captchas/ -images/smileys/ -images/member_photos/ -images/signature_attachments/ -images/pm_attachments/ - -# For security do not publish the following files -system/expressionengine/config/database.php -system/expressionengine/config/config.php - -# Caches -sized/ -thumbs/ -_thumbs/ -*/expressionengine/cache/* diff --git a/templates/ExtJs.gitignore b/templates/ExtJs.gitignore deleted file mode 100644 index ab97a8c..0000000 --- a/templates/ExtJs.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -.architect -bootstrap.css -bootstrap.js -bootstrap.json -bootstrap.jsonp -build/ -classic.json -classic.jsonp -ext/ -modern.json -modern.jsonp -resources/sass/.sass-cache/ -resources/.arch-internal-preview.css -.arch-internal-preview.css diff --git a/templates/Fancy.gitignore b/templates/Fancy.gitignore deleted file mode 100644 index 70d6e63..0000000 --- a/templates/Fancy.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.rbc -*.fyc diff --git a/templates/Finale.gitignore b/templates/Finale.gitignore deleted file mode 100644 index 7ef08e0..0000000 --- a/templates/Finale.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -*.bak -*.db -*.avi -*.pdf -*.ps -*.mid -*.midi -*.mp3 -*.aif -*.wav -# Some versions of Finale have a bug and randomly save extra copies of -# the music source as " copy.mus" -*copy.mus diff --git a/templates/FlaxEngine.gitignore b/templates/FlaxEngine.gitignore deleted file mode 100644 index b470568..0000000 --- a/templates/FlaxEngine.gitignore +++ /dev/null @@ -1,45 +0,0 @@ -# Ignore Flax project files -Binaries/ -Cache/ -Logs/ -Output/ -Screenshots/ -*.HotReload.* - -# Ignore Visual Studio project files (generated locally) -*.csproj -*.sln - -# Ignore thumbnails created by Windows -Thumbs.db - -# Ignore files built by Visual Studio -*.obj -*.exe -*.pdb -*.user -*.aps -*.pch -*.vspscc -*_i.c -*_p.c -*.ncb -*.suo -*.tlb -*.tlh -*.bak -*.cache -*.ilk -*.log -[Bb]in -[Dd]ebug*/ -*.lib -*.sbr -obj/ -[Rr]elease*/ -_ReSharper*/ -[Tt]est[Rr]esult* -.vs/ - -# Ignore Nuget packages folder -packages/ diff --git a/templates/ForceDotCom.gitignore b/templates/ForceDotCom.gitignore deleted file mode 100644 index 3933cd4..0000000 --- a/templates/ForceDotCom.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -.project -.settings -salesforce.schema -Referenced Packages diff --git a/templates/Fortran.gitignore b/templates/Fortran.gitignore deleted file mode 100644 index 5daba98..0000000 --- a/templates/Fortran.gitignore +++ /dev/null @@ -1 +0,0 @@ -C++.gitignore \ No newline at end of file diff --git a/templates/FuelPHP.gitignore b/templates/FuelPHP.gitignore deleted file mode 100644 index d69f71f..0000000 --- a/templates/FuelPHP.gitignore +++ /dev/null @@ -1,21 +0,0 @@ -# the composer package lock file and install directory -# Commit your application's lock file http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file -# You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file -# /composer.lock -/fuel/vendor - -# the fuelphp document -/docs/ - -# you may install these packages with `oil package`. -# http://fuelphp.com/docs/packages/oil/package.html -# /fuel/packages/auth/ -# /fuel/packages/email/ -# /fuel/packages/oil/ -# /fuel/packages/orm/ -# /fuel/packages/parser/ - -# dynamically generated files -/fuel/app/logs/*/*/* -/fuel/app/cache/*/* -/fuel/app/config/crypt.php diff --git a/templates/GWT.gitignore b/templates/GWT.gitignore deleted file mode 100644 index a01e7fc..0000000 --- a/templates/GWT.gitignore +++ /dev/null @@ -1,25 +0,0 @@ -*.class - -# Package Files # -*.jar -*.war - -# gwt caches and compiled units # -war/gwt_bree/ -gwt-unitCache/ - -# boilerplate generated classes # -.apt_generated/ - -# more caches and things from deploy # -war/WEB-INF/deploy/ -war/WEB-INF/classes/ - -#compilation logs -.gwt/ - -#gwt junit compilation files -www-test/ - -#old GWT (1.5) created this dir -.gwt-tmp/ diff --git a/templates/Gcov.gitignore b/templates/Gcov.gitignore deleted file mode 100644 index a645143..0000000 --- a/templates/Gcov.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# gcc coverage testing tool files - -*.gcno -*.gcda -*.gcov diff --git a/templates/GitBook.gitignore b/templates/GitBook.gitignore deleted file mode 100644 index 4cb12d8..0000000 --- a/templates/GitBook.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -# Node rules: -## Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -## Dependency directory -## Commenting this out is preferred by some people, see -## https://docs.npmjs.com/misc/faq#should-i-check-my-node_modules-folder-into-git -node_modules - -# Book build output -_book - -# eBook build output -*.epub -*.mobi -*.pdf diff --git a/templates/GitHubPages.gitignore b/templates/GitHubPages.gitignore deleted file mode 100644 index 493e69b..0000000 --- a/templates/GitHubPages.gitignore +++ /dev/null @@ -1,18 +0,0 @@ -# This .gitignore is appropriate for repositories deployed to GitHub Pages and using -# a Gemfile as specified at https://github.com/github/pages-gem#conventional - -# Basic Jekyll gitignores (synchronize to Jekyll.gitignore) -_site/ -.sass-cache/ -.jekyll-cache/ -.jekyll-metadata - -# Additional Ruby/bundler ignore for when you run: bundle install -/vendor - -# Specific ignore for GitHub Pages -# GitHub Pages will always use its own deployed version of pages-gem -# This means GitHub Pages will NOT use your Gemfile.lock and therefore it is -# counterproductive to check this file into the repository. -# Details at https://github.com/github/pages-gem/issues/768 -Gemfile.lock diff --git a/templates/Global/Backup.gitignore b/templates/Global/Backup.gitignore deleted file mode 100644 index 825ce52..0000000 --- a/templates/Global/Backup.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -*.bak -*.gho -*.ori -*.orig -*.tmp diff --git a/templates/Global/Bazaar.gitignore b/templates/Global/Bazaar.gitignore deleted file mode 100644 index 3cbbcbd..0000000 --- a/templates/Global/Bazaar.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.bzr/ -.bzrignore diff --git a/templates/Global/BricxCC.gitignore b/templates/Global/BricxCC.gitignore deleted file mode 100644 index c1d16a4..0000000 --- a/templates/Global/BricxCC.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Bricx Command Center IDE -# http://bricxcc.sourceforge.net -*.bak -*.sym diff --git a/templates/Global/CVS.gitignore b/templates/Global/CVS.gitignore deleted file mode 100644 index 1695352..0000000 --- a/templates/Global/CVS.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -/CVS/* -**/CVS/* -.cvsignore -*/.cvsignore diff --git a/templates/Global/Calabash.gitignore b/templates/Global/Calabash.gitignore deleted file mode 100644 index 8a75b32..0000000 --- a/templates/Global/Calabash.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Calabash / Cucumber -rerun/ -reports/ -screenshots/ -screenshot*.png -test-servers/ - -# bundler -.bundle -vendor diff --git a/templates/Global/Cloud9.gitignore b/templates/Global/Cloud9.gitignore deleted file mode 100644 index 3f4384d..0000000 --- a/templates/Global/Cloud9.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Cloud9 IDE - http://c9.io -.c9revisions -.c9 diff --git a/templates/Global/CodeKit.gitignore b/templates/Global/CodeKit.gitignore deleted file mode 100644 index 09b8412..0000000 --- a/templates/Global/CodeKit.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# General CodeKit files to ignore -config.codekit -config.codekit3 -/min diff --git a/templates/Global/DartEditor.gitignore b/templates/Global/DartEditor.gitignore deleted file mode 100644 index 948920b..0000000 --- a/templates/Global/DartEditor.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.project -.buildlog diff --git a/templates/Global/Diff.gitignore b/templates/Global/Diff.gitignore deleted file mode 100644 index 59491b4..0000000 --- a/templates/Global/Diff.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.patch -*.diff diff --git a/templates/Global/Dreamweaver.gitignore b/templates/Global/Dreamweaver.gitignore deleted file mode 100644 index 0621a3d..0000000 --- a/templates/Global/Dreamweaver.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -# DW Dreamweaver added files -_notes -_compareTemp -configs/ -dwsync.xml -dw_php_codehinting.config -*.mno diff --git a/templates/Global/Dropbox.gitignore b/templates/Global/Dropbox.gitignore deleted file mode 100644 index 40f4a46..0000000 --- a/templates/Global/Dropbox.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Dropbox settings and caches -.dropbox -.dropbox.attr -.dropbox.cache diff --git a/templates/Global/Eclipse.gitignore b/templates/Global/Eclipse.gitignore deleted file mode 100644 index acec74a..0000000 --- a/templates/Global/Eclipse.gitignore +++ /dev/null @@ -1,60 +0,0 @@ -.metadata -bin/ -tmp/ -*.tmp -*.bak -*.swp -*~.nib -local.properties -.settings/ -.loadpath -.recommenders - -# External tool builders -.externalToolBuilders/ - -# Locally stored "Eclipse launch configurations" -*.launch - -# PyDev specific (Python IDE for Eclipse) -*.pydevproject - -# CDT-specific (C/C++ Development Tooling) -.cproject - -# CDT- autotools -.autotools - -# Java annotation processor (APT) -.factorypath - -# PDT-specific (PHP Development Tools) -.buildpath - -# sbteclipse plugin -.target - -# Tern plugin -.tern-project - -# TeXlipse plugin -.texlipse - -# STS (Spring Tool Suite) -.springBeans - -# Code Recommenders -.recommenders/ - -# Annotation Processing -.apt_generated/ -.apt_generated_test/ - -# Scala IDE specific (Scala & Java development for Eclipse) -.cache-main -.scala_dependencies -.worksheet - -# Uncomment this line if you wish to ignore the project description file. -# Typically, this file would be tracked if it contains build/dependency configurations: -#.project diff --git a/templates/Global/EiffelStudio.gitignore b/templates/Global/EiffelStudio.gitignore deleted file mode 100644 index f41b4f7..0000000 --- a/templates/Global/EiffelStudio.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# The compilation directory -EIFGENs diff --git a/templates/Global/Emacs.gitignore b/templates/Global/Emacs.gitignore deleted file mode 100644 index d40e865..0000000 --- a/templates/Global/Emacs.gitignore +++ /dev/null @@ -1,49 +0,0 @@ -# -*- mode: gitignore; -*- -*~ -\#*\# -/.emacs.desktop -/.emacs.desktop.lock -*.elc -auto-save-list -tramp -.\#* - -# Org-mode -.org-id-locations -*_archive - -# flymake-mode -*_flymake.* - -# eshell files -/eshell/history -/eshell/lastdir - -# elpa packages -/elpa/ - -# reftex files -*.rel - -# AUCTeX auto folder -/auto/ - -# cask packages -.cask/ -dist/ - -# Flycheck -flycheck_*.el - -# server auth directory -/server/ - -# projectiles files -.projectile - -# directory configuration -.dir-locals.el - -# network security -/network-security.data - diff --git a/templates/Global/Ensime.gitignore b/templates/Global/Ensime.gitignore deleted file mode 100644 index f2daebb..0000000 --- a/templates/Global/Ensime.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Ensime specific -.ensime -.ensime_cache/ -.ensime_lucene/ diff --git a/templates/Global/Espresso.gitignore b/templates/Global/Espresso.gitignore deleted file mode 100644 index 1234530..0000000 --- a/templates/Global/Espresso.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.esproj diff --git a/templates/Global/FlexBuilder.gitignore b/templates/Global/FlexBuilder.gitignore deleted file mode 100644 index bbbfb91..0000000 --- a/templates/Global/FlexBuilder.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -bin/ -bin-debug/ -bin-release/ diff --git a/templates/Global/GPG.gitignore b/templates/Global/GPG.gitignore deleted file mode 100644 index 7740a01..0000000 --- a/templates/Global/GPG.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -secring.* - diff --git a/templates/Global/Images.gitignore b/templates/Global/Images.gitignore deleted file mode 100644 index 97dcdbe..0000000 --- a/templates/Global/Images.gitignore +++ /dev/null @@ -1,63 +0,0 @@ -# JPEG -*.jpg -*.jpeg -*.jpe -*.jif -*.jfif -*.jfi - -# JPEG 2000 -*.jp2 -*.j2k -*.jpf -*.jpx -*.jpm -*.mj2 - -# JPEG XR -*.jxr -*.hdp -*.wdp - -# Graphics Interchange Format -*.gif - -# RAW -*.raw - -# Web P -*.webp - -# Portable Network Graphics -*.png - -# Animated Portable Network Graphics -*.apng - -# Multiple-image Network Graphics -*.mng - -# Tagged Image File Format -*.tiff -*.tif - -# Scalable Vector Graphics -*.svg -*.svgz - -# Portable Document Format -*.pdf - -# X BitMap -*.xbm - -# BMP -*.bmp -*.dib - -# ICO -*.ico - -# 3D Images -*.3dm -*.max diff --git a/templates/Global/JDeveloper.gitignore b/templates/Global/JDeveloper.gitignore deleted file mode 100644 index 5bba6f3..0000000 --- a/templates/Global/JDeveloper.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -# default application storage directory used by the IDE Performance Cache feature -.data/ - -# used for ADF styles caching -temp/ - -# default output directories -classes/ -deploy/ -javadoc/ - -# lock file, a part of Oracle Credential Store Framework -cwallet.sso.lck \ No newline at end of file diff --git a/templates/Global/JEnv.gitignore b/templates/Global/JEnv.gitignore deleted file mode 100644 index d838300..0000000 --- a/templates/Global/JEnv.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# JEnv local Java version configuration file -.java-version - -# Used by previous versions of JEnv -.jenv-version diff --git a/templates/Global/JetBrains.gitignore b/templates/Global/JetBrains.gitignore deleted file mode 100644 index 3649d6d..0000000 --- a/templates/Global/JetBrains.gitignore +++ /dev/null @@ -1,77 +0,0 @@ -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider -# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 - -# User-specific stuff -.idea/**/workspace.xml -.idea/**/tasks.xml -.idea/**/usage.statistics.xml -.idea/**/dictionaries -.idea/**/shelf - -# AWS User-specific -.idea/**/aws.xml - -# Generated files -.idea/**/contentModel.xml - -# Sensitive or high-churn files -.idea/**/dataSources/ -.idea/**/dataSources.ids -.idea/**/dataSources.local.xml -.idea/**/sqlDataSources.xml -.idea/**/dynamic.xml -.idea/**/uiDesigner.xml -.idea/**/dbnavigator.xml - -# Gradle -.idea/**/gradle.xml -.idea/**/libraries - -# Gradle and Maven with auto-import -# When using Gradle or Maven with auto-import, you should exclude module files, -# since they will be recreated, and may cause churn. Uncomment if using -# auto-import. -# .idea/artifacts -# .idea/compiler.xml -# .idea/jarRepositories.xml -# .idea/modules.xml -# .idea/*.iml -# .idea/modules -# *.iml -# *.ipr - -# CMake -cmake-build-*/ - -# Mongo Explorer plugin -.idea/**/mongoSettings.xml - -# File-based project format -*.iws - -# IntelliJ -out/ - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Cursive Clojure plugin -.idea/replstate.xml - -# SonarLint plugin -.idea/sonarlint/ - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties -fabric.properties - -# Editor-based Rest Client -.idea/httpRequests - -# Android studio 3.1+ serialized cache file -.idea/caches/build_file_checksums.ser diff --git a/templates/Global/KDevelop4.gitignore b/templates/Global/KDevelop4.gitignore deleted file mode 100644 index 7ac57b1..0000000 --- a/templates/Global/KDevelop4.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.kdev4 -.kdev4/ diff --git a/templates/Global/Kate.gitignore b/templates/Global/Kate.gitignore deleted file mode 100644 index 7ff06ce..0000000 --- a/templates/Global/Kate.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Swap Files # -.*.kate-swp -.swp.* diff --git a/templates/Global/Lazarus.gitignore b/templates/Global/Lazarus.gitignore deleted file mode 100644 index b32943f..0000000 --- a/templates/Global/Lazarus.gitignore +++ /dev/null @@ -1,30 +0,0 @@ -# Lazarus compiler-generated binaries (safe to delete) -*.exe -*.dll -*.so -*.dylib -*.lrs -*.res -*.compiled -*.dbg -*.ppu -*.o -*.or -*.a - -# Lazarus autogenerated files (duplicated info) -*.rst -*.rsj -*.lrt - -# Lazarus local files (user-specific info) -*.lps - -# Lazarus backups and unit output folders. -# These can be changed by user in Lazarus/project options. -backup/ -*.bak -lib/ - -# Application bundle for Mac OS -*.app/ diff --git a/templates/Global/LibreOffice.gitignore b/templates/Global/LibreOffice.gitignore deleted file mode 100644 index 586beac..0000000 --- a/templates/Global/LibreOffice.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# LibreOffice locks -.~lock.*# diff --git a/templates/Global/Linux.gitignore b/templates/Global/Linux.gitignore deleted file mode 100644 index b56bf65..0000000 --- a/templates/Global/Linux.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* diff --git a/templates/Global/LyX.gitignore b/templates/Global/LyX.gitignore deleted file mode 100644 index 8efe019..0000000 --- a/templates/Global/LyX.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Ignore LyX backup and autosave files -# http://www.lyx.org/ -*.lyx~ -*.lyx# diff --git a/templates/Global/MATLAB.gitignore b/templates/Global/MATLAB.gitignore deleted file mode 100644 index 01d02dd..0000000 --- a/templates/Global/MATLAB.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -# Windows default autosave extension -*.asv - -# OSX / *nix default autosave extension -*.m~ - -# Compiled MEX binaries (all platforms) -*.mex* - -# Packaged app and toolbox files -*.mlappinstall -*.mltbx - -# Generated helpsearch folders -helpsearch*/ - -# Simulink code generation folders -slprj/ -sccprj/ - -# Matlab code generation folders -codegen/ - -# Simulink autosave extension -*.autosave - -# Simulink cache files -*.slxc - -# Octave session info -octave-workspace diff --git a/templates/Global/Mercurial.gitignore b/templates/Global/Mercurial.gitignore deleted file mode 100644 index e65d113..0000000 --- a/templates/Global/Mercurial.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -.hg/ -.hgignore -.hgsigs -.hgsub -.hgsubstate -.hgtags diff --git a/templates/Global/Metals.gitignore b/templates/Global/Metals.gitignore deleted file mode 100644 index 516e7e3..0000000 --- a/templates/Global/Metals.gitignore +++ /dev/null @@ -1,5 +0,0 @@ - # Generated Metals (Scala Language Server) files - # Reference: https://scalameta.org/metals/ -.metals/ -.bloop/ -project/metals.sbt diff --git a/templates/Global/MicrosoftOffice.gitignore b/templates/Global/MicrosoftOffice.gitignore deleted file mode 100644 index ddcc9cf..0000000 --- a/templates/Global/MicrosoftOffice.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -*.tmp - -# Word temporary -~$*.doc* - -# Word Auto Backup File -Backup of *.doc* - -# Excel temporary -~$*.xls* - -# Excel Backup File -*.xlk - -# PowerPoint temporary -~$*.ppt* - -# Visio autosave temporary files -*.~vsd* diff --git a/templates/Global/ModelSim.gitignore b/templates/Global/ModelSim.gitignore deleted file mode 100644 index 46592b8..0000000 --- a/templates/Global/ModelSim.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -# ignore ModelSim generated files and directories (temp files and so on) -[_@]* - -# ignore compilation output of ModelSim -*.mti -*.dat -*.dbs -*.psm -*.bak -*.cmp -*.jpg -*.html -*.bsf - -# ignore simulation output of ModelSim -wlf* -*.wlf -*.vstf -*.ucdb -cov*/ -transcript* -sc_dpiheader.h -vsim.dbg diff --git a/templates/Global/Momentics.gitignore b/templates/Global/Momentics.gitignore deleted file mode 100644 index b14db2d..0000000 --- a/templates/Global/Momentics.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Built files -x86/ -arm/ -arm-p/ -translations/*.qm - -# IDE settings -.settings/ diff --git a/templates/Global/MonoDevelop.gitignore b/templates/Global/MonoDevelop.gitignore deleted file mode 100644 index ef38d06..0000000 --- a/templates/Global/MonoDevelop.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -#User Specific -*.userprefs -*.usertasks - -#Mono Project Files -*.pidb -*.resources -test-results/ diff --git a/templates/Global/NetBeans.gitignore b/templates/Global/NetBeans.gitignore deleted file mode 100644 index 4511287..0000000 --- a/templates/Global/NetBeans.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -**/nbproject/private/ -**/nbproject/Makefile-*.mk -**/nbproject/Package-*.bash -build/ -nbbuild/ -dist/ -nbdist/ -.nb-gradle/ diff --git a/templates/Global/Ninja.gitignore b/templates/Global/Ninja.gitignore deleted file mode 100644 index 50e58f2..0000000 --- a/templates/Global/Ninja.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.ninja_deps -.ninja_log diff --git a/templates/Global/NotepadPP.gitignore b/templates/Global/NotepadPP.gitignore deleted file mode 100644 index f858518..0000000 --- a/templates/Global/NotepadPP.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Notepad++ backups # -*.bak diff --git a/templates/Global/Octave.gitignore b/templates/Global/Octave.gitignore deleted file mode 100644 index b1d6054..0000000 --- a/templates/Global/Octave.gitignore +++ /dev/null @@ -1 +0,0 @@ -MATLAB.gitignore \ No newline at end of file diff --git a/templates/Global/Otto.gitignore b/templates/Global/Otto.gitignore deleted file mode 100644 index 5aa263f..0000000 --- a/templates/Global/Otto.gitignore +++ /dev/null @@ -1 +0,0 @@ -.otto/ diff --git a/templates/Global/PSoCCreator.gitignore b/templates/Global/PSoCCreator.gitignore deleted file mode 100644 index 15ae040..0000000 --- a/templates/Global/PSoCCreator.gitignore +++ /dev/null @@ -1,18 +0,0 @@ -# Project Settings -*.cywrk.* -*.cyprj.* - -# Generated Assets and Resources -Debug/ -Release/ -Export/ -*/codegentemp -*/Generated_Source -*_datasheet.pdf -*_timing.html -*.cycdx -*.cyfit -*.rpt -*.svd -*.log -*.zip diff --git a/templates/Global/Patch.gitignore b/templates/Global/Patch.gitignore deleted file mode 100644 index 6ffab9a..0000000 --- a/templates/Global/Patch.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.orig -*.rej diff --git a/templates/Global/PuTTY.gitignore b/templates/Global/PuTTY.gitignore deleted file mode 100644 index c37466b..0000000 --- a/templates/Global/PuTTY.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Private key -*.ppk diff --git a/templates/Global/README.md b/templates/Global/README.md deleted file mode 100644 index 6e57d87..0000000 --- a/templates/Global/README.md +++ /dev/null @@ -1,10 +0,0 @@ -## Globally Useful gitignores - -This directory contains globally useful gitignores, -e.g. OS-specific and editor specific. - -For more on global gitignores: - - -And a good blog post about 'em: - diff --git a/templates/Global/Redcar.gitignore b/templates/Global/Redcar.gitignore deleted file mode 100644 index b4a9d1d..0000000 --- a/templates/Global/Redcar.gitignore +++ /dev/null @@ -1 +0,0 @@ -.redcar diff --git a/templates/Global/Redis.gitignore b/templates/Global/Redis.gitignore deleted file mode 100644 index 57c1c23..0000000 --- a/templates/Global/Redis.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Ignore redis binary dump (dump.rdb) files - -*.rdb diff --git a/templates/Global/SBT.gitignore b/templates/Global/SBT.gitignore deleted file mode 100644 index 5ed6acb..0000000 --- a/templates/Global/SBT.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -# Simple Build Tool -# http://www.scala-sbt.org/release/docs/Getting-Started/Directories.html#configuring-version-control - -dist/* -target/ -lib_managed/ -src_managed/ -project/boot/ -project/plugins/project/ -.history -.cache -.lib/ diff --git a/templates/Global/SVN.gitignore b/templates/Global/SVN.gitignore deleted file mode 100644 index 1b53ace..0000000 --- a/templates/Global/SVN.gitignore +++ /dev/null @@ -1 +0,0 @@ -.svn/ diff --git a/templates/Global/SlickEdit.gitignore b/templates/Global/SlickEdit.gitignore deleted file mode 100644 index f30b8da..0000000 --- a/templates/Global/SlickEdit.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -# SlickEdit workspace and project files are ignored by default because -# typically they are considered to be developer-specific and not part of a -# project. -*.vpw -*.vpj - -# SlickEdit workspace history and tag files always contain user-specific -# data so they should not be stored in a repository. -*.vpwhistu -*.vpwhist -*.vtg diff --git a/templates/Global/Stata.gitignore b/templates/Global/Stata.gitignore deleted file mode 100644 index 07997bb..0000000 --- a/templates/Global/Stata.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# .gitignore file for git projects containing Stata files -# Commercial statistical software: http://www.stata.com - -# Stata dataset and output files -*.dta -*.gph -*.log -*.smcl -*.stpr -*.stsem - -# Graphic export files from Stata -# Stata command graph export: http://www.stata.com/manuals14/g-2graphexport.pdf -# -# You may add graphic export files to your .gitignore. However you should be -# aware that this will exclude all image files from this main directory -# and subdirectories. -# *.ps -# *.eps -# *.wmf -# *.emf -# *.pdf -# *.png -# *.tif diff --git a/templates/Global/SublimeText.gitignore b/templates/Global/SublimeText.gitignore deleted file mode 100644 index fdf0abb..0000000 --- a/templates/Global/SublimeText.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -# Cache files for Sublime Text -*.tmlanguage.cache -*.tmPreferences.cache -*.stTheme.cache - -# Workspace files are user-specific -*.sublime-workspace - -# Project files should be checked into the repository, unless a significant -# proportion of contributors will probably not be using Sublime Text -# *.sublime-project - -# SFTP configuration file -sftp-config.json -sftp-config-alt*.json - -# Package control specific files -Package Control.last-run -Package Control.ca-list -Package Control.ca-bundle -Package Control.system-ca-bundle -Package Control.cache/ -Package Control.ca-certs/ -Package Control.merged-ca-bundle -Package Control.user-ca-bundle -oscrypto-ca-bundle.crt -bh_unicode_properties.cache - -# Sublime-github package stores a github token in this file -# https://packagecontrol.io/packages/sublime-github -GitHub.sublime-settings diff --git a/templates/Global/Syncthing.gitignore b/templates/Global/Syncthing.gitignore deleted file mode 100644 index e18c9a8..0000000 --- a/templates/Global/Syncthing.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Syncthing caches -.stversions diff --git a/templates/Global/SynopsysVCS.gitignore b/templates/Global/SynopsysVCS.gitignore deleted file mode 100644 index ad751f6..0000000 --- a/templates/Global/SynopsysVCS.gitignore +++ /dev/null @@ -1,36 +0,0 @@ -# Waveform formats -*.vcd -*.vpd -*.evcd -*.fsdb - -# Default name of the simulation executable. A different name can be -# specified with this switch (the associated daidir database name is -# also taken from here): -o / -simv - -# Generated for Verilog and VHDL top configs -simv.daidir/ -simv.db.dir/ - -# Infrastructure necessary to co-simulate SystemC models with -# Verilog/VHDL models. An alternate directory may be specified with this -# switch: -Mdir= -csrc/ - -# Log file - the following switch allows to specify the file that will be -# used to write all messages from simulation: -l -*.log - -# Coverage results (generated with urg) and database location. The -# following switch can also be used: urg -dir .vdb -simv.vdb/ -urgReport/ - -# DVE and UCLI related files. -DVEfiles/ -ucli.key - -# When the design is elaborated for DirectC, the following file is created -# with declarations for C/C++ functions. -vc_hdrs.h diff --git a/templates/Global/Tags.gitignore b/templates/Global/Tags.gitignore deleted file mode 100644 index 91927af..0000000 --- a/templates/Global/Tags.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -# Ignore tags created by etags, ctags, gtags (GNU global) and cscope -TAGS -.TAGS -!TAGS/ -tags -.tags -!tags/ -gtags.files -GTAGS -GRTAGS -GPATH -GSYMS -cscope.files -cscope.out -cscope.in.out -cscope.po.out - diff --git a/templates/Global/TextMate.gitignore b/templates/Global/TextMate.gitignore deleted file mode 100644 index 41e8d07..0000000 --- a/templates/Global/TextMate.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -*.tmproj -*.tmproject -tmtags diff --git a/templates/Global/TortoiseGit.gitignore b/templates/Global/TortoiseGit.gitignore deleted file mode 100644 index db89590..0000000 --- a/templates/Global/TortoiseGit.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Project-level settings -/.tgitconfig diff --git a/templates/Global/Vagrant.gitignore b/templates/Global/Vagrant.gitignore deleted file mode 100644 index a8e2345..0000000 --- a/templates/Global/Vagrant.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# General -.vagrant/ - -# Log files (if you are creating logs in debug mode, uncomment this) -# *.log diff --git a/templates/Global/Vim.gitignore b/templates/Global/Vim.gitignore deleted file mode 100644 index 19fa632..0000000 --- a/templates/Global/Vim.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -# Swap -[._]*.s[a-v][a-z] -!*.svg # comment out if you don't need vector files -[._]*.sw[a-p] -[._]s[a-rt-v][a-z] -[._]ss[a-gi-z] -[._]sw[a-p] - -# Session -Session.vim -Sessionx.vim - -# Temporary -.netrwhist -*~ -# Auto-generated tag files -tags -# Persistent undo -[._]*.un~ diff --git a/templates/Global/VirtualEnv.gitignore b/templates/Global/VirtualEnv.gitignore deleted file mode 100644 index b2c22f2..0000000 --- a/templates/Global/VirtualEnv.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -# Virtualenv -# http://iamzed.com/2009/05/07/a-primer-on-virtualenv/ -.Python -[Bb]in -[Ii]nclude -[Ll]ib -[Ll]ib64 -[Ll]ocal -[Ss]cripts -pyvenv.cfg -.venv -pip-selfcheck.json diff --git a/templates/Global/Virtuoso.gitignore b/templates/Global/Virtuoso.gitignore deleted file mode 100644 index 2de0367..0000000 --- a/templates/Global/Virtuoso.gitignore +++ /dev/null @@ -1,18 +0,0 @@ -# Gitignore for Cadence Virtuoso -################################################################ - -# Log files -*.log -panic*.log.* - -# OpenAccess database lock files -*.cdslck* - -# Run directories for layout vs. schematic and design rule check -lvsRunDir/* -drcRunDir/* - -# Abstract generation tool -abstract.log* -abstract.record* - diff --git a/templates/Global/VisualStudioCode.gitignore b/templates/Global/VisualStudioCode.gitignore deleted file mode 100644 index 45fce1d..0000000 --- a/templates/Global/VisualStudioCode.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -!.vscode/*.code-snippets - -# Local History for Visual Studio Code -.history/ - -# Built Visual Studio Code Extensions -*.vsix diff --git a/templates/Global/WebMethods.gitignore b/templates/Global/WebMethods.gitignore deleted file mode 100644 index b383c25..0000000 --- a/templates/Global/WebMethods.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -**/IntegrationServer/datastore/ -**/IntegrationServer/db/ -**/IntegrationServer/DocumentStore/ -**/IntegrationServer/lib/ -**/IntegrationServer/logs/ -**/IntegrationServer/replicate/ -**/IntegrationServer/sdk/ -**/IntegrationServer/support/ -**/IntegrationServer/update/ -**/IntegrationServer/userFtpRoot/ -**/IntegrationServer/web/ -**/IntegrationServer/WmRepository4/ -**/IntegrationServer/XAStore/ -**/IntegrationServer/packages/Wm*/ diff --git a/templates/Global/Windows.gitignore b/templates/Global/Windows.gitignore deleted file mode 100644 index 84bffec..0000000 --- a/templates/Global/Windows.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Windows thumbnail cache files -Thumbs.db -Thumbs.db:encryptable -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk diff --git a/templates/Global/Xcode.gitignore b/templates/Global/Xcode.gitignore deleted file mode 100644 index 5073505..0000000 --- a/templates/Global/Xcode.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -## User settings -xcuserdata/ diff --git a/templates/Global/XilinxISE.gitignore b/templates/Global/XilinxISE.gitignore deleted file mode 100644 index 4475f84..0000000 --- a/templates/Global/XilinxISE.gitignore +++ /dev/null @@ -1,67 +0,0 @@ -# intermediate build files -*.bgn -*.bit -*.bld -*.cmd_log -*.drc -*.ll -*.lso -*.msd -*.msk -*.ncd -*.ngc -*.ngd -*.ngr -*.pad -*.par -*.pcf -*.prj -*.ptwx -*.rbb -*.rbd -*.stx -*.syr -*.twr -*.twx -*.unroutes -*.ut -*.xpi -*.xst -*_bitgen.xwbt -*_envsettings.html -*_map.map -*_map.mrp -*_map.ngm -*_map.xrpt -*_ngdbuild.xrpt -*_pad.csv -*_pad.txt -*_par.xrpt -*_summary.html -*_summary.xml -*_usage.xml -*_xst.xrpt - -# iMPACT generated files -_impactbatch.log -impact.xsl -impact_impact.xwbt -ise_impact.cmd -webtalk_impact.xml - -# Core Generator generated files -xaw2verilog.log - -# project-wide generated files -*.gise -par_usage_statistics.html -usage_statistics_webtalk.html -webtalk.log -webtalk_pn.xml - -# generated folders -iseconfig/ -xlnx_auto_0_xdb/ -xst/ -_ngo/ -_xmsgs/ diff --git a/templates/Global/macOS.gitignore b/templates/Global/macOS.gitignore deleted file mode 100644 index 135767f..0000000 --- a/templates/Global/macOS.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk diff --git a/templates/Go.gitignore b/templates/Go.gitignore deleted file mode 100644 index 6f72f89..0000000 --- a/templates/Go.gitignore +++ /dev/null @@ -1,25 +0,0 @@ -# If you prefer the allow list template instead of the deny list, see community template: -# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore -# -# Binaries for programs and plugins -*.exe -*.exe~ -*.dll -*.so -*.dylib - -# Test binary, built with `go test -c` -*.test - -# Output of the go coverage tool, specifically when used with LiteIDE -*.out - -# Dependency directories (remove the comment below to include it) -# vendor/ - -# Go workspace file -go.work -go.work.sum - -# env file -.env diff --git a/templates/Godot.gitignore b/templates/Godot.gitignore deleted file mode 100644 index d9aac21..0000000 --- a/templates/Godot.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -# Godot 4+ specific ignores -.godot/ - -# Godot-specific ignores -.import/ -export.cfg -export_presets.cfg - -# Imported translations (automatically generated from CSV files) -*.translation - -# Mono-specific ignores -.mono/ -data_*/ -mono_crash.*.json diff --git a/templates/Gradle.gitignore b/templates/Gradle.gitignore deleted file mode 100644 index a5b1113..0000000 --- a/templates/Gradle.gitignore +++ /dev/null @@ -1,21 +0,0 @@ -.gradle -**/build/ -!src/**/build/ - -# Ignore Gradle GUI config -gradle-app.setting - -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar - -# Avoid ignore Gradle wrappper properties -!gradle-wrapper.properties - -# Cache of project -.gradletasknamecache - -# Eclipse Gradle plugin generated files -# Eclipse Core -.project -# JDT-specific (Eclipse Java Development Tools) -.classpath diff --git a/templates/Grails.gitignore b/templates/Grails.gitignore deleted file mode 100644 index 9185f14..0000000 --- a/templates/Grails.gitignore +++ /dev/null @@ -1,33 +0,0 @@ -# .gitignore for Grails 1.2 and 1.3 -# Although this should work for most versions of grails, it is -# suggested that you use the "grails integrate-with --git" command -# to generate your .gitignore file. - -# web application files -/web-app/WEB-INF/classes - -# default HSQL database files for production mode -/prodDb.* - -# general HSQL database files -*Db.properties -*Db.script - -# logs -/stacktrace.log -/test/reports -/logs - -# project release file -/*.war - -# plugin release files -/*.zip -/plugin.xml - -# older plugin install locations -/plugins -/web-app/plugins - -# "temporary" build files -/target diff --git a/templates/Haskell.gitignore b/templates/Haskell.gitignore deleted file mode 100644 index 4c9e245..0000000 --- a/templates/Haskell.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -dist -dist-* -cabal-dev -*.o -*.hi -*.hie -*.chi -*.chs.h -*.dyn_o -*.dyn_hi -.hpc -.hsenv -.cabal-sandbox/ -cabal.sandbox.config -*.prof -*.aux -*.hp -*.eventlog -.stack-work/ -cabal.project.local -cabal.project.local~ -.HTF/ -.ghc.environment.* diff --git a/templates/IAR.gitignore b/templates/IAR.gitignore deleted file mode 100644 index e8938b3..0000000 --- a/templates/IAR.gitignore +++ /dev/null @@ -1,47 +0,0 @@ -# Compiled binaries -*.o -*.bin -*.elf -*.hex -*.map -*.out -*.obj - -# Trash -*.bak -thumbs.db -*.~* - -# IAR Settings -**/settings/*.crun -**/settings/*.dbgdt -**/settings/*.cspy -**/settings/*.cspy.* -**/settings/*.xcl -**/settings/*.dni -**/settings/*.wsdt -**/settings/*.wspos - -# IAR Debug Exe -**/Exe/*.sim - -# IAR Debug Obj -**/Obj/*.pbd -**/Obj/*.pbd.* -**/Obj/*.pbi -**/Obj/*.pbi.* - -# IAR project "Debug" directory -Debug/ - -# IAR project "Release" directory -Release/ - -# IAR project settings directory -settings/ - -# IAR backup files -Backup* - -# IAR .dep files -*.dep \ No newline at end of file diff --git a/templates/IGORPro.gitignore b/templates/IGORPro.gitignore deleted file mode 100644 index c62be65..0000000 --- a/templates/IGORPro.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# Avoid including Experiment files: they can be created and edited locally to test the ipf files -*.pxp -*.pxt -*.uxp -*.uxt diff --git a/templates/Idris.gitignore b/templates/Idris.gitignore deleted file mode 100644 index 0f4e72c..0000000 --- a/templates/Idris.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -# Idris 2 -*.ttc -*.ttm - -# Idris 1 -*.ibc -*.o diff --git a/templates/JBoss.gitignore b/templates/JBoss.gitignore deleted file mode 100644 index 75d1731..0000000 --- a/templates/JBoss.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -jboss/server/all/deploy/project.ext -jboss/server/default/deploy/project.ext -jboss/server/minimal/deploy/project.ext -jboss/server/all/log/*.log -jboss/server/all/tmp/**/* -jboss/server/all/data/**/* -jboss/server/all/work/**/* -jboss/server/default/log/*.log -jboss/server/default/tmp/**/* -jboss/server/default/data/**/* -jboss/server/default/work/**/* -jboss/server/minimal/log/*.log -jboss/server/minimal/tmp/**/* -jboss/server/minimal/data/**/* -jboss/server/minimal/work/**/* - -# deployed package files # - -*.DEPLOYED diff --git a/templates/JENKINS_HOME.gitignore b/templates/JENKINS_HOME.gitignore deleted file mode 100644 index 2516c09..0000000 --- a/templates/JENKINS_HOME.gitignore +++ /dev/null @@ -1,50 +0,0 @@ -# Learn more about Jenkins and JENKINS_HOME directory for which this file is -# intended. -# -# http://jenkins-ci.org/ -# https://wiki.jenkins-ci.org/display/JENKINS/Administering+Jenkins -# -# Note: secret.key is purposefully not tracked by git. This should be backed up -# separately because configs may contain secrets which were encrypted using the -# secret.key. To back up secrets use 'tar -czf /tmp/secrets.tgz secret*' and -# save the file separate from your repository. If you want secrets backed up -# with configuration, then see the bottom of this file for an example. - -# Ignore all JENKINS_HOME except jobs directory, root xml config, and -# .gitignore file. -/* -!/jobs -!/.gitignore -!/*.xml - -# Ignore all files in jobs subdirectories except for folders. -# Note: git doesn't track folders, only file content. -jobs/** -!jobs/**/ - -# Uncomment the following line to save next build numbers with config. - -#!jobs/**/nextBuildNumber - -# For performance reasons, we want to ignore builds in Jenkins jobs because it -# contains many tiny files on large installations. This can impact git -# performance when running even basic commands like 'git status'. -builds -indexing - -# Exclude only config.xml files in repository subdirectories. -!config.xml - -# Don't track workspaces (when users build on the master). -jobs/**/*workspace - -# Security warning: If secrets are included with your configuration, then an -# adversary will be able to decrypt all encrypted secrets within Jenkins -# config. Including secrets is a bad practice, but the example is included in -# case someone still wants it for convenience. Uncomment the following line to -# include secrets for decryption with repository configuration in Git. - -#!/secret* - -# As a result, only Jenkins settings and job config.xml files in JENKINS_HOME -# will be tracked by git. diff --git a/templates/Java.gitignore b/templates/Java.gitignore deleted file mode 100644 index 524f096..0000000 --- a/templates/Java.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* -replay_pid* diff --git a/templates/Jekyll.gitignore b/templates/Jekyll.gitignore deleted file mode 100644 index 74a9223..0000000 --- a/templates/Jekyll.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -_site/ -.sass-cache/ -.jekyll-cache/ -.jekyll-metadata -# Ignore folders generated by Bundler -.bundle/ -vendor/ diff --git a/templates/Joomla.gitignore b/templates/Joomla.gitignore deleted file mode 100644 index 41a9ba4..0000000 --- a/templates/Joomla.gitignore +++ /dev/null @@ -1,705 +0,0 @@ -/.htaccess -/administrator/cache/* -/administrator/components/com_actionlogs/* -/administrator/components/com_admin/* -/administrator/components/com_ajax/* -/administrator/components/com_associations/* -/administrator/components/com_banners/* -/administrator/components/com_cache/* -/administrator/components/com_categories/* -/administrator/components/com_checkin/* -/administrator/components/com_config/* -/administrator/components/com_contact/* -/administrator/components/com_content/* -/administrator/components/com_contenthistory/* -/administrator/components/com_cpanel/* -/administrator/components/com_fields/* -/administrator/components/com_finder/* -/administrator/components/com_installer/* -/administrator/components/com_joomlaupdate/* -/administrator/components/com_languages/* -/administrator/components/com_login/* -/administrator/components/com_media/* -/administrator/components/com_menus/* -/administrator/components/com_messages/* -/administrator/components/com_modules/* -/administrator/components/com_newsfeeds/* -/administrator/components/com_plugins/* -/administrator/components/com_postinstall/* -/administrator/components/com_privacy/* -/administrator/components/com_redirect/* -/administrator/components/com_search/* -/administrator/components/com_tags/* -/administrator/components/com_templates/* -/administrator/components/com_users/* -/administrator/help/* -/administrator/includes/* -/administrator/index.php -/administrator/language/en-GB/en-GB.com_actionlogs.ini -/administrator/language/en-GB/en-GB.com_actionlogs.sys.ini -/administrator/language/en-GB/en-GB.com_admin.ini -/administrator/language/en-GB/en-GB.com_admin.sys.ini -/administrator/language/en-GB/en-GB.com_ajax.ini -/administrator/language/en-GB/en-GB.com_ajax.sys.ini -/administrator/language/en-GB/en-GB.com_associations.ini -/administrator/language/en-GB/en-GB.com_associations.sys.ini -/administrator/language/en-GB/en-GB.com_banners.ini -/administrator/language/en-GB/en-GB.com_banners.sys.ini -/administrator/language/en-GB/en-GB.com_cache.ini -/administrator/language/en-GB/en-GB.com_cache.sys.ini -/administrator/language/en-GB/en-GB.com_categories.ini -/administrator/language/en-GB/en-GB.com_categories.sys.ini -/administrator/language/en-GB/en-GB.com_checkin.ini -/administrator/language/en-GB/en-GB.com_checkin.sys.ini -/administrator/language/en-GB/en-GB.com_config.ini -/administrator/language/en-GB/en-GB.com_config.sys.ini -/administrator/language/en-GB/en-GB.com_contact.ini -/administrator/language/en-GB/en-GB.com_contact.sys.ini -/administrator/language/en-GB/en-GB.com_content.ini -/administrator/language/en-GB/en-GB.com_content.sys.ini -/administrator/language/en-GB/en-GB.com_contenthistory.ini -/administrator/language/en-GB/en-GB.com_contenthistory.sys.ini -/administrator/language/en-GB/en-GB.com_cpanel.ini -/administrator/language/en-GB/en-GB.com_cpanel.sys.ini -/administrator/language/en-GB/en-GB.com_fields.ini -/administrator/language/en-GB/en-GB.com_fields.sys.ini -/administrator/language/en-GB/en-GB.com_finder.ini -/administrator/language/en-GB/en-GB.com_finder.sys.ini -/administrator/language/en-GB/en-GB.com_installer.ini -/administrator/language/en-GB/en-GB.com_installer.sys.ini -/administrator/language/en-GB/en-GB.com_joomlaupdate.ini -/administrator/language/en-GB/en-GB.com_joomlaupdate.sys.ini -/administrator/language/en-GB/en-GB.com_languages.ini -/administrator/language/en-GB/en-GB.com_languages.sys.ini -/administrator/language/en-GB/en-GB.com_login.ini -/administrator/language/en-GB/en-GB.com_login.sys.ini -/administrator/language/en-GB/en-GB.com_mailto.sys.ini -/administrator/language/en-GB/en-GB.com_media.ini -/administrator/language/en-GB/en-GB.com_media.sys.ini -/administrator/language/en-GB/en-GB.com_menus.ini -/administrator/language/en-GB/en-GB.com_menus.sys.ini -/administrator/language/en-GB/en-GB.com_messages.ini -/administrator/language/en-GB/en-GB.com_messages.sys.ini -/administrator/language/en-GB/en-GB.com_modules.ini -/administrator/language/en-GB/en-GB.com_modules.sys.ini -/administrator/language/en-GB/en-GB.com_newsfeeds.ini -/administrator/language/en-GB/en-GB.com_newsfeeds.sys.ini -/administrator/language/en-GB/en-GB.com_plugins.ini -/administrator/language/en-GB/en-GB.com_plugins.sys.ini -/administrator/language/en-GB/en-GB.com_postinstall.ini -/administrator/language/en-GB/en-GB.com_postinstall.sys.ini -/administrator/language/en-GB/en-GB.com_privacy.ini -/administrator/language/en-GB/en-GB.com_privacy.sys.ini -/administrator/language/en-GB/en-GB.com_redirect.ini -/administrator/language/en-GB/en-GB.com_redirect.sys.ini -/administrator/language/en-GB/en-GB.com_search.ini -/administrator/language/en-GB/en-GB.com_search.sys.ini -/administrator/language/en-GB/en-GB.com_tags.ini -/administrator/language/en-GB/en-GB.com_tags.sys.ini -/administrator/language/en-GB/en-GB.com_templates.ini -/administrator/language/en-GB/en-GB.com_templates.sys.ini -/administrator/language/en-GB/en-GB.com_users.ini -/administrator/language/en-GB/en-GB.com_users.sys.ini -/administrator/language/en-GB/en-GB.com_weblinks.ini -/administrator/language/en-GB/en-GB.com_weblinks.sys.ini -/administrator/language/en-GB/en-GB.com_wrapper.ini -/administrator/language/en-GB/en-GB.com_wrapper.sys.ini -/administrator/language/en-GB/en-GB.ini -/administrator/language/en-GB/en-GB.lib_joomla.ini -/administrator/language/en-GB/en-GB.localise.php -/administrator/language/en-GB/en-GB.mod_custom.ini -/administrator/language/en-GB/en-GB.mod_custom.sys.ini -/administrator/language/en-GB/en-GB.mod_feed.ini -/administrator/language/en-GB/en-GB.mod_feed.sys.ini -/administrator/language/en-GB/en-GB.mod_latest.ini -/administrator/language/en-GB/en-GB.mod_latest.sys.ini -/administrator/language/en-GB/en-GB.mod_latestactions.ini -/administrator/language/en-GB/en-GB.mod_latestactions.sys.ini -/administrator/language/en-GB/en-GB.mod_logged.ini -/administrator/language/en-GB/en-GB.mod_logged.sys.ini -/administrator/language/en-GB/en-GB.mod_login.ini -/administrator/language/en-GB/en-GB.mod_login.sys.ini -/administrator/language/en-GB/en-GB.mod_menu.ini -/administrator/language/en-GB/en-GB.mod_menu.sys.ini -/administrator/language/en-GB/en-GB.mod_multilangstatus.ini -/administrator/language/en-GB/en-GB.mod_multilangstatus.sys.ini -/administrator/language/en-GB/en-GB.mod_online.ini -/administrator/language/en-GB/en-GB.mod_online.sys.ini -/administrator/language/en-GB/en-GB.mod_popular.ini -/administrator/language/en-GB/en-GB.mod_popular.sys.ini -/administrator/language/en-GB/en-GB.mod_privacy_dashboard.ini -/administrator/language/en-GB/en-GB.mod_privacy_dashboard.sys.ini -/administrator/language/en-GB/en-GB.mod_quickicon.ini -/administrator/language/en-GB/en-GB.mod_quickicon.sys.ini -/administrator/language/en-GB/en-GB.mod_sampledata.ini -/administrator/language/en-GB/en-GB.mod_sampledata.sys.ini -/administrator/language/en-GB/en-GB.mod_stats_admin.ini -/administrator/language/en-GB/en-GB.mod_stats_admin.sys.ini -/administrator/language/en-GB/en-GB.mod_status.ini -/administrator/language/en-GB/en-GB.mod_status.sys.ini -/administrator/language/en-GB/en-GB.mod_submenu.ini -/administrator/language/en-GB/en-GB.mod_submenu.sys.ini -/administrator/language/en-GB/en-GB.mod_title.ini -/administrator/language/en-GB/en-GB.mod_title.sys.ini -/administrator/language/en-GB/en-GB.mod_toolbar.ini -/administrator/language/en-GB/en-GB.mod_toolbar.sys.ini -/administrator/language/en-GB/en-GB.mod_unread.ini -/administrator/language/en-GB/en-GB.mod_unread.sys.ini -/administrator/language/en-GB/en-GB.mod_version.ini -/administrator/language/en-GB/en-GB.mod_version.sys.ini -/administrator/language/en-GB/en-GB.plg_actionlog_joomla.ini -/administrator/language/en-GB/en-GB.plg_actionlog_joomla.sys.ini -/administrator/language/en-GB/en-GB.plg_authentication_cookie.ini -/administrator/language/en-GB/en-GB.plg_authentication_cookie.sys.ini -/administrator/language/en-GB/en-GB.plg_authentication_example.ini -/administrator/language/en-GB/en-GB.plg_authentication_example.sys.ini -/administrator/language/en-GB/en-GB.plg_authentication_gmail.ini -/administrator/language/en-GB/en-GB.plg_authentication_gmail.sys.ini -/administrator/language/en-GB/en-GB.plg_authentication_joomla.ini -/administrator/language/en-GB/en-GB.plg_authentication_joomla.sys.ini -/administrator/language/en-GB/en-GB.plg_authentication_ldap.ini -/administrator/language/en-GB/en-GB.plg_authentication_ldap.sys.ini -/administrator/language/en-GB/en-GB.plg_captcha_recaptcha.ini -/administrator/language/en-GB/en-GB.plg_captcha_recaptcha.sys.ini -/administrator/language/en-GB/en-GB.plg_captcha_recaptcha_invisible.ini -/administrator/language/en-GB/en-GB.plg_captcha_recaptcha_invisible.sys.ini -/administrator/language/en-GB/en-GB.plg_content_confirmconsent.ini -/administrator/language/en-GB/en-GB.plg_content_confirmconsent.sys.ini -/administrator/language/en-GB/en-GB.plg_content_contact.ini -/administrator/language/en-GB/en-GB.plg_content_contact.sys.ini -/administrator/language/en-GB/en-GB.plg_content_emailcloak.ini -/administrator/language/en-GB/en-GB.plg_content_emailcloak.sys.ini -/administrator/language/en-GB/en-GB.plg_content_fields.ini -/administrator/language/en-GB/en-GB.plg_content_fields.sys.ini -/administrator/language/en-GB/en-GB.plg_content_finder.ini -/administrator/language/en-GB/en-GB.plg_content_finder.sys.ini -/administrator/language/en-GB/en-GB.plg_content_geshi.ini -/administrator/language/en-GB/en-GB.plg_content_geshi.sys.ini -/administrator/language/en-GB/en-GB.plg_content_joomla.ini -/administrator/language/en-GB/en-GB.plg_content_joomla.sys.ini -/administrator/language/en-GB/en-GB.plg_content_loadmodule.ini -/administrator/language/en-GB/en-GB.plg_content_loadmodule.sys.ini -/administrator/language/en-GB/en-GB.plg_content_pagebreak.ini -/administrator/language/en-GB/en-GB.plg_content_pagebreak.sys.ini -/administrator/language/en-GB/en-GB.plg_content_pagenavigation.ini -/administrator/language/en-GB/en-GB.plg_content_pagenavigation.sys.ini -/administrator/language/en-GB/en-GB.plg_content_vote.ini -/administrator/language/en-GB/en-GB.plg_content_vote.sys.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_article.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_article.sys.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_contact.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_contact.sys.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_fields.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_fields.sys.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_image.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_image.sys.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_menu.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_menu.sys.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_module.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_module.sys.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_pagebreak.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_pagebreak.sys.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_readmore.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_readmore.sys.ini -/administrator/language/en-GB/en-GB.plg_editors_codemirror.ini -/administrator/language/en-GB/en-GB.plg_editors_codemirror.sys.ini -/administrator/language/en-GB/en-GB.plg_editors_none.ini -/administrator/language/en-GB/en-GB.plg_editors_none.sys.ini -/administrator/language/en-GB/en-GB.plg_editors_tinymce.ini -/administrator/language/en-GB/en-GB.plg_editors_tinymce.sys.ini -/administrator/language/en-GB/en-GB.plg_extension_joomla.ini -/administrator/language/en-GB/en-GB.plg_extension_joomla.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_calendar.ini -/administrator/language/en-GB/en-GB.plg_fields_calendar.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_checkboxes.ini -/administrator/language/en-GB/en-GB.plg_fields_checkboxes.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_color.ini -/administrator/language/en-GB/en-GB.plg_fields_color.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_editor.ini -/administrator/language/en-GB/en-GB.plg_fields_editor.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_image.ini -/administrator/language/en-GB/en-GB.plg_fields_image.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_imagelist.ini -/administrator/language/en-GB/en-GB.plg_fields_imagelist.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_integer.ini -/administrator/language/en-GB/en-GB.plg_fields_integer.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_list.ini -/administrator/language/en-GB/en-GB.plg_fields_list.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_media.ini -/administrator/language/en-GB/en-GB.plg_fields_media.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_radio.ini -/administrator/language/en-GB/en-GB.plg_fields_radio.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_repeatable.ini -/administrator/language/en-GB/en-GB.plg_fields_repeatable.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_sql.ini -/administrator/language/en-GB/en-GB.plg_fields_sql.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_text.ini -/administrator/language/en-GB/en-GB.plg_fields_text.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_textarea.ini -/administrator/language/en-GB/en-GB.plg_fields_textarea.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_url.ini -/administrator/language/en-GB/en-GB.plg_fields_url.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_user.ini -/administrator/language/en-GB/en-GB.plg_fields_user.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_usergrouplist.ini -/administrator/language/en-GB/en-GB.plg_fields_usergrouplist.sys.ini -/administrator/language/en-GB/en-GB.plg_finder_categories.ini -/administrator/language/en-GB/en-GB.plg_finder_categories.sys.ini -/administrator/language/en-GB/en-GB.plg_finder_contacts.ini -/administrator/language/en-GB/en-GB.plg_finder_contacts.sys.ini -/administrator/language/en-GB/en-GB.plg_finder_content.ini -/administrator/language/en-GB/en-GB.plg_finder_content.sys.ini -/administrator/language/en-GB/en-GB.plg_finder_newsfeeds.ini -/administrator/language/en-GB/en-GB.plg_finder_newsfeeds.sys.ini -/administrator/language/en-GB/en-GB.plg_finder_tags.ini -/administrator/language/en-GB/en-GB.plg_finder_tags.sys.ini -/administrator/language/en-GB/en-GB.plg_finder_weblinks.ini -/administrator/language/en-GB/en-GB.plg_finder_weblinks.sys.ini -/administrator/language/en-GB/en-GB.plg_installer_folderinstaller.ini -/administrator/language/en-GB/en-GB.plg_installer_folderinstaller.sys.ini -/administrator/language/en-GB/en-GB.plg_installer_packageinstaller.ini -/administrator/language/en-GB/en-GB.plg_installer_packageinstaller.sys.ini -/administrator/language/en-GB/en-GB.plg_installer_urlinstaller.ini -/administrator/language/en-GB/en-GB.plg_installer_urlinstaller.sys.ini -/administrator/language/en-GB/en-GB.plg_installer_webinstaller.ini -/administrator/language/en-GB/en-GB.plg_installer_webinstaller.sys.ini -/administrator/language/en-GB/en-GB.plg_privacy_actionlogs.ini -/administrator/language/en-GB/en-GB.plg_privacy_actionlogs.sys.ini -/administrator/language/en-GB/en-GB.plg_privacy_consents.ini -/administrator/language/en-GB/en-GB.plg_privacy_consents.sys.ini -/administrator/language/en-GB/en-GB.plg_privacy_contact.ini -/administrator/language/en-GB/en-GB.plg_privacy_contact.sys.ini -/administrator/language/en-GB/en-GB.plg_privacy_content.ini -/administrator/language/en-GB/en-GB.plg_privacy_content.sys.ini -/administrator/language/en-GB/en-GB.plg_privacy_message.ini -/administrator/language/en-GB/en-GB.plg_privacy_message.sys.ini -/administrator/language/en-GB/en-GB.plg_privacy_user.ini -/administrator/language/en-GB/en-GB.plg_privacy_user.sys.ini -/administrator/language/en-GB/en-GB.plg_quickicon_extensionupdate.ini -/administrator/language/en-GB/en-GB.plg_quickicon_extensionupdate.sys.ini -/administrator/language/en-GB/en-GB.plg_quickicon_joomlaupdate.ini -/administrator/language/en-GB/en-GB.plg_quickicon_joomlaupdate.sys.ini -/administrator/language/en-GB/en-GB.plg_quickicon_phpversioncheck.ini -/administrator/language/en-GB/en-GB.plg_quickicon_phpversioncheck.sys.ini -/administrator/language/en-GB/en-GB.plg_quickicon_privacycheck.ini -/administrator/language/en-GB/en-GB.plg_quickicon_privacycheck.sys.ini -/administrator/language/en-GB/en-GB.plg_sampledata_blog.ini -/administrator/language/en-GB/en-GB.plg_sampledata_blog.sys.ini -/administrator/language/en-GB/en-GB.plg_search_categories.ini -/administrator/language/en-GB/en-GB.plg_search_categories.sys.ini -/administrator/language/en-GB/en-GB.plg_search_contacts.ini -/administrator/language/en-GB/en-GB.plg_search_contacts.sys.ini -/administrator/language/en-GB/en-GB.plg_search_content.ini -/administrator/language/en-GB/en-GB.plg_search_content.sys.ini -/administrator/language/en-GB/en-GB.plg_search_newsfeeds.ini -/administrator/language/en-GB/en-GB.plg_search_newsfeeds.sys.ini -/administrator/language/en-GB/en-GB.plg_search_tags.ini -/administrator/language/en-GB/en-GB.plg_search_tags.sys.ini -/administrator/language/en-GB/en-GB.plg_search_weblinks.ini -/administrator/language/en-GB/en-GB.plg_search_weblinks.sys.ini -/administrator/language/en-GB/en-GB.plg_system_actionlogs.ini -/administrator/language/en-GB/en-GB.plg_system_actionlogs.sys.ini -/administrator/language/en-GB/en-GB.plg_system_cache.ini -/administrator/language/en-GB/en-GB.plg_system_cache.sys.ini -/administrator/language/en-GB/en-GB.plg_system_debug.ini -/administrator/language/en-GB/en-GB.plg_system_debug.sys.ini -/administrator/language/en-GB/en-GB.plg_system_fields.ini -/administrator/language/en-GB/en-GB.plg_system_fields.sys.ini -/administrator/language/en-GB/en-GB.plg_system_highlight.ini -/administrator/language/en-GB/en-GB.plg_system_highlight.sys.ini -/administrator/language/en-GB/en-GB.plg_system_languagecode.ini -/administrator/language/en-GB/en-GB.plg_system_languagecode.sys.ini -/administrator/language/en-GB/en-GB.plg_system_languagefilter.ini -/administrator/language/en-GB/en-GB.plg_system_languagefilter.sys.ini -/administrator/language/en-GB/en-GB.plg_system_log.ini -/administrator/language/en-GB/en-GB.plg_system_log.sys.ini -/administrator/language/en-GB/en-GB.plg_system_logout.ini -/administrator/language/en-GB/en-GB.plg_system_logout.sys.ini -/administrator/language/en-GB/en-GB.plg_system_logrotation.ini -/administrator/language/en-GB/en-GB.plg_system_logrotation.sys.ini -/administrator/language/en-GB/en-GB.plg_system_p3p.ini -/administrator/language/en-GB/en-GB.plg_system_p3p.sys.ini -/administrator/language/en-GB/en-GB.plg_system_privacyconsent.ini -/administrator/language/en-GB/en-GB.plg_system_privacyconsent.sys.ini -/administrator/language/en-GB/en-GB.plg_system_redirect.ini -/administrator/language/en-GB/en-GB.plg_system_redirect.sys.ini -/administrator/language/en-GB/en-GB.plg_system_remember.ini -/administrator/language/en-GB/en-GB.plg_system_remember.sys.ini -/administrator/language/en-GB/en-GB.plg_system_sef.ini -/administrator/language/en-GB/en-GB.plg_system_sef.sys.ini -/administrator/language/en-GB/en-GB.plg_system_sessiongc.ini -/administrator/language/en-GB/en-GB.plg_system_sessiongc.sys.ini -/administrator/language/en-GB/en-GB.plg_system_stats.ini -/administrator/language/en-GB/en-GB.plg_system_stats.sys.ini -/administrator/language/en-GB/en-GB.plg_system_updatenotification.ini -/administrator/language/en-GB/en-GB.plg_system_updatenotification.sys.ini -/administrator/language/en-GB/en-GB.plg_twofactorauth_totp.ini -/administrator/language/en-GB/en-GB.plg_twofactorauth_totp.sys.ini -/administrator/language/en-GB/en-GB.plg_twofactorauth_yubikey.ini -/administrator/language/en-GB/en-GB.plg_twofactorauth_yubikey.sys.ini -/administrator/language/en-GB/en-GB.plg_user_contactcreator.ini -/administrator/language/en-GB/en-GB.plg_user_contactcreator.sys.ini -/administrator/language/en-GB/en-GB.plg_user_joomla.ini -/administrator/language/en-GB/en-GB.plg_user_joomla.sys.ini -/administrator/language/en-GB/en-GB.plg_user_profile.ini -/administrator/language/en-GB/en-GB.plg_user_profile.sys.ini -/administrator/language/en-GB/en-GB.plg_user_terms.ini -/administrator/language/en-GB/en-GB.plg_user_terms.sys.ini -/administrator/language/en-GB/en-GB.tpl_hathor.ini -/administrator/language/en-GB/en-GB.tpl_hathor.sys.ini -/administrator/language/en-GB/en-GB.tpl_isis.ini -/administrator/language/en-GB/en-GB.tpl_isis.sys.ini -/administrator/language/en-GB/en-GB.xml -/administrator/language/en-GB/install.xml -/administrator/language/overrides/* -/administrator/language/index.html -/administrator/logs/* -/administrator/manifests/files/joomla.xml -/administrator/manifests/libraries/fof.xml -/administrator/manifests/libraries/idna_convert.xml -/administrator/manifests/libraries/joomla.xml -/administrator/manifests/libraries/phpass.xml -/administrator/manifests/libraries/phputf8.xml -/administrator/manifests/packages/pkg_en-GB.xml -/administrator/manifests/packages/index.html -/administrator/modules/mod_custom/* -/administrator/modules/mod_feed/* -/administrator/modules/mod_latest/* -/administrator/modules/mod_latestactions/* -/administrator/modules/mod_logged/* -/administrator/modules/mod_login/* -/administrator/modules/mod_menu/* -/administrator/modules/mod_multilangstatus/* -/administrator/modules/mod_online/* -/administrator/modules/mod_popular/* -/administrator/modules/mod_privacy_dashboard/* -/administrator/modules/mod_quickicon/* -/administrator/modules/mod_sampledata/* -/administrator/modules/mod_stats_admin/* -/administrator/modules/mod_status/* -/administrator/modules/mod_submenu/* -/administrator/modules/mod_title/* -/administrator/modules/mod_toolbar/* -/administrator/modules/mod_unread/* -/administrator/modules/mod_version/* -/administrator/templates/hathor/* -/administrator/templates/isis/* -/administrator/templates/system/* -/bin/* -/cache/* -/cli/* -/components/com_ajax/* -/components/com_banners/* -/components/com_config/* -/components/com_contact/* -/components/com_content/* -/components/com_contenthistory/* -/components/com_fields/* -/components/com_finder/* -/components/com_mailto/* -/components/com_media/* -/components/com_menus/* -/components/com_modules/* -/components/com_newsfeeds/* -/components/com_privacy/* -/components/com_search/* -/components/com_tags/* -/components/com_users/* -/components/com_wrapper/* -/components/index.html -/images/banners/* -/images/headers/* -/images/sampledata/* -/images/index.html -/images/joomla* -/images/powered_by.png -/includes/* -/installation/* -/language/en-GB/en-GB.com_ajax.ini -/language/en-GB/en-GB.com_config.ini -/language/en-GB/en-GB.com_contact.ini -/language/en-GB/en-GB.com_content.ini -/language/en-GB/en-GB.com_finder.ini -/language/en-GB/en-GB.com_mailto.ini -/language/en-GB/en-GB.com_media.ini -/language/en-GB/en-GB.com_messages.ini -/language/en-GB/en-GB.com_newsfeeds.ini -/language/en-GB/en-GB.com_privacy.ini -/language/en-GB/en-GB.com_search.ini -/language/en-GB/en-GB.com_tags.ini -/language/en-GB/en-GB.com_users.ini -/language/en-GB/en-GB.com_weblinks.ini -/language/en-GB/en-GB.com_wrapper.ini -/language/en-GB/en-GB.files_joomla.sys.ini -/language/en-GB/en-GB.finder_cli.ini -/language/en-GB/en-GB.ini -/language/en-GB/en-GB.lib_fof.ini -/language/en-GB/en-GB.lib_fof.sys.ini -/language/en-GB/en-GB.lib_idna_convert.sys.ini -/language/en-GB/en-GB.lib_joomla.ini -/language/en-GB/en-GB.lib_joomla.sys.ini -/language/en-GB/en-GB.lib_phpass.sys.ini -/language/en-GB/en-GB.lib_phpmailer.sys.ini -/language/en-GB/en-GB.lib_phputf8.sys.ini -/language/en-GB/en-GB.lib_simplepie.sys.ini -/language/en-GB/en-GB.localise.php -/language/en-GB/en-GB.mod_articles_archive.ini -/language/en-GB/en-GB.mod_articles_archive.sys.ini -/language/en-GB/en-GB.mod_articles_categories.ini -/language/en-GB/en-GB.mod_articles_categories.sys.ini -/language/en-GB/en-GB.mod_articles_category.ini -/language/en-GB/en-GB.mod_articles_category.sys.ini -/language/en-GB/en-GB.mod_articles_latest.ini -/language/en-GB/en-GB.mod_articles_latest.sys.ini -/language/en-GB/en-GB.mod_articles_news.ini -/language/en-GB/en-GB.mod_articles_news.sys.ini -/language/en-GB/en-GB.mod_articles_popular.ini -/language/en-GB/en-GB.mod_articles_popular.sys.ini -/language/en-GB/en-GB.mod_banners.ini -/language/en-GB/en-GB.mod_banners.sys.ini -/language/en-GB/en-GB.mod_breadcrumbs.ini -/language/en-GB/en-GB.mod_breadcrumbs.sys.ini -/language/en-GB/en-GB.mod_custom.ini -/language/en-GB/en-GB.mod_custom.sys.ini -/language/en-GB/en-GB.mod_feed.ini -/language/en-GB/en-GB.mod_feed.sys.ini -/language/en-GB/en-GB.mod_finder.ini -/language/en-GB/en-GB.mod_finder.sys.ini -/language/en-GB/en-GB.mod_footer.ini -/language/en-GB/en-GB.mod_footer.sys.ini -/language/en-GB/en-GB.mod_languages.ini -/language/en-GB/en-GB.mod_languages.sys.ini -/language/en-GB/en-GB.mod_login.ini -/language/en-GB/en-GB.mod_login.sys.ini -/language/en-GB/en-GB.mod_menu.ini -/language/en-GB/en-GB.mod_menu.sys.ini -/language/en-GB/en-GB.mod_random_image.ini -/language/en-GB/en-GB.mod_random_image.sys.ini -/language/en-GB/en-GB.mod_related_items.ini -/language/en-GB/en-GB.mod_related_items.sys.ini -/language/en-GB/en-GB.mod_search.ini -/language/en-GB/en-GB.mod_search.sys.ini -/language/en-GB/en-GB.mod_stats.ini -/language/en-GB/en-GB.mod_stats.sys.ini -/language/en-GB/en-GB.mod_syndicate.ini -/language/en-GB/en-GB.mod_syndicate.sys.ini -/language/en-GB/en-GB.mod_tags_popular.ini -/language/en-GB/en-GB.mod_tags_popular.sys.ini -/language/en-GB/en-GB.mod_tags_similar.ini -/language/en-GB/en-GB.mod_tags_similar.sys.ini -/language/en-GB/en-GB.mod_users_latest.ini -/language/en-GB/en-GB.mod_users_latest.sys.ini -/language/en-GB/en-GB.mod_weblinks.ini -/language/en-GB/en-GB.mod_weblinks.sys.ini -/language/en-GB/en-GB.mod_whosonline.ini -/language/en-GB/en-GB.mod_whosonline.sys.ini -/language/en-GB/en-GB.mod_wrapper.ini -/language/en-GB/en-GB.mod_wrapper.sys.ini -/language/en-GB/en-GB.tpl_atomic.ini -/language/en-GB/en-GB.tpl_atomic.sys.ini -/language/en-GB/en-GB.tpl_beez3.ini -/language/en-GB/en-GB.tpl_beez3.sys.ini -/language/en-GB/en-GB.tpl_beez5.ini -/language/en-GB/en-GB.tpl_beez5.sys.ini -/language/en-GB/en-GB.tpl_beez_20.ini -/language/en-GB/en-GB.tpl_beez_20.sys.ini -/language/en-GB/en-GB.tpl_protostar.ini -/language/en-GB/en-GB.tpl_protostar.sys.ini -/language/en-GB/en-GB.xml -/language/en-GB/install.xml -/language/overrides/* -/language/index.html -/layouts/joomla/* -/layouts/libraries/* -/layouts/plugins/* -/layouts/index.html -/libraries/cms/* -/libraries/fof/* -/libraries/idna_convert/* -/libraries/joomla/* -/libraries/legacy/* -/libraries/php-encryption/* -/libraries/phpass/* -/libraries/phpmailer/* -/libraries/phputf8/* -/libraries/simplepie/* -/libraries/src/* -/libraries/vendor/* -/libraries/classmap.php -/libraries/cms.php -/libraries/import.legacy.php -/libraries/import.php -/libraries/index.html -/libraries/loader.php -/media/cms/* -/media/com_associations/* -/media/com_contact/* -/media/com_content/* -/media/com_contenthistory/* -/media/com_fields/* -/media/com_finder/* -/media/com_joomlaupdate/* -/media/com_menus/* -/media/com_modules/* -/media/com_wrapper/* -/media/contacts/* -/media/editors/* -/media/jui/* -/media/mailto/* -/media/media/* -/media/mod_languages/* -/media/mod_sampledata/* -/media/overrider/* -/media/plg_captcha_recaptcha/* -/media/plg_captcha_recaptcha_invisible/* -/media/plg_quickicon_extensionupdate/* -/media/plg_quickicon_joomlaupdate/* -/media/plg_quickicon_privacycheck/* -/media/plg_system_highlight/* -/media/plg_system_stats/* -/media/plg_twofactorauth_totp/* -/media/system/* -/media/index.html -/modules/mod_articles_archive/* -/modules/mod_articles_categories/* -/modules/mod_articles_category/* -/modules/mod_articles_latest/* -/modules/mod_articles_news/* -/modules/mod_articles_popular/* -/modules/mod_banners/* -/modules/mod_breadcrumbs/* -/modules/mod_custom/* -/modules/mod_feed/* -/modules/mod_finder/* -/modules/mod_footer/* -/modules/mod_languages/* -/modules/mod_login/* -/modules/mod_menu/* -/modules/mod_random_image/* -/modules/mod_related_items/* -/modules/mod_search/* -/modules/mod_stats/* -/modules/mod_syndicate/* -/modules/mod_tags_popular/* -/modules/mod_tags_similar/* -/modules/mod_users_latest/* -/modules/mod_whosonline/* -/modules/mod_wrapper/* -/modules/index.html -/plugins/actionlog/joomla/* -/plugins/authentication/cookie/* -/plugins/authentication/example/* -/plugins/authentication/gmail/* -/plugins/authentication/joomla/* -/plugins/authentication/ldap/* -/plugins/captcha/recaptcha/* -/plugins/captcha/recaptcha_invisible/* -/plugins/content/confirmconsent/* -/plugins/content/contact/* -/plugins/content/emailcloak/* -/plugins/content/example/* -/plugins/content/fields/* -/plugins/content/finder/* -/plugins/content/geshi/* -/plugins/content/joomla/* -/plugins/content/loadmodule/* -/plugins/content/pagebreak/* -/plugins/content/pagenavigation/* -/plugins/content/vote/* -/plugins/editors/codemirror/* -/plugins/editors/none/* -/plugins/editors/tinymce/* -/plugins/editors-xtd/article/* -/plugins/editors-xtd/contact/* -/plugins/editors-xtd/fields/* -/plugins/editors-xtd/image/* -/plugins/editors-xtd/menu/* -/plugins/editors-xtd/module/* -/plugins/editors-xtd/pagebreak/* -/plugins/editors-xtd/readmore/* -/plugins/extension/example/* -/plugins/extension/joomla/* -/plugins/fields/calendar/* -/plugins/fields/checkboxes/* -/plugins/fields/color/* -/plugins/fields/editor/* -/plugins/fields/imagelist/* -/plugins/fields/integer/* -/plugins/fields/list/* -/plugins/fields/media/* -/plugins/fields/radio/* -/plugins/fields/repeatable/* -/plugins/fields/sql/* -/plugins/fields/text/* -/plugins/fields/textarea/* -/plugins/fields/url/* -/plugins/fields/user/* -/plugins/fields/usergrouplist/* -/plugins/finder/categories/* -/plugins/finder/contacts/* -/plugins/finder/content/* -/plugins/finder/newsfeeds/* -/plugins/finder/tags/* -/plugins/installer/folderinstaller/* -/plugins/installer/packageinstaller/* -/plugins/installer/urlinstaller/* -/plugins/privacy/actionlogs/* -/plugins/privacy/consents/* -/plugins/privacy/contact/* -/plugins/privacy/content/* -/plugins/privacy/message/* -/plugins/privacy/user/* -/plugins/quickicon/extensionupdate/* -/plugins/quickicon/joomlaupdate/* -/plugins/quickicon/phpversioncheck/* -/plugins/quickicon/privacycheck/* -/plugins/quickicon/index.html -/plugins/sampledata/blog/* -/plugins/search/categories/* -/plugins/search/contacts/* -/plugins/search/content/* -/plugins/search/newsfeeds/* -/plugins/search/tags/* -/plugins/search/weblinks/* -/plugins/search/index.html -/plugins/system/actionlogs/* -/plugins/system/cache/* -/plugins/system/debug/* -/plugins/system/fields/* -/plugins/system/highlight/* -/plugins/system/languagecode/* -/plugins/system/languagefilter/* -/plugins/system/log/* -/plugins/system/logout/* -/plugins/system/logrotation/* -/plugins/system/p3p/* -/plugins/system/privacyconsent/* -/plugins/system/redirect/* -/plugins/system/remember/* -/plugins/system/sef/* -/plugins/system/sessiongc/* -/plugins/system/stats/* -/plugins/system/updatenotification/* -/plugins/system/index.html -/plugins/twofactorauth/totp/* -/plugins/twofactorauth/yubikey/* -/plugins/user/contactcreator/* -/plugins/user/example/* -/plugins/user/joomla/* -/plugins/user/profile/* -/plugins/user/terms/* -/plugins/user/index.html -/plugins/index.html -/templates/beez3/* -/templates/protostar/* -/templates/system/* -/templates/index.html -/tmp/* -/configuration.php -/htaccess.txt -/index.php -/joomla.xml -/LICENSE.txt -/README.txt -/robots.txt.dist -/web.config.txt diff --git a/templates/Julia.gitignore b/templates/Julia.gitignore deleted file mode 100644 index 29126e4..0000000 --- a/templates/Julia.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Files generated by invoking Julia with --code-coverage -*.jl.cov -*.jl.*.cov - -# Files generated by invoking Julia with --track-allocation -*.jl.mem - -# System-specific files and directories generated by the BinaryProvider and BinDeps packages -# They contain absolute paths specific to the host computer, and so should not be committed -deps/deps.jl -deps/build.log -deps/downloads/ -deps/usr/ -deps/src/ - -# Build artifacts for creating documentation generated by the Documenter package -docs/build/ -docs/site/ - -# File generated by Pkg, the package manager, based on a corresponding Project.toml -# It records a fixed state of all packages used by the project. As such, it should not be -# committed for packages, but should be committed for applications that require a static -# environment. -Manifest.toml diff --git a/templates/KiCad.gitignore b/templates/KiCad.gitignore deleted file mode 100644 index a63bc0e..0000000 --- a/templates/KiCad.gitignore +++ /dev/null @@ -1,29 +0,0 @@ -# For PCBs designed using KiCad: https://www.kicad.org/ -# Format documentation: https://kicad.org/help/file-formats/ - -# Temporary files -*.000 -*.bak -*.bck -*.kicad_pcb-bak -*.kicad_sch-bak -*-backups -*.kicad_prl -*.sch-bak -*~ -_autosave-* -*.tmp -*-save.pro -*-save.kicad_pcb -fp-info-cache - -# Netlist files (exported from Eeschema) -*.net - -# Autorouter files (exported from Pcbnew) -*.dsn -*.ses - -# Exported BOM files -*.xml -*.csv diff --git a/templates/Kohana.gitignore b/templates/Kohana.gitignore deleted file mode 100644 index 8b2ab01..0000000 --- a/templates/Kohana.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -application/cache/* -application/logs/* diff --git a/templates/Kotlin.gitignore b/templates/Kotlin.gitignore deleted file mode 100644 index c48376e..0000000 --- a/templates/Kotlin.gitignore +++ /dev/null @@ -1 +0,0 @@ -Java.gitignore \ No newline at end of file diff --git a/templates/LabVIEW.gitignore b/templates/LabVIEW.gitignore deleted file mode 100644 index 31619f5..0000000 --- a/templates/LabVIEW.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -# Libraries -*.lvlibp -*.llb - -# Shared objects (inc. Windows DLLs) -*.dll -*.so -*.so.* -*.dylib - -# Executables -*.exe - -# Metadata -*.aliases -*.lvlps -.cache/ diff --git a/templates/Laravel.gitignore b/templates/Laravel.gitignore deleted file mode 100644 index 297959a..0000000 --- a/templates/Laravel.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -/vendor/ -node_modules/ -npm-debug.log -yarn-error.log - -# Laravel 4 specific -bootstrap/compiled.php -app/storage/ - -# Laravel 5 & Lumen specific -public/storage -public/hot - -# Laravel 5 & Lumen specific with changed public path -public_html/storage -public_html/hot - -storage/*.key -.env -Homestead.yaml -Homestead.json -/.vagrant -.phpunit.result.cache diff --git a/templates/Leiningen.gitignore b/templates/Leiningen.gitignore deleted file mode 100644 index a4cb69a..0000000 --- a/templates/Leiningen.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -pom.xml -pom.xml.asc -*.jar -*.class -/lib/ -/classes/ -/target/ -/checkouts/ -.lein-deps-sum -.lein-repl-history -.lein-plugins/ -.lein-failures -.nrepl-port -.cpcache/ diff --git a/templates/LemonStand.gitignore b/templates/LemonStand.gitignore deleted file mode 100644 index c7d94ad..0000000 --- a/templates/LemonStand.gitignore +++ /dev/null @@ -1,21 +0,0 @@ -boot.php -index.php -install.php -/config/* -!/config/config.php -/controllers/* -/init/* -/logs/* -/phproad/* -/temp/* -/uploaded/* -/installer_files/* -/modules/backend/* -/modules/blog/* -/modules/cms/* -/modules/core/* -/modules/session/* -/modules/shop/* -/modules/system/* -/modules/users/* -# add content_*.php if you don't want erase client changes to content diff --git a/templates/Lilypond.gitignore b/templates/Lilypond.gitignore deleted file mode 100644 index 513e6ed..0000000 --- a/templates/Lilypond.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -*.pdf -*.ps -*.midi -*.mid -*.log -*~ diff --git a/templates/Lithium.gitignore b/templates/Lithium.gitignore deleted file mode 100644 index 7b22568..0000000 --- a/templates/Lithium.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -libraries/* -resources/tmp/* diff --git a/templates/Lua.gitignore b/templates/Lua.gitignore deleted file mode 100644 index 6fd0a37..0000000 --- a/templates/Lua.gitignore +++ /dev/null @@ -1,41 +0,0 @@ -# Compiled Lua sources -luac.out - -# luarocks build files -*.src.rock -*.zip -*.tar.gz - -# Object files -*.o -*.os -*.ko -*.obj -*.elf - -# Precompiled Headers -*.gch -*.pch - -# Libraries -*.lib -*.a -*.la -*.lo -*.def -*.exp - -# Shared objects (inc. Windows DLLs) -*.dll -*.so -*.so.* -*.dylib - -# Executables -*.exe -*.out -*.app -*.i*86 -*.x86_64 -*.hex - diff --git a/templates/Magento.gitignore b/templates/Magento.gitignore deleted file mode 100644 index abe6d79..0000000 --- a/templates/Magento.gitignore +++ /dev/null @@ -1,45 +0,0 @@ -#--------------------------# -# Magento Default Files # -#--------------------------# - -/PATCH_*.sh - -/app/etc/local.xml - -/media/* -!/media/.htaccess - -!/media/customer -/media/customer/* -!/media/customer/.htaccess - -!/media/dhl -/media/dhl/* -!/media/dhl/logo.jpg - -!/media/downloadable -/media/downloadable/* -!/media/downloadable/.htaccess - -!/media/xmlconnect -/media/xmlconnect/* - -!/media/xmlconnect/custom -/media/xmlconnect/custom/* -!/media/xmlconnect/custom/ok.gif - -!/media/xmlconnect/original -/media/xmlconnect/original/* -!/media/xmlconnect/original/ok.gif - -!/media/xmlconnect/system -/media/xmlconnect/system/* -!/media/xmlconnect/system/ok.gif - -/var/* -!/var/.htaccess - -!/var/package -/var/package/* -!/var/package/*.xml - diff --git a/templates/Maven.gitignore b/templates/Maven.gitignore deleted file mode 100644 index 2f43530..0000000 --- a/templates/Maven.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -target/ -pom.xml.tag -pom.xml.releaseBackup -pom.xml.versionsBackup -pom.xml.next -release.properties -dependency-reduced-pom.xml -buildNumber.properties -.mvn/timing.properties -# https://github.com/takari/maven-wrapper#usage-without-binary-jar -.mvn/wrapper/maven-wrapper.jar - -# Eclipse m2e generated files -# Eclipse Core -.project -# JDT-specific (Eclipse Java Development Tools) -.classpath diff --git a/templates/Mercury.gitignore b/templates/Mercury.gitignore deleted file mode 100644 index 70ec869..0000000 --- a/templates/Mercury.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -Mercury/ -Mercury.modules -*.mh -*.err -*.init -*.dll -*.exe -*.a -*.so -*.dylib -*.beams -*.d -*.c_date diff --git a/templates/MetaProgrammingSystem.gitignore b/templates/MetaProgrammingSystem.gitignore deleted file mode 100644 index 3e75841..0000000 --- a/templates/MetaProgrammingSystem.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -workspace.xml -junitvmwatcher*.properties -build.properties - -# generated java classes and java source files -# manually add any custom artifacts that can't be generated from the models -# http://confluence.jetbrains.com/display/MPSD25/HowTo+--+MPS+and+Git -classes_gen -source_gen -source_gen.caches - -# generated test code and test results -test_gen -test_gen.caches -TEST-*.xml -junit*.properties diff --git a/templates/Nanoc.gitignore b/templates/Nanoc.gitignore deleted file mode 100644 index 6f35daa..0000000 --- a/templates/Nanoc.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# For projects using Nanoc (http://nanoc.ws/) - -# Default location for output (needs to match output_dir's value found in nanoc.yaml) -output/ - -# Temporary file directory -tmp/nanoc/ - -# Crash Log -crash.log diff --git a/templates/Nim.gitignore b/templates/Nim.gitignore deleted file mode 100644 index 32e1dc0..0000000 --- a/templates/Nim.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -nimcache/ -nimblecache/ -htmldocs/ diff --git a/templates/Node.gitignore b/templates/Node.gitignore deleted file mode 100644 index c6bba59..0000000 --- a/templates/Node.gitignore +++ /dev/null @@ -1,130 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -.pnpm-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional stylelint cache -.stylelintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variable files -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next -out - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# vuepress v2.x temp and cache directory -.temp -.cache - -# Docusaurus cache and generated files -.docusaurus - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test - -# yarn v2 -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* diff --git a/templates/OCaml.gitignore b/templates/OCaml.gitignore deleted file mode 100644 index a18e084..0000000 --- a/templates/OCaml.gitignore +++ /dev/null @@ -1,29 +0,0 @@ -*.annot -*.cmo -*.cma -*.cmi -*.a -*.o -*.cmx -*.cmxs -*.cmxa - -# ocamlbuild working directory -_build/ - -# ocamlbuild targets -*.byte -*.native - -# oasis generated files -setup.data -setup.log - -# Merlin configuring file for Vim and Emacs -.merlin - -# Dune generated files -*.install - -# Local OPAM switch -_opam/ diff --git a/templates/Objective-C.gitignore b/templates/Objective-C.gitignore deleted file mode 100644 index 2ebce16..0000000 --- a/templates/Objective-C.gitignore +++ /dev/null @@ -1,44 +0,0 @@ -# Xcode -# -# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore - -## User settings -xcuserdata/ - -## Obj-C/Swift specific -*.hmap - -## App packaging -*.ipa -*.dSYM.zip -*.dSYM - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control -# -# Pods/ -# -# Add this line if you want to avoid checking in source code from the Xcode workspace -# *.xcworkspace - -# Carthage -# -# Add this line if you want to avoid checking in source code from Carthage dependencies. -# Carthage/Checkouts - -Carthage/Build/ - -# fastlane -# -# It is recommended to not store the screenshots in the git repo. -# Instead, use fastlane to re-generate the screenshots whenever they are needed. -# For more information about the recommended setup visit: -# https://docs.fastlane.tools/best-practices/source-control/#source-control - -fastlane/report.xml -fastlane/Preview.html -fastlane/screenshots/**/*.png -fastlane/test_output diff --git a/templates/Opa.gitignore b/templates/Opa.gitignore deleted file mode 100644 index 74c6219..0000000 --- a/templates/Opa.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -_build -_tracks - -opa-debug-js - -*.opp -*.opx -*.opx.broken -*.dump -*.api -*.api-txt -*.exe -*.log diff --git a/templates/OpenCart.gitignore b/templates/OpenCart.gitignore deleted file mode 100644 index 97be41f..0000000 --- a/templates/OpenCart.gitignore +++ /dev/null @@ -1,20 +0,0 @@ -.htaccess -/config.php -admin/config.php - -!index.html - -download/ -image/data/ -image/cache/ -system/cache/ -system/logs/ - -system/storage/ - -# vQmod log files -vqmod/logs/* -# vQmod cache files -vqmod/vqcache/* -vqmod/checked.cache -vqmod/mods.cache diff --git a/templates/OracleForms.gitignore b/templates/OracleForms.gitignore deleted file mode 100644 index 699a494..0000000 --- a/templates/OracleForms.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Compiled Form Modules -*.fmx - -# Compiled Menu Modules -*.mmx - -# Compiled Pre-Linked Libraries -*.plx diff --git a/templates/Packer.gitignore b/templates/Packer.gitignore deleted file mode 100644 index 2cbc1ad..0000000 --- a/templates/Packer.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -# Cache objects -packer_cache/ - -# Crash log -crash.log - -# https://www.packer.io/guides/hcl/variables -# Exclude all .pkrvars.hcl files, which are likely to contain sensitive data, -# such as password, private keys, and other secrets. These should not be part of -# version control as they are data points which are potentially sensitive and -# subject to change depending on the environment. -# -*.pkrvars.hcl - -# For built boxes -*.box diff --git a/templates/Perl.gitignore b/templates/Perl.gitignore deleted file mode 100644 index fb8b193..0000000 --- a/templates/Perl.gitignore +++ /dev/null @@ -1,35 +0,0 @@ -!Build/ -.last_cover_stats -/META.yml -/META.json -/MYMETA.* -*.o -*.pm.tdy -*.bs - -# Devel::Cover -cover_db/ - -# Devel::NYTProf -nytprof.out - -# Dist::Zilla -/.build/ - -# Module::Build -_build/ -Build -Build.bat - -# Module::Install -inc/ - -# ExtUtils::MakeMaker -/blib/ -/_eumm/ -/*.gz -/Makefile -/Makefile.old -/MANIFEST.bak -/pm_to_blib -/*.zip diff --git a/templates/Phalcon.gitignore b/templates/Phalcon.gitignore deleted file mode 100644 index 6ffe3aa..0000000 --- a/templates/Phalcon.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/cache/ -/config/development/ diff --git a/templates/PlayFramework.gitignore b/templates/PlayFramework.gitignore deleted file mode 100644 index ae5ec9f..0000000 --- a/templates/PlayFramework.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -# Ignore Play! working directory # -bin/ -/db -.eclipse -/lib/ -/logs/ -/modules -/project/project -/project/target -/target -tmp/ -test-result -server.pid -*.eml -/dist/ -.cache diff --git a/templates/Plone.gitignore b/templates/Plone.gitignore deleted file mode 100644 index 770a868..0000000 --- a/templates/Plone.gitignore +++ /dev/null @@ -1,18 +0,0 @@ -*.pyc -*.pyo -*.tmp* -*.mo -*.egg -*.EGG -*.egg-info -*.EGG-INFO -.*.cfg -bin/ -build/ -develop-eggs/ -downloads/ -eggs/ -fake-eggs/ -parts/ -dist/ -var/ diff --git a/templates/Prestashop.gitignore b/templates/Prestashop.gitignore deleted file mode 100644 index 9da6d29..0000000 --- a/templates/Prestashop.gitignore +++ /dev/null @@ -1,173 +0,0 @@ -# Cache, temp and personal files - -/.htaccess -*.log - -# Cache -/cache/* -!/cache/.htaccess -!/cache/cachefs/index.php -!/cache/deprecated.txt -!/cache/index.php -!/cache/purifier/index.php -!/cache/push/activity -!/cache/push/index.php -!/cache/push/trends -!/cache/sandbox/index.php -!/cache/smarty/cache/index.php -!/cache/smarty/compile/index.php -!/cache/smarty/index.php -!/cache/tcpdf/index.php - -# Download -/download/* -!/download/.htaccess -!/download/index.php - -# Images -/img/* -!/img/.htaccess -!/img/index.php -!/img/404.gif -!/img/bg_500.png -!/img/bg_loader.png -!/img/favicon.ico -!/img/loader.gif -!/img/loadingAnimation.gif -!/img/logo.jpg -!/img/logo.png -!/img/logo_invoice.jpg -!/img/logo_stores.png -!/img/macFFBgHack.png -!/img/prestashop-avatar.png -!/img/prestashop@2x.png -!/img/preston-login-wink@2x.png -!/img/preston-login@2x.png -!/img/questionmark.png -!/img/genders/index.php -!/img/admin/index.php -!/img/c/index.php -!/img/cms/index.php -!/img/co/index.php -!/img/jquery-ui -!/img/l/index.php -!/img/m/index.php -!/img/os/index.php -!/img/p/index.php -!/img/s/index.php -!/img/scenes -!/img/st/index.php -!/img/su/index.php -!/img/t/index.php -!/img/tmp/index.php - -# Upload -/upload/* -!/upload/.htaccess - -/vendor/* -/docs/phpdoc-sf/ -/composer.lock -*.hot-update.js -*.hot-update.json - - -/admin-dev/autoupgrade/* -!/admin-dev/autoupgrade/index.php -!/admin-dev/autoupgrade/backup/index.php - -/admin-dev/backups/* -!/admin-dev/backups/.htaccess - -/admin-dev/import/* -!/admin-dev/import/.htaccess -!/admin-dev/import/index.php - -/admin-dev/export/* -!/admin-dev/export/.htaccess -!/admin-dev/export/index.php - -# Downloaded RTL files -/admin-dev/themes/default/css/bundle/default_rtl.css -/admin-dev/themes/default/css/bundle/shared_rtl.css -/admin-dev/themes/default/css/font_rtl.css -/admin-dev/themes/default/css/overrides_rtl.css -/admin-dev/themes/default/css/vendor/font-awesome/font-awesome_rtl.css -/admin-dev/themes/default/css/vendor/nv.d3_rtl.css -/admin-dev/themes/default/css/vendor/titatoggle-min_rtl.css -/admin-dev/themes/default/public/theme_rtl.css -/admin-dev/themes/new-theme/css/module/drop_rtl.css -/admin-dev/themes/new-theme/css/right-sidebar_rtl.css - -themes/*/cache/* - -# Config - -config/settings.inc.php -config/settings.old.php -config/xml/* -config/themes/* -!config/xml/themes/default.xml -themes/*/config/settings_*.json -app/config/parameters.old.yml -app/config/config.php - -# Themes, modules and overrides - -modules/* -override/* -themes/*/ -!themes/classic -!themes/_core -!themes/_libraries - -# Vendors and dependencies - -bower_components/ -node_modules/ -composer.phar -php-cs-fixer -.grunt/* - -# Translations and emails templates - -translations/* -mails/* -!mails/themes/ -!mails/_partials/ -themes/default-bootstrap/lang/* -themes/default-bootstrap/modules/*/translations/*.php -themes/default-bootstrap/mails/* -!themes/default-bootstrap/mails/en/ -themes/default-bootstrap/modules/*/mails/* -!themes/default-bootstrap/modules/*/mails/en - -# MISC - -*sitemap.xml -/robots.txt - -# Symfony - -/bin/ -/app/Resources/geoip/GeoLite2-City.mmdb -/app/Resources/translations/* -!/app/Resources/translations/default -/app/config/parameters.yml -/app/config/parameters.php -/build/ -/phpunit.xml -/var/* -!/var/cache -/var/cache/* -!var/cache/.gitkeep -!/var/logs -/var/logs/* -!var/logs/.gitkeep -!/var/sessions -/var/sessions/* -!var/sessions/.gitkeep -!var/SymfonyRequirements.php -/vendor/ -/web/bundles/ - diff --git a/templates/Processing.gitignore b/templates/Processing.gitignore deleted file mode 100644 index 942ebbc..0000000 --- a/templates/Processing.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -.DS_Store -applet -application.linux-arm64 -application.linux-armv6hf -application.linux32 -application.linux64 -application.windows32 -application.windows64 -application.macosx -out diff --git a/templates/PureScript.gitignore b/templates/PureScript.gitignore deleted file mode 100644 index de86604..0000000 --- a/templates/PureScript.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -# Dependencies -.psci_modules -.spago -bower_components -node_modules - -# Generated files -.psci -output diff --git a/templates/Python.gitignore b/templates/Python.gitignore deleted file mode 100644 index 82f9275..0000000 --- a/templates/Python.gitignore +++ /dev/null @@ -1,162 +0,0 @@ -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -share/python-wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.nox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -*.py,cover -.hypothesis/ -.pytest_cache/ -cover/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py -db.sqlite3 -db.sqlite3-journal - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -.pybuilder/ -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# IPython -profile_default/ -ipython_config.py - -# pyenv -# For a library or package, you might want to ignore these files since the code is -# intended to run in multiple environments; otherwise, check them in: -# .python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. -#Pipfile.lock - -# poetry -# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. -# This is especially recommended for binary packages to ensure reproducibility, and is more -# commonly ignored for libraries. -# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control -#poetry.lock - -# pdm -# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. -#pdm.lock -# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it -# in version control. -# https://pdm.fming.dev/latest/usage/project/#working-with-version-control -.pdm.toml -.pdm-python -.pdm-build/ - -# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm -__pypackages__/ - -# Celery stuff -celerybeat-schedule -celerybeat.pid - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - -# pytype static type analyzer -.pytype/ - -# Cython debug symbols -cython_debug/ - -# PyCharm -# JetBrains specific template is maintained in a separate JetBrains.gitignore that can -# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore -# and can be added to the global gitignore or merged into this file. For a more nuclear -# option (not recommended) you can uncomment the following to ignore the entire idea folder. -#.idea/ diff --git a/templates/Qooxdoo.gitignore b/templates/Qooxdoo.gitignore deleted file mode 100644 index d0c6410..0000000 --- a/templates/Qooxdoo.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -cache -cache-downloads -inspector -api -source/inspector.html diff --git a/templates/Qt.gitignore b/templates/Qt.gitignore deleted file mode 100644 index 7f4826b..0000000 --- a/templates/Qt.gitignore +++ /dev/null @@ -1,54 +0,0 @@ -# C++ objects and libs -*.slo -*.lo -*.o -*.a -*.la -*.lai -*.so -*.so.* -*.dll -*.dylib - -# Qt-es -object_script.*.Release -object_script.*.Debug -*_plugin_import.cpp -/.qmake.cache -/.qmake.stash -*.pro.user -*.pro.user.* -*.qbs.user -*.qbs.user.* -*.moc -moc_*.cpp -moc_*.h -qrc_*.cpp -ui_*.h -*.qmlc -*.jsc -Makefile* -*build-* -*.qm -*.prl - -# Qt unit tests -target_wrapper.* - -# QtCreator -*.autosave - -# QtCreator Qml -*.qmlproject.user -*.qmlproject.user.* - -# QtCreator CMake -CMakeLists.txt.user* - -# QtCreator 4.8< compilation database -compile_commands.json - -# QtCreator local machine specific files for imported projects -*creator.user* - -*_qmlcache.qrc diff --git a/templates/R.gitignore b/templates/R.gitignore deleted file mode 100644 index e75435c..0000000 --- a/templates/R.gitignore +++ /dev/null @@ -1,49 +0,0 @@ -# History files -.Rhistory -.Rapp.history - -# Session Data files -.RData -.RDataTmp - -# User-specific files -.Ruserdata - -# Example code in package build process -*-Ex.R - -# Output files from R CMD build -/*.tar.gz - -# Output files from R CMD check -/*.Rcheck/ - -# RStudio files -.Rproj.user/ - -# produced vignettes -vignettes/*.html -vignettes/*.pdf - -# OAuth2 token, see https://github.com/hadley/httr/releases/tag/v0.3 -.httr-oauth - -# knitr and R markdown default cache directories -*_cache/ -/cache/ - -# Temporary files created by R markdown -*.utf8.md -*.knit.md - -# R Environment Variables -.Renviron - -# pkgdown site -docs/ - -# translation temp files -po/*~ - -# RStudio Connect folder -rsconnect/ diff --git a/templates/ROS.gitignore b/templates/ROS.gitignore deleted file mode 100644 index 35d74bb..0000000 --- a/templates/ROS.gitignore +++ /dev/null @@ -1,51 +0,0 @@ -devel/ -logs/ -build/ -bin/ -lib/ -msg_gen/ -srv_gen/ -msg/*Action.msg -msg/*ActionFeedback.msg -msg/*ActionGoal.msg -msg/*ActionResult.msg -msg/*Feedback.msg -msg/*Goal.msg -msg/*Result.msg -msg/_*.py -build_isolated/ -devel_isolated/ - -# Generated by dynamic reconfigure -*.cfgc -/cfg/cpp/ -/cfg/*.py - -# Ignore generated docs -*.dox -*.wikidoc - -# eclipse stuff -.project -.cproject - -# qcreator stuff -CMakeLists.txt.user - -srv/_*.py -*.pcd -*.pyc -qtcreator-* -*.user - -/planning/cfg -/planning/docs -/planning/src - -*~ - -# Emacs -.#* - -# Catkin custom files -CATKIN_IGNORE diff --git a/templates/Racket.gitignore b/templates/Racket.gitignore deleted file mode 100644 index 93e4072..0000000 --- a/templates/Racket.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -.DS_Store -compiled/ -/doc/ -*~ -*.bak -\#* -.\#* diff --git a/templates/Rails.gitignore b/templates/Rails.gitignore deleted file mode 100644 index c55bb71..0000000 --- a/templates/Rails.gitignore +++ /dev/null @@ -1,69 +0,0 @@ -*.rbc -capybara-*.html -.rspec -/db/*.sqlite3 -/db/*.sqlite3-journal -/db/*.sqlite3-[0-9]* -/public/system -/coverage/ -/spec/tmp -*.orig -rerun.txt -pickle-email-*.html - -# Ignore all logfiles and tempfiles. -/log/* -/tmp/* -!/log/.keep -!/tmp/.keep - -# TODO Comment out this rule if you are OK with secrets being uploaded to the repo -config/initializers/secret_token.rb -config/master.key - -# Only include if you have production secrets in this file, which is no longer a Rails default -# config/secrets.yml - -# dotenv, dotenv-rails -# TODO Comment out these rules if environment variables can be committed -.env -.env*.local - -## Environment normalization: -/.bundle -/vendor/bundle - -# these should all be checked in to normalize the environment: -# Gemfile.lock, .ruby-version, .ruby-gemset - -# unless supporting rvm < 1.11.0 or doing something fancy, ignore this: -.rvmrc - -# if using bower-rails ignore default bower_components path bower.json files -/vendor/assets/bower_components -*.bowerrc -bower.json - -# Ignore pow environment settings -.powenv - -# Ignore Byebug command history file. -.byebug_history - -# Ignore node_modules -node_modules/ - -# Ignore precompiled javascript packs -/public/packs -/public/packs-test -/public/assets - -# Ignore yarn files -/yarn-error.log -yarn-debug.log* -.yarn-integrity - -# Ignore uploaded files in development -/storage/* -!/storage/.keep -/public/uploads diff --git a/templates/Raku.gitignore b/templates/Raku.gitignore deleted file mode 100644 index e792f6e..0000000 --- a/templates/Raku.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -# Gitignore for Raku (https://raku.org) -# As part of https://github.com/github/gitignore - -# precompiled files -.precomp -lib/.precomp - diff --git a/templates/RhodesRhomobile.gitignore b/templates/RhodesRhomobile.gitignore deleted file mode 100644 index a211dcc..0000000 --- a/templates/RhodesRhomobile.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -rholog-* -sim-* -bin/libs -bin/RhoBundle -bin/tmp -bin/target -bin/*.ap_ -*.o -*.jar diff --git a/templates/Ruby.gitignore b/templates/Ruby.gitignore deleted file mode 100644 index e3200e0..0000000 --- a/templates/Ruby.gitignore +++ /dev/null @@ -1,56 +0,0 @@ -*.gem -*.rbc -/.config -/coverage/ -/InstalledFiles -/pkg/ -/spec/reports/ -/spec/examples.txt -/test/tmp/ -/test/version_tmp/ -/tmp/ - -# Used by dotenv library to load environment variables. -# .env - -# Ignore Byebug command history file. -.byebug_history - -## Specific to RubyMotion: -.dat* -.repl_history -build/ -*.bridgesupport -build-iPhoneOS/ -build-iPhoneSimulator/ - -## Specific to RubyMotion (use of CocoaPods): -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control -# -# vendor/Pods/ - -## Documentation cache and generated files: -/.yardoc/ -/_yardoc/ -/doc/ -/rdoc/ - -## Environment normalization: -/.bundle/ -/vendor/bundle -/lib/bundler/man/ - -# for a library or gem, you might want to ignore these files since the code is -# intended to run in multiple environments; otherwise, check them in: -# Gemfile.lock -# .ruby-version -# .ruby-gemset - -# unless supporting rvm < 1.11.0 or doing something fancy, ignore this: -.rvmrc - -# Used by RuboCop. Remote config files pulled in from inherit_from directive. -# .rubocop-https?--* diff --git a/templates/Rust.gitignore b/templates/Rust.gitignore deleted file mode 100644 index d01bd1a..0000000 --- a/templates/Rust.gitignore +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Cargo -# will have compiled files and executables -debug/ -target/ - -# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries -# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html -Cargo.lock - -# These are backup files generated by rustfmt -**/*.rs.bk - -# MSVC Windows builds of rustc generate these, which store debugging information -*.pdb - -# RustRover -# JetBrains specific template is maintained in a separate JetBrains.gitignore that can -# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore -# and can be added to the global gitignore or merged into this file. For a more nuclear -# option (not recommended) you can uncomment the following to ignore the entire idea folder. -#.idea/ \ No newline at end of file diff --git a/templates/SCons.gitignore b/templates/SCons.gitignore deleted file mode 100644 index 84eee81..0000000 --- a/templates/SCons.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -# for projects that use SCons for building: http://http://www.scons.org/ -.sconsign.dblite - -# When configure fails, SCons outputs these -config.log -.sconf_temp diff --git a/templates/Sass.gitignore b/templates/Sass.gitignore deleted file mode 100644 index 159f515..0000000 --- a/templates/Sass.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -.sass-cache/ -*.css.map -*.sass.map -*.scss.map diff --git a/templates/Scala.gitignore b/templates/Scala.gitignore deleted file mode 100644 index 7169cab..0000000 --- a/templates/Scala.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -*.class -*.log - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* diff --git a/templates/Scheme.gitignore b/templates/Scheme.gitignore deleted file mode 100644 index cbb89d7..0000000 --- a/templates/Scheme.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -*.ss~ -*.ss#* -.#*.ss - -*.scm~ -*.scm#* -.#*.scm diff --git a/templates/Scrivener.gitignore b/templates/Scrivener.gitignore deleted file mode 100644 index 5884b0c..0000000 --- a/templates/Scrivener.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -*/Files/binder.autosave -*/Files/binder.backup -*/Files/search.indexes -*/Files/user.lock -*/Files/Docs/docs.checksum -*/Files/Data/docs.checksum -*/QuickLook/ -*/Settings/ui.plist diff --git a/templates/Sdcc.gitignore b/templates/Sdcc.gitignore deleted file mode 100644 index 07ee7d5..0000000 --- a/templates/Sdcc.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# SDCC stuff -*.lnk -*.lst -*.map -*.mem -*.rel -*.rst -*.sym diff --git a/templates/SeamGen.gitignore b/templates/SeamGen.gitignore deleted file mode 100644 index a418cf3..0000000 --- a/templates/SeamGen.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -/bootstrap/data -/bootstrap/tmp -/classes/ -/dist/ -/exploded-archives/ -/test-build/ -/test-output/ -/test-report/ -/target/ -temp-testng-customsuite.xml - -# based on http://stackoverflow.com/a/8865858/422476 I am removing inline comments - -#/classes/ all class files -#/dist/ contains generated war files for deployment -#/exploded-archives/ war content generation during deploy (or explode) -#/test-build/ test compilation (ant target for Seam) -#/test-output/ test results -#/test-report/ test report generation for, e.g., Hudson -#/target/ maven output folder -#temp-testng-customsuite.xml generated when running test cases under Eclipse - -# Thanks to @VonC and @kraftan for their helpful answers on a related question -# on StackOverflow.com: -# http://stackoverflow.com/questions/4176687 -# /what-is-the-recommended-source-control-ignore-pattern-for-seam-projects diff --git a/templates/SketchUp.gitignore b/templates/SketchUp.gitignore deleted file mode 100644 index 5160df3..0000000 --- a/templates/SketchUp.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.skb diff --git a/templates/Smalltalk.gitignore b/templates/Smalltalk.gitignore deleted file mode 100644 index 178d87a..0000000 --- a/templates/Smalltalk.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -# changes file -*.changes -*.chg - -# system image -*.image -*.img7 -*.img - -# Pharo Smalltalk Debug log file -PharoDebug.log - -# Squeak Smalltalk Debug log file -SqueakDebug.log - -# Dolphin Smalltalk source file -*.sml - -# Dolphin Smalltalk error file -*.errors - -# Monticello package cache -/package-cache - -# playground cache -/play-cache -/play-stash - -# Metacello-github cache -/github-cache -github-*.zip diff --git a/templates/Stella.gitignore b/templates/Stella.gitignore deleted file mode 100644 index 402a543..0000000 --- a/templates/Stella.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -# Atari 2600 (Stella) support for multiple assemblers -# - DASM -# - CC65 - -# Assembled binaries and object directories -obj/ -a.out -*.bin -*.a26 - -# Add in special Atari 7800-based binaries for good measure -*.a78 diff --git a/templates/SugarCRM.gitignore b/templates/SugarCRM.gitignore deleted file mode 100644 index 6a183d1..0000000 --- a/templates/SugarCRM.gitignore +++ /dev/null @@ -1,27 +0,0 @@ -## SugarCRM -# Ignore custom .htaccess stuff. -/.htaccess -# Ignore the cache directory completely. -# This will break the current behaviour. Which was often leading to -# the misuse of the repository as backup replacement. -# For development the cache directory can be safely ignored and -# therefore it is ignored. -/cache/* -!/cache/index.html -# Ignore some files and directories from the custom directory. -/custom/history/ -/custom/modulebuilder/ -/custom/working/ -/custom/modules/*/Ext/ -/custom/application/Ext/ -# Custom configuration should also be ignored. -/config.php -/config_override.php -# The silent upgrade scripts aren't needed. -/silentUpgrade*.php -# Logs files can safely be ignored. -*.log -# Ignore the new upload directories. -/upload/* -!/upload/index.html -/upload_backup/ diff --git a/templates/Swift.gitignore b/templates/Swift.gitignore deleted file mode 100644 index 52fe2f7..0000000 --- a/templates/Swift.gitignore +++ /dev/null @@ -1,62 +0,0 @@ -# Xcode -# -# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore - -## User settings -xcuserdata/ - -## Obj-C/Swift specific -*.hmap - -## App packaging -*.ipa -*.dSYM.zip -*.dSYM - -## Playgrounds -timeline.xctimeline -playground.xcworkspace - -# Swift Package Manager -# -# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. -# Packages/ -# Package.pins -# Package.resolved -# *.xcodeproj -# -# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata -# hence it is not needed unless you have added a package configuration file to your project -# .swiftpm - -.build/ - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control -# -# Pods/ -# -# Add this line if you want to avoid checking in source code from the Xcode workspace -# *.xcworkspace - -# Carthage -# -# Add this line if you want to avoid checking in source code from Carthage dependencies. -# Carthage/Checkouts - -Carthage/Build/ - -# fastlane -# -# It is recommended to not store the screenshots in the git repo. -# Instead, use fastlane to re-generate the screenshots whenever they are needed. -# For more information about the recommended setup visit: -# https://docs.fastlane.tools/best-practices/source-control/#source-control - -fastlane/report.xml -fastlane/Preview.html -fastlane/screenshots/**/*.png -fastlane/test_output diff --git a/templates/Symfony.gitignore b/templates/Symfony.gitignore deleted file mode 100644 index 3dab634..0000000 --- a/templates/Symfony.gitignore +++ /dev/null @@ -1,52 +0,0 @@ -# Cache and logs (Symfony2) -/app/cache/* -/app/logs/* -!app/cache/.gitkeep -!app/logs/.gitkeep - -# Email spool folder -/app/spool/* - -# Cache, session files and logs (Symfony3) -/var/cache/* -/var/logs/* -/var/sessions/* -!var/cache/.gitkeep -!var/logs/.gitkeep -!var/sessions/.gitkeep - -# Logs (Symfony4) -/var/log/* -!var/log/.gitkeep - -# Parameters -/app/config/parameters.yml -/app/config/parameters.ini - -# Managed by Composer -/app/bootstrap.php.cache -/var/bootstrap.php.cache -/bin/* -!bin/console -!bin/symfony_requirements -/vendor/ - -# Assets and user uploads -/web/bundles/ -/web/uploads/ - -# PHPUnit -/app/phpunit.xml -/phpunit.xml - -# Build data -/build/ - -# Composer PHAR -/composer.phar - -# Backup entities generated with doctrine:generate:entities command -**/Entity/*~ - -# Embedded web-server pid file -/.web-server-pid diff --git a/templates/SymphonyCMS.gitignore b/templates/SymphonyCMS.gitignore deleted file mode 100644 index 671c7ff..0000000 --- a/templates/SymphonyCMS.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -manifest/cache/ -manifest/logs/ -manifest/tmp/ -symphony/ -workspace/uploads/ -install-log.txt diff --git a/templates/TeX.gitignore b/templates/TeX.gitignore deleted file mode 100644 index a1f5212..0000000 --- a/templates/TeX.gitignore +++ /dev/null @@ -1,306 +0,0 @@ -## Core latex/pdflatex auxiliary files: -*.aux -*.lof -*.log -*.lot -*.fls -*.out -*.toc -*.fmt -*.fot -*.cb -*.cb2 -.*.lb - -## Intermediate documents: -*.dvi -*.xdv -*-converted-to.* -# these rules might exclude image files for figures etc. -# *.ps -# *.eps -# *.pdf - -## Generated if empty string is given at "Please type another file name for output:" -.pdf - -## Bibliography auxiliary files (bibtex/biblatex/biber): -*.bbl -*.bcf -*.blg -*-blx.aux -*-blx.bib -*.run.xml - -## Build tool auxiliary files: -*.fdb_latexmk -*.synctex -*.synctex(busy) -*.synctex.gz -*.synctex.gz(busy) -*.pdfsync -*.rubbercache -rubber.cache - -## Build tool directories for auxiliary files -# latexrun -latex.out/ - -## Auxiliary and intermediate files from other packages: -# algorithms -*.alg -*.loa - -# achemso -acs-*.bib - -# amsthm -*.thm - -# beamer -*.nav -*.pre -*.snm -*.vrb - -# changes -*.soc - -# comment -*.cut - -# cprotect -*.cpt - -# elsarticle (documentclass of Elsevier journals) -*.spl - -# endnotes -*.ent - -# fixme -*.lox - -# feynmf/feynmp -*.mf -*.mp -*.t[1-9] -*.t[1-9][0-9] -*.tfm - -#(r)(e)ledmac/(r)(e)ledpar -*.end -*.?end -*.[1-9] -*.[1-9][0-9] -*.[1-9][0-9][0-9] -*.[1-9]R -*.[1-9][0-9]R -*.[1-9][0-9][0-9]R -*.eledsec[1-9] -*.eledsec[1-9]R -*.eledsec[1-9][0-9] -*.eledsec[1-9][0-9]R -*.eledsec[1-9][0-9][0-9] -*.eledsec[1-9][0-9][0-9]R - -# glossaries -*.acn -*.acr -*.glg -*.glo -*.gls -*.glsdefs -*.lzo -*.lzs -*.slg -*.slo -*.sls - -# uncomment this for glossaries-extra (will ignore makeindex's style files!) -# *.ist - -# gnuplot -*.gnuplot -*.table - -# gnuplottex -*-gnuplottex-* - -# gregoriotex -*.gaux -*.glog -*.gtex - -# htlatex -*.4ct -*.4tc -*.idv -*.lg -*.trc -*.xref - -# hypdoc -*.hd - -# hyperref -*.brf - -# knitr -*-concordance.tex -# TODO Uncomment the next line if you use knitr and want to ignore its generated tikz files -# *.tikz -*-tikzDictionary - -# listings -*.lol - -# luatexja-ruby -*.ltjruby - -# makeidx -*.idx -*.ilg -*.ind - -# minitoc -*.maf -*.mlf -*.mlt -*.mtc[0-9]* -*.slf[0-9]* -*.slt[0-9]* -*.stc[0-9]* - -# minted -_minted* -*.pyg - -# morewrites -*.mw - -# newpax -*.newpax - -# nomencl -*.nlg -*.nlo -*.nls - -# pax -*.pax - -# pdfpcnotes -*.pdfpc - -# sagetex -*.sagetex.sage -*.sagetex.py -*.sagetex.scmd - -# scrwfile -*.wrt - -# svg -svg-inkscape/ - -# sympy -*.sout -*.sympy -sympy-plots-for-*.tex/ - -# pdfcomment -*.upa -*.upb - -# pythontex -*.pytxcode -pythontex-files-*/ - -# tcolorbox -*.listing - -# thmtools -*.loe - -# TikZ & PGF -*.dpth -*.md5 -*.auxlock - -# titletoc -*.ptc - -# todonotes -*.tdo - -# vhistory -*.hst -*.ver - -# easy-todo -*.lod - -# xcolor -*.xcp - -# xmpincl -*.xmpi - -# xindy -*.xdy - -# xypic precompiled matrices and outlines -*.xyc -*.xyd - -# endfloat -*.ttt -*.fff - -# Latexian -TSWLatexianTemp* - -## Editors: -# WinEdt -*.bak -*.sav - -# Texpad -.texpadtmp - -# LyX -*.lyx~ - -# Kile -*.backup - -# gummi -.*.swp - -# KBibTeX -*~[0-9]* - -# TeXnicCenter -*.tps - -# auto folder when using emacs and auctex -./auto/* -*.el - -# expex forward references with \gathertags -*-tags.tex - -# standalone packages -*.sta - -# Makeindex log files -*.lpz - -# xwatermark package -*.xwm - -# REVTeX puts footnotes in the bibliography by default, unless the nofootinbib -# option is specified. Footnotes are the stored in a file with suffix Notes.bib. -# Uncomment the next line to have this generated file ignored. -#*Notes.bib diff --git a/templates/Terraform.gitignore b/templates/Terraform.gitignore deleted file mode 100644 index 2faf43d..0000000 --- a/templates/Terraform.gitignore +++ /dev/null @@ -1,37 +0,0 @@ -# Local .terraform directories -**/.terraform/* - -# .tfstate files -*.tfstate -*.tfstate.* - -# Crash log files -crash.log -crash.*.log - -# Exclude all .tfvars files, which are likely to contain sensitive data, such as -# password, private keys, and other secrets. These should not be part of version -# control as they are data points which are potentially sensitive and subject -# to change depending on the environment. -*.tfvars -*.tfvars.json - -# Ignore override files as they are usually used to override resources locally and so -# are not checked in -override.tf -override.tf.json -*_override.tf -*_override.tf.json - -# Ignore transient lock info files created by terraform apply -.terraform.tfstate.lock.info - -# Include override files you do wish to add to version control using negated pattern -# !example_override.tf - -# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan -# example: *tfplan* - -# Ignore CLI configuration files -.terraformrc -terraform.rc diff --git a/templates/Textpattern.gitignore b/templates/Textpattern.gitignore deleted file mode 100644 index 3805636..0000000 --- a/templates/Textpattern.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -.htaccess -css.php -rpc/ -sites/site*/admin/ -sites/site*/private/ -sites/site*/public/admin/ -sites/site*/public/setup/ -sites/site*/public/theme/ -textpattern/ -HISTORY.txt -README.txt diff --git a/templates/TurboGears2.gitignore b/templates/TurboGears2.gitignore deleted file mode 100644 index 122b3de..0000000 --- a/templates/TurboGears2.gitignore +++ /dev/null @@ -1,20 +0,0 @@ -*.py[co] - -# Default development database -devdata.db - -# Default data directory -data/* - -# Packages -*.egg -*.egg-info -dist -build - -# Installer logs -pip-log.txt - -# Unit test / coverage reports -.coverage -.tox diff --git a/templates/TwinCAT3.gitignore b/templates/TwinCAT3.gitignore deleted file mode 100644 index 7bd6f87..0000000 --- a/templates/TwinCAT3.gitignore +++ /dev/null @@ -1,25 +0,0 @@ -# gitignore template for TwinCAT3 -# website: https://www.beckhoff.com/twincat3/ -# -# Recommended: VisualStudio.gitignore - -# TwinCAT files -*.tpy -*.tclrs -*.compiled-library -*.compileinfo -# Don't include the tmc-file rule if either of the following is true: -# 1. You've got TwinCAT C++ projects, as the information in the TMC-file is created manually for the C++ projects (in that case, only (manually) ignore the tmc-files for the PLC projects) -# 2. You've created a standalone PLC-project and added events to it, as these are stored in the TMC-file. -*.tmc -*.tmcRefac -*.library -*.project.~u -*.tsproj.bak -*.xti.bak -LineIDs.dbg -LineIDs.dbg.bak -_Boot/ -_CompileInfo/ -_Libraries/ -_ModuleInstall/ \ No newline at end of file diff --git a/templates/Typo3.gitignore b/templates/Typo3.gitignore deleted file mode 100644 index 200c2a2..0000000 --- a/templates/Typo3.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -## TYPO3 v6.2 -# Ignore several upload and file directories. -/fileadmin/user_upload/ -/fileadmin/_temp_/ -/fileadmin/_processed_/ -/uploads/ -# Ignore cache -/typo3conf/temp_CACHED* -/typo3conf/temp_fieldInfo.php -/typo3conf/deprecation_*.log -/typo3conf/ENABLE_INSTALL_TOOL -/typo3conf/realurl_autoconf.php -/FIRST_INSTALL -# Ignore system folders, you should have them symlinked. -# If not comment out the following entries. -/typo3 -/typo3_src -/typo3_src-* -/Packages -/.htaccess -/index.php -# Ignore temp directory. -/typo3temp/ diff --git a/templates/Unity.gitignore b/templates/Unity.gitignore deleted file mode 100644 index 58cbc82..0000000 --- a/templates/Unity.gitignore +++ /dev/null @@ -1,72 +0,0 @@ -# This .gitignore file should be placed at the root of your Unity project directory -# -# Get latest from https://github.com/github/gitignore/blob/main/Unity.gitignore -# -/[Ll]ibrary/ -/[Tt]emp/ -/[Oo]bj/ -/[Bb]uild/ -/[Bb]uilds/ -/[Ll]ogs/ -/[Uu]ser[Ss]ettings/ - -# MemoryCaptures can get excessive in size. -# They also could contain extremely sensitive data -/[Mm]emoryCaptures/ - -# Recordings can get excessive in size -/[Rr]ecordings/ - -# Uncomment this line if you wish to ignore the asset store tools plugin -# /[Aa]ssets/AssetStoreTools* - -# Autogenerated Jetbrains Rider plugin -/[Aa]ssets/Plugins/Editor/JetBrains* - -# Visual Studio cache directory -.vs/ - -# Gradle cache directory -.gradle/ - -# Autogenerated VS/MD/Consulo solution and project files -ExportedObj/ -.consulo/ -*.csproj -*.unityproj -*.sln -*.suo -*.tmp -*.user -*.userprefs -*.pidb -*.booproj -*.svd -*.pdb -*.mdb -*.opendb -*.VC.db - -# Unity3D generated meta files -*.pidb.meta -*.pdb.meta -*.mdb.meta - -# Unity3D generated file on crash reports -sysinfo.txt - -# Builds -*.apk -*.aab -*.unitypackage -*.app - -# Crashlytics generated file -crashlytics-build.properties - -# Packed Addressables -/[Aa]ssets/[Aa]ddressable[Aa]ssets[Dd]ata/*/*.bin* - -# Temporary auto-generated Android Assets -/[Aa]ssets/[Ss]treamingAssets/aa.meta -/[Aa]ssets/[Ss]treamingAssets/aa/* diff --git a/templates/UnrealEngine.gitignore b/templates/UnrealEngine.gitignore deleted file mode 100644 index 6e0d95f..0000000 --- a/templates/UnrealEngine.gitignore +++ /dev/null @@ -1,74 +0,0 @@ -# Visual Studio 2015 user specific files -.vs/ - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app -*.ipa - -# These project files can be generated by the engine -*.xcodeproj -*.xcworkspace -*.sln -*.suo -*.opensdf -*.sdf -*.VC.db -*.VC.opendb - -# Precompiled Assets -SourceArt/**/*.png -SourceArt/**/*.tga - -# Binary Files -Binaries/* -Plugins/**/Binaries/* - -# Builds -Build/* - -# Whitelist PakBlacklist-.txt files -!Build/*/ -Build/*/** -!Build/*/PakBlacklist*.txt - -# Don't ignore icon files in Build -!Build/**/*.ico - -# Built data for maps -*_BuiltData.uasset - -# Configuration files generated by the Editor -Saved/* - -# Compiled source files for the engine to use -Intermediate/* -Plugins/**/Intermediate/* - -# Cache files for the editor to use -DerivedDataCache/* diff --git a/templates/VVVV.gitignore b/templates/VVVV.gitignore deleted file mode 100644 index 5df4324..0000000 --- a/templates/VVVV.gitignore +++ /dev/null @@ -1,6 +0,0 @@ - -# .v4p backup files -*~.xml - -# Dynamic plugins .dll -bin/ diff --git a/templates/VisualStudio.gitignore b/templates/VisualStudio.gitignore deleted file mode 100644 index 8a30d25..0000000 --- a/templates/VisualStudio.gitignore +++ /dev/null @@ -1,398 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore - -# User-specific files -*.rsuser -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Mono auto generated files -mono_crash.* - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -[Ww][Ii][Nn]32/ -[Aa][Rr][Mm]/ -[Aa][Rr][Mm]64/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ -[Ll]ogs/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUnit -*.VisualState.xml -TestResult.xml -nunit-*.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ - -# ASP.NET Scaffolding -ScaffoldingReadMe.txt - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_h.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*_wpftmp.csproj -*.log -*.tlog -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Coverlet is a free, cross platform Code Coverage Tool -coverage*.json -coverage*.xml -coverage*.info - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# NuGet Symbol Packages -*.snupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx -*.appxbundle -*.appxupload - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!?*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser -*- [Bb]ackup.rdl -*- [Bb]ackup ([0-9]).rdl -*- [Bb]ackup ([0-9][0-9]).rdl - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio 6 auto-generated project file (contains which files were open etc.) -*.vbp - -# Visual Studio 6 workspace and project file (working project files containing files to include in project) -*.dsw -*.dsp - -# Visual Studio 6 technical files -*.ncb -*.aps - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# CodeRush personal settings -.cr/personal - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ - -# Local History for Visual Studio -.localhistory/ - -# Visual Studio History (VSHistory) files -.vshistory/ - -# BeatPulse healthcheck temp database -healthchecksdb - -# Backup folder for Package Reference Convert tool in Visual Studio 2017 -MigrationBackup/ - -# Ionide (cross platform F# VS Code tools) working folder -.ionide/ - -# Fody - auto-generated XML schema -FodyWeavers.xsd - -# VS Code files for those working on multiple tools -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -*.code-workspace - -# Local History for Visual Studio Code -.history/ - -# Windows Installer files from build outputs -*.cab -*.msi -*.msix -*.msm -*.msp - -# JetBrains Rider -*.sln.iml diff --git a/templates/Waf.gitignore b/templates/Waf.gitignore deleted file mode 100644 index dad2b56..0000000 --- a/templates/Waf.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -# For projects that use the Waf build system: https://waf.io/ -# Dot-hidden on Unix-like systems -.waf-*-*/ -.waf3-*-*/ -# Hidden directory on Windows (no dot) -waf-*-*/ -waf3-*-*/ -# Lockfile -.lock-waf_*_build diff --git a/templates/WordPress.gitignore b/templates/WordPress.gitignore deleted file mode 100644 index 5469669..0000000 --- a/templates/WordPress.gitignore +++ /dev/null @@ -1,48 +0,0 @@ -# Wordpress - ignore core, configuration, examples, uploads and logs. -# https://github.com/github/gitignore/blob/main/WordPress.gitignore - -# Core -# -# Note: if you want to stage/commit WP core files -# you can delete this whole section/until Configuration. -/wp-admin/ -/wp-content/index.php -/wp-content/languages -/wp-content/plugins/index.php -/wp-content/themes/index.php -/wp-includes/ -/index.php -/license.txt -/readme.html -/wp-*.php -/xmlrpc.php - -# Configuration -wp-config.php - -# Example themes -/wp-content/themes/twenty*/ - -# Example plugin -/wp-content/plugins/hello.php - -# Uploads -/wp-content/uploads/ - -# Log files -*.log - -# htaccess -/.htaccess - -# All plugins -# -# Note: If you wish to whitelist plugins, -# uncomment the next line -#/wp-content/plugins - -# All themes -# -# Note: If you wish to whitelist themes, -# uncomment the next line -#/wp-content/themes \ No newline at end of file diff --git a/templates/Xojo.gitignore b/templates/Xojo.gitignore deleted file mode 100644 index 4915783..0000000 --- a/templates/Xojo.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -# Xojo (formerly REALbasic and Real Studio) - -Builds* -*.debug -*.debug.app -Debug*.exe -Debug*/Debug*.exe -Debug*/Debug*\ Libs -*.rbuistate -*.xojo_uistate -*.obsolete* diff --git a/templates/Yeoman.gitignore b/templates/Yeoman.gitignore deleted file mode 100644 index 7170d72..0000000 --- a/templates/Yeoman.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -node_modules/ -bower_components/ -*.log - -build/ -dist/ diff --git a/templates/Yii.gitignore b/templates/Yii.gitignore deleted file mode 100644 index 70f0875..0000000 --- a/templates/Yii.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -assets/* -!assets/.gitignore -protected/runtime/* -!protected/runtime/.gitignore -protected/data/*.db -themes/classic/views/ diff --git a/templates/ZendFramework.gitignore b/templates/ZendFramework.gitignore deleted file mode 100644 index f0b7d85..0000000 --- a/templates/ZendFramework.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Composer files -composer.phar -vendor/ - -# Local configs -config/autoload/*.local.php - -# Binary gettext files -*.mo - -# Data -data/logs/ -data/cache/ -data/sessions/ -data/tmp/ -temp/ - -#Doctrine 2 -data/DoctrineORMModule/Proxy/ -data/DoctrineORMModule/cache/ - -# Legacy ZF1 -demos/ -extras/documentation diff --git a/templates/Zephir.gitignore b/templates/Zephir.gitignore deleted file mode 100644 index 839cb5d..0000000 --- a/templates/Zephir.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -# Cache files, generates by Zephir -.temp/ -.libs/ - -# Object files, generates by linker -*.lo -*.la -*.o -*.loT - -# Files generated by configure and Zephir, -# not required for extension compilation. -ext/build/ -ext/modules/ -ext/Makefile* -ext/config* -ext/acinclude.m4 -ext/aclocal.m4 -ext/autom4te* -ext/install-sh -ext/ltmain.sh -ext/missing -ext/mkinstalldirs -ext/run-tests.php -ext/.deps -ext/libtool From 74da1b24f333eeebc35543bc5e7ae06b90f384f1 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Fri, 21 Jun 2024 17:32:24 -0600 Subject: [PATCH 044/108] refactor: Added more gitignore template files --- ignori/ignore_file.py | 27 + ignori/widgets/search_form.py | 4 +- templates/AL.gitignore | 22 + templates/Agda.gitignore | 2 + templates/Android.gitignore | 33 + templates/AppEngine.gitignore | 2 + templates/AppceleratorTitanium.gitignore | 3 + templates/ArchLinuxPackages.gitignore | 13 + templates/Autotools.gitignore | 52 ++ templates/Ballerina.gitignore | 11 + templates/C++.gitignore | 32 + templates/C.gitignore | 52 ++ templates/CFWheels.gitignore | 12 + templates/CMake.gitignore | 12 + templates/CONTRIBUTING.md | 39 ++ templates/CUDA.gitignore | 6 + templates/CakePHP.gitignore | 25 + templates/ChefCookbook.gitignore | 9 + templates/Clojure.gitignore | 1 + templates/CodeIgniter.gitignore | 18 + templates/CommonLisp.gitignore | 17 + templates/Composer.gitignore | 6 + templates/Concrete5.gitignore | 21 + templates/Coq.gitignore | 45 ++ templates/CraftCMS.gitignore | 4 + templates/D.gitignore | 24 + templates/DM.gitignore | 5 + templates/Dart.gitignore | 27 + templates/Delphi.gitignore | 81 +++ templates/Drupal.gitignore | 62 ++ templates/EPiServer.gitignore | 4 + templates/Eagle.gitignore | 51 ++ templates/Elisp.gitignore | 11 + templates/Elixir.gitignore | 10 + templates/Elm.gitignore | 4 + templates/Erlang.gitignore | 17 + templates/ExpressionEngine.gitignore | 19 + templates/ExtJs.gitignore | 14 + templates/Fancy.gitignore | 2 + templates/Finale.gitignore | 13 + templates/FlaxEngine.gitignore | 45 ++ templates/ForceDotCom.gitignore | 4 + templates/Fortran.gitignore | 1 + templates/FuelPHP.gitignore | 21 + templates/GWT.gitignore | 25 + templates/Gcov.gitignore | 5 + templates/GitBook.gitignore | 16 + templates/GitHubPages.gitignore | 18 + templates/Global/Backup.gitignore | 5 + templates/Global/Bazaar.gitignore | 2 + templates/Global/BricxCC.gitignore | 4 + templates/Global/CVS.gitignore | 4 + templates/Global/Calabash.gitignore | 10 + templates/Global/Cloud9.gitignore | 3 + templates/Global/CodeKit.gitignore | 4 + templates/Global/DartEditor.gitignore | 2 + templates/Global/Diff.gitignore | 2 + templates/Global/Dreamweaver.gitignore | 7 + templates/Global/Dropbox.gitignore | 4 + templates/Global/Eclipse.gitignore | 60 ++ templates/Global/EiffelStudio.gitignore | 2 + templates/Global/Emacs.gitignore | 49 ++ templates/Global/Ensime.gitignore | 4 + templates/Global/Espresso.gitignore | 1 + templates/Global/FlexBuilder.gitignore | 3 + templates/Global/GPG.gitignore | 2 + templates/Global/Images.gitignore | 63 ++ templates/Global/JDeveloper.gitignore | 13 + templates/Global/JEnv.gitignore | 5 + templates/Global/JetBrains.gitignore | 77 +++ templates/Global/KDevelop4.gitignore | 2 + templates/Global/Kate.gitignore | 3 + templates/Global/Lazarus.gitignore | 30 + templates/Global/LibreOffice.gitignore | 2 + templates/Global/Linux.gitignore | 13 + templates/Global/LyX.gitignore | 4 + templates/Global/MATLAB.gitignore | 31 + templates/Global/Mercurial.gitignore | 6 + templates/Global/Metals.gitignore | 5 + templates/Global/MicrosoftOffice.gitignore | 19 + templates/Global/ModelSim.gitignore | 23 + templates/Global/Momentics.gitignore | 8 + templates/Global/MonoDevelop.gitignore | 8 + templates/Global/NetBeans.gitignore | 8 + templates/Global/Ninja.gitignore | 2 + templates/Global/NotepadPP.gitignore | 2 + templates/Global/Octave.gitignore | 1 + templates/Global/Otto.gitignore | 1 + templates/Global/PSoCCreator.gitignore | 18 + templates/Global/Patch.gitignore | 2 + templates/Global/PuTTY.gitignore | 2 + templates/Global/README.md | 10 + templates/Global/Redcar.gitignore | 1 + templates/Global/Redis.gitignore | 3 + templates/Global/SBT.gitignore | 12 + templates/Global/SVN.gitignore | 1 + templates/Global/SlickEdit.gitignore | 11 + templates/Global/Stata.gitignore | 24 + templates/Global/SublimeText.gitignore | 31 + templates/Global/Syncthing.gitignore | 2 + templates/Global/SynopsysVCS.gitignore | 36 + templates/Global/Tags.gitignore | 17 + templates/Global/TextMate.gitignore | 3 + templates/Global/TortoiseGit.gitignore | 2 + templates/Global/Vagrant.gitignore | 5 + templates/Global/Vim.gitignore | 19 + templates/Global/VirtualEnv.gitignore | 12 + templates/Global/Virtuoso.gitignore | 18 + templates/Global/VisualStudioCode.gitignore | 12 + templates/Global/WebMethods.gitignore | 14 + templates/Global/Windows.gitignore | 24 + templates/Global/Xcode.gitignore | 2 + templates/Global/XilinxISE.gitignore | 67 ++ templates/Global/macOS.gitignore | 26 + templates/Go.gitignore | 25 + templates/Godot.gitignore | 15 + templates/Gradle.gitignore | 21 + templates/Grails.gitignore | 33 + templates/Haskell.gitignore | 23 + templates/IAR.gitignore | 47 ++ templates/IGORPro.gitignore | 5 + templates/Idris.gitignore | 7 + templates/JBoss.gitignore | 19 + templates/JENKINS_HOME.gitignore | 50 ++ templates/Java.gitignore | 24 + templates/Jekyll.gitignore | 7 + templates/Joomla.gitignore | 705 ++++++++++++++++++++ templates/Julia.gitignore | 24 + templates/KiCad.gitignore | 29 + templates/Kohana.gitignore | 2 + templates/Kotlin.gitignore | 1 + templates/LICENSE | 116 ++++ templates/LabVIEW.gitignore | 17 + templates/Laravel.gitignore | 23 + templates/Leiningen.gitignore | 14 + templates/LemonStand.gitignore | 21 + templates/Lilypond.gitignore | 6 + templates/Lithium.gitignore | 2 + templates/Lua.gitignore | 41 ++ templates/Magento.gitignore | 45 ++ templates/Maven.gitignore | 17 + templates/Mercury.gitignore | 13 + templates/MetaProgrammingSystem.gitignore | 16 + templates/Nanoc.gitignore | 10 + templates/Nim.gitignore | 3 + templates/Node.gitignore | 130 ++++ templates/OCaml.gitignore | 29 + templates/Objective-C.gitignore | 44 ++ templates/Opa.gitignore | 13 + templates/OpenCart.gitignore | 20 + templates/OracleForms.gitignore | 8 + templates/Packer.gitignore | 16 + templates/Perl.gitignore | 35 + templates/Phalcon.gitignore | 2 + templates/PlayFramework.gitignore | 16 + templates/Plone.gitignore | 18 + templates/Prestashop.gitignore | 173 +++++ templates/Processing.gitignore | 10 + templates/PureScript.gitignore | 9 + templates/Python.gitignore | 162 +++++ templates/Qooxdoo.gitignore | 5 + templates/Qt.gitignore | 54 ++ templates/R.gitignore | 49 ++ templates/README.md | 155 +++++ templates/ROS.gitignore | 51 ++ templates/Racket.gitignore | 7 + templates/Rails.gitignore | 69 ++ templates/Raku.gitignore | 7 + templates/RhodesRhomobile.gitignore | 9 + templates/Ruby.gitignore | 56 ++ templates/Rust.gitignore | 21 + templates/SCons.gitignore | 6 + templates/Sass.gitignore | 4 + templates/Scala.gitignore | 5 + templates/Scheme.gitignore | 7 + templates/Scrivener.gitignore | 8 + templates/Sdcc.gitignore | 8 + templates/SeamGen.gitignore | 26 + templates/SketchUp.gitignore | 1 + templates/Smalltalk.gitignore | 31 + templates/Stella.gitignore | 12 + templates/SugarCRM.gitignore | 27 + templates/Swift.gitignore | 62 ++ templates/Symfony.gitignore | 52 ++ templates/SymphonyCMS.gitignore | 6 + templates/TeX.gitignore | 306 +++++++++ templates/Terraform.gitignore | 37 + templates/Textpattern.gitignore | 11 + templates/TurboGears2.gitignore | 20 + templates/TwinCAT3.gitignore | 25 + templates/Typo3.gitignore | 23 + templates/Unity.gitignore | 72 ++ templates/UnrealEngine.gitignore | 74 ++ templates/VVVV.gitignore | 6 + templates/VisualStudio.gitignore | 398 +++++++++++ templates/Waf.gitignore | 9 + templates/WordPress.gitignore | 48 ++ templates/Xojo.gitignore | 11 + templates/Yeoman.gitignore | 6 + templates/Yii.gitignore | 6 + templates/ZendFramework.gitignore | 24 + templates/Zephir.gitignore | 26 + 202 files changed, 5718 insertions(+), 3 deletions(-) create mode 100644 templates/AL.gitignore create mode 100644 templates/Agda.gitignore create mode 100644 templates/Android.gitignore create mode 100644 templates/AppEngine.gitignore create mode 100644 templates/AppceleratorTitanium.gitignore create mode 100644 templates/ArchLinuxPackages.gitignore create mode 100644 templates/Autotools.gitignore create mode 100644 templates/Ballerina.gitignore create mode 100644 templates/C++.gitignore create mode 100644 templates/C.gitignore create mode 100644 templates/CFWheels.gitignore create mode 100644 templates/CMake.gitignore create mode 100644 templates/CONTRIBUTING.md create mode 100644 templates/CUDA.gitignore create mode 100644 templates/CakePHP.gitignore create mode 100644 templates/ChefCookbook.gitignore create mode 100644 templates/Clojure.gitignore create mode 100644 templates/CodeIgniter.gitignore create mode 100644 templates/CommonLisp.gitignore create mode 100644 templates/Composer.gitignore create mode 100644 templates/Concrete5.gitignore create mode 100644 templates/Coq.gitignore create mode 100644 templates/CraftCMS.gitignore create mode 100644 templates/D.gitignore create mode 100644 templates/DM.gitignore create mode 100644 templates/Dart.gitignore create mode 100644 templates/Delphi.gitignore create mode 100644 templates/Drupal.gitignore create mode 100644 templates/EPiServer.gitignore create mode 100644 templates/Eagle.gitignore create mode 100644 templates/Elisp.gitignore create mode 100644 templates/Elixir.gitignore create mode 100644 templates/Elm.gitignore create mode 100644 templates/Erlang.gitignore create mode 100644 templates/ExpressionEngine.gitignore create mode 100644 templates/ExtJs.gitignore create mode 100644 templates/Fancy.gitignore create mode 100644 templates/Finale.gitignore create mode 100644 templates/FlaxEngine.gitignore create mode 100644 templates/ForceDotCom.gitignore create mode 100644 templates/Fortran.gitignore create mode 100644 templates/FuelPHP.gitignore create mode 100644 templates/GWT.gitignore create mode 100644 templates/Gcov.gitignore create mode 100644 templates/GitBook.gitignore create mode 100644 templates/GitHubPages.gitignore create mode 100644 templates/Global/Backup.gitignore create mode 100644 templates/Global/Bazaar.gitignore create mode 100644 templates/Global/BricxCC.gitignore create mode 100644 templates/Global/CVS.gitignore create mode 100644 templates/Global/Calabash.gitignore create mode 100644 templates/Global/Cloud9.gitignore create mode 100644 templates/Global/CodeKit.gitignore create mode 100644 templates/Global/DartEditor.gitignore create mode 100644 templates/Global/Diff.gitignore create mode 100644 templates/Global/Dreamweaver.gitignore create mode 100644 templates/Global/Dropbox.gitignore create mode 100644 templates/Global/Eclipse.gitignore create mode 100644 templates/Global/EiffelStudio.gitignore create mode 100644 templates/Global/Emacs.gitignore create mode 100644 templates/Global/Ensime.gitignore create mode 100644 templates/Global/Espresso.gitignore create mode 100644 templates/Global/FlexBuilder.gitignore create mode 100644 templates/Global/GPG.gitignore create mode 100644 templates/Global/Images.gitignore create mode 100644 templates/Global/JDeveloper.gitignore create mode 100644 templates/Global/JEnv.gitignore create mode 100644 templates/Global/JetBrains.gitignore create mode 100644 templates/Global/KDevelop4.gitignore create mode 100644 templates/Global/Kate.gitignore create mode 100644 templates/Global/Lazarus.gitignore create mode 100644 templates/Global/LibreOffice.gitignore create mode 100644 templates/Global/Linux.gitignore create mode 100644 templates/Global/LyX.gitignore create mode 100644 templates/Global/MATLAB.gitignore create mode 100644 templates/Global/Mercurial.gitignore create mode 100644 templates/Global/Metals.gitignore create mode 100644 templates/Global/MicrosoftOffice.gitignore create mode 100644 templates/Global/ModelSim.gitignore create mode 100644 templates/Global/Momentics.gitignore create mode 100644 templates/Global/MonoDevelop.gitignore create mode 100644 templates/Global/NetBeans.gitignore create mode 100644 templates/Global/Ninja.gitignore create mode 100644 templates/Global/NotepadPP.gitignore create mode 100644 templates/Global/Octave.gitignore create mode 100644 templates/Global/Otto.gitignore create mode 100644 templates/Global/PSoCCreator.gitignore create mode 100644 templates/Global/Patch.gitignore create mode 100644 templates/Global/PuTTY.gitignore create mode 100644 templates/Global/README.md create mode 100644 templates/Global/Redcar.gitignore create mode 100644 templates/Global/Redis.gitignore create mode 100644 templates/Global/SBT.gitignore create mode 100644 templates/Global/SVN.gitignore create mode 100644 templates/Global/SlickEdit.gitignore create mode 100644 templates/Global/Stata.gitignore create mode 100644 templates/Global/SublimeText.gitignore create mode 100644 templates/Global/Syncthing.gitignore create mode 100644 templates/Global/SynopsysVCS.gitignore create mode 100644 templates/Global/Tags.gitignore create mode 100644 templates/Global/TextMate.gitignore create mode 100644 templates/Global/TortoiseGit.gitignore create mode 100644 templates/Global/Vagrant.gitignore create mode 100644 templates/Global/Vim.gitignore create mode 100644 templates/Global/VirtualEnv.gitignore create mode 100644 templates/Global/Virtuoso.gitignore create mode 100644 templates/Global/VisualStudioCode.gitignore create mode 100644 templates/Global/WebMethods.gitignore create mode 100644 templates/Global/Windows.gitignore create mode 100644 templates/Global/Xcode.gitignore create mode 100644 templates/Global/XilinxISE.gitignore create mode 100644 templates/Global/macOS.gitignore create mode 100644 templates/Go.gitignore create mode 100644 templates/Godot.gitignore create mode 100644 templates/Gradle.gitignore create mode 100644 templates/Grails.gitignore create mode 100644 templates/Haskell.gitignore create mode 100644 templates/IAR.gitignore create mode 100644 templates/IGORPro.gitignore create mode 100644 templates/Idris.gitignore create mode 100644 templates/JBoss.gitignore create mode 100644 templates/JENKINS_HOME.gitignore create mode 100644 templates/Java.gitignore create mode 100644 templates/Jekyll.gitignore create mode 100644 templates/Joomla.gitignore create mode 100644 templates/Julia.gitignore create mode 100644 templates/KiCad.gitignore create mode 100644 templates/Kohana.gitignore create mode 100644 templates/Kotlin.gitignore create mode 100644 templates/LICENSE create mode 100644 templates/LabVIEW.gitignore create mode 100644 templates/Laravel.gitignore create mode 100644 templates/Leiningen.gitignore create mode 100644 templates/LemonStand.gitignore create mode 100644 templates/Lilypond.gitignore create mode 100644 templates/Lithium.gitignore create mode 100644 templates/Lua.gitignore create mode 100644 templates/Magento.gitignore create mode 100644 templates/Maven.gitignore create mode 100644 templates/Mercury.gitignore create mode 100644 templates/MetaProgrammingSystem.gitignore create mode 100644 templates/Nanoc.gitignore create mode 100644 templates/Nim.gitignore create mode 100644 templates/Node.gitignore create mode 100644 templates/OCaml.gitignore create mode 100644 templates/Objective-C.gitignore create mode 100644 templates/Opa.gitignore create mode 100644 templates/OpenCart.gitignore create mode 100644 templates/OracleForms.gitignore create mode 100644 templates/Packer.gitignore create mode 100644 templates/Perl.gitignore create mode 100644 templates/Phalcon.gitignore create mode 100644 templates/PlayFramework.gitignore create mode 100644 templates/Plone.gitignore create mode 100644 templates/Prestashop.gitignore create mode 100644 templates/Processing.gitignore create mode 100644 templates/PureScript.gitignore create mode 100644 templates/Python.gitignore create mode 100644 templates/Qooxdoo.gitignore create mode 100644 templates/Qt.gitignore create mode 100644 templates/R.gitignore create mode 100644 templates/README.md create mode 100644 templates/ROS.gitignore create mode 100644 templates/Racket.gitignore create mode 100644 templates/Rails.gitignore create mode 100644 templates/Raku.gitignore create mode 100644 templates/RhodesRhomobile.gitignore create mode 100644 templates/Ruby.gitignore create mode 100644 templates/Rust.gitignore create mode 100644 templates/SCons.gitignore create mode 100644 templates/Sass.gitignore create mode 100644 templates/Scala.gitignore create mode 100644 templates/Scheme.gitignore create mode 100644 templates/Scrivener.gitignore create mode 100644 templates/Sdcc.gitignore create mode 100644 templates/SeamGen.gitignore create mode 100644 templates/SketchUp.gitignore create mode 100644 templates/Smalltalk.gitignore create mode 100644 templates/Stella.gitignore create mode 100644 templates/SugarCRM.gitignore create mode 100644 templates/Swift.gitignore create mode 100644 templates/Symfony.gitignore create mode 100644 templates/SymphonyCMS.gitignore create mode 100644 templates/TeX.gitignore create mode 100644 templates/Terraform.gitignore create mode 100644 templates/Textpattern.gitignore create mode 100644 templates/TurboGears2.gitignore create mode 100644 templates/TwinCAT3.gitignore create mode 100644 templates/Typo3.gitignore create mode 100644 templates/Unity.gitignore create mode 100644 templates/UnrealEngine.gitignore create mode 100644 templates/VVVV.gitignore create mode 100644 templates/VisualStudio.gitignore create mode 100644 templates/Waf.gitignore create mode 100644 templates/WordPress.gitignore create mode 100644 templates/Xojo.gitignore create mode 100644 templates/Yeoman.gitignore create mode 100644 templates/Yii.gitignore create mode 100644 templates/ZendFramework.gitignore create mode 100644 templates/Zephir.gitignore diff --git a/ignori/ignore_file.py b/ignori/ignore_file.py index e993547..d40934a 100644 --- a/ignori/ignore_file.py +++ b/ignori/ignore_file.py @@ -1,7 +1,10 @@ from dataclasses import dataclass, field +from itertools import cycle from pathlib import Path from typing import Self +from rich.console import Console, ConsoleOptions, RenderResult + @dataclass class IgnoreFile: @@ -13,4 +16,28 @@ class IgnoreFile: def __post_init__(self: Self) -> None: self.language = self.path.stem self.id = self.language.lower() + self.id = "-".join([ + self.language.lower(), + *self.categories, + ]) + + def __rich_console__( + self: Self, + console: Console, + options: ConsoleOptions, + ) -> RenderResult: + categories_colors = cycle( + [ + "white on red", + "white on blue", + "black on green", + "black on yellow", + ], + ) + categories = " ".join([ + f"[{(color:=next(categories_colors))}]{category}[/{color}]" + for category in self.categories + ], + ) + yield f"{self.language} {categories}" if categories else f"{self.language}" diff --git a/ignori/widgets/search_form.py b/ignori/widgets/search_form.py index d982521..3b99dfa 100644 --- a/ignori/widgets/search_form.py +++ b/ignori/widgets/search_form.py @@ -1,4 +1,3 @@ -from pathlib import Path from typing import Self from textual import on @@ -93,7 +92,6 @@ def select_file(self: Self, event: OptionList.OptionSelected) -> None: self.post_message(self.Selected(selected_file)) self.notify(f"{selected_file.language} selected", title="Success") - def compute_filtered_ignore_files(self: Self) -> list[IgnoreFile]: return [ file for file in self.ignore_files @@ -106,7 +104,7 @@ def watch_filtered_ignore_files(self: Self, ignore_files: list[IgnoreFile]) -> N if ignore_files: ignore_list.add_options( - [Option(file.language, id=file.id) for file in ignore_files], + [Option(file, id=file.id) for file in ignore_files], ) else: ignore_list.add_option(Option("No files found", disabled=True)) diff --git a/templates/AL.gitignore b/templates/AL.gitignore new file mode 100644 index 0000000..02eac69 --- /dev/null +++ b/templates/AL.gitignore @@ -0,0 +1,22 @@ +### AL ### +#Template for AL projects for Dynamics 365 Business Central +#launch.json folder +.vscode/ +#Cache folder +.alcache/ +#Symbols folder +.alpackages/ +#Snapshots folder +.snapshots/ +#Testing Output folder +.output/ +#Extension App-file +*.app +#Rapid Application Development File +rad.json +#Translation Base-file +*.g.xlf +#License-file +*.flf +#Test results file +TestResults.xml \ No newline at end of file diff --git a/templates/Agda.gitignore b/templates/Agda.gitignore new file mode 100644 index 0000000..58ab67f --- /dev/null +++ b/templates/Agda.gitignore @@ -0,0 +1,2 @@ +*.agdai +MAlonzo/** diff --git a/templates/Android.gitignore b/templates/Android.gitignore new file mode 100644 index 0000000..347e252 --- /dev/null +++ b/templates/Android.gitignore @@ -0,0 +1,33 @@ +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Log/OS Files +*.log + +# Android Studio generated files and folders +captures/ +.externalNativeBuild/ +.cxx/ +*.apk +output.json + +# IntelliJ +*.iml +.idea/ +misc.xml +deploymentTargetDropDown.xml +render.experimental.xml + +# Keystore files +*.jks +*.keystore + +# Google Services (e.g. APIs or Firebase) +google-services.json + +# Android Profiling +*.hprof diff --git a/templates/AppEngine.gitignore b/templates/AppEngine.gitignore new file mode 100644 index 0000000..6227345 --- /dev/null +++ b/templates/AppEngine.gitignore @@ -0,0 +1,2 @@ +# Google App Engine generated folder +appengine-generated/ diff --git a/templates/AppceleratorTitanium.gitignore b/templates/AppceleratorTitanium.gitignore new file mode 100644 index 0000000..3abea55 --- /dev/null +++ b/templates/AppceleratorTitanium.gitignore @@ -0,0 +1,3 @@ +# Build folder and log file +build/ +build.log diff --git a/templates/ArchLinuxPackages.gitignore b/templates/ArchLinuxPackages.gitignore new file mode 100644 index 0000000..b739055 --- /dev/null +++ b/templates/ArchLinuxPackages.gitignore @@ -0,0 +1,13 @@ +*.tar +*.tar.* +*.jar +*.exe +*.msi +*.zip +*.tgz +*.log +*.log.* +*.sig + +pkg/ +src/ diff --git a/templates/Autotools.gitignore b/templates/Autotools.gitignore new file mode 100644 index 0000000..617156f --- /dev/null +++ b/templates/Autotools.gitignore @@ -0,0 +1,52 @@ +# http://www.gnu.org/software/automake + +Makefile.in +/ar-lib +/mdate-sh +/py-compile +/test-driver +/ylwrap +.deps/ +.dirstamp + +# http://www.gnu.org/software/autoconf + +autom4te.cache +/autoscan.log +/autoscan-*.log +/aclocal.m4 +/compile +/config.cache +/config.guess +/config.h.in +/config.log +/config.status +/config.sub +/configure +/configure.scan +/depcomp +/install-sh +/missing +/stamp-h1 + +# https://www.gnu.org/software/libtool/ + +/ltmain.sh + +# http://www.gnu.org/software/texinfo + +/texinfo.tex + +# http://www.gnu.org/software/m4/ + +m4/libtool.m4 +m4/ltoptions.m4 +m4/ltsugar.m4 +m4/ltversion.m4 +m4/lt~obsolete.m4 + +# Generated Makefile +# (meta build system like autotools, +# can automatically generate from config.status script +# (which is called by configure script)) +Makefile diff --git a/templates/Ballerina.gitignore b/templates/Ballerina.gitignore new file mode 100644 index 0000000..030a350 --- /dev/null +++ b/templates/Ballerina.gitignore @@ -0,0 +1,11 @@ +# generated files +target/ +generated/ + +# dependencies +Dependencies.toml + +# config files +Config.toml +# the config files used for testing, Uncomment the following line if you want to commit the test config files +#!**/tests/Config.toml diff --git a/templates/C++.gitignore b/templates/C++.gitignore new file mode 100644 index 0000000..259148f --- /dev/null +++ b/templates/C++.gitignore @@ -0,0 +1,32 @@ +# Prerequisites +*.d + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod +*.smod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app diff --git a/templates/C.gitignore b/templates/C.gitignore new file mode 100644 index 0000000..c6127b3 --- /dev/null +++ b/templates/C.gitignore @@ -0,0 +1,52 @@ +# Prerequisites +*.d + +# Object files +*.o +*.ko +*.obj +*.elf + +# Linker output +*.ilk +*.map +*.exp + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + +# Debug files +*.dSYM/ +*.su +*.idb +*.pdb + +# Kernel Module Compile Results +*.mod* +*.cmd +.tmp_versions/ +modules.order +Module.symvers +Mkfile.old +dkms.conf diff --git a/templates/CFWheels.gitignore b/templates/CFWheels.gitignore new file mode 100644 index 0000000..f2fec34 --- /dev/null +++ b/templates/CFWheels.gitignore @@ -0,0 +1,12 @@ +# unpacked plugin folders +plugins/**/* + +# files directory where uploads go +files + +# DBMigrate plugin: generated SQL +db/sql + +# AssetBundler plugin: generated bundles +javascripts/bundles +stylesheets/bundles diff --git a/templates/CMake.gitignore b/templates/CMake.gitignore new file mode 100644 index 0000000..11c7643 --- /dev/null +++ b/templates/CMake.gitignore @@ -0,0 +1,12 @@ +CMakeLists.txt.user +CMakeCache.txt +CMakeFiles +CMakeScripts +Testing +Makefile +cmake_install.cmake +install_manifest.txt +compile_commands.json +CTestTestfile.cmake +_deps +CMakeUserPresets.json diff --git a/templates/CONTRIBUTING.md b/templates/CONTRIBUTING.md new file mode 100644 index 0000000..c693838 --- /dev/null +++ b/templates/CONTRIBUTING.md @@ -0,0 +1,39 @@ +# Contributing guidelines + +We’d love you to help us improve this project. To help us keep this collection +high quality, we request that contributions adhere to the following guidelines. + +- **Provide a link to the application or project’s homepage**. Unless it’s + extremely popular, there’s a chance the maintainers don’t know about or use + the language, framework, editor, app, or project your change applies to. + +- **Provide links to documentation** supporting the change you’re making. + Current, canonical documentation mentioning the files being ignored is best. + If documentation isn’t available to support your change, do the best you can + to explain what the files being ignored are for. + +- **Explain why you’re making a change**. Even if it seems self-evident, please + take a sentence or two to tell us why your change or addition should happen. + It’s especially helpful to articulate why this change applies to *everyone* + who works with the applicable technology, rather than just you or your team. + +- **Please consider the scope of your change**. If your change specific to a + certain language or framework, then make sure the change is made to the + template for that language or framework, rather than to the template for an + editor, tool, or operating system. + +- **Please only modify *one template* per pull request**. This helps keep pull + requests and feedback focused on a specific project or technology. + +In general, the more you can do to help us understand the change you’re making, +the more likely we’ll be to accept your contribution quickly. + +If a template is mostly a list of files installed by a particular version of +some software (e.g. a PHP framework) then it's brittle and probably no more +helpful than a simple `ls`. If it's not possible to curate a small set of +useful rules, then the template might not be a good fit for this collection. + +Please also understand that we can’t list every tool that ever existed. +Our aim is to curate a collection of the *most common and helpful* templates, +not to make sure we cover every project possible. If we choose not to +include your language, tool, or project, it’s not because it’s not awesome. diff --git a/templates/CUDA.gitignore b/templates/CUDA.gitignore new file mode 100644 index 0000000..cb385db --- /dev/null +++ b/templates/CUDA.gitignore @@ -0,0 +1,6 @@ +*.i +*.ii +*.gpu +*.ptx +*.cubin +*.fatbin diff --git a/templates/CakePHP.gitignore b/templates/CakePHP.gitignore new file mode 100644 index 0000000..c6597e4 --- /dev/null +++ b/templates/CakePHP.gitignore @@ -0,0 +1,25 @@ +# CakePHP 3 + +/vendor/* +/config/app.php + +/tmp/cache/models/* +!/tmp/cache/models/empty +/tmp/cache/persistent/* +!/tmp/cache/persistent/empty +/tmp/cache/views/* +!/tmp/cache/views/empty +/tmp/sessions/* +!/tmp/sessions/empty +/tmp/tests/* +!/tmp/tests/empty + +/logs/* +!/logs/empty + +# CakePHP 2 + +/app/tmp/* +/app/Config/core.php +/app/Config/database.php +/vendors/* diff --git a/templates/ChefCookbook.gitignore b/templates/ChefCookbook.gitignore new file mode 100644 index 0000000..5ee7b7a --- /dev/null +++ b/templates/ChefCookbook.gitignore @@ -0,0 +1,9 @@ +.vagrant +/cookbooks + +# Bundler +bin/* +.bundle/* + +.kitchen/ +.kitchen.local.yml diff --git a/templates/Clojure.gitignore b/templates/Clojure.gitignore new file mode 100644 index 0000000..7657a27 --- /dev/null +++ b/templates/Clojure.gitignore @@ -0,0 +1 @@ +Leiningen.gitignore \ No newline at end of file diff --git a/templates/CodeIgniter.gitignore b/templates/CodeIgniter.gitignore new file mode 100644 index 0000000..f447dc3 --- /dev/null +++ b/templates/CodeIgniter.gitignore @@ -0,0 +1,18 @@ +*/config/development +*/logs/log-*.php +!*/logs/index.html +*/cache/* +!system/cache/* +!*/cache/index.html +!*/cache/.htaccess + +user_guide_src/build/* +user_guide_src/cilexer/build/* +user_guide_src/cilexer/dist/* +user_guide_src/cilexer/pycilexer.egg-info/* + +#codeigniter 3 +application/logs/* +!application/logs/index.html +!application/logs/.htaccess +/vendor/ diff --git a/templates/CommonLisp.gitignore b/templates/CommonLisp.gitignore new file mode 100644 index 0000000..e7de127 --- /dev/null +++ b/templates/CommonLisp.gitignore @@ -0,0 +1,17 @@ +*.FASL +*.fasl +*.lisp-temp +*.dfsl +*.pfsl +*.d64fsl +*.p64fsl +*.lx64fsl +*.lx32fsl +*.dx64fsl +*.dx32fsl +*.fx64fsl +*.fx32fsl +*.sx64fsl +*.sx32fsl +*.wx64fsl +*.wx32fsl diff --git a/templates/Composer.gitignore b/templates/Composer.gitignore new file mode 100644 index 0000000..a67d42b --- /dev/null +++ b/templates/Composer.gitignore @@ -0,0 +1,6 @@ +composer.phar +/vendor/ + +# Commit your application's lock file https://getcomposer.org/doc/01-basic-usage.md#commit-your-composer-lock-file-to-version-control +# You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file +# composer.lock diff --git a/templates/Concrete5.gitignore b/templates/Concrete5.gitignore new file mode 100644 index 0000000..d6c11ad --- /dev/null +++ b/templates/Concrete5.gitignore @@ -0,0 +1,21 @@ +# ignore the error log and .htaccess and others +error_log +.htaccess + +# concrete5 5.6 specific + +config/site.php +files/cache/* +files/tmp/* + +# concrete5 5.7 specific + +# ignore everything but the index.html +/application/files/* +!/application/files/index.html + +# ignore updates folder +/updates/* + +# ignore sitemap.xml +/sitemap.xml diff --git a/templates/Coq.gitignore b/templates/Coq.gitignore new file mode 100644 index 0000000..66596b2 --- /dev/null +++ b/templates/Coq.gitignore @@ -0,0 +1,45 @@ +.*.aux +.*.d +*.a +*.cma +*.cmi +*.cmo +*.cmx +*.cmxa +*.cmxs +*.glob +*.ml.d +*.ml4.d +*.mlg.d +*.mli.d +*.mllib.d +*.mlpack.d +*.native +*.o +*.v.d +*.vio +*.vo +*.vok +*.vos +.coq-native +.csdp.cache +.lia.cache +.nia.cache +.nlia.cache +.nra.cache +csdp.cache +lia.cache +nia.cache +nlia.cache +nra.cache +native_compute_profile_*.data + +# generated timing files +*.timing.diff +*.v.after-timing +*.v.before-timing +*.v.timing +time-of-build-after.log +time-of-build-before.log +time-of-build-both.log +time-of-build-pretty.log diff --git a/templates/CraftCMS.gitignore b/templates/CraftCMS.gitignore new file mode 100644 index 0000000..0d81b39 --- /dev/null +++ b/templates/CraftCMS.gitignore @@ -0,0 +1,4 @@ +# Craft 2 Storage (https://craftcms.com/support/craft-storage-gitignore) +# not necessary for Craft 3 (https://github.com/craftcms/craft/issues/26) +/craft/storage/* +!/craft/storage/rebrand diff --git a/templates/D.gitignore b/templates/D.gitignore new file mode 100644 index 0000000..74b926f --- /dev/null +++ b/templates/D.gitignore @@ -0,0 +1,24 @@ +# Compiled Object files +*.o +*.obj + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Compiled Static libraries +*.a +*.lib + +# Executables +*.exe + +# DUB +.dub +docs.json +__dummy.html +docs/ + +# Code coverage +*.lst diff --git a/templates/DM.gitignore b/templates/DM.gitignore new file mode 100644 index 0000000..ba5abda --- /dev/null +++ b/templates/DM.gitignore @@ -0,0 +1,5 @@ +*.dmb +*.rsc +*.int +*.lk +*.zip diff --git a/templates/Dart.gitignore b/templates/Dart.gitignore new file mode 100644 index 0000000..3a83c2f --- /dev/null +++ b/templates/Dart.gitignore @@ -0,0 +1,27 @@ +# See https://www.dartlang.org/guides/libraries/private-files + +# Files and directories created by pub +.dart_tool/ +.packages +build/ +# If you're building an application, you may want to check-in your pubspec.lock +pubspec.lock + +# Directory created by dartdoc +# If you don't generate documentation locally you can remove this line. +doc/api/ + +# dotenv environment variables file +.env* + +# Avoid committing generated Javascript files: +*.dart.js +*.info.json # Produced by the --dump-info flag. +*.js # When generated by dart2js. Don't specify *.js if your + # project includes source files written in JavaScript. +*.js_ +*.js.deps +*.js.map + +.flutter-plugins +.flutter-plugins-dependencies diff --git a/templates/Delphi.gitignore b/templates/Delphi.gitignore new file mode 100644 index 0000000..8df99b6 --- /dev/null +++ b/templates/Delphi.gitignore @@ -0,0 +1,81 @@ +# Uncomment these types if you want even more clean repository. But be careful. +# It can make harm to an existing project source. Read explanations below. +# +# Resource files are binaries containing manifest, project icon and version info. +# They can not be viewed as text or compared by diff-tools. Consider replacing them with .rc files. +#*.res +# +# Type library file (binary). In old Delphi versions it should be stored. +# Since Delphi 2009 it is produced from .ridl file and can safely be ignored. +#*.tlb +# +# Diagram Portfolio file. Used by the diagram editor up to Delphi 7. +# Uncomment this if you are not using diagrams or use newer Delphi version. +#*.ddp +# +# Visual LiveBindings file. Added in Delphi XE2. +# Uncomment this if you are not using LiveBindings Designer. +#*.vlb +# +# Deployment Manager configuration file for your project. Added in Delphi XE2. +# Uncomment this if it is not mobile development and you do not use remote debug feature. +#*.deployproj +# +# C++ object files produced when C/C++ Output file generation is configured. +# Uncomment this if you are not using external objects (zlib library for example). +#*.obj +# + +# Default Delphi compiler directories +# Content of this directories are generated with each Compile/Construct of a project. +# Most of the time, files here have not there place in a code repository. +#Win32/ +#Win64/ +#OSX64/ +#OSXARM64/ +#Android/ +#Android64/ +#iOSDevice64/ +#Linux64/ + +# Delphi compiler-generated binaries (safe to delete) +*.exe +*.dll +*.bpl +*.bpi +*.dcp +*.so +*.apk +*.drc +*.map +*.dres +*.rsm +*.tds +*.dcu +*.lib +*.a +*.o +*.ocx + +# Delphi autogenerated files (duplicated info) +*.cfg +*.hpp +*Resource.rc + +# Delphi local files (user-specific info) +*.local +*.identcache +*.projdata +*.tvsconfig +*.dsk + +# Delphi history and backups +__history/ +__recovery/ +*.~* + +# Castalia statistics file (since XE7 Castalia is distributed with Delphi) +*.stat + +# Boss dependency manager vendor folder https://github.com/HashLoad/boss +modules/ diff --git a/templates/Drupal.gitignore b/templates/Drupal.gitignore new file mode 100644 index 0000000..faae808 --- /dev/null +++ b/templates/Drupal.gitignore @@ -0,0 +1,62 @@ +# gitignore template for Drupal 8 projects +# +# earlier versions of Drupal are tracked in `community/PHP/` +# +# follows official upstream conventions: +# https://www.drupal.org/docs/develop/using-composer + +# Ignore configuration files that may contain sensitive information +/web/sites/*/*settings*.php +/web/sites/*/*services*.yml + +# Ignore paths that may contain user-generated content +/web/sites/*/files +/web/sites/*/public +/web/sites/*/private +/web/sites/*/files-public +/web/sites/*/files-private + +# Ignore paths that may contain temporary files +/web/sites/*/translations +/web/sites/*/tmp +/web/sites/*/cache + +# Ignore drupal core (if not versioning drupal sources) +/web/vendor +/web/core +/web/modules/README.txt +/web/profiles/README.txt +/web/sites/development.services.yml +/web/sites/example.settings.local.php +/web/sites/example.sites.php +/web/sites/README.txt +/web/themes/README.txt +/web/.csslintrc +/web/.editorconfig +/web/.eslintignore +/web/.eslintrc.json +/web/.gitattributes +/web/.htaccess +/web/.ht.router.php +/web/autoload.php +/web/composer.json +/web/composer.lock +/web/example.gitignore +/web/index.php +/web/INSTALL.txt +/web/LICENSE.txt +/web/README.txt +/web/robots.txt +/web/update.php +/web/web.config + +# Ignore vendor dependencies and scripts +/vendor +/composer.phar +/composer +/robo.phar +/robo +/drush.phar +/drush +/drupal.phar +/drupal diff --git a/templates/EPiServer.gitignore b/templates/EPiServer.gitignore new file mode 100644 index 0000000..97037de --- /dev/null +++ b/templates/EPiServer.gitignore @@ -0,0 +1,4 @@ +###################### +## EPiServer Files +###################### +*License.config diff --git a/templates/Eagle.gitignore b/templates/Eagle.gitignore new file mode 100644 index 0000000..28f0b97 --- /dev/null +++ b/templates/Eagle.gitignore @@ -0,0 +1,51 @@ +# Ignore list for Eagle, a PCB layout tool + +# Backup files +*.s#? +*.b#? +*.l#? +*.b$? +*.s$? +*.l$? + +# Eagle project file +# It contains a serial number and references to the file structure +# on your computer. +# comment the following line if you want to have your project file included. +eagle.epf + +# Autorouter files +*.pro +*.job + +# CAM files +*.$$$ +*.cmp +*.ly2 +*.l15 +*.sol +*.plc +*.stc +*.sts +*.crc +*.crs + +*.dri +*.drl +*.gpi +*.pls +*.ger +*.xln + +*.drd +*.drd.* + +*.s#* +*.b#* + +*.info + +*.eps + +# file locks introduced since 7.x +*.lck diff --git a/templates/Elisp.gitignore b/templates/Elisp.gitignore new file mode 100644 index 0000000..206569d --- /dev/null +++ b/templates/Elisp.gitignore @@ -0,0 +1,11 @@ +# Compiled +*.elc + +# Packaging +.cask + +# Backup files +*~ + +# Undo-tree save-files +*.~undo-tree diff --git a/templates/Elixir.gitignore b/templates/Elixir.gitignore new file mode 100644 index 0000000..b263cd1 --- /dev/null +++ b/templates/Elixir.gitignore @@ -0,0 +1,10 @@ +/_build +/cover +/deps +/doc +/.fetch +erl_crash.dump +*.ez +*.beam +/config/*.secret.exs +.elixir_ls/ diff --git a/templates/Elm.gitignore b/templates/Elm.gitignore new file mode 100644 index 0000000..8b631e7 --- /dev/null +++ b/templates/Elm.gitignore @@ -0,0 +1,4 @@ +# elm-package generated files +elm-stuff +# elm-repl generated files +repl-temp-* diff --git a/templates/Erlang.gitignore b/templates/Erlang.gitignore new file mode 100644 index 0000000..751a61d --- /dev/null +++ b/templates/Erlang.gitignore @@ -0,0 +1,17 @@ +.eunit +*.o +*.beam +*.plt +erl_crash.dump +.concrete/DEV_MODE + +# rebar 2.x +.rebar +rel/example_project +ebin/*.beam +deps + +# rebar 3 +.rebar3 +_build/ +_checkouts/ diff --git a/templates/ExpressionEngine.gitignore b/templates/ExpressionEngine.gitignore new file mode 100644 index 0000000..314e4df --- /dev/null +++ b/templates/ExpressionEngine.gitignore @@ -0,0 +1,19 @@ +.DS_Store + +# Images +images/avatars/ +images/captchas/ +images/smileys/ +images/member_photos/ +images/signature_attachments/ +images/pm_attachments/ + +# For security do not publish the following files +system/expressionengine/config/database.php +system/expressionengine/config/config.php + +# Caches +sized/ +thumbs/ +_thumbs/ +*/expressionengine/cache/* diff --git a/templates/ExtJs.gitignore b/templates/ExtJs.gitignore new file mode 100644 index 0000000..ab97a8c --- /dev/null +++ b/templates/ExtJs.gitignore @@ -0,0 +1,14 @@ +.architect +bootstrap.css +bootstrap.js +bootstrap.json +bootstrap.jsonp +build/ +classic.json +classic.jsonp +ext/ +modern.json +modern.jsonp +resources/sass/.sass-cache/ +resources/.arch-internal-preview.css +.arch-internal-preview.css diff --git a/templates/Fancy.gitignore b/templates/Fancy.gitignore new file mode 100644 index 0000000..70d6e63 --- /dev/null +++ b/templates/Fancy.gitignore @@ -0,0 +1,2 @@ +*.rbc +*.fyc diff --git a/templates/Finale.gitignore b/templates/Finale.gitignore new file mode 100644 index 0000000..7ef08e0 --- /dev/null +++ b/templates/Finale.gitignore @@ -0,0 +1,13 @@ +*.bak +*.db +*.avi +*.pdf +*.ps +*.mid +*.midi +*.mp3 +*.aif +*.wav +# Some versions of Finale have a bug and randomly save extra copies of +# the music source as " copy.mus" +*copy.mus diff --git a/templates/FlaxEngine.gitignore b/templates/FlaxEngine.gitignore new file mode 100644 index 0000000..b470568 --- /dev/null +++ b/templates/FlaxEngine.gitignore @@ -0,0 +1,45 @@ +# Ignore Flax project files +Binaries/ +Cache/ +Logs/ +Output/ +Screenshots/ +*.HotReload.* + +# Ignore Visual Studio project files (generated locally) +*.csproj +*.sln + +# Ignore thumbnails created by Windows +Thumbs.db + +# Ignore files built by Visual Studio +*.obj +*.exe +*.pdb +*.user +*.aps +*.pch +*.vspscc +*_i.c +*_p.c +*.ncb +*.suo +*.tlb +*.tlh +*.bak +*.cache +*.ilk +*.log +[Bb]in +[Dd]ebug*/ +*.lib +*.sbr +obj/ +[Rr]elease*/ +_ReSharper*/ +[Tt]est[Rr]esult* +.vs/ + +# Ignore Nuget packages folder +packages/ diff --git a/templates/ForceDotCom.gitignore b/templates/ForceDotCom.gitignore new file mode 100644 index 0000000..3933cd4 --- /dev/null +++ b/templates/ForceDotCom.gitignore @@ -0,0 +1,4 @@ +.project +.settings +salesforce.schema +Referenced Packages diff --git a/templates/Fortran.gitignore b/templates/Fortran.gitignore new file mode 100644 index 0000000..5daba98 --- /dev/null +++ b/templates/Fortran.gitignore @@ -0,0 +1 @@ +C++.gitignore \ No newline at end of file diff --git a/templates/FuelPHP.gitignore b/templates/FuelPHP.gitignore new file mode 100644 index 0000000..d69f71f --- /dev/null +++ b/templates/FuelPHP.gitignore @@ -0,0 +1,21 @@ +# the composer package lock file and install directory +# Commit your application's lock file http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file +# You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file +# /composer.lock +/fuel/vendor + +# the fuelphp document +/docs/ + +# you may install these packages with `oil package`. +# http://fuelphp.com/docs/packages/oil/package.html +# /fuel/packages/auth/ +# /fuel/packages/email/ +# /fuel/packages/oil/ +# /fuel/packages/orm/ +# /fuel/packages/parser/ + +# dynamically generated files +/fuel/app/logs/*/*/* +/fuel/app/cache/*/* +/fuel/app/config/crypt.php diff --git a/templates/GWT.gitignore b/templates/GWT.gitignore new file mode 100644 index 0000000..a01e7fc --- /dev/null +++ b/templates/GWT.gitignore @@ -0,0 +1,25 @@ +*.class + +# Package Files # +*.jar +*.war + +# gwt caches and compiled units # +war/gwt_bree/ +gwt-unitCache/ + +# boilerplate generated classes # +.apt_generated/ + +# more caches and things from deploy # +war/WEB-INF/deploy/ +war/WEB-INF/classes/ + +#compilation logs +.gwt/ + +#gwt junit compilation files +www-test/ + +#old GWT (1.5) created this dir +.gwt-tmp/ diff --git a/templates/Gcov.gitignore b/templates/Gcov.gitignore new file mode 100644 index 0000000..a645143 --- /dev/null +++ b/templates/Gcov.gitignore @@ -0,0 +1,5 @@ +# gcc coverage testing tool files + +*.gcno +*.gcda +*.gcov diff --git a/templates/GitBook.gitignore b/templates/GitBook.gitignore new file mode 100644 index 0000000..4cb12d8 --- /dev/null +++ b/templates/GitBook.gitignore @@ -0,0 +1,16 @@ +# Node rules: +## Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +## Dependency directory +## Commenting this out is preferred by some people, see +## https://docs.npmjs.com/misc/faq#should-i-check-my-node_modules-folder-into-git +node_modules + +# Book build output +_book + +# eBook build output +*.epub +*.mobi +*.pdf diff --git a/templates/GitHubPages.gitignore b/templates/GitHubPages.gitignore new file mode 100644 index 0000000..493e69b --- /dev/null +++ b/templates/GitHubPages.gitignore @@ -0,0 +1,18 @@ +# This .gitignore is appropriate for repositories deployed to GitHub Pages and using +# a Gemfile as specified at https://github.com/github/pages-gem#conventional + +# Basic Jekyll gitignores (synchronize to Jekyll.gitignore) +_site/ +.sass-cache/ +.jekyll-cache/ +.jekyll-metadata + +# Additional Ruby/bundler ignore for when you run: bundle install +/vendor + +# Specific ignore for GitHub Pages +# GitHub Pages will always use its own deployed version of pages-gem +# This means GitHub Pages will NOT use your Gemfile.lock and therefore it is +# counterproductive to check this file into the repository. +# Details at https://github.com/github/pages-gem/issues/768 +Gemfile.lock diff --git a/templates/Global/Backup.gitignore b/templates/Global/Backup.gitignore new file mode 100644 index 0000000..825ce52 --- /dev/null +++ b/templates/Global/Backup.gitignore @@ -0,0 +1,5 @@ +*.bak +*.gho +*.ori +*.orig +*.tmp diff --git a/templates/Global/Bazaar.gitignore b/templates/Global/Bazaar.gitignore new file mode 100644 index 0000000..3cbbcbd --- /dev/null +++ b/templates/Global/Bazaar.gitignore @@ -0,0 +1,2 @@ +.bzr/ +.bzrignore diff --git a/templates/Global/BricxCC.gitignore b/templates/Global/BricxCC.gitignore new file mode 100644 index 0000000..c1d16a4 --- /dev/null +++ b/templates/Global/BricxCC.gitignore @@ -0,0 +1,4 @@ +# Bricx Command Center IDE +# http://bricxcc.sourceforge.net +*.bak +*.sym diff --git a/templates/Global/CVS.gitignore b/templates/Global/CVS.gitignore new file mode 100644 index 0000000..1695352 --- /dev/null +++ b/templates/Global/CVS.gitignore @@ -0,0 +1,4 @@ +/CVS/* +**/CVS/* +.cvsignore +*/.cvsignore diff --git a/templates/Global/Calabash.gitignore b/templates/Global/Calabash.gitignore new file mode 100644 index 0000000..8a75b32 --- /dev/null +++ b/templates/Global/Calabash.gitignore @@ -0,0 +1,10 @@ +# Calabash / Cucumber +rerun/ +reports/ +screenshots/ +screenshot*.png +test-servers/ + +# bundler +.bundle +vendor diff --git a/templates/Global/Cloud9.gitignore b/templates/Global/Cloud9.gitignore new file mode 100644 index 0000000..3f4384d --- /dev/null +++ b/templates/Global/Cloud9.gitignore @@ -0,0 +1,3 @@ +# Cloud9 IDE - http://c9.io +.c9revisions +.c9 diff --git a/templates/Global/CodeKit.gitignore b/templates/Global/CodeKit.gitignore new file mode 100644 index 0000000..09b8412 --- /dev/null +++ b/templates/Global/CodeKit.gitignore @@ -0,0 +1,4 @@ +# General CodeKit files to ignore +config.codekit +config.codekit3 +/min diff --git a/templates/Global/DartEditor.gitignore b/templates/Global/DartEditor.gitignore new file mode 100644 index 0000000..948920b --- /dev/null +++ b/templates/Global/DartEditor.gitignore @@ -0,0 +1,2 @@ +.project +.buildlog diff --git a/templates/Global/Diff.gitignore b/templates/Global/Diff.gitignore new file mode 100644 index 0000000..59491b4 --- /dev/null +++ b/templates/Global/Diff.gitignore @@ -0,0 +1,2 @@ +*.patch +*.diff diff --git a/templates/Global/Dreamweaver.gitignore b/templates/Global/Dreamweaver.gitignore new file mode 100644 index 0000000..0621a3d --- /dev/null +++ b/templates/Global/Dreamweaver.gitignore @@ -0,0 +1,7 @@ +# DW Dreamweaver added files +_notes +_compareTemp +configs/ +dwsync.xml +dw_php_codehinting.config +*.mno diff --git a/templates/Global/Dropbox.gitignore b/templates/Global/Dropbox.gitignore new file mode 100644 index 0000000..40f4a46 --- /dev/null +++ b/templates/Global/Dropbox.gitignore @@ -0,0 +1,4 @@ +# Dropbox settings and caches +.dropbox +.dropbox.attr +.dropbox.cache diff --git a/templates/Global/Eclipse.gitignore b/templates/Global/Eclipse.gitignore new file mode 100644 index 0000000..acec74a --- /dev/null +++ b/templates/Global/Eclipse.gitignore @@ -0,0 +1,60 @@ +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.settings/ +.loadpath +.recommenders + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# PyDev specific (Python IDE for Eclipse) +*.pydevproject + +# CDT-specific (C/C++ Development Tooling) +.cproject + +# CDT- autotools +.autotools + +# Java annotation processor (APT) +.factorypath + +# PDT-specific (PHP Development Tools) +.buildpath + +# sbteclipse plugin +.target + +# Tern plugin +.tern-project + +# TeXlipse plugin +.texlipse + +# STS (Spring Tool Suite) +.springBeans + +# Code Recommenders +.recommenders/ + +# Annotation Processing +.apt_generated/ +.apt_generated_test/ + +# Scala IDE specific (Scala & Java development for Eclipse) +.cache-main +.scala_dependencies +.worksheet + +# Uncomment this line if you wish to ignore the project description file. +# Typically, this file would be tracked if it contains build/dependency configurations: +#.project diff --git a/templates/Global/EiffelStudio.gitignore b/templates/Global/EiffelStudio.gitignore new file mode 100644 index 0000000..f41b4f7 --- /dev/null +++ b/templates/Global/EiffelStudio.gitignore @@ -0,0 +1,2 @@ +# The compilation directory +EIFGENs diff --git a/templates/Global/Emacs.gitignore b/templates/Global/Emacs.gitignore new file mode 100644 index 0000000..d40e865 --- /dev/null +++ b/templates/Global/Emacs.gitignore @@ -0,0 +1,49 @@ +# -*- mode: gitignore; -*- +*~ +\#*\# +/.emacs.desktop +/.emacs.desktop.lock +*.elc +auto-save-list +tramp +.\#* + +# Org-mode +.org-id-locations +*_archive + +# flymake-mode +*_flymake.* + +# eshell files +/eshell/history +/eshell/lastdir + +# elpa packages +/elpa/ + +# reftex files +*.rel + +# AUCTeX auto folder +/auto/ + +# cask packages +.cask/ +dist/ + +# Flycheck +flycheck_*.el + +# server auth directory +/server/ + +# projectiles files +.projectile + +# directory configuration +.dir-locals.el + +# network security +/network-security.data + diff --git a/templates/Global/Ensime.gitignore b/templates/Global/Ensime.gitignore new file mode 100644 index 0000000..f2daebb --- /dev/null +++ b/templates/Global/Ensime.gitignore @@ -0,0 +1,4 @@ +# Ensime specific +.ensime +.ensime_cache/ +.ensime_lucene/ diff --git a/templates/Global/Espresso.gitignore b/templates/Global/Espresso.gitignore new file mode 100644 index 0000000..1234530 --- /dev/null +++ b/templates/Global/Espresso.gitignore @@ -0,0 +1 @@ +*.esproj diff --git a/templates/Global/FlexBuilder.gitignore b/templates/Global/FlexBuilder.gitignore new file mode 100644 index 0000000..bbbfb91 --- /dev/null +++ b/templates/Global/FlexBuilder.gitignore @@ -0,0 +1,3 @@ +bin/ +bin-debug/ +bin-release/ diff --git a/templates/Global/GPG.gitignore b/templates/Global/GPG.gitignore new file mode 100644 index 0000000..7740a01 --- /dev/null +++ b/templates/Global/GPG.gitignore @@ -0,0 +1,2 @@ +secring.* + diff --git a/templates/Global/Images.gitignore b/templates/Global/Images.gitignore new file mode 100644 index 0000000..97dcdbe --- /dev/null +++ b/templates/Global/Images.gitignore @@ -0,0 +1,63 @@ +# JPEG +*.jpg +*.jpeg +*.jpe +*.jif +*.jfif +*.jfi + +# JPEG 2000 +*.jp2 +*.j2k +*.jpf +*.jpx +*.jpm +*.mj2 + +# JPEG XR +*.jxr +*.hdp +*.wdp + +# Graphics Interchange Format +*.gif + +# RAW +*.raw + +# Web P +*.webp + +# Portable Network Graphics +*.png + +# Animated Portable Network Graphics +*.apng + +# Multiple-image Network Graphics +*.mng + +# Tagged Image File Format +*.tiff +*.tif + +# Scalable Vector Graphics +*.svg +*.svgz + +# Portable Document Format +*.pdf + +# X BitMap +*.xbm + +# BMP +*.bmp +*.dib + +# ICO +*.ico + +# 3D Images +*.3dm +*.max diff --git a/templates/Global/JDeveloper.gitignore b/templates/Global/JDeveloper.gitignore new file mode 100644 index 0000000..5bba6f3 --- /dev/null +++ b/templates/Global/JDeveloper.gitignore @@ -0,0 +1,13 @@ +# default application storage directory used by the IDE Performance Cache feature +.data/ + +# used for ADF styles caching +temp/ + +# default output directories +classes/ +deploy/ +javadoc/ + +# lock file, a part of Oracle Credential Store Framework +cwallet.sso.lck \ No newline at end of file diff --git a/templates/Global/JEnv.gitignore b/templates/Global/JEnv.gitignore new file mode 100644 index 0000000..d838300 --- /dev/null +++ b/templates/Global/JEnv.gitignore @@ -0,0 +1,5 @@ +# JEnv local Java version configuration file +.java-version + +# Used by previous versions of JEnv +.jenv-version diff --git a/templates/Global/JetBrains.gitignore b/templates/Global/JetBrains.gitignore new file mode 100644 index 0000000..3649d6d --- /dev/null +++ b/templates/Global/JetBrains.gitignore @@ -0,0 +1,77 @@ +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser diff --git a/templates/Global/KDevelop4.gitignore b/templates/Global/KDevelop4.gitignore new file mode 100644 index 0000000..7ac57b1 --- /dev/null +++ b/templates/Global/KDevelop4.gitignore @@ -0,0 +1,2 @@ +*.kdev4 +.kdev4/ diff --git a/templates/Global/Kate.gitignore b/templates/Global/Kate.gitignore new file mode 100644 index 0000000..7ff06ce --- /dev/null +++ b/templates/Global/Kate.gitignore @@ -0,0 +1,3 @@ +# Swap Files # +.*.kate-swp +.swp.* diff --git a/templates/Global/Lazarus.gitignore b/templates/Global/Lazarus.gitignore new file mode 100644 index 0000000..b32943f --- /dev/null +++ b/templates/Global/Lazarus.gitignore @@ -0,0 +1,30 @@ +# Lazarus compiler-generated binaries (safe to delete) +*.exe +*.dll +*.so +*.dylib +*.lrs +*.res +*.compiled +*.dbg +*.ppu +*.o +*.or +*.a + +# Lazarus autogenerated files (duplicated info) +*.rst +*.rsj +*.lrt + +# Lazarus local files (user-specific info) +*.lps + +# Lazarus backups and unit output folders. +# These can be changed by user in Lazarus/project options. +backup/ +*.bak +lib/ + +# Application bundle for Mac OS +*.app/ diff --git a/templates/Global/LibreOffice.gitignore b/templates/Global/LibreOffice.gitignore new file mode 100644 index 0000000..586beac --- /dev/null +++ b/templates/Global/LibreOffice.gitignore @@ -0,0 +1,2 @@ +# LibreOffice locks +.~lock.*# diff --git a/templates/Global/Linux.gitignore b/templates/Global/Linux.gitignore new file mode 100644 index 0000000..b56bf65 --- /dev/null +++ b/templates/Global/Linux.gitignore @@ -0,0 +1,13 @@ +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* diff --git a/templates/Global/LyX.gitignore b/templates/Global/LyX.gitignore new file mode 100644 index 0000000..8efe019 --- /dev/null +++ b/templates/Global/LyX.gitignore @@ -0,0 +1,4 @@ +# Ignore LyX backup and autosave files +# http://www.lyx.org/ +*.lyx~ +*.lyx# diff --git a/templates/Global/MATLAB.gitignore b/templates/Global/MATLAB.gitignore new file mode 100644 index 0000000..01d02dd --- /dev/null +++ b/templates/Global/MATLAB.gitignore @@ -0,0 +1,31 @@ +# Windows default autosave extension +*.asv + +# OSX / *nix default autosave extension +*.m~ + +# Compiled MEX binaries (all platforms) +*.mex* + +# Packaged app and toolbox files +*.mlappinstall +*.mltbx + +# Generated helpsearch folders +helpsearch*/ + +# Simulink code generation folders +slprj/ +sccprj/ + +# Matlab code generation folders +codegen/ + +# Simulink autosave extension +*.autosave + +# Simulink cache files +*.slxc + +# Octave session info +octave-workspace diff --git a/templates/Global/Mercurial.gitignore b/templates/Global/Mercurial.gitignore new file mode 100644 index 0000000..e65d113 --- /dev/null +++ b/templates/Global/Mercurial.gitignore @@ -0,0 +1,6 @@ +.hg/ +.hgignore +.hgsigs +.hgsub +.hgsubstate +.hgtags diff --git a/templates/Global/Metals.gitignore b/templates/Global/Metals.gitignore new file mode 100644 index 0000000..516e7e3 --- /dev/null +++ b/templates/Global/Metals.gitignore @@ -0,0 +1,5 @@ + # Generated Metals (Scala Language Server) files + # Reference: https://scalameta.org/metals/ +.metals/ +.bloop/ +project/metals.sbt diff --git a/templates/Global/MicrosoftOffice.gitignore b/templates/Global/MicrosoftOffice.gitignore new file mode 100644 index 0000000..ddcc9cf --- /dev/null +++ b/templates/Global/MicrosoftOffice.gitignore @@ -0,0 +1,19 @@ +*.tmp + +# Word temporary +~$*.doc* + +# Word Auto Backup File +Backup of *.doc* + +# Excel temporary +~$*.xls* + +# Excel Backup File +*.xlk + +# PowerPoint temporary +~$*.ppt* + +# Visio autosave temporary files +*.~vsd* diff --git a/templates/Global/ModelSim.gitignore b/templates/Global/ModelSim.gitignore new file mode 100644 index 0000000..46592b8 --- /dev/null +++ b/templates/Global/ModelSim.gitignore @@ -0,0 +1,23 @@ +# ignore ModelSim generated files and directories (temp files and so on) +[_@]* + +# ignore compilation output of ModelSim +*.mti +*.dat +*.dbs +*.psm +*.bak +*.cmp +*.jpg +*.html +*.bsf + +# ignore simulation output of ModelSim +wlf* +*.wlf +*.vstf +*.ucdb +cov*/ +transcript* +sc_dpiheader.h +vsim.dbg diff --git a/templates/Global/Momentics.gitignore b/templates/Global/Momentics.gitignore new file mode 100644 index 0000000..b14db2d --- /dev/null +++ b/templates/Global/Momentics.gitignore @@ -0,0 +1,8 @@ +# Built files +x86/ +arm/ +arm-p/ +translations/*.qm + +# IDE settings +.settings/ diff --git a/templates/Global/MonoDevelop.gitignore b/templates/Global/MonoDevelop.gitignore new file mode 100644 index 0000000..ef38d06 --- /dev/null +++ b/templates/Global/MonoDevelop.gitignore @@ -0,0 +1,8 @@ +#User Specific +*.userprefs +*.usertasks + +#Mono Project Files +*.pidb +*.resources +test-results/ diff --git a/templates/Global/NetBeans.gitignore b/templates/Global/NetBeans.gitignore new file mode 100644 index 0000000..4511287 --- /dev/null +++ b/templates/Global/NetBeans.gitignore @@ -0,0 +1,8 @@ +**/nbproject/private/ +**/nbproject/Makefile-*.mk +**/nbproject/Package-*.bash +build/ +nbbuild/ +dist/ +nbdist/ +.nb-gradle/ diff --git a/templates/Global/Ninja.gitignore b/templates/Global/Ninja.gitignore new file mode 100644 index 0000000..50e58f2 --- /dev/null +++ b/templates/Global/Ninja.gitignore @@ -0,0 +1,2 @@ +.ninja_deps +.ninja_log diff --git a/templates/Global/NotepadPP.gitignore b/templates/Global/NotepadPP.gitignore new file mode 100644 index 0000000..f858518 --- /dev/null +++ b/templates/Global/NotepadPP.gitignore @@ -0,0 +1,2 @@ +# Notepad++ backups # +*.bak diff --git a/templates/Global/Octave.gitignore b/templates/Global/Octave.gitignore new file mode 100644 index 0000000..b1d6054 --- /dev/null +++ b/templates/Global/Octave.gitignore @@ -0,0 +1 @@ +MATLAB.gitignore \ No newline at end of file diff --git a/templates/Global/Otto.gitignore b/templates/Global/Otto.gitignore new file mode 100644 index 0000000..5aa263f --- /dev/null +++ b/templates/Global/Otto.gitignore @@ -0,0 +1 @@ +.otto/ diff --git a/templates/Global/PSoCCreator.gitignore b/templates/Global/PSoCCreator.gitignore new file mode 100644 index 0000000..15ae040 --- /dev/null +++ b/templates/Global/PSoCCreator.gitignore @@ -0,0 +1,18 @@ +# Project Settings +*.cywrk.* +*.cyprj.* + +# Generated Assets and Resources +Debug/ +Release/ +Export/ +*/codegentemp +*/Generated_Source +*_datasheet.pdf +*_timing.html +*.cycdx +*.cyfit +*.rpt +*.svd +*.log +*.zip diff --git a/templates/Global/Patch.gitignore b/templates/Global/Patch.gitignore new file mode 100644 index 0000000..6ffab9a --- /dev/null +++ b/templates/Global/Patch.gitignore @@ -0,0 +1,2 @@ +*.orig +*.rej diff --git a/templates/Global/PuTTY.gitignore b/templates/Global/PuTTY.gitignore new file mode 100644 index 0000000..c37466b --- /dev/null +++ b/templates/Global/PuTTY.gitignore @@ -0,0 +1,2 @@ +# Private key +*.ppk diff --git a/templates/Global/README.md b/templates/Global/README.md new file mode 100644 index 0000000..6e57d87 --- /dev/null +++ b/templates/Global/README.md @@ -0,0 +1,10 @@ +## Globally Useful gitignores + +This directory contains globally useful gitignores, +e.g. OS-specific and editor specific. + +For more on global gitignores: + + +And a good blog post about 'em: + diff --git a/templates/Global/Redcar.gitignore b/templates/Global/Redcar.gitignore new file mode 100644 index 0000000..b4a9d1d --- /dev/null +++ b/templates/Global/Redcar.gitignore @@ -0,0 +1 @@ +.redcar diff --git a/templates/Global/Redis.gitignore b/templates/Global/Redis.gitignore new file mode 100644 index 0000000..57c1c23 --- /dev/null +++ b/templates/Global/Redis.gitignore @@ -0,0 +1,3 @@ +# Ignore redis binary dump (dump.rdb) files + +*.rdb diff --git a/templates/Global/SBT.gitignore b/templates/Global/SBT.gitignore new file mode 100644 index 0000000..5ed6acb --- /dev/null +++ b/templates/Global/SBT.gitignore @@ -0,0 +1,12 @@ +# Simple Build Tool +# http://www.scala-sbt.org/release/docs/Getting-Started/Directories.html#configuring-version-control + +dist/* +target/ +lib_managed/ +src_managed/ +project/boot/ +project/plugins/project/ +.history +.cache +.lib/ diff --git a/templates/Global/SVN.gitignore b/templates/Global/SVN.gitignore new file mode 100644 index 0000000..1b53ace --- /dev/null +++ b/templates/Global/SVN.gitignore @@ -0,0 +1 @@ +.svn/ diff --git a/templates/Global/SlickEdit.gitignore b/templates/Global/SlickEdit.gitignore new file mode 100644 index 0000000..f30b8da --- /dev/null +++ b/templates/Global/SlickEdit.gitignore @@ -0,0 +1,11 @@ +# SlickEdit workspace and project files are ignored by default because +# typically they are considered to be developer-specific and not part of a +# project. +*.vpw +*.vpj + +# SlickEdit workspace history and tag files always contain user-specific +# data so they should not be stored in a repository. +*.vpwhistu +*.vpwhist +*.vtg diff --git a/templates/Global/Stata.gitignore b/templates/Global/Stata.gitignore new file mode 100644 index 0000000..07997bb --- /dev/null +++ b/templates/Global/Stata.gitignore @@ -0,0 +1,24 @@ +# .gitignore file for git projects containing Stata files +# Commercial statistical software: http://www.stata.com + +# Stata dataset and output files +*.dta +*.gph +*.log +*.smcl +*.stpr +*.stsem + +# Graphic export files from Stata +# Stata command graph export: http://www.stata.com/manuals14/g-2graphexport.pdf +# +# You may add graphic export files to your .gitignore. However you should be +# aware that this will exclude all image files from this main directory +# and subdirectories. +# *.ps +# *.eps +# *.wmf +# *.emf +# *.pdf +# *.png +# *.tif diff --git a/templates/Global/SublimeText.gitignore b/templates/Global/SublimeText.gitignore new file mode 100644 index 0000000..fdf0abb --- /dev/null +++ b/templates/Global/SublimeText.gitignore @@ -0,0 +1,31 @@ +# Cache files for Sublime Text +*.tmlanguage.cache +*.tmPreferences.cache +*.stTheme.cache + +# Workspace files are user-specific +*.sublime-workspace + +# Project files should be checked into the repository, unless a significant +# proportion of contributors will probably not be using Sublime Text +# *.sublime-project + +# SFTP configuration file +sftp-config.json +sftp-config-alt*.json + +# Package control specific files +Package Control.last-run +Package Control.ca-list +Package Control.ca-bundle +Package Control.system-ca-bundle +Package Control.cache/ +Package Control.ca-certs/ +Package Control.merged-ca-bundle +Package Control.user-ca-bundle +oscrypto-ca-bundle.crt +bh_unicode_properties.cache + +# Sublime-github package stores a github token in this file +# https://packagecontrol.io/packages/sublime-github +GitHub.sublime-settings diff --git a/templates/Global/Syncthing.gitignore b/templates/Global/Syncthing.gitignore new file mode 100644 index 0000000..e18c9a8 --- /dev/null +++ b/templates/Global/Syncthing.gitignore @@ -0,0 +1,2 @@ +# Syncthing caches +.stversions diff --git a/templates/Global/SynopsysVCS.gitignore b/templates/Global/SynopsysVCS.gitignore new file mode 100644 index 0000000..ad751f6 --- /dev/null +++ b/templates/Global/SynopsysVCS.gitignore @@ -0,0 +1,36 @@ +# Waveform formats +*.vcd +*.vpd +*.evcd +*.fsdb + +# Default name of the simulation executable. A different name can be +# specified with this switch (the associated daidir database name is +# also taken from here): -o / +simv + +# Generated for Verilog and VHDL top configs +simv.daidir/ +simv.db.dir/ + +# Infrastructure necessary to co-simulate SystemC models with +# Verilog/VHDL models. An alternate directory may be specified with this +# switch: -Mdir= +csrc/ + +# Log file - the following switch allows to specify the file that will be +# used to write all messages from simulation: -l +*.log + +# Coverage results (generated with urg) and database location. The +# following switch can also be used: urg -dir .vdb +simv.vdb/ +urgReport/ + +# DVE and UCLI related files. +DVEfiles/ +ucli.key + +# When the design is elaborated for DirectC, the following file is created +# with declarations for C/C++ functions. +vc_hdrs.h diff --git a/templates/Global/Tags.gitignore b/templates/Global/Tags.gitignore new file mode 100644 index 0000000..91927af --- /dev/null +++ b/templates/Global/Tags.gitignore @@ -0,0 +1,17 @@ +# Ignore tags created by etags, ctags, gtags (GNU global) and cscope +TAGS +.TAGS +!TAGS/ +tags +.tags +!tags/ +gtags.files +GTAGS +GRTAGS +GPATH +GSYMS +cscope.files +cscope.out +cscope.in.out +cscope.po.out + diff --git a/templates/Global/TextMate.gitignore b/templates/Global/TextMate.gitignore new file mode 100644 index 0000000..41e8d07 --- /dev/null +++ b/templates/Global/TextMate.gitignore @@ -0,0 +1,3 @@ +*.tmproj +*.tmproject +tmtags diff --git a/templates/Global/TortoiseGit.gitignore b/templates/Global/TortoiseGit.gitignore new file mode 100644 index 0000000..db89590 --- /dev/null +++ b/templates/Global/TortoiseGit.gitignore @@ -0,0 +1,2 @@ +# Project-level settings +/.tgitconfig diff --git a/templates/Global/Vagrant.gitignore b/templates/Global/Vagrant.gitignore new file mode 100644 index 0000000..a8e2345 --- /dev/null +++ b/templates/Global/Vagrant.gitignore @@ -0,0 +1,5 @@ +# General +.vagrant/ + +# Log files (if you are creating logs in debug mode, uncomment this) +# *.log diff --git a/templates/Global/Vim.gitignore b/templates/Global/Vim.gitignore new file mode 100644 index 0000000..19fa632 --- /dev/null +++ b/templates/Global/Vim.gitignore @@ -0,0 +1,19 @@ +# Swap +[._]*.s[a-v][a-z] +!*.svg # comment out if you don't need vector files +[._]*.sw[a-p] +[._]s[a-rt-v][a-z] +[._]ss[a-gi-z] +[._]sw[a-p] + +# Session +Session.vim +Sessionx.vim + +# Temporary +.netrwhist +*~ +# Auto-generated tag files +tags +# Persistent undo +[._]*.un~ diff --git a/templates/Global/VirtualEnv.gitignore b/templates/Global/VirtualEnv.gitignore new file mode 100644 index 0000000..b2c22f2 --- /dev/null +++ b/templates/Global/VirtualEnv.gitignore @@ -0,0 +1,12 @@ +# Virtualenv +# http://iamzed.com/2009/05/07/a-primer-on-virtualenv/ +.Python +[Bb]in +[Ii]nclude +[Ll]ib +[Ll]ib64 +[Ll]ocal +[Ss]cripts +pyvenv.cfg +.venv +pip-selfcheck.json diff --git a/templates/Global/Virtuoso.gitignore b/templates/Global/Virtuoso.gitignore new file mode 100644 index 0000000..2de0367 --- /dev/null +++ b/templates/Global/Virtuoso.gitignore @@ -0,0 +1,18 @@ +# Gitignore for Cadence Virtuoso +################################################################ + +# Log files +*.log +panic*.log.* + +# OpenAccess database lock files +*.cdslck* + +# Run directories for layout vs. schematic and design rule check +lvsRunDir/* +drcRunDir/* + +# Abstract generation tool +abstract.log* +abstract.record* + diff --git a/templates/Global/VisualStudioCode.gitignore b/templates/Global/VisualStudioCode.gitignore new file mode 100644 index 0000000..45fce1d --- /dev/null +++ b/templates/Global/VisualStudioCode.gitignore @@ -0,0 +1,12 @@ +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets + +# Local History for Visual Studio Code +.history/ + +# Built Visual Studio Code Extensions +*.vsix diff --git a/templates/Global/WebMethods.gitignore b/templates/Global/WebMethods.gitignore new file mode 100644 index 0000000..b383c25 --- /dev/null +++ b/templates/Global/WebMethods.gitignore @@ -0,0 +1,14 @@ +**/IntegrationServer/datastore/ +**/IntegrationServer/db/ +**/IntegrationServer/DocumentStore/ +**/IntegrationServer/lib/ +**/IntegrationServer/logs/ +**/IntegrationServer/replicate/ +**/IntegrationServer/sdk/ +**/IntegrationServer/support/ +**/IntegrationServer/update/ +**/IntegrationServer/userFtpRoot/ +**/IntegrationServer/web/ +**/IntegrationServer/WmRepository4/ +**/IntegrationServer/XAStore/ +**/IntegrationServer/packages/Wm*/ diff --git a/templates/Global/Windows.gitignore b/templates/Global/Windows.gitignore new file mode 100644 index 0000000..84bffec --- /dev/null +++ b/templates/Global/Windows.gitignore @@ -0,0 +1,24 @@ +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk diff --git a/templates/Global/Xcode.gitignore b/templates/Global/Xcode.gitignore new file mode 100644 index 0000000..5073505 --- /dev/null +++ b/templates/Global/Xcode.gitignore @@ -0,0 +1,2 @@ +## User settings +xcuserdata/ diff --git a/templates/Global/XilinxISE.gitignore b/templates/Global/XilinxISE.gitignore new file mode 100644 index 0000000..4475f84 --- /dev/null +++ b/templates/Global/XilinxISE.gitignore @@ -0,0 +1,67 @@ +# intermediate build files +*.bgn +*.bit +*.bld +*.cmd_log +*.drc +*.ll +*.lso +*.msd +*.msk +*.ncd +*.ngc +*.ngd +*.ngr +*.pad +*.par +*.pcf +*.prj +*.ptwx +*.rbb +*.rbd +*.stx +*.syr +*.twr +*.twx +*.unroutes +*.ut +*.xpi +*.xst +*_bitgen.xwbt +*_envsettings.html +*_map.map +*_map.mrp +*_map.ngm +*_map.xrpt +*_ngdbuild.xrpt +*_pad.csv +*_pad.txt +*_par.xrpt +*_summary.html +*_summary.xml +*_usage.xml +*_xst.xrpt + +# iMPACT generated files +_impactbatch.log +impact.xsl +impact_impact.xwbt +ise_impact.cmd +webtalk_impact.xml + +# Core Generator generated files +xaw2verilog.log + +# project-wide generated files +*.gise +par_usage_statistics.html +usage_statistics_webtalk.html +webtalk.log +webtalk_pn.xml + +# generated folders +iseconfig/ +xlnx_auto_0_xdb/ +xst/ +_ngo/ +_xmsgs/ diff --git a/templates/Global/macOS.gitignore b/templates/Global/macOS.gitignore new file mode 100644 index 0000000..135767f --- /dev/null +++ b/templates/Global/macOS.gitignore @@ -0,0 +1,26 @@ +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk diff --git a/templates/Go.gitignore b/templates/Go.gitignore new file mode 100644 index 0000000..6f72f89 --- /dev/null +++ b/templates/Go.gitignore @@ -0,0 +1,25 @@ +# If you prefer the allow list template instead of the deny list, see community template: +# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore +# +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Dependency directories (remove the comment below to include it) +# vendor/ + +# Go workspace file +go.work +go.work.sum + +# env file +.env diff --git a/templates/Godot.gitignore b/templates/Godot.gitignore new file mode 100644 index 0000000..d9aac21 --- /dev/null +++ b/templates/Godot.gitignore @@ -0,0 +1,15 @@ +# Godot 4+ specific ignores +.godot/ + +# Godot-specific ignores +.import/ +export.cfg +export_presets.cfg + +# Imported translations (automatically generated from CSV files) +*.translation + +# Mono-specific ignores +.mono/ +data_*/ +mono_crash.*.json diff --git a/templates/Gradle.gitignore b/templates/Gradle.gitignore new file mode 100644 index 0000000..a5b1113 --- /dev/null +++ b/templates/Gradle.gitignore @@ -0,0 +1,21 @@ +.gradle +**/build/ +!src/**/build/ + +# Ignore Gradle GUI config +gradle-app.setting + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar + +# Avoid ignore Gradle wrappper properties +!gradle-wrapper.properties + +# Cache of project +.gradletasknamecache + +# Eclipse Gradle plugin generated files +# Eclipse Core +.project +# JDT-specific (Eclipse Java Development Tools) +.classpath diff --git a/templates/Grails.gitignore b/templates/Grails.gitignore new file mode 100644 index 0000000..9185f14 --- /dev/null +++ b/templates/Grails.gitignore @@ -0,0 +1,33 @@ +# .gitignore for Grails 1.2 and 1.3 +# Although this should work for most versions of grails, it is +# suggested that you use the "grails integrate-with --git" command +# to generate your .gitignore file. + +# web application files +/web-app/WEB-INF/classes + +# default HSQL database files for production mode +/prodDb.* + +# general HSQL database files +*Db.properties +*Db.script + +# logs +/stacktrace.log +/test/reports +/logs + +# project release file +/*.war + +# plugin release files +/*.zip +/plugin.xml + +# older plugin install locations +/plugins +/web-app/plugins + +# "temporary" build files +/target diff --git a/templates/Haskell.gitignore b/templates/Haskell.gitignore new file mode 100644 index 0000000..4c9e245 --- /dev/null +++ b/templates/Haskell.gitignore @@ -0,0 +1,23 @@ +dist +dist-* +cabal-dev +*.o +*.hi +*.hie +*.chi +*.chs.h +*.dyn_o +*.dyn_hi +.hpc +.hsenv +.cabal-sandbox/ +cabal.sandbox.config +*.prof +*.aux +*.hp +*.eventlog +.stack-work/ +cabal.project.local +cabal.project.local~ +.HTF/ +.ghc.environment.* diff --git a/templates/IAR.gitignore b/templates/IAR.gitignore new file mode 100644 index 0000000..e8938b3 --- /dev/null +++ b/templates/IAR.gitignore @@ -0,0 +1,47 @@ +# Compiled binaries +*.o +*.bin +*.elf +*.hex +*.map +*.out +*.obj + +# Trash +*.bak +thumbs.db +*.~* + +# IAR Settings +**/settings/*.crun +**/settings/*.dbgdt +**/settings/*.cspy +**/settings/*.cspy.* +**/settings/*.xcl +**/settings/*.dni +**/settings/*.wsdt +**/settings/*.wspos + +# IAR Debug Exe +**/Exe/*.sim + +# IAR Debug Obj +**/Obj/*.pbd +**/Obj/*.pbd.* +**/Obj/*.pbi +**/Obj/*.pbi.* + +# IAR project "Debug" directory +Debug/ + +# IAR project "Release" directory +Release/ + +# IAR project settings directory +settings/ + +# IAR backup files +Backup* + +# IAR .dep files +*.dep \ No newline at end of file diff --git a/templates/IGORPro.gitignore b/templates/IGORPro.gitignore new file mode 100644 index 0000000..c62be65 --- /dev/null +++ b/templates/IGORPro.gitignore @@ -0,0 +1,5 @@ +# Avoid including Experiment files: they can be created and edited locally to test the ipf files +*.pxp +*.pxt +*.uxp +*.uxt diff --git a/templates/Idris.gitignore b/templates/Idris.gitignore new file mode 100644 index 0000000..0f4e72c --- /dev/null +++ b/templates/Idris.gitignore @@ -0,0 +1,7 @@ +# Idris 2 +*.ttc +*.ttm + +# Idris 1 +*.ibc +*.o diff --git a/templates/JBoss.gitignore b/templates/JBoss.gitignore new file mode 100644 index 0000000..75d1731 --- /dev/null +++ b/templates/JBoss.gitignore @@ -0,0 +1,19 @@ +jboss/server/all/deploy/project.ext +jboss/server/default/deploy/project.ext +jboss/server/minimal/deploy/project.ext +jboss/server/all/log/*.log +jboss/server/all/tmp/**/* +jboss/server/all/data/**/* +jboss/server/all/work/**/* +jboss/server/default/log/*.log +jboss/server/default/tmp/**/* +jboss/server/default/data/**/* +jboss/server/default/work/**/* +jboss/server/minimal/log/*.log +jboss/server/minimal/tmp/**/* +jboss/server/minimal/data/**/* +jboss/server/minimal/work/**/* + +# deployed package files # + +*.DEPLOYED diff --git a/templates/JENKINS_HOME.gitignore b/templates/JENKINS_HOME.gitignore new file mode 100644 index 0000000..2516c09 --- /dev/null +++ b/templates/JENKINS_HOME.gitignore @@ -0,0 +1,50 @@ +# Learn more about Jenkins and JENKINS_HOME directory for which this file is +# intended. +# +# http://jenkins-ci.org/ +# https://wiki.jenkins-ci.org/display/JENKINS/Administering+Jenkins +# +# Note: secret.key is purposefully not tracked by git. This should be backed up +# separately because configs may contain secrets which were encrypted using the +# secret.key. To back up secrets use 'tar -czf /tmp/secrets.tgz secret*' and +# save the file separate from your repository. If you want secrets backed up +# with configuration, then see the bottom of this file for an example. + +# Ignore all JENKINS_HOME except jobs directory, root xml config, and +# .gitignore file. +/* +!/jobs +!/.gitignore +!/*.xml + +# Ignore all files in jobs subdirectories except for folders. +# Note: git doesn't track folders, only file content. +jobs/** +!jobs/**/ + +# Uncomment the following line to save next build numbers with config. + +#!jobs/**/nextBuildNumber + +# For performance reasons, we want to ignore builds in Jenkins jobs because it +# contains many tiny files on large installations. This can impact git +# performance when running even basic commands like 'git status'. +builds +indexing + +# Exclude only config.xml files in repository subdirectories. +!config.xml + +# Don't track workspaces (when users build on the master). +jobs/**/*workspace + +# Security warning: If secrets are included with your configuration, then an +# adversary will be able to decrypt all encrypted secrets within Jenkins +# config. Including secrets is a bad practice, but the example is included in +# case someone still wants it for convenience. Uncomment the following line to +# include secrets for decryption with repository configuration in Git. + +#!/secret* + +# As a result, only Jenkins settings and job config.xml files in JENKINS_HOME +# will be tracked by git. diff --git a/templates/Java.gitignore b/templates/Java.gitignore new file mode 100644 index 0000000..524f096 --- /dev/null +++ b/templates/Java.gitignore @@ -0,0 +1,24 @@ +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* +replay_pid* diff --git a/templates/Jekyll.gitignore b/templates/Jekyll.gitignore new file mode 100644 index 0000000..74a9223 --- /dev/null +++ b/templates/Jekyll.gitignore @@ -0,0 +1,7 @@ +_site/ +.sass-cache/ +.jekyll-cache/ +.jekyll-metadata +# Ignore folders generated by Bundler +.bundle/ +vendor/ diff --git a/templates/Joomla.gitignore b/templates/Joomla.gitignore new file mode 100644 index 0000000..41a9ba4 --- /dev/null +++ b/templates/Joomla.gitignore @@ -0,0 +1,705 @@ +/.htaccess +/administrator/cache/* +/administrator/components/com_actionlogs/* +/administrator/components/com_admin/* +/administrator/components/com_ajax/* +/administrator/components/com_associations/* +/administrator/components/com_banners/* +/administrator/components/com_cache/* +/administrator/components/com_categories/* +/administrator/components/com_checkin/* +/administrator/components/com_config/* +/administrator/components/com_contact/* +/administrator/components/com_content/* +/administrator/components/com_contenthistory/* +/administrator/components/com_cpanel/* +/administrator/components/com_fields/* +/administrator/components/com_finder/* +/administrator/components/com_installer/* +/administrator/components/com_joomlaupdate/* +/administrator/components/com_languages/* +/administrator/components/com_login/* +/administrator/components/com_media/* +/administrator/components/com_menus/* +/administrator/components/com_messages/* +/administrator/components/com_modules/* +/administrator/components/com_newsfeeds/* +/administrator/components/com_plugins/* +/administrator/components/com_postinstall/* +/administrator/components/com_privacy/* +/administrator/components/com_redirect/* +/administrator/components/com_search/* +/administrator/components/com_tags/* +/administrator/components/com_templates/* +/administrator/components/com_users/* +/administrator/help/* +/administrator/includes/* +/administrator/index.php +/administrator/language/en-GB/en-GB.com_actionlogs.ini +/administrator/language/en-GB/en-GB.com_actionlogs.sys.ini +/administrator/language/en-GB/en-GB.com_admin.ini +/administrator/language/en-GB/en-GB.com_admin.sys.ini +/administrator/language/en-GB/en-GB.com_ajax.ini +/administrator/language/en-GB/en-GB.com_ajax.sys.ini +/administrator/language/en-GB/en-GB.com_associations.ini +/administrator/language/en-GB/en-GB.com_associations.sys.ini +/administrator/language/en-GB/en-GB.com_banners.ini +/administrator/language/en-GB/en-GB.com_banners.sys.ini +/administrator/language/en-GB/en-GB.com_cache.ini +/administrator/language/en-GB/en-GB.com_cache.sys.ini +/administrator/language/en-GB/en-GB.com_categories.ini +/administrator/language/en-GB/en-GB.com_categories.sys.ini +/administrator/language/en-GB/en-GB.com_checkin.ini +/administrator/language/en-GB/en-GB.com_checkin.sys.ini +/administrator/language/en-GB/en-GB.com_config.ini +/administrator/language/en-GB/en-GB.com_config.sys.ini +/administrator/language/en-GB/en-GB.com_contact.ini +/administrator/language/en-GB/en-GB.com_contact.sys.ini +/administrator/language/en-GB/en-GB.com_content.ini +/administrator/language/en-GB/en-GB.com_content.sys.ini +/administrator/language/en-GB/en-GB.com_contenthistory.ini +/administrator/language/en-GB/en-GB.com_contenthistory.sys.ini +/administrator/language/en-GB/en-GB.com_cpanel.ini +/administrator/language/en-GB/en-GB.com_cpanel.sys.ini +/administrator/language/en-GB/en-GB.com_fields.ini +/administrator/language/en-GB/en-GB.com_fields.sys.ini +/administrator/language/en-GB/en-GB.com_finder.ini +/administrator/language/en-GB/en-GB.com_finder.sys.ini +/administrator/language/en-GB/en-GB.com_installer.ini +/administrator/language/en-GB/en-GB.com_installer.sys.ini +/administrator/language/en-GB/en-GB.com_joomlaupdate.ini +/administrator/language/en-GB/en-GB.com_joomlaupdate.sys.ini +/administrator/language/en-GB/en-GB.com_languages.ini +/administrator/language/en-GB/en-GB.com_languages.sys.ini +/administrator/language/en-GB/en-GB.com_login.ini +/administrator/language/en-GB/en-GB.com_login.sys.ini +/administrator/language/en-GB/en-GB.com_mailto.sys.ini +/administrator/language/en-GB/en-GB.com_media.ini +/administrator/language/en-GB/en-GB.com_media.sys.ini +/administrator/language/en-GB/en-GB.com_menus.ini +/administrator/language/en-GB/en-GB.com_menus.sys.ini +/administrator/language/en-GB/en-GB.com_messages.ini +/administrator/language/en-GB/en-GB.com_messages.sys.ini +/administrator/language/en-GB/en-GB.com_modules.ini +/administrator/language/en-GB/en-GB.com_modules.sys.ini +/administrator/language/en-GB/en-GB.com_newsfeeds.ini +/administrator/language/en-GB/en-GB.com_newsfeeds.sys.ini +/administrator/language/en-GB/en-GB.com_plugins.ini +/administrator/language/en-GB/en-GB.com_plugins.sys.ini +/administrator/language/en-GB/en-GB.com_postinstall.ini +/administrator/language/en-GB/en-GB.com_postinstall.sys.ini +/administrator/language/en-GB/en-GB.com_privacy.ini +/administrator/language/en-GB/en-GB.com_privacy.sys.ini +/administrator/language/en-GB/en-GB.com_redirect.ini +/administrator/language/en-GB/en-GB.com_redirect.sys.ini +/administrator/language/en-GB/en-GB.com_search.ini +/administrator/language/en-GB/en-GB.com_search.sys.ini +/administrator/language/en-GB/en-GB.com_tags.ini +/administrator/language/en-GB/en-GB.com_tags.sys.ini +/administrator/language/en-GB/en-GB.com_templates.ini +/administrator/language/en-GB/en-GB.com_templates.sys.ini +/administrator/language/en-GB/en-GB.com_users.ini +/administrator/language/en-GB/en-GB.com_users.sys.ini +/administrator/language/en-GB/en-GB.com_weblinks.ini +/administrator/language/en-GB/en-GB.com_weblinks.sys.ini +/administrator/language/en-GB/en-GB.com_wrapper.ini +/administrator/language/en-GB/en-GB.com_wrapper.sys.ini +/administrator/language/en-GB/en-GB.ini +/administrator/language/en-GB/en-GB.lib_joomla.ini +/administrator/language/en-GB/en-GB.localise.php +/administrator/language/en-GB/en-GB.mod_custom.ini +/administrator/language/en-GB/en-GB.mod_custom.sys.ini +/administrator/language/en-GB/en-GB.mod_feed.ini +/administrator/language/en-GB/en-GB.mod_feed.sys.ini +/administrator/language/en-GB/en-GB.mod_latest.ini +/administrator/language/en-GB/en-GB.mod_latest.sys.ini +/administrator/language/en-GB/en-GB.mod_latestactions.ini +/administrator/language/en-GB/en-GB.mod_latestactions.sys.ini +/administrator/language/en-GB/en-GB.mod_logged.ini +/administrator/language/en-GB/en-GB.mod_logged.sys.ini +/administrator/language/en-GB/en-GB.mod_login.ini +/administrator/language/en-GB/en-GB.mod_login.sys.ini +/administrator/language/en-GB/en-GB.mod_menu.ini +/administrator/language/en-GB/en-GB.mod_menu.sys.ini +/administrator/language/en-GB/en-GB.mod_multilangstatus.ini +/administrator/language/en-GB/en-GB.mod_multilangstatus.sys.ini +/administrator/language/en-GB/en-GB.mod_online.ini +/administrator/language/en-GB/en-GB.mod_online.sys.ini +/administrator/language/en-GB/en-GB.mod_popular.ini +/administrator/language/en-GB/en-GB.mod_popular.sys.ini +/administrator/language/en-GB/en-GB.mod_privacy_dashboard.ini +/administrator/language/en-GB/en-GB.mod_privacy_dashboard.sys.ini +/administrator/language/en-GB/en-GB.mod_quickicon.ini +/administrator/language/en-GB/en-GB.mod_quickicon.sys.ini +/administrator/language/en-GB/en-GB.mod_sampledata.ini +/administrator/language/en-GB/en-GB.mod_sampledata.sys.ini +/administrator/language/en-GB/en-GB.mod_stats_admin.ini +/administrator/language/en-GB/en-GB.mod_stats_admin.sys.ini +/administrator/language/en-GB/en-GB.mod_status.ini +/administrator/language/en-GB/en-GB.mod_status.sys.ini +/administrator/language/en-GB/en-GB.mod_submenu.ini +/administrator/language/en-GB/en-GB.mod_submenu.sys.ini +/administrator/language/en-GB/en-GB.mod_title.ini +/administrator/language/en-GB/en-GB.mod_title.sys.ini +/administrator/language/en-GB/en-GB.mod_toolbar.ini +/administrator/language/en-GB/en-GB.mod_toolbar.sys.ini +/administrator/language/en-GB/en-GB.mod_unread.ini +/administrator/language/en-GB/en-GB.mod_unread.sys.ini +/administrator/language/en-GB/en-GB.mod_version.ini +/administrator/language/en-GB/en-GB.mod_version.sys.ini +/administrator/language/en-GB/en-GB.plg_actionlog_joomla.ini +/administrator/language/en-GB/en-GB.plg_actionlog_joomla.sys.ini +/administrator/language/en-GB/en-GB.plg_authentication_cookie.ini +/administrator/language/en-GB/en-GB.plg_authentication_cookie.sys.ini +/administrator/language/en-GB/en-GB.plg_authentication_example.ini +/administrator/language/en-GB/en-GB.plg_authentication_example.sys.ini +/administrator/language/en-GB/en-GB.plg_authentication_gmail.ini +/administrator/language/en-GB/en-GB.plg_authentication_gmail.sys.ini +/administrator/language/en-GB/en-GB.plg_authentication_joomla.ini +/administrator/language/en-GB/en-GB.plg_authentication_joomla.sys.ini +/administrator/language/en-GB/en-GB.plg_authentication_ldap.ini +/administrator/language/en-GB/en-GB.plg_authentication_ldap.sys.ini +/administrator/language/en-GB/en-GB.plg_captcha_recaptcha.ini +/administrator/language/en-GB/en-GB.plg_captcha_recaptcha.sys.ini +/administrator/language/en-GB/en-GB.plg_captcha_recaptcha_invisible.ini +/administrator/language/en-GB/en-GB.plg_captcha_recaptcha_invisible.sys.ini +/administrator/language/en-GB/en-GB.plg_content_confirmconsent.ini +/administrator/language/en-GB/en-GB.plg_content_confirmconsent.sys.ini +/administrator/language/en-GB/en-GB.plg_content_contact.ini +/administrator/language/en-GB/en-GB.plg_content_contact.sys.ini +/administrator/language/en-GB/en-GB.plg_content_emailcloak.ini +/administrator/language/en-GB/en-GB.plg_content_emailcloak.sys.ini +/administrator/language/en-GB/en-GB.plg_content_fields.ini +/administrator/language/en-GB/en-GB.plg_content_fields.sys.ini +/administrator/language/en-GB/en-GB.plg_content_finder.ini +/administrator/language/en-GB/en-GB.plg_content_finder.sys.ini +/administrator/language/en-GB/en-GB.plg_content_geshi.ini +/administrator/language/en-GB/en-GB.plg_content_geshi.sys.ini +/administrator/language/en-GB/en-GB.plg_content_joomla.ini +/administrator/language/en-GB/en-GB.plg_content_joomla.sys.ini +/administrator/language/en-GB/en-GB.plg_content_loadmodule.ini +/administrator/language/en-GB/en-GB.plg_content_loadmodule.sys.ini +/administrator/language/en-GB/en-GB.plg_content_pagebreak.ini +/administrator/language/en-GB/en-GB.plg_content_pagebreak.sys.ini +/administrator/language/en-GB/en-GB.plg_content_pagenavigation.ini +/administrator/language/en-GB/en-GB.plg_content_pagenavigation.sys.ini +/administrator/language/en-GB/en-GB.plg_content_vote.ini +/administrator/language/en-GB/en-GB.plg_content_vote.sys.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_article.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_article.sys.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_contact.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_contact.sys.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_fields.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_fields.sys.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_image.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_image.sys.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_menu.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_menu.sys.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_module.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_module.sys.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_pagebreak.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_pagebreak.sys.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_readmore.ini +/administrator/language/en-GB/en-GB.plg_editors-xtd_readmore.sys.ini +/administrator/language/en-GB/en-GB.plg_editors_codemirror.ini +/administrator/language/en-GB/en-GB.plg_editors_codemirror.sys.ini +/administrator/language/en-GB/en-GB.plg_editors_none.ini +/administrator/language/en-GB/en-GB.plg_editors_none.sys.ini +/administrator/language/en-GB/en-GB.plg_editors_tinymce.ini +/administrator/language/en-GB/en-GB.plg_editors_tinymce.sys.ini +/administrator/language/en-GB/en-GB.plg_extension_joomla.ini +/administrator/language/en-GB/en-GB.plg_extension_joomla.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_calendar.ini +/administrator/language/en-GB/en-GB.plg_fields_calendar.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_checkboxes.ini +/administrator/language/en-GB/en-GB.plg_fields_checkboxes.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_color.ini +/administrator/language/en-GB/en-GB.plg_fields_color.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_editor.ini +/administrator/language/en-GB/en-GB.plg_fields_editor.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_image.ini +/administrator/language/en-GB/en-GB.plg_fields_image.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_imagelist.ini +/administrator/language/en-GB/en-GB.plg_fields_imagelist.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_integer.ini +/administrator/language/en-GB/en-GB.plg_fields_integer.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_list.ini +/administrator/language/en-GB/en-GB.plg_fields_list.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_media.ini +/administrator/language/en-GB/en-GB.plg_fields_media.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_radio.ini +/administrator/language/en-GB/en-GB.plg_fields_radio.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_repeatable.ini +/administrator/language/en-GB/en-GB.plg_fields_repeatable.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_sql.ini +/administrator/language/en-GB/en-GB.plg_fields_sql.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_text.ini +/administrator/language/en-GB/en-GB.plg_fields_text.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_textarea.ini +/administrator/language/en-GB/en-GB.plg_fields_textarea.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_url.ini +/administrator/language/en-GB/en-GB.plg_fields_url.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_user.ini +/administrator/language/en-GB/en-GB.plg_fields_user.sys.ini +/administrator/language/en-GB/en-GB.plg_fields_usergrouplist.ini +/administrator/language/en-GB/en-GB.plg_fields_usergrouplist.sys.ini +/administrator/language/en-GB/en-GB.plg_finder_categories.ini +/administrator/language/en-GB/en-GB.plg_finder_categories.sys.ini +/administrator/language/en-GB/en-GB.plg_finder_contacts.ini +/administrator/language/en-GB/en-GB.plg_finder_contacts.sys.ini +/administrator/language/en-GB/en-GB.plg_finder_content.ini +/administrator/language/en-GB/en-GB.plg_finder_content.sys.ini +/administrator/language/en-GB/en-GB.plg_finder_newsfeeds.ini +/administrator/language/en-GB/en-GB.plg_finder_newsfeeds.sys.ini +/administrator/language/en-GB/en-GB.plg_finder_tags.ini +/administrator/language/en-GB/en-GB.plg_finder_tags.sys.ini +/administrator/language/en-GB/en-GB.plg_finder_weblinks.ini +/administrator/language/en-GB/en-GB.plg_finder_weblinks.sys.ini +/administrator/language/en-GB/en-GB.plg_installer_folderinstaller.ini +/administrator/language/en-GB/en-GB.plg_installer_folderinstaller.sys.ini +/administrator/language/en-GB/en-GB.plg_installer_packageinstaller.ini +/administrator/language/en-GB/en-GB.plg_installer_packageinstaller.sys.ini +/administrator/language/en-GB/en-GB.plg_installer_urlinstaller.ini +/administrator/language/en-GB/en-GB.plg_installer_urlinstaller.sys.ini +/administrator/language/en-GB/en-GB.plg_installer_webinstaller.ini +/administrator/language/en-GB/en-GB.plg_installer_webinstaller.sys.ini +/administrator/language/en-GB/en-GB.plg_privacy_actionlogs.ini +/administrator/language/en-GB/en-GB.plg_privacy_actionlogs.sys.ini +/administrator/language/en-GB/en-GB.plg_privacy_consents.ini +/administrator/language/en-GB/en-GB.plg_privacy_consents.sys.ini +/administrator/language/en-GB/en-GB.plg_privacy_contact.ini +/administrator/language/en-GB/en-GB.plg_privacy_contact.sys.ini +/administrator/language/en-GB/en-GB.plg_privacy_content.ini +/administrator/language/en-GB/en-GB.plg_privacy_content.sys.ini +/administrator/language/en-GB/en-GB.plg_privacy_message.ini +/administrator/language/en-GB/en-GB.plg_privacy_message.sys.ini +/administrator/language/en-GB/en-GB.plg_privacy_user.ini +/administrator/language/en-GB/en-GB.plg_privacy_user.sys.ini +/administrator/language/en-GB/en-GB.plg_quickicon_extensionupdate.ini +/administrator/language/en-GB/en-GB.plg_quickicon_extensionupdate.sys.ini +/administrator/language/en-GB/en-GB.plg_quickicon_joomlaupdate.ini +/administrator/language/en-GB/en-GB.plg_quickicon_joomlaupdate.sys.ini +/administrator/language/en-GB/en-GB.plg_quickicon_phpversioncheck.ini +/administrator/language/en-GB/en-GB.plg_quickicon_phpversioncheck.sys.ini +/administrator/language/en-GB/en-GB.plg_quickicon_privacycheck.ini +/administrator/language/en-GB/en-GB.plg_quickicon_privacycheck.sys.ini +/administrator/language/en-GB/en-GB.plg_sampledata_blog.ini +/administrator/language/en-GB/en-GB.plg_sampledata_blog.sys.ini +/administrator/language/en-GB/en-GB.plg_search_categories.ini +/administrator/language/en-GB/en-GB.plg_search_categories.sys.ini +/administrator/language/en-GB/en-GB.plg_search_contacts.ini +/administrator/language/en-GB/en-GB.plg_search_contacts.sys.ini +/administrator/language/en-GB/en-GB.plg_search_content.ini +/administrator/language/en-GB/en-GB.plg_search_content.sys.ini +/administrator/language/en-GB/en-GB.plg_search_newsfeeds.ini +/administrator/language/en-GB/en-GB.plg_search_newsfeeds.sys.ini +/administrator/language/en-GB/en-GB.plg_search_tags.ini +/administrator/language/en-GB/en-GB.plg_search_tags.sys.ini +/administrator/language/en-GB/en-GB.plg_search_weblinks.ini +/administrator/language/en-GB/en-GB.plg_search_weblinks.sys.ini +/administrator/language/en-GB/en-GB.plg_system_actionlogs.ini +/administrator/language/en-GB/en-GB.plg_system_actionlogs.sys.ini +/administrator/language/en-GB/en-GB.plg_system_cache.ini +/administrator/language/en-GB/en-GB.plg_system_cache.sys.ini +/administrator/language/en-GB/en-GB.plg_system_debug.ini +/administrator/language/en-GB/en-GB.plg_system_debug.sys.ini +/administrator/language/en-GB/en-GB.plg_system_fields.ini +/administrator/language/en-GB/en-GB.plg_system_fields.sys.ini +/administrator/language/en-GB/en-GB.plg_system_highlight.ini +/administrator/language/en-GB/en-GB.plg_system_highlight.sys.ini +/administrator/language/en-GB/en-GB.plg_system_languagecode.ini +/administrator/language/en-GB/en-GB.plg_system_languagecode.sys.ini +/administrator/language/en-GB/en-GB.plg_system_languagefilter.ini +/administrator/language/en-GB/en-GB.plg_system_languagefilter.sys.ini +/administrator/language/en-GB/en-GB.plg_system_log.ini +/administrator/language/en-GB/en-GB.plg_system_log.sys.ini +/administrator/language/en-GB/en-GB.plg_system_logout.ini +/administrator/language/en-GB/en-GB.plg_system_logout.sys.ini +/administrator/language/en-GB/en-GB.plg_system_logrotation.ini +/administrator/language/en-GB/en-GB.plg_system_logrotation.sys.ini +/administrator/language/en-GB/en-GB.plg_system_p3p.ini +/administrator/language/en-GB/en-GB.plg_system_p3p.sys.ini +/administrator/language/en-GB/en-GB.plg_system_privacyconsent.ini +/administrator/language/en-GB/en-GB.plg_system_privacyconsent.sys.ini +/administrator/language/en-GB/en-GB.plg_system_redirect.ini +/administrator/language/en-GB/en-GB.plg_system_redirect.sys.ini +/administrator/language/en-GB/en-GB.plg_system_remember.ini +/administrator/language/en-GB/en-GB.plg_system_remember.sys.ini +/administrator/language/en-GB/en-GB.plg_system_sef.ini +/administrator/language/en-GB/en-GB.plg_system_sef.sys.ini +/administrator/language/en-GB/en-GB.plg_system_sessiongc.ini +/administrator/language/en-GB/en-GB.plg_system_sessiongc.sys.ini +/administrator/language/en-GB/en-GB.plg_system_stats.ini +/administrator/language/en-GB/en-GB.plg_system_stats.sys.ini +/administrator/language/en-GB/en-GB.plg_system_updatenotification.ini +/administrator/language/en-GB/en-GB.plg_system_updatenotification.sys.ini +/administrator/language/en-GB/en-GB.plg_twofactorauth_totp.ini +/administrator/language/en-GB/en-GB.plg_twofactorauth_totp.sys.ini +/administrator/language/en-GB/en-GB.plg_twofactorauth_yubikey.ini +/administrator/language/en-GB/en-GB.plg_twofactorauth_yubikey.sys.ini +/administrator/language/en-GB/en-GB.plg_user_contactcreator.ini +/administrator/language/en-GB/en-GB.plg_user_contactcreator.sys.ini +/administrator/language/en-GB/en-GB.plg_user_joomla.ini +/administrator/language/en-GB/en-GB.plg_user_joomla.sys.ini +/administrator/language/en-GB/en-GB.plg_user_profile.ini +/administrator/language/en-GB/en-GB.plg_user_profile.sys.ini +/administrator/language/en-GB/en-GB.plg_user_terms.ini +/administrator/language/en-GB/en-GB.plg_user_terms.sys.ini +/administrator/language/en-GB/en-GB.tpl_hathor.ini +/administrator/language/en-GB/en-GB.tpl_hathor.sys.ini +/administrator/language/en-GB/en-GB.tpl_isis.ini +/administrator/language/en-GB/en-GB.tpl_isis.sys.ini +/administrator/language/en-GB/en-GB.xml +/administrator/language/en-GB/install.xml +/administrator/language/overrides/* +/administrator/language/index.html +/administrator/logs/* +/administrator/manifests/files/joomla.xml +/administrator/manifests/libraries/fof.xml +/administrator/manifests/libraries/idna_convert.xml +/administrator/manifests/libraries/joomla.xml +/administrator/manifests/libraries/phpass.xml +/administrator/manifests/libraries/phputf8.xml +/administrator/manifests/packages/pkg_en-GB.xml +/administrator/manifests/packages/index.html +/administrator/modules/mod_custom/* +/administrator/modules/mod_feed/* +/administrator/modules/mod_latest/* +/administrator/modules/mod_latestactions/* +/administrator/modules/mod_logged/* +/administrator/modules/mod_login/* +/administrator/modules/mod_menu/* +/administrator/modules/mod_multilangstatus/* +/administrator/modules/mod_online/* +/administrator/modules/mod_popular/* +/administrator/modules/mod_privacy_dashboard/* +/administrator/modules/mod_quickicon/* +/administrator/modules/mod_sampledata/* +/administrator/modules/mod_stats_admin/* +/administrator/modules/mod_status/* +/administrator/modules/mod_submenu/* +/administrator/modules/mod_title/* +/administrator/modules/mod_toolbar/* +/administrator/modules/mod_unread/* +/administrator/modules/mod_version/* +/administrator/templates/hathor/* +/administrator/templates/isis/* +/administrator/templates/system/* +/bin/* +/cache/* +/cli/* +/components/com_ajax/* +/components/com_banners/* +/components/com_config/* +/components/com_contact/* +/components/com_content/* +/components/com_contenthistory/* +/components/com_fields/* +/components/com_finder/* +/components/com_mailto/* +/components/com_media/* +/components/com_menus/* +/components/com_modules/* +/components/com_newsfeeds/* +/components/com_privacy/* +/components/com_search/* +/components/com_tags/* +/components/com_users/* +/components/com_wrapper/* +/components/index.html +/images/banners/* +/images/headers/* +/images/sampledata/* +/images/index.html +/images/joomla* +/images/powered_by.png +/includes/* +/installation/* +/language/en-GB/en-GB.com_ajax.ini +/language/en-GB/en-GB.com_config.ini +/language/en-GB/en-GB.com_contact.ini +/language/en-GB/en-GB.com_content.ini +/language/en-GB/en-GB.com_finder.ini +/language/en-GB/en-GB.com_mailto.ini +/language/en-GB/en-GB.com_media.ini +/language/en-GB/en-GB.com_messages.ini +/language/en-GB/en-GB.com_newsfeeds.ini +/language/en-GB/en-GB.com_privacy.ini +/language/en-GB/en-GB.com_search.ini +/language/en-GB/en-GB.com_tags.ini +/language/en-GB/en-GB.com_users.ini +/language/en-GB/en-GB.com_weblinks.ini +/language/en-GB/en-GB.com_wrapper.ini +/language/en-GB/en-GB.files_joomla.sys.ini +/language/en-GB/en-GB.finder_cli.ini +/language/en-GB/en-GB.ini +/language/en-GB/en-GB.lib_fof.ini +/language/en-GB/en-GB.lib_fof.sys.ini +/language/en-GB/en-GB.lib_idna_convert.sys.ini +/language/en-GB/en-GB.lib_joomla.ini +/language/en-GB/en-GB.lib_joomla.sys.ini +/language/en-GB/en-GB.lib_phpass.sys.ini +/language/en-GB/en-GB.lib_phpmailer.sys.ini +/language/en-GB/en-GB.lib_phputf8.sys.ini +/language/en-GB/en-GB.lib_simplepie.sys.ini +/language/en-GB/en-GB.localise.php +/language/en-GB/en-GB.mod_articles_archive.ini +/language/en-GB/en-GB.mod_articles_archive.sys.ini +/language/en-GB/en-GB.mod_articles_categories.ini +/language/en-GB/en-GB.mod_articles_categories.sys.ini +/language/en-GB/en-GB.mod_articles_category.ini +/language/en-GB/en-GB.mod_articles_category.sys.ini +/language/en-GB/en-GB.mod_articles_latest.ini +/language/en-GB/en-GB.mod_articles_latest.sys.ini +/language/en-GB/en-GB.mod_articles_news.ini +/language/en-GB/en-GB.mod_articles_news.sys.ini +/language/en-GB/en-GB.mod_articles_popular.ini +/language/en-GB/en-GB.mod_articles_popular.sys.ini +/language/en-GB/en-GB.mod_banners.ini +/language/en-GB/en-GB.mod_banners.sys.ini +/language/en-GB/en-GB.mod_breadcrumbs.ini +/language/en-GB/en-GB.mod_breadcrumbs.sys.ini +/language/en-GB/en-GB.mod_custom.ini +/language/en-GB/en-GB.mod_custom.sys.ini +/language/en-GB/en-GB.mod_feed.ini +/language/en-GB/en-GB.mod_feed.sys.ini +/language/en-GB/en-GB.mod_finder.ini +/language/en-GB/en-GB.mod_finder.sys.ini +/language/en-GB/en-GB.mod_footer.ini +/language/en-GB/en-GB.mod_footer.sys.ini +/language/en-GB/en-GB.mod_languages.ini +/language/en-GB/en-GB.mod_languages.sys.ini +/language/en-GB/en-GB.mod_login.ini +/language/en-GB/en-GB.mod_login.sys.ini +/language/en-GB/en-GB.mod_menu.ini +/language/en-GB/en-GB.mod_menu.sys.ini +/language/en-GB/en-GB.mod_random_image.ini +/language/en-GB/en-GB.mod_random_image.sys.ini +/language/en-GB/en-GB.mod_related_items.ini +/language/en-GB/en-GB.mod_related_items.sys.ini +/language/en-GB/en-GB.mod_search.ini +/language/en-GB/en-GB.mod_search.sys.ini +/language/en-GB/en-GB.mod_stats.ini +/language/en-GB/en-GB.mod_stats.sys.ini +/language/en-GB/en-GB.mod_syndicate.ini +/language/en-GB/en-GB.mod_syndicate.sys.ini +/language/en-GB/en-GB.mod_tags_popular.ini +/language/en-GB/en-GB.mod_tags_popular.sys.ini +/language/en-GB/en-GB.mod_tags_similar.ini +/language/en-GB/en-GB.mod_tags_similar.sys.ini +/language/en-GB/en-GB.mod_users_latest.ini +/language/en-GB/en-GB.mod_users_latest.sys.ini +/language/en-GB/en-GB.mod_weblinks.ini +/language/en-GB/en-GB.mod_weblinks.sys.ini +/language/en-GB/en-GB.mod_whosonline.ini +/language/en-GB/en-GB.mod_whosonline.sys.ini +/language/en-GB/en-GB.mod_wrapper.ini +/language/en-GB/en-GB.mod_wrapper.sys.ini +/language/en-GB/en-GB.tpl_atomic.ini +/language/en-GB/en-GB.tpl_atomic.sys.ini +/language/en-GB/en-GB.tpl_beez3.ini +/language/en-GB/en-GB.tpl_beez3.sys.ini +/language/en-GB/en-GB.tpl_beez5.ini +/language/en-GB/en-GB.tpl_beez5.sys.ini +/language/en-GB/en-GB.tpl_beez_20.ini +/language/en-GB/en-GB.tpl_beez_20.sys.ini +/language/en-GB/en-GB.tpl_protostar.ini +/language/en-GB/en-GB.tpl_protostar.sys.ini +/language/en-GB/en-GB.xml +/language/en-GB/install.xml +/language/overrides/* +/language/index.html +/layouts/joomla/* +/layouts/libraries/* +/layouts/plugins/* +/layouts/index.html +/libraries/cms/* +/libraries/fof/* +/libraries/idna_convert/* +/libraries/joomla/* +/libraries/legacy/* +/libraries/php-encryption/* +/libraries/phpass/* +/libraries/phpmailer/* +/libraries/phputf8/* +/libraries/simplepie/* +/libraries/src/* +/libraries/vendor/* +/libraries/classmap.php +/libraries/cms.php +/libraries/import.legacy.php +/libraries/import.php +/libraries/index.html +/libraries/loader.php +/media/cms/* +/media/com_associations/* +/media/com_contact/* +/media/com_content/* +/media/com_contenthistory/* +/media/com_fields/* +/media/com_finder/* +/media/com_joomlaupdate/* +/media/com_menus/* +/media/com_modules/* +/media/com_wrapper/* +/media/contacts/* +/media/editors/* +/media/jui/* +/media/mailto/* +/media/media/* +/media/mod_languages/* +/media/mod_sampledata/* +/media/overrider/* +/media/plg_captcha_recaptcha/* +/media/plg_captcha_recaptcha_invisible/* +/media/plg_quickicon_extensionupdate/* +/media/plg_quickicon_joomlaupdate/* +/media/plg_quickicon_privacycheck/* +/media/plg_system_highlight/* +/media/plg_system_stats/* +/media/plg_twofactorauth_totp/* +/media/system/* +/media/index.html +/modules/mod_articles_archive/* +/modules/mod_articles_categories/* +/modules/mod_articles_category/* +/modules/mod_articles_latest/* +/modules/mod_articles_news/* +/modules/mod_articles_popular/* +/modules/mod_banners/* +/modules/mod_breadcrumbs/* +/modules/mod_custom/* +/modules/mod_feed/* +/modules/mod_finder/* +/modules/mod_footer/* +/modules/mod_languages/* +/modules/mod_login/* +/modules/mod_menu/* +/modules/mod_random_image/* +/modules/mod_related_items/* +/modules/mod_search/* +/modules/mod_stats/* +/modules/mod_syndicate/* +/modules/mod_tags_popular/* +/modules/mod_tags_similar/* +/modules/mod_users_latest/* +/modules/mod_whosonline/* +/modules/mod_wrapper/* +/modules/index.html +/plugins/actionlog/joomla/* +/plugins/authentication/cookie/* +/plugins/authentication/example/* +/plugins/authentication/gmail/* +/plugins/authentication/joomla/* +/plugins/authentication/ldap/* +/plugins/captcha/recaptcha/* +/plugins/captcha/recaptcha_invisible/* +/plugins/content/confirmconsent/* +/plugins/content/contact/* +/plugins/content/emailcloak/* +/plugins/content/example/* +/plugins/content/fields/* +/plugins/content/finder/* +/plugins/content/geshi/* +/plugins/content/joomla/* +/plugins/content/loadmodule/* +/plugins/content/pagebreak/* +/plugins/content/pagenavigation/* +/plugins/content/vote/* +/plugins/editors/codemirror/* +/plugins/editors/none/* +/plugins/editors/tinymce/* +/plugins/editors-xtd/article/* +/plugins/editors-xtd/contact/* +/plugins/editors-xtd/fields/* +/plugins/editors-xtd/image/* +/plugins/editors-xtd/menu/* +/plugins/editors-xtd/module/* +/plugins/editors-xtd/pagebreak/* +/plugins/editors-xtd/readmore/* +/plugins/extension/example/* +/plugins/extension/joomla/* +/plugins/fields/calendar/* +/plugins/fields/checkboxes/* +/plugins/fields/color/* +/plugins/fields/editor/* +/plugins/fields/imagelist/* +/plugins/fields/integer/* +/plugins/fields/list/* +/plugins/fields/media/* +/plugins/fields/radio/* +/plugins/fields/repeatable/* +/plugins/fields/sql/* +/plugins/fields/text/* +/plugins/fields/textarea/* +/plugins/fields/url/* +/plugins/fields/user/* +/plugins/fields/usergrouplist/* +/plugins/finder/categories/* +/plugins/finder/contacts/* +/plugins/finder/content/* +/plugins/finder/newsfeeds/* +/plugins/finder/tags/* +/plugins/installer/folderinstaller/* +/plugins/installer/packageinstaller/* +/plugins/installer/urlinstaller/* +/plugins/privacy/actionlogs/* +/plugins/privacy/consents/* +/plugins/privacy/contact/* +/plugins/privacy/content/* +/plugins/privacy/message/* +/plugins/privacy/user/* +/plugins/quickicon/extensionupdate/* +/plugins/quickicon/joomlaupdate/* +/plugins/quickicon/phpversioncheck/* +/plugins/quickicon/privacycheck/* +/plugins/quickicon/index.html +/plugins/sampledata/blog/* +/plugins/search/categories/* +/plugins/search/contacts/* +/plugins/search/content/* +/plugins/search/newsfeeds/* +/plugins/search/tags/* +/plugins/search/weblinks/* +/plugins/search/index.html +/plugins/system/actionlogs/* +/plugins/system/cache/* +/plugins/system/debug/* +/plugins/system/fields/* +/plugins/system/highlight/* +/plugins/system/languagecode/* +/plugins/system/languagefilter/* +/plugins/system/log/* +/plugins/system/logout/* +/plugins/system/logrotation/* +/plugins/system/p3p/* +/plugins/system/privacyconsent/* +/plugins/system/redirect/* +/plugins/system/remember/* +/plugins/system/sef/* +/plugins/system/sessiongc/* +/plugins/system/stats/* +/plugins/system/updatenotification/* +/plugins/system/index.html +/plugins/twofactorauth/totp/* +/plugins/twofactorauth/yubikey/* +/plugins/user/contactcreator/* +/plugins/user/example/* +/plugins/user/joomla/* +/plugins/user/profile/* +/plugins/user/terms/* +/plugins/user/index.html +/plugins/index.html +/templates/beez3/* +/templates/protostar/* +/templates/system/* +/templates/index.html +/tmp/* +/configuration.php +/htaccess.txt +/index.php +/joomla.xml +/LICENSE.txt +/README.txt +/robots.txt.dist +/web.config.txt diff --git a/templates/Julia.gitignore b/templates/Julia.gitignore new file mode 100644 index 0000000..29126e4 --- /dev/null +++ b/templates/Julia.gitignore @@ -0,0 +1,24 @@ +# Files generated by invoking Julia with --code-coverage +*.jl.cov +*.jl.*.cov + +# Files generated by invoking Julia with --track-allocation +*.jl.mem + +# System-specific files and directories generated by the BinaryProvider and BinDeps packages +# They contain absolute paths specific to the host computer, and so should not be committed +deps/deps.jl +deps/build.log +deps/downloads/ +deps/usr/ +deps/src/ + +# Build artifacts for creating documentation generated by the Documenter package +docs/build/ +docs/site/ + +# File generated by Pkg, the package manager, based on a corresponding Project.toml +# It records a fixed state of all packages used by the project. As such, it should not be +# committed for packages, but should be committed for applications that require a static +# environment. +Manifest.toml diff --git a/templates/KiCad.gitignore b/templates/KiCad.gitignore new file mode 100644 index 0000000..a63bc0e --- /dev/null +++ b/templates/KiCad.gitignore @@ -0,0 +1,29 @@ +# For PCBs designed using KiCad: https://www.kicad.org/ +# Format documentation: https://kicad.org/help/file-formats/ + +# Temporary files +*.000 +*.bak +*.bck +*.kicad_pcb-bak +*.kicad_sch-bak +*-backups +*.kicad_prl +*.sch-bak +*~ +_autosave-* +*.tmp +*-save.pro +*-save.kicad_pcb +fp-info-cache + +# Netlist files (exported from Eeschema) +*.net + +# Autorouter files (exported from Pcbnew) +*.dsn +*.ses + +# Exported BOM files +*.xml +*.csv diff --git a/templates/Kohana.gitignore b/templates/Kohana.gitignore new file mode 100644 index 0000000..8b2ab01 --- /dev/null +++ b/templates/Kohana.gitignore @@ -0,0 +1,2 @@ +application/cache/* +application/logs/* diff --git a/templates/Kotlin.gitignore b/templates/Kotlin.gitignore new file mode 100644 index 0000000..c48376e --- /dev/null +++ b/templates/Kotlin.gitignore @@ -0,0 +1 @@ +Java.gitignore \ No newline at end of file diff --git a/templates/LICENSE b/templates/LICENSE new file mode 100644 index 0000000..670154e --- /dev/null +++ b/templates/LICENSE @@ -0,0 +1,116 @@ +CC0 1.0 Universal + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator and +subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for the +purpose of contributing to a commons of creative, cultural and scientific +works ("Commons") that the public can reliably and without fear of later +claims of infringement build upon, modify, incorporate in other works, reuse +and redistribute as freely as possible in any form whatsoever and for any +purposes, including without limitation commercial purposes. These owners may +contribute to the Commons to promote the ideal of a free culture and the +further production of creative, cultural and scientific works, or to gain +reputation or greater distribution for their Work in part through the use and +efforts of others. + +For these and/or other purposes and motivations, and without any expectation +of additional consideration or compensation, the person associating CC0 with a +Work (the "Affirmer"), to the extent that he or she is an owner of Copyright +and Related Rights in the Work, voluntarily elects to apply CC0 to the Work +and publicly distribute the Work under its terms, with knowledge of his or her +Copyright and Related Rights in the Work and the meaning and intended legal +effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not limited +to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, communicate, + and translate a Work; + + ii. moral rights retained by the original author(s) and/or performer(s); + + iii. publicity and privacy rights pertaining to a person's image or likeness + depicted in a Work; + + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + + v. rights protecting the extraction, dissemination, use and reuse of data in + a Work; + + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation thereof, + including any amended or successor version of such directive); and + + vii. other similar, equivalent or corresponding rights throughout the world + based on applicable law or treaty, and any national implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention of, +applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and +unconditionally waives, abandons, and surrenders all of Affirmer's Copyright +and Related Rights and associated claims and causes of action, whether now +known or unknown (including existing as well as future claims and causes of +action), in the Work (i) in all territories worldwide, (ii) for the maximum +duration provided by applicable law or treaty (including future time +extensions), (iii) in any current or future medium and for any number of +copies, and (iv) for any purpose whatsoever, including without limitation +commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes +the Waiver for the benefit of each member of the public at large and to the +detriment of Affirmer's heirs and successors, fully intending that such Waiver +shall not be subject to revocation, rescission, cancellation, termination, or +any other legal or equitable action to disrupt the quiet enjoyment of the Work +by the public as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason be +judged legally invalid or ineffective under applicable law, then the Waiver +shall be preserved to the maximum extent permitted taking into account +Affirmer's express Statement of Purpose. In addition, to the extent the Waiver +is so judged Affirmer hereby grants to each affected person a royalty-free, +non transferable, non sublicensable, non exclusive, irrevocable and +unconditional license to exercise Affirmer's Copyright and Related Rights in +the Work (i) in all territories worldwide, (ii) for the maximum duration +provided by applicable law or treaty (including future time extensions), (iii) +in any current or future medium and for any number of copies, and (iv) for any +purpose whatsoever, including without limitation commercial, advertising or +promotional purposes (the "License"). The License shall be deemed effective as +of the date CC0 was applied by Affirmer to the Work. Should any part of the +License for any reason be judged legally invalid or ineffective under +applicable law, such partial invalidity or ineffectiveness shall not +invalidate the remainder of the License, and in such case Affirmer hereby +affirms that he or she will not (i) exercise any of his or her remaining +Copyright and Related Rights in the Work or (ii) assert any associated claims +and causes of action with respect to the Work, in either case contrary to +Affirmer's express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + + b. Affirmer offers the Work as-is and makes no representations or warranties + of any kind concerning the Work, express, implied, statutory or otherwise, + including without limitation warranties of title, merchantability, fitness + for a particular purpose, non infringement, or the absence of latent or + other defects, accuracy, or the present or absence of errors, whether or not + discoverable, all to the greatest extent permissible under applicable law. + + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without limitation + any person's Copyright and Related Rights in the Work. Further, Affirmer + disclaims responsibility for obtaining any necessary consents, permissions + or other rights required for any use of the Work. + + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to this + CC0 or use of the Work. + +For more information, please see + diff --git a/templates/LabVIEW.gitignore b/templates/LabVIEW.gitignore new file mode 100644 index 0000000..31619f5 --- /dev/null +++ b/templates/LabVIEW.gitignore @@ -0,0 +1,17 @@ +# Libraries +*.lvlibp +*.llb + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe + +# Metadata +*.aliases +*.lvlps +.cache/ diff --git a/templates/Laravel.gitignore b/templates/Laravel.gitignore new file mode 100644 index 0000000..297959a --- /dev/null +++ b/templates/Laravel.gitignore @@ -0,0 +1,23 @@ +/vendor/ +node_modules/ +npm-debug.log +yarn-error.log + +# Laravel 4 specific +bootstrap/compiled.php +app/storage/ + +# Laravel 5 & Lumen specific +public/storage +public/hot + +# Laravel 5 & Lumen specific with changed public path +public_html/storage +public_html/hot + +storage/*.key +.env +Homestead.yaml +Homestead.json +/.vagrant +.phpunit.result.cache diff --git a/templates/Leiningen.gitignore b/templates/Leiningen.gitignore new file mode 100644 index 0000000..a4cb69a --- /dev/null +++ b/templates/Leiningen.gitignore @@ -0,0 +1,14 @@ +pom.xml +pom.xml.asc +*.jar +*.class +/lib/ +/classes/ +/target/ +/checkouts/ +.lein-deps-sum +.lein-repl-history +.lein-plugins/ +.lein-failures +.nrepl-port +.cpcache/ diff --git a/templates/LemonStand.gitignore b/templates/LemonStand.gitignore new file mode 100644 index 0000000..c7d94ad --- /dev/null +++ b/templates/LemonStand.gitignore @@ -0,0 +1,21 @@ +boot.php +index.php +install.php +/config/* +!/config/config.php +/controllers/* +/init/* +/logs/* +/phproad/* +/temp/* +/uploaded/* +/installer_files/* +/modules/backend/* +/modules/blog/* +/modules/cms/* +/modules/core/* +/modules/session/* +/modules/shop/* +/modules/system/* +/modules/users/* +# add content_*.php if you don't want erase client changes to content diff --git a/templates/Lilypond.gitignore b/templates/Lilypond.gitignore new file mode 100644 index 0000000..513e6ed --- /dev/null +++ b/templates/Lilypond.gitignore @@ -0,0 +1,6 @@ +*.pdf +*.ps +*.midi +*.mid +*.log +*~ diff --git a/templates/Lithium.gitignore b/templates/Lithium.gitignore new file mode 100644 index 0000000..7b22568 --- /dev/null +++ b/templates/Lithium.gitignore @@ -0,0 +1,2 @@ +libraries/* +resources/tmp/* diff --git a/templates/Lua.gitignore b/templates/Lua.gitignore new file mode 100644 index 0000000..6fd0a37 --- /dev/null +++ b/templates/Lua.gitignore @@ -0,0 +1,41 @@ +# Compiled Lua sources +luac.out + +# luarocks build files +*.src.rock +*.zip +*.tar.gz + +# Object files +*.o +*.os +*.ko +*.obj +*.elf + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo +*.def +*.exp + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + diff --git a/templates/Magento.gitignore b/templates/Magento.gitignore new file mode 100644 index 0000000..abe6d79 --- /dev/null +++ b/templates/Magento.gitignore @@ -0,0 +1,45 @@ +#--------------------------# +# Magento Default Files # +#--------------------------# + +/PATCH_*.sh + +/app/etc/local.xml + +/media/* +!/media/.htaccess + +!/media/customer +/media/customer/* +!/media/customer/.htaccess + +!/media/dhl +/media/dhl/* +!/media/dhl/logo.jpg + +!/media/downloadable +/media/downloadable/* +!/media/downloadable/.htaccess + +!/media/xmlconnect +/media/xmlconnect/* + +!/media/xmlconnect/custom +/media/xmlconnect/custom/* +!/media/xmlconnect/custom/ok.gif + +!/media/xmlconnect/original +/media/xmlconnect/original/* +!/media/xmlconnect/original/ok.gif + +!/media/xmlconnect/system +/media/xmlconnect/system/* +!/media/xmlconnect/system/ok.gif + +/var/* +!/var/.htaccess + +!/var/package +/var/package/* +!/var/package/*.xml + diff --git a/templates/Maven.gitignore b/templates/Maven.gitignore new file mode 100644 index 0000000..2f43530 --- /dev/null +++ b/templates/Maven.gitignore @@ -0,0 +1,17 @@ +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +# https://github.com/takari/maven-wrapper#usage-without-binary-jar +.mvn/wrapper/maven-wrapper.jar + +# Eclipse m2e generated files +# Eclipse Core +.project +# JDT-specific (Eclipse Java Development Tools) +.classpath diff --git a/templates/Mercury.gitignore b/templates/Mercury.gitignore new file mode 100644 index 0000000..70ec869 --- /dev/null +++ b/templates/Mercury.gitignore @@ -0,0 +1,13 @@ +Mercury/ +Mercury.modules +*.mh +*.err +*.init +*.dll +*.exe +*.a +*.so +*.dylib +*.beams +*.d +*.c_date diff --git a/templates/MetaProgrammingSystem.gitignore b/templates/MetaProgrammingSystem.gitignore new file mode 100644 index 0000000..3e75841 --- /dev/null +++ b/templates/MetaProgrammingSystem.gitignore @@ -0,0 +1,16 @@ +workspace.xml +junitvmwatcher*.properties +build.properties + +# generated java classes and java source files +# manually add any custom artifacts that can't be generated from the models +# http://confluence.jetbrains.com/display/MPSD25/HowTo+--+MPS+and+Git +classes_gen +source_gen +source_gen.caches + +# generated test code and test results +test_gen +test_gen.caches +TEST-*.xml +junit*.properties diff --git a/templates/Nanoc.gitignore b/templates/Nanoc.gitignore new file mode 100644 index 0000000..6f35daa --- /dev/null +++ b/templates/Nanoc.gitignore @@ -0,0 +1,10 @@ +# For projects using Nanoc (http://nanoc.ws/) + +# Default location for output (needs to match output_dir's value found in nanoc.yaml) +output/ + +# Temporary file directory +tmp/nanoc/ + +# Crash Log +crash.log diff --git a/templates/Nim.gitignore b/templates/Nim.gitignore new file mode 100644 index 0000000..32e1dc0 --- /dev/null +++ b/templates/Nim.gitignore @@ -0,0 +1,3 @@ +nimcache/ +nimblecache/ +htmldocs/ diff --git a/templates/Node.gitignore b/templates/Node.gitignore new file mode 100644 index 0000000..c6bba59 --- /dev/null +++ b/templates/Node.gitignore @@ -0,0 +1,130 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp +.cache + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* diff --git a/templates/OCaml.gitignore b/templates/OCaml.gitignore new file mode 100644 index 0000000..a18e084 --- /dev/null +++ b/templates/OCaml.gitignore @@ -0,0 +1,29 @@ +*.annot +*.cmo +*.cma +*.cmi +*.a +*.o +*.cmx +*.cmxs +*.cmxa + +# ocamlbuild working directory +_build/ + +# ocamlbuild targets +*.byte +*.native + +# oasis generated files +setup.data +setup.log + +# Merlin configuring file for Vim and Emacs +.merlin + +# Dune generated files +*.install + +# Local OPAM switch +_opam/ diff --git a/templates/Objective-C.gitignore b/templates/Objective-C.gitignore new file mode 100644 index 0000000..2ebce16 --- /dev/null +++ b/templates/Objective-C.gitignore @@ -0,0 +1,44 @@ +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## User settings +xcuserdata/ + +## Obj-C/Swift specific +*.hmap + +## App packaging +*.ipa +*.dSYM.zip +*.dSYM + +# CocoaPods +# +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# +# Pods/ +# +# Add this line if you want to avoid checking in source code from the Xcode workspace +# *.xcworkspace + +# Carthage +# +# Add this line if you want to avoid checking in source code from Carthage dependencies. +# Carthage/Checkouts + +Carthage/Build/ + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. +# Instead, use fastlane to re-generate the screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/#source-control + +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots/**/*.png +fastlane/test_output diff --git a/templates/Opa.gitignore b/templates/Opa.gitignore new file mode 100644 index 0000000..74c6219 --- /dev/null +++ b/templates/Opa.gitignore @@ -0,0 +1,13 @@ +_build +_tracks + +opa-debug-js + +*.opp +*.opx +*.opx.broken +*.dump +*.api +*.api-txt +*.exe +*.log diff --git a/templates/OpenCart.gitignore b/templates/OpenCart.gitignore new file mode 100644 index 0000000..97be41f --- /dev/null +++ b/templates/OpenCart.gitignore @@ -0,0 +1,20 @@ +.htaccess +/config.php +admin/config.php + +!index.html + +download/ +image/data/ +image/cache/ +system/cache/ +system/logs/ + +system/storage/ + +# vQmod log files +vqmod/logs/* +# vQmod cache files +vqmod/vqcache/* +vqmod/checked.cache +vqmod/mods.cache diff --git a/templates/OracleForms.gitignore b/templates/OracleForms.gitignore new file mode 100644 index 0000000..699a494 --- /dev/null +++ b/templates/OracleForms.gitignore @@ -0,0 +1,8 @@ +# Compiled Form Modules +*.fmx + +# Compiled Menu Modules +*.mmx + +# Compiled Pre-Linked Libraries +*.plx diff --git a/templates/Packer.gitignore b/templates/Packer.gitignore new file mode 100644 index 0000000..2cbc1ad --- /dev/null +++ b/templates/Packer.gitignore @@ -0,0 +1,16 @@ +# Cache objects +packer_cache/ + +# Crash log +crash.log + +# https://www.packer.io/guides/hcl/variables +# Exclude all .pkrvars.hcl files, which are likely to contain sensitive data, +# such as password, private keys, and other secrets. These should not be part of +# version control as they are data points which are potentially sensitive and +# subject to change depending on the environment. +# +*.pkrvars.hcl + +# For built boxes +*.box diff --git a/templates/Perl.gitignore b/templates/Perl.gitignore new file mode 100644 index 0000000..fb8b193 --- /dev/null +++ b/templates/Perl.gitignore @@ -0,0 +1,35 @@ +!Build/ +.last_cover_stats +/META.yml +/META.json +/MYMETA.* +*.o +*.pm.tdy +*.bs + +# Devel::Cover +cover_db/ + +# Devel::NYTProf +nytprof.out + +# Dist::Zilla +/.build/ + +# Module::Build +_build/ +Build +Build.bat + +# Module::Install +inc/ + +# ExtUtils::MakeMaker +/blib/ +/_eumm/ +/*.gz +/Makefile +/Makefile.old +/MANIFEST.bak +/pm_to_blib +/*.zip diff --git a/templates/Phalcon.gitignore b/templates/Phalcon.gitignore new file mode 100644 index 0000000..6ffe3aa --- /dev/null +++ b/templates/Phalcon.gitignore @@ -0,0 +1,2 @@ +/cache/ +/config/development/ diff --git a/templates/PlayFramework.gitignore b/templates/PlayFramework.gitignore new file mode 100644 index 0000000..ae5ec9f --- /dev/null +++ b/templates/PlayFramework.gitignore @@ -0,0 +1,16 @@ +# Ignore Play! working directory # +bin/ +/db +.eclipse +/lib/ +/logs/ +/modules +/project/project +/project/target +/target +tmp/ +test-result +server.pid +*.eml +/dist/ +.cache diff --git a/templates/Plone.gitignore b/templates/Plone.gitignore new file mode 100644 index 0000000..770a868 --- /dev/null +++ b/templates/Plone.gitignore @@ -0,0 +1,18 @@ +*.pyc +*.pyo +*.tmp* +*.mo +*.egg +*.EGG +*.egg-info +*.EGG-INFO +.*.cfg +bin/ +build/ +develop-eggs/ +downloads/ +eggs/ +fake-eggs/ +parts/ +dist/ +var/ diff --git a/templates/Prestashop.gitignore b/templates/Prestashop.gitignore new file mode 100644 index 0000000..9da6d29 --- /dev/null +++ b/templates/Prestashop.gitignore @@ -0,0 +1,173 @@ +# Cache, temp and personal files + +/.htaccess +*.log + +# Cache +/cache/* +!/cache/.htaccess +!/cache/cachefs/index.php +!/cache/deprecated.txt +!/cache/index.php +!/cache/purifier/index.php +!/cache/push/activity +!/cache/push/index.php +!/cache/push/trends +!/cache/sandbox/index.php +!/cache/smarty/cache/index.php +!/cache/smarty/compile/index.php +!/cache/smarty/index.php +!/cache/tcpdf/index.php + +# Download +/download/* +!/download/.htaccess +!/download/index.php + +# Images +/img/* +!/img/.htaccess +!/img/index.php +!/img/404.gif +!/img/bg_500.png +!/img/bg_loader.png +!/img/favicon.ico +!/img/loader.gif +!/img/loadingAnimation.gif +!/img/logo.jpg +!/img/logo.png +!/img/logo_invoice.jpg +!/img/logo_stores.png +!/img/macFFBgHack.png +!/img/prestashop-avatar.png +!/img/prestashop@2x.png +!/img/preston-login-wink@2x.png +!/img/preston-login@2x.png +!/img/questionmark.png +!/img/genders/index.php +!/img/admin/index.php +!/img/c/index.php +!/img/cms/index.php +!/img/co/index.php +!/img/jquery-ui +!/img/l/index.php +!/img/m/index.php +!/img/os/index.php +!/img/p/index.php +!/img/s/index.php +!/img/scenes +!/img/st/index.php +!/img/su/index.php +!/img/t/index.php +!/img/tmp/index.php + +# Upload +/upload/* +!/upload/.htaccess + +/vendor/* +/docs/phpdoc-sf/ +/composer.lock +*.hot-update.js +*.hot-update.json + + +/admin-dev/autoupgrade/* +!/admin-dev/autoupgrade/index.php +!/admin-dev/autoupgrade/backup/index.php + +/admin-dev/backups/* +!/admin-dev/backups/.htaccess + +/admin-dev/import/* +!/admin-dev/import/.htaccess +!/admin-dev/import/index.php + +/admin-dev/export/* +!/admin-dev/export/.htaccess +!/admin-dev/export/index.php + +# Downloaded RTL files +/admin-dev/themes/default/css/bundle/default_rtl.css +/admin-dev/themes/default/css/bundle/shared_rtl.css +/admin-dev/themes/default/css/font_rtl.css +/admin-dev/themes/default/css/overrides_rtl.css +/admin-dev/themes/default/css/vendor/font-awesome/font-awesome_rtl.css +/admin-dev/themes/default/css/vendor/nv.d3_rtl.css +/admin-dev/themes/default/css/vendor/titatoggle-min_rtl.css +/admin-dev/themes/default/public/theme_rtl.css +/admin-dev/themes/new-theme/css/module/drop_rtl.css +/admin-dev/themes/new-theme/css/right-sidebar_rtl.css + +themes/*/cache/* + +# Config + +config/settings.inc.php +config/settings.old.php +config/xml/* +config/themes/* +!config/xml/themes/default.xml +themes/*/config/settings_*.json +app/config/parameters.old.yml +app/config/config.php + +# Themes, modules and overrides + +modules/* +override/* +themes/*/ +!themes/classic +!themes/_core +!themes/_libraries + +# Vendors and dependencies + +bower_components/ +node_modules/ +composer.phar +php-cs-fixer +.grunt/* + +# Translations and emails templates + +translations/* +mails/* +!mails/themes/ +!mails/_partials/ +themes/default-bootstrap/lang/* +themes/default-bootstrap/modules/*/translations/*.php +themes/default-bootstrap/mails/* +!themes/default-bootstrap/mails/en/ +themes/default-bootstrap/modules/*/mails/* +!themes/default-bootstrap/modules/*/mails/en + +# MISC + +*sitemap.xml +/robots.txt + +# Symfony + +/bin/ +/app/Resources/geoip/GeoLite2-City.mmdb +/app/Resources/translations/* +!/app/Resources/translations/default +/app/config/parameters.yml +/app/config/parameters.php +/build/ +/phpunit.xml +/var/* +!/var/cache +/var/cache/* +!var/cache/.gitkeep +!/var/logs +/var/logs/* +!var/logs/.gitkeep +!/var/sessions +/var/sessions/* +!var/sessions/.gitkeep +!var/SymfonyRequirements.php +/vendor/ +/web/bundles/ + diff --git a/templates/Processing.gitignore b/templates/Processing.gitignore new file mode 100644 index 0000000..942ebbc --- /dev/null +++ b/templates/Processing.gitignore @@ -0,0 +1,10 @@ +.DS_Store +applet +application.linux-arm64 +application.linux-armv6hf +application.linux32 +application.linux64 +application.windows32 +application.windows64 +application.macosx +out diff --git a/templates/PureScript.gitignore b/templates/PureScript.gitignore new file mode 100644 index 0000000..de86604 --- /dev/null +++ b/templates/PureScript.gitignore @@ -0,0 +1,9 @@ +# Dependencies +.psci_modules +.spago +bower_components +node_modules + +# Generated files +.psci +output diff --git a/templates/Python.gitignore b/templates/Python.gitignore new file mode 100644 index 0000000..82f9275 --- /dev/null +++ b/templates/Python.gitignore @@ -0,0 +1,162 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/latest/usage/project/#working-with-version-control +.pdm.toml +.pdm-python +.pdm-build/ + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ diff --git a/templates/Qooxdoo.gitignore b/templates/Qooxdoo.gitignore new file mode 100644 index 0000000..d0c6410 --- /dev/null +++ b/templates/Qooxdoo.gitignore @@ -0,0 +1,5 @@ +cache +cache-downloads +inspector +api +source/inspector.html diff --git a/templates/Qt.gitignore b/templates/Qt.gitignore new file mode 100644 index 0000000..7f4826b --- /dev/null +++ b/templates/Qt.gitignore @@ -0,0 +1,54 @@ +# C++ objects and libs +*.slo +*.lo +*.o +*.a +*.la +*.lai +*.so +*.so.* +*.dll +*.dylib + +# Qt-es +object_script.*.Release +object_script.*.Debug +*_plugin_import.cpp +/.qmake.cache +/.qmake.stash +*.pro.user +*.pro.user.* +*.qbs.user +*.qbs.user.* +*.moc +moc_*.cpp +moc_*.h +qrc_*.cpp +ui_*.h +*.qmlc +*.jsc +Makefile* +*build-* +*.qm +*.prl + +# Qt unit tests +target_wrapper.* + +# QtCreator +*.autosave + +# QtCreator Qml +*.qmlproject.user +*.qmlproject.user.* + +# QtCreator CMake +CMakeLists.txt.user* + +# QtCreator 4.8< compilation database +compile_commands.json + +# QtCreator local machine specific files for imported projects +*creator.user* + +*_qmlcache.qrc diff --git a/templates/R.gitignore b/templates/R.gitignore new file mode 100644 index 0000000..e75435c --- /dev/null +++ b/templates/R.gitignore @@ -0,0 +1,49 @@ +# History files +.Rhistory +.Rapp.history + +# Session Data files +.RData +.RDataTmp + +# User-specific files +.Ruserdata + +# Example code in package build process +*-Ex.R + +# Output files from R CMD build +/*.tar.gz + +# Output files from R CMD check +/*.Rcheck/ + +# RStudio files +.Rproj.user/ + +# produced vignettes +vignettes/*.html +vignettes/*.pdf + +# OAuth2 token, see https://github.com/hadley/httr/releases/tag/v0.3 +.httr-oauth + +# knitr and R markdown default cache directories +*_cache/ +/cache/ + +# Temporary files created by R markdown +*.utf8.md +*.knit.md + +# R Environment Variables +.Renviron + +# pkgdown site +docs/ + +# translation temp files +po/*~ + +# RStudio Connect folder +rsconnect/ diff --git a/templates/README.md b/templates/README.md new file mode 100644 index 0000000..7014eed --- /dev/null +++ b/templates/README.md @@ -0,0 +1,155 @@ +# A collection of `.gitignore` templates + +This is GitHub’s collection of [`.gitignore`][man] file templates. +We use this list to populate the `.gitignore` template choosers available +in the GitHub.com interface when creating new repositories and files. + +For more information about how `.gitignore` files work, and how to use them, +the following resources are a great place to start: + +- The [Ignoring Files chapter][chapter] of the [Pro Git][progit] book. +- The [Ignoring Files article][help] on the GitHub Help site. +- The [gitignore(5)][man] manual page. + +[man]: http://git-scm.com/docs/gitignore +[help]: https://help.github.com/articles/ignoring-files +[chapter]: https://git-scm.com/book/en/Git-Basics-Recording-Changes-to-the-Repository#_ignoring +[progit]: http://git-scm.com/book + +## Folder structure + +We support a collection of templates, organized in this way: + +- The root folder contains templates in common use, to help people get started + with popular programming languages and technologies. These define a meaningful + set of rules to help get started, and ensure you are not committing + unimportant files into your repository. +- [`Global`](./Global) contains templates for various editors, tools and + operating systems that can be used in different situations. It is recommended + that you either [add these to your global template](https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files#configuring-ignored-files-for-all-repositories-on-your-computer) + or merge these rules into your project-specific templates if you want to use + them permanently. +- [`community`](./community) contains specialized templates for other popular + languages, tools and project, which don't currently belong in the mainstream + templates. These should be added to your project-specific templates when you + decide to adopt the framework or tool. + +## What makes a good template? + +A template should contain a set of rules to help Git repositories work with a +specific programming language, framework, tool or environment. + +If it's not possible to curate a small set of useful rules for this situation, +then the template is not a good fit for this collection. + +If a template is mostly a list of files installed by a particular version of +some software (e.g. a PHP framework), it could live under the `community` +directory. See [versioned templates](#versioned-templates) for more details. + +If you have a small set of rules, or want to support a technology that is not +widely in use, and still believe this will be helpful to others, please read the +section about [specialized templates](#specialized-templates) for more details. + +Include details when opening pull request if the template is important and visible. We +may not accept it immediately, but we can promote it to the root at a later date +based on interest. + +Please also understand that we can’t list every tool that ever existed. +Our aim is to curate a collection of the _most common and helpful_ templates, +not to make sure we cover every project possible. If we choose not to +include your language, tool, or project, it’s not because it’s not awesome. + +## Contributing guidelines + +We’d love for you to help us improve this project. To help us keep this collection +high quality, we request that contributions adhere to the following guidelines. + +- **Provide a link to the application or project’s homepage**. Unless it’s + extremely popular, there’s a chance the maintainers don’t know about or use + the language, framework, editor, app, or project your change applies to. + +- **Provide links to documentation** supporting the change you’re making. + Current, canonical documentation mentioning the files being ignored is best. + If documentation isn’t available to support your change, do the best you can + to explain what the files being ignored are for. + +- **Explain why you’re making a change**. Even if it seems self-evident, please + take a sentence or two to tell us why your change or addition should happen. + It’s especially helpful to articulate why this change applies to _everyone_ + who works with the applicable technology, rather than just you or your team. + +- **Please consider the scope of your change**. If your change is specific to a + certain language or framework, then make sure the change is made to the + template for that language or framework, rather than to the template for an + editor, tool, or operating system. + +- **Please only modify _one template_ per pull request**. This helps keep pull + requests and feedback focused on a specific project or technology. + +In general, the more you can do to help us understand the change you’re making, +the more likely we’ll be to accept your contribution quickly. + +## Versioned templates + +Some templates can change greatly between versions, and if you wish to contribute +to this repository we need to follow this specific flow: + +- the template at the root should be the current supported version +- the template at the root should not have a version in the filename (i.e. + "evergreen") +- previous versions of templates should live under `community/` +- previous versions of the template should embed the version in the filename, + for readability + +This helps ensure users get the latest version (because they'll use whatever is +at the root) but helps maintainers support older versions still in the wild. + +## Specialized templates + +If you have a template that you would like to contribute, but it isn't quite +mainstream, please consider adding this to the `community` directory under a +folder that best suits where it belongs. + +The rules in your specialized template should be specific to the framework or +tool, and any additional templates should be mentioned in a comment in the +header of the template. + +For example, this template might live at `community/DotNet/InforCRM.gitignore`: + +``` +# gitignore template for InforCRM (formerly SalesLogix) +# website: https://www.infor.com/product-summary/cx/infor-crm/ +# +# Recommended: VisualStudio.gitignore + +# Ignore model files that are auto-generated +ModelIndex.xml +ExportedFiles.xml + +# Ignore deployment files +[Mm]odel/[Dd]eployment + +# Force include portal SupportFiles +!Model/Portal/*/SupportFiles/[Bb]in/ +!Model/Portal/PortalTemplates/*/SupportFiles/[Bb]in +``` + +## Contributing workflow + +Here’s how we suggest you go about proposing a change to this project: + +1. [Fork this project][fork] to your account. +2. [Create a branch][branch] for the change you intend to make. +3. Make your changes to your fork. +4. [Send a pull request][pr] from your fork’s branch to our `main` branch. + +Using the web-based interface to make changes is fine too, and will help you +by automatically forking the project and prompting to send a pull request too. + +[fork]: https://help.github.com/articles/fork-a-repo/ +[branch]: https://help.github.com/articles/creating-and-deleting-branches-within-your-repository +[pr]: https://help.github.com/articles/using-pull-requests/ + +## License + +[CC0-1.0](./LICENSE). diff --git a/templates/ROS.gitignore b/templates/ROS.gitignore new file mode 100644 index 0000000..35d74bb --- /dev/null +++ b/templates/ROS.gitignore @@ -0,0 +1,51 @@ +devel/ +logs/ +build/ +bin/ +lib/ +msg_gen/ +srv_gen/ +msg/*Action.msg +msg/*ActionFeedback.msg +msg/*ActionGoal.msg +msg/*ActionResult.msg +msg/*Feedback.msg +msg/*Goal.msg +msg/*Result.msg +msg/_*.py +build_isolated/ +devel_isolated/ + +# Generated by dynamic reconfigure +*.cfgc +/cfg/cpp/ +/cfg/*.py + +# Ignore generated docs +*.dox +*.wikidoc + +# eclipse stuff +.project +.cproject + +# qcreator stuff +CMakeLists.txt.user + +srv/_*.py +*.pcd +*.pyc +qtcreator-* +*.user + +/planning/cfg +/planning/docs +/planning/src + +*~ + +# Emacs +.#* + +# Catkin custom files +CATKIN_IGNORE diff --git a/templates/Racket.gitignore b/templates/Racket.gitignore new file mode 100644 index 0000000..93e4072 --- /dev/null +++ b/templates/Racket.gitignore @@ -0,0 +1,7 @@ +.DS_Store +compiled/ +/doc/ +*~ +*.bak +\#* +.\#* diff --git a/templates/Rails.gitignore b/templates/Rails.gitignore new file mode 100644 index 0000000..c55bb71 --- /dev/null +++ b/templates/Rails.gitignore @@ -0,0 +1,69 @@ +*.rbc +capybara-*.html +.rspec +/db/*.sqlite3 +/db/*.sqlite3-journal +/db/*.sqlite3-[0-9]* +/public/system +/coverage/ +/spec/tmp +*.orig +rerun.txt +pickle-email-*.html + +# Ignore all logfiles and tempfiles. +/log/* +/tmp/* +!/log/.keep +!/tmp/.keep + +# TODO Comment out this rule if you are OK with secrets being uploaded to the repo +config/initializers/secret_token.rb +config/master.key + +# Only include if you have production secrets in this file, which is no longer a Rails default +# config/secrets.yml + +# dotenv, dotenv-rails +# TODO Comment out these rules if environment variables can be committed +.env +.env*.local + +## Environment normalization: +/.bundle +/vendor/bundle + +# these should all be checked in to normalize the environment: +# Gemfile.lock, .ruby-version, .ruby-gemset + +# unless supporting rvm < 1.11.0 or doing something fancy, ignore this: +.rvmrc + +# if using bower-rails ignore default bower_components path bower.json files +/vendor/assets/bower_components +*.bowerrc +bower.json + +# Ignore pow environment settings +.powenv + +# Ignore Byebug command history file. +.byebug_history + +# Ignore node_modules +node_modules/ + +# Ignore precompiled javascript packs +/public/packs +/public/packs-test +/public/assets + +# Ignore yarn files +/yarn-error.log +yarn-debug.log* +.yarn-integrity + +# Ignore uploaded files in development +/storage/* +!/storage/.keep +/public/uploads diff --git a/templates/Raku.gitignore b/templates/Raku.gitignore new file mode 100644 index 0000000..e792f6e --- /dev/null +++ b/templates/Raku.gitignore @@ -0,0 +1,7 @@ +# Gitignore for Raku (https://raku.org) +# As part of https://github.com/github/gitignore + +# precompiled files +.precomp +lib/.precomp + diff --git a/templates/RhodesRhomobile.gitignore b/templates/RhodesRhomobile.gitignore new file mode 100644 index 0000000..a211dcc --- /dev/null +++ b/templates/RhodesRhomobile.gitignore @@ -0,0 +1,9 @@ +rholog-* +sim-* +bin/libs +bin/RhoBundle +bin/tmp +bin/target +bin/*.ap_ +*.o +*.jar diff --git a/templates/Ruby.gitignore b/templates/Ruby.gitignore new file mode 100644 index 0000000..e3200e0 --- /dev/null +++ b/templates/Ruby.gitignore @@ -0,0 +1,56 @@ +*.gem +*.rbc +/.config +/coverage/ +/InstalledFiles +/pkg/ +/spec/reports/ +/spec/examples.txt +/test/tmp/ +/test/version_tmp/ +/tmp/ + +# Used by dotenv library to load environment variables. +# .env + +# Ignore Byebug command history file. +.byebug_history + +## Specific to RubyMotion: +.dat* +.repl_history +build/ +*.bridgesupport +build-iPhoneOS/ +build-iPhoneSimulator/ + +## Specific to RubyMotion (use of CocoaPods): +# +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# +# vendor/Pods/ + +## Documentation cache and generated files: +/.yardoc/ +/_yardoc/ +/doc/ +/rdoc/ + +## Environment normalization: +/.bundle/ +/vendor/bundle +/lib/bundler/man/ + +# for a library or gem, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# Gemfile.lock +# .ruby-version +# .ruby-gemset + +# unless supporting rvm < 1.11.0 or doing something fancy, ignore this: +.rvmrc + +# Used by RuboCop. Remote config files pulled in from inherit_from directive. +# .rubocop-https?--* diff --git a/templates/Rust.gitignore b/templates/Rust.gitignore new file mode 100644 index 0000000..d01bd1a --- /dev/null +++ b/templates/Rust.gitignore @@ -0,0 +1,21 @@ +# Generated by Cargo +# will have compiled files and executables +debug/ +target/ + +# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries +# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html +Cargo.lock + +# These are backup files generated by rustfmt +**/*.rs.bk + +# MSVC Windows builds of rustc generate these, which store debugging information +*.pdb + +# RustRover +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ \ No newline at end of file diff --git a/templates/SCons.gitignore b/templates/SCons.gitignore new file mode 100644 index 0000000..84eee81 --- /dev/null +++ b/templates/SCons.gitignore @@ -0,0 +1,6 @@ +# for projects that use SCons for building: http://http://www.scons.org/ +.sconsign.dblite + +# When configure fails, SCons outputs these +config.log +.sconf_temp diff --git a/templates/Sass.gitignore b/templates/Sass.gitignore new file mode 100644 index 0000000..159f515 --- /dev/null +++ b/templates/Sass.gitignore @@ -0,0 +1,4 @@ +.sass-cache/ +*.css.map +*.sass.map +*.scss.map diff --git a/templates/Scala.gitignore b/templates/Scala.gitignore new file mode 100644 index 0000000..7169cab --- /dev/null +++ b/templates/Scala.gitignore @@ -0,0 +1,5 @@ +*.class +*.log + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* diff --git a/templates/Scheme.gitignore b/templates/Scheme.gitignore new file mode 100644 index 0000000..cbb89d7 --- /dev/null +++ b/templates/Scheme.gitignore @@ -0,0 +1,7 @@ +*.ss~ +*.ss#* +.#*.ss + +*.scm~ +*.scm#* +.#*.scm diff --git a/templates/Scrivener.gitignore b/templates/Scrivener.gitignore new file mode 100644 index 0000000..5884b0c --- /dev/null +++ b/templates/Scrivener.gitignore @@ -0,0 +1,8 @@ +*/Files/binder.autosave +*/Files/binder.backup +*/Files/search.indexes +*/Files/user.lock +*/Files/Docs/docs.checksum +*/Files/Data/docs.checksum +*/QuickLook/ +*/Settings/ui.plist diff --git a/templates/Sdcc.gitignore b/templates/Sdcc.gitignore new file mode 100644 index 0000000..07ee7d5 --- /dev/null +++ b/templates/Sdcc.gitignore @@ -0,0 +1,8 @@ +# SDCC stuff +*.lnk +*.lst +*.map +*.mem +*.rel +*.rst +*.sym diff --git a/templates/SeamGen.gitignore b/templates/SeamGen.gitignore new file mode 100644 index 0000000..a418cf3 --- /dev/null +++ b/templates/SeamGen.gitignore @@ -0,0 +1,26 @@ +/bootstrap/data +/bootstrap/tmp +/classes/ +/dist/ +/exploded-archives/ +/test-build/ +/test-output/ +/test-report/ +/target/ +temp-testng-customsuite.xml + +# based on http://stackoverflow.com/a/8865858/422476 I am removing inline comments + +#/classes/ all class files +#/dist/ contains generated war files for deployment +#/exploded-archives/ war content generation during deploy (or explode) +#/test-build/ test compilation (ant target for Seam) +#/test-output/ test results +#/test-report/ test report generation for, e.g., Hudson +#/target/ maven output folder +#temp-testng-customsuite.xml generated when running test cases under Eclipse + +# Thanks to @VonC and @kraftan for their helpful answers on a related question +# on StackOverflow.com: +# http://stackoverflow.com/questions/4176687 +# /what-is-the-recommended-source-control-ignore-pattern-for-seam-projects diff --git a/templates/SketchUp.gitignore b/templates/SketchUp.gitignore new file mode 100644 index 0000000..5160df3 --- /dev/null +++ b/templates/SketchUp.gitignore @@ -0,0 +1 @@ +*.skb diff --git a/templates/Smalltalk.gitignore b/templates/Smalltalk.gitignore new file mode 100644 index 0000000..178d87a --- /dev/null +++ b/templates/Smalltalk.gitignore @@ -0,0 +1,31 @@ +# changes file +*.changes +*.chg + +# system image +*.image +*.img7 +*.img + +# Pharo Smalltalk Debug log file +PharoDebug.log + +# Squeak Smalltalk Debug log file +SqueakDebug.log + +# Dolphin Smalltalk source file +*.sml + +# Dolphin Smalltalk error file +*.errors + +# Monticello package cache +/package-cache + +# playground cache +/play-cache +/play-stash + +# Metacello-github cache +/github-cache +github-*.zip diff --git a/templates/Stella.gitignore b/templates/Stella.gitignore new file mode 100644 index 0000000..402a543 --- /dev/null +++ b/templates/Stella.gitignore @@ -0,0 +1,12 @@ +# Atari 2600 (Stella) support for multiple assemblers +# - DASM +# - CC65 + +# Assembled binaries and object directories +obj/ +a.out +*.bin +*.a26 + +# Add in special Atari 7800-based binaries for good measure +*.a78 diff --git a/templates/SugarCRM.gitignore b/templates/SugarCRM.gitignore new file mode 100644 index 0000000..6a183d1 --- /dev/null +++ b/templates/SugarCRM.gitignore @@ -0,0 +1,27 @@ +## SugarCRM +# Ignore custom .htaccess stuff. +/.htaccess +# Ignore the cache directory completely. +# This will break the current behaviour. Which was often leading to +# the misuse of the repository as backup replacement. +# For development the cache directory can be safely ignored and +# therefore it is ignored. +/cache/* +!/cache/index.html +# Ignore some files and directories from the custom directory. +/custom/history/ +/custom/modulebuilder/ +/custom/working/ +/custom/modules/*/Ext/ +/custom/application/Ext/ +# Custom configuration should also be ignored. +/config.php +/config_override.php +# The silent upgrade scripts aren't needed. +/silentUpgrade*.php +# Logs files can safely be ignored. +*.log +# Ignore the new upload directories. +/upload/* +!/upload/index.html +/upload_backup/ diff --git a/templates/Swift.gitignore b/templates/Swift.gitignore new file mode 100644 index 0000000..52fe2f7 --- /dev/null +++ b/templates/Swift.gitignore @@ -0,0 +1,62 @@ +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## User settings +xcuserdata/ + +## Obj-C/Swift specific +*.hmap + +## App packaging +*.ipa +*.dSYM.zip +*.dSYM + +## Playgrounds +timeline.xctimeline +playground.xcworkspace + +# Swift Package Manager +# +# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. +# Packages/ +# Package.pins +# Package.resolved +# *.xcodeproj +# +# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata +# hence it is not needed unless you have added a package configuration file to your project +# .swiftpm + +.build/ + +# CocoaPods +# +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# +# Pods/ +# +# Add this line if you want to avoid checking in source code from the Xcode workspace +# *.xcworkspace + +# Carthage +# +# Add this line if you want to avoid checking in source code from Carthage dependencies. +# Carthage/Checkouts + +Carthage/Build/ + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. +# Instead, use fastlane to re-generate the screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/#source-control + +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots/**/*.png +fastlane/test_output diff --git a/templates/Symfony.gitignore b/templates/Symfony.gitignore new file mode 100644 index 0000000..3dab634 --- /dev/null +++ b/templates/Symfony.gitignore @@ -0,0 +1,52 @@ +# Cache and logs (Symfony2) +/app/cache/* +/app/logs/* +!app/cache/.gitkeep +!app/logs/.gitkeep + +# Email spool folder +/app/spool/* + +# Cache, session files and logs (Symfony3) +/var/cache/* +/var/logs/* +/var/sessions/* +!var/cache/.gitkeep +!var/logs/.gitkeep +!var/sessions/.gitkeep + +# Logs (Symfony4) +/var/log/* +!var/log/.gitkeep + +# Parameters +/app/config/parameters.yml +/app/config/parameters.ini + +# Managed by Composer +/app/bootstrap.php.cache +/var/bootstrap.php.cache +/bin/* +!bin/console +!bin/symfony_requirements +/vendor/ + +# Assets and user uploads +/web/bundles/ +/web/uploads/ + +# PHPUnit +/app/phpunit.xml +/phpunit.xml + +# Build data +/build/ + +# Composer PHAR +/composer.phar + +# Backup entities generated with doctrine:generate:entities command +**/Entity/*~ + +# Embedded web-server pid file +/.web-server-pid diff --git a/templates/SymphonyCMS.gitignore b/templates/SymphonyCMS.gitignore new file mode 100644 index 0000000..671c7ff --- /dev/null +++ b/templates/SymphonyCMS.gitignore @@ -0,0 +1,6 @@ +manifest/cache/ +manifest/logs/ +manifest/tmp/ +symphony/ +workspace/uploads/ +install-log.txt diff --git a/templates/TeX.gitignore b/templates/TeX.gitignore new file mode 100644 index 0000000..a1f5212 --- /dev/null +++ b/templates/TeX.gitignore @@ -0,0 +1,306 @@ +## Core latex/pdflatex auxiliary files: +*.aux +*.lof +*.log +*.lot +*.fls +*.out +*.toc +*.fmt +*.fot +*.cb +*.cb2 +.*.lb + +## Intermediate documents: +*.dvi +*.xdv +*-converted-to.* +# these rules might exclude image files for figures etc. +# *.ps +# *.eps +# *.pdf + +## Generated if empty string is given at "Please type another file name for output:" +.pdf + +## Bibliography auxiliary files (bibtex/biblatex/biber): +*.bbl +*.bcf +*.blg +*-blx.aux +*-blx.bib +*.run.xml + +## Build tool auxiliary files: +*.fdb_latexmk +*.synctex +*.synctex(busy) +*.synctex.gz +*.synctex.gz(busy) +*.pdfsync +*.rubbercache +rubber.cache + +## Build tool directories for auxiliary files +# latexrun +latex.out/ + +## Auxiliary and intermediate files from other packages: +# algorithms +*.alg +*.loa + +# achemso +acs-*.bib + +# amsthm +*.thm + +# beamer +*.nav +*.pre +*.snm +*.vrb + +# changes +*.soc + +# comment +*.cut + +# cprotect +*.cpt + +# elsarticle (documentclass of Elsevier journals) +*.spl + +# endnotes +*.ent + +# fixme +*.lox + +# feynmf/feynmp +*.mf +*.mp +*.t[1-9] +*.t[1-9][0-9] +*.tfm + +#(r)(e)ledmac/(r)(e)ledpar +*.end +*.?end +*.[1-9] +*.[1-9][0-9] +*.[1-9][0-9][0-9] +*.[1-9]R +*.[1-9][0-9]R +*.[1-9][0-9][0-9]R +*.eledsec[1-9] +*.eledsec[1-9]R +*.eledsec[1-9][0-9] +*.eledsec[1-9][0-9]R +*.eledsec[1-9][0-9][0-9] +*.eledsec[1-9][0-9][0-9]R + +# glossaries +*.acn +*.acr +*.glg +*.glo +*.gls +*.glsdefs +*.lzo +*.lzs +*.slg +*.slo +*.sls + +# uncomment this for glossaries-extra (will ignore makeindex's style files!) +# *.ist + +# gnuplot +*.gnuplot +*.table + +# gnuplottex +*-gnuplottex-* + +# gregoriotex +*.gaux +*.glog +*.gtex + +# htlatex +*.4ct +*.4tc +*.idv +*.lg +*.trc +*.xref + +# hypdoc +*.hd + +# hyperref +*.brf + +# knitr +*-concordance.tex +# TODO Uncomment the next line if you use knitr and want to ignore its generated tikz files +# *.tikz +*-tikzDictionary + +# listings +*.lol + +# luatexja-ruby +*.ltjruby + +# makeidx +*.idx +*.ilg +*.ind + +# minitoc +*.maf +*.mlf +*.mlt +*.mtc[0-9]* +*.slf[0-9]* +*.slt[0-9]* +*.stc[0-9]* + +# minted +_minted* +*.pyg + +# morewrites +*.mw + +# newpax +*.newpax + +# nomencl +*.nlg +*.nlo +*.nls + +# pax +*.pax + +# pdfpcnotes +*.pdfpc + +# sagetex +*.sagetex.sage +*.sagetex.py +*.sagetex.scmd + +# scrwfile +*.wrt + +# svg +svg-inkscape/ + +# sympy +*.sout +*.sympy +sympy-plots-for-*.tex/ + +# pdfcomment +*.upa +*.upb + +# pythontex +*.pytxcode +pythontex-files-*/ + +# tcolorbox +*.listing + +# thmtools +*.loe + +# TikZ & PGF +*.dpth +*.md5 +*.auxlock + +# titletoc +*.ptc + +# todonotes +*.tdo + +# vhistory +*.hst +*.ver + +# easy-todo +*.lod + +# xcolor +*.xcp + +# xmpincl +*.xmpi + +# xindy +*.xdy + +# xypic precompiled matrices and outlines +*.xyc +*.xyd + +# endfloat +*.ttt +*.fff + +# Latexian +TSWLatexianTemp* + +## Editors: +# WinEdt +*.bak +*.sav + +# Texpad +.texpadtmp + +# LyX +*.lyx~ + +# Kile +*.backup + +# gummi +.*.swp + +# KBibTeX +*~[0-9]* + +# TeXnicCenter +*.tps + +# auto folder when using emacs and auctex +./auto/* +*.el + +# expex forward references with \gathertags +*-tags.tex + +# standalone packages +*.sta + +# Makeindex log files +*.lpz + +# xwatermark package +*.xwm + +# REVTeX puts footnotes in the bibliography by default, unless the nofootinbib +# option is specified. Footnotes are the stored in a file with suffix Notes.bib. +# Uncomment the next line to have this generated file ignored. +#*Notes.bib diff --git a/templates/Terraform.gitignore b/templates/Terraform.gitignore new file mode 100644 index 0000000..2faf43d --- /dev/null +++ b/templates/Terraform.gitignore @@ -0,0 +1,37 @@ +# Local .terraform directories +**/.terraform/* + +# .tfstate files +*.tfstate +*.tfstate.* + +# Crash log files +crash.log +crash.*.log + +# Exclude all .tfvars files, which are likely to contain sensitive data, such as +# password, private keys, and other secrets. These should not be part of version +# control as they are data points which are potentially sensitive and subject +# to change depending on the environment. +*.tfvars +*.tfvars.json + +# Ignore override files as they are usually used to override resources locally and so +# are not checked in +override.tf +override.tf.json +*_override.tf +*_override.tf.json + +# Ignore transient lock info files created by terraform apply +.terraform.tfstate.lock.info + +# Include override files you do wish to add to version control using negated pattern +# !example_override.tf + +# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan +# example: *tfplan* + +# Ignore CLI configuration files +.terraformrc +terraform.rc diff --git a/templates/Textpattern.gitignore b/templates/Textpattern.gitignore new file mode 100644 index 0000000..3805636 --- /dev/null +++ b/templates/Textpattern.gitignore @@ -0,0 +1,11 @@ +.htaccess +css.php +rpc/ +sites/site*/admin/ +sites/site*/private/ +sites/site*/public/admin/ +sites/site*/public/setup/ +sites/site*/public/theme/ +textpattern/ +HISTORY.txt +README.txt diff --git a/templates/TurboGears2.gitignore b/templates/TurboGears2.gitignore new file mode 100644 index 0000000..122b3de --- /dev/null +++ b/templates/TurboGears2.gitignore @@ -0,0 +1,20 @@ +*.py[co] + +# Default development database +devdata.db + +# Default data directory +data/* + +# Packages +*.egg +*.egg-info +dist +build + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox diff --git a/templates/TwinCAT3.gitignore b/templates/TwinCAT3.gitignore new file mode 100644 index 0000000..7bd6f87 --- /dev/null +++ b/templates/TwinCAT3.gitignore @@ -0,0 +1,25 @@ +# gitignore template for TwinCAT3 +# website: https://www.beckhoff.com/twincat3/ +# +# Recommended: VisualStudio.gitignore + +# TwinCAT files +*.tpy +*.tclrs +*.compiled-library +*.compileinfo +# Don't include the tmc-file rule if either of the following is true: +# 1. You've got TwinCAT C++ projects, as the information in the TMC-file is created manually for the C++ projects (in that case, only (manually) ignore the tmc-files for the PLC projects) +# 2. You've created a standalone PLC-project and added events to it, as these are stored in the TMC-file. +*.tmc +*.tmcRefac +*.library +*.project.~u +*.tsproj.bak +*.xti.bak +LineIDs.dbg +LineIDs.dbg.bak +_Boot/ +_CompileInfo/ +_Libraries/ +_ModuleInstall/ \ No newline at end of file diff --git a/templates/Typo3.gitignore b/templates/Typo3.gitignore new file mode 100644 index 0000000..200c2a2 --- /dev/null +++ b/templates/Typo3.gitignore @@ -0,0 +1,23 @@ +## TYPO3 v6.2 +# Ignore several upload and file directories. +/fileadmin/user_upload/ +/fileadmin/_temp_/ +/fileadmin/_processed_/ +/uploads/ +# Ignore cache +/typo3conf/temp_CACHED* +/typo3conf/temp_fieldInfo.php +/typo3conf/deprecation_*.log +/typo3conf/ENABLE_INSTALL_TOOL +/typo3conf/realurl_autoconf.php +/FIRST_INSTALL +# Ignore system folders, you should have them symlinked. +# If not comment out the following entries. +/typo3 +/typo3_src +/typo3_src-* +/Packages +/.htaccess +/index.php +# Ignore temp directory. +/typo3temp/ diff --git a/templates/Unity.gitignore b/templates/Unity.gitignore new file mode 100644 index 0000000..58cbc82 --- /dev/null +++ b/templates/Unity.gitignore @@ -0,0 +1,72 @@ +# This .gitignore file should be placed at the root of your Unity project directory +# +# Get latest from https://github.com/github/gitignore/blob/main/Unity.gitignore +# +/[Ll]ibrary/ +/[Tt]emp/ +/[Oo]bj/ +/[Bb]uild/ +/[Bb]uilds/ +/[Ll]ogs/ +/[Uu]ser[Ss]ettings/ + +# MemoryCaptures can get excessive in size. +# They also could contain extremely sensitive data +/[Mm]emoryCaptures/ + +# Recordings can get excessive in size +/[Rr]ecordings/ + +# Uncomment this line if you wish to ignore the asset store tools plugin +# /[Aa]ssets/AssetStoreTools* + +# Autogenerated Jetbrains Rider plugin +/[Aa]ssets/Plugins/Editor/JetBrains* + +# Visual Studio cache directory +.vs/ + +# Gradle cache directory +.gradle/ + +# Autogenerated VS/MD/Consulo solution and project files +ExportedObj/ +.consulo/ +*.csproj +*.unityproj +*.sln +*.suo +*.tmp +*.user +*.userprefs +*.pidb +*.booproj +*.svd +*.pdb +*.mdb +*.opendb +*.VC.db + +# Unity3D generated meta files +*.pidb.meta +*.pdb.meta +*.mdb.meta + +# Unity3D generated file on crash reports +sysinfo.txt + +# Builds +*.apk +*.aab +*.unitypackage +*.app + +# Crashlytics generated file +crashlytics-build.properties + +# Packed Addressables +/[Aa]ssets/[Aa]ddressable[Aa]ssets[Dd]ata/*/*.bin* + +# Temporary auto-generated Android Assets +/[Aa]ssets/[Ss]treamingAssets/aa.meta +/[Aa]ssets/[Ss]treamingAssets/aa/* diff --git a/templates/UnrealEngine.gitignore b/templates/UnrealEngine.gitignore new file mode 100644 index 0000000..6e0d95f --- /dev/null +++ b/templates/UnrealEngine.gitignore @@ -0,0 +1,74 @@ +# Visual Studio 2015 user specific files +.vs/ + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app +*.ipa + +# These project files can be generated by the engine +*.xcodeproj +*.xcworkspace +*.sln +*.suo +*.opensdf +*.sdf +*.VC.db +*.VC.opendb + +# Precompiled Assets +SourceArt/**/*.png +SourceArt/**/*.tga + +# Binary Files +Binaries/* +Plugins/**/Binaries/* + +# Builds +Build/* + +# Whitelist PakBlacklist-.txt files +!Build/*/ +Build/*/** +!Build/*/PakBlacklist*.txt + +# Don't ignore icon files in Build +!Build/**/*.ico + +# Built data for maps +*_BuiltData.uasset + +# Configuration files generated by the Editor +Saved/* + +# Compiled source files for the engine to use +Intermediate/* +Plugins/**/Intermediate/* + +# Cache files for the editor to use +DerivedDataCache/* diff --git a/templates/VVVV.gitignore b/templates/VVVV.gitignore new file mode 100644 index 0000000..5df4324 --- /dev/null +++ b/templates/VVVV.gitignore @@ -0,0 +1,6 @@ + +# .v4p backup files +*~.xml + +# Dynamic plugins .dll +bin/ diff --git a/templates/VisualStudio.gitignore b/templates/VisualStudio.gitignore new file mode 100644 index 0000000..8a30d25 --- /dev/null +++ b/templates/VisualStudio.gitignore @@ -0,0 +1,398 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files +*.ncb +*.aps + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml diff --git a/templates/Waf.gitignore b/templates/Waf.gitignore new file mode 100644 index 0000000..dad2b56 --- /dev/null +++ b/templates/Waf.gitignore @@ -0,0 +1,9 @@ +# For projects that use the Waf build system: https://waf.io/ +# Dot-hidden on Unix-like systems +.waf-*-*/ +.waf3-*-*/ +# Hidden directory on Windows (no dot) +waf-*-*/ +waf3-*-*/ +# Lockfile +.lock-waf_*_build diff --git a/templates/WordPress.gitignore b/templates/WordPress.gitignore new file mode 100644 index 0000000..5469669 --- /dev/null +++ b/templates/WordPress.gitignore @@ -0,0 +1,48 @@ +# Wordpress - ignore core, configuration, examples, uploads and logs. +# https://github.com/github/gitignore/blob/main/WordPress.gitignore + +# Core +# +# Note: if you want to stage/commit WP core files +# you can delete this whole section/until Configuration. +/wp-admin/ +/wp-content/index.php +/wp-content/languages +/wp-content/plugins/index.php +/wp-content/themes/index.php +/wp-includes/ +/index.php +/license.txt +/readme.html +/wp-*.php +/xmlrpc.php + +# Configuration +wp-config.php + +# Example themes +/wp-content/themes/twenty*/ + +# Example plugin +/wp-content/plugins/hello.php + +# Uploads +/wp-content/uploads/ + +# Log files +*.log + +# htaccess +/.htaccess + +# All plugins +# +# Note: If you wish to whitelist plugins, +# uncomment the next line +#/wp-content/plugins + +# All themes +# +# Note: If you wish to whitelist themes, +# uncomment the next line +#/wp-content/themes \ No newline at end of file diff --git a/templates/Xojo.gitignore b/templates/Xojo.gitignore new file mode 100644 index 0000000..4915783 --- /dev/null +++ b/templates/Xojo.gitignore @@ -0,0 +1,11 @@ +# Xojo (formerly REALbasic and Real Studio) + +Builds* +*.debug +*.debug.app +Debug*.exe +Debug*/Debug*.exe +Debug*/Debug*\ Libs +*.rbuistate +*.xojo_uistate +*.obsolete* diff --git a/templates/Yeoman.gitignore b/templates/Yeoman.gitignore new file mode 100644 index 0000000..7170d72 --- /dev/null +++ b/templates/Yeoman.gitignore @@ -0,0 +1,6 @@ +node_modules/ +bower_components/ +*.log + +build/ +dist/ diff --git a/templates/Yii.gitignore b/templates/Yii.gitignore new file mode 100644 index 0000000..70f0875 --- /dev/null +++ b/templates/Yii.gitignore @@ -0,0 +1,6 @@ +assets/* +!assets/.gitignore +protected/runtime/* +!protected/runtime/.gitignore +protected/data/*.db +themes/classic/views/ diff --git a/templates/ZendFramework.gitignore b/templates/ZendFramework.gitignore new file mode 100644 index 0000000..f0b7d85 --- /dev/null +++ b/templates/ZendFramework.gitignore @@ -0,0 +1,24 @@ +# Composer files +composer.phar +vendor/ + +# Local configs +config/autoload/*.local.php + +# Binary gettext files +*.mo + +# Data +data/logs/ +data/cache/ +data/sessions/ +data/tmp/ +temp/ + +#Doctrine 2 +data/DoctrineORMModule/Proxy/ +data/DoctrineORMModule/cache/ + +# Legacy ZF1 +demos/ +extras/documentation diff --git a/templates/Zephir.gitignore b/templates/Zephir.gitignore new file mode 100644 index 0000000..839cb5d --- /dev/null +++ b/templates/Zephir.gitignore @@ -0,0 +1,26 @@ +# Cache files, generates by Zephir +.temp/ +.libs/ + +# Object files, generates by linker +*.lo +*.la +*.o +*.loT + +# Files generated by configure and Zephir, +# not required for extension compilation. +ext/build/ +ext/modules/ +ext/Makefile* +ext/config* +ext/acinclude.m4 +ext/aclocal.m4 +ext/autom4te* +ext/install-sh +ext/ltmain.sh +ext/missing +ext/mkinstalldirs +ext/run-tests.php +ext/.deps +ext/libtool From 002843c757307145621651ff50111c2aa2efd985 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Fri, 21 Jun 2024 17:39:18 -0600 Subject: [PATCH 045/108] refactor: Removed Global templates --- templates/Global/AL.gitignore | 11 --- templates/Global/Anjuta.gitignore | 3 - templates/Global/Ansible.gitignore | 1 - templates/Global/Archives.gitignore | 34 --------- templates/Global/Backup.gitignore | 5 -- templates/Global/Bazaar.gitignore | 2 - templates/Global/BricxCC.gitignore | 4 -- templates/Global/CVS.gitignore | 4 -- templates/Global/Calabash.gitignore | 10 --- templates/Global/Cloud9.gitignore | 3 - templates/Global/CodeKit.gitignore | 4 -- templates/Global/DartEditor.gitignore | 2 - templates/Global/Diff.gitignore | 2 - templates/Global/Dreamweaver.gitignore | 7 -- templates/Global/Dropbox.gitignore | 4 -- templates/Global/Eclipse.gitignore | 60 ---------------- templates/Global/EiffelStudio.gitignore | 2 - templates/Global/Emacs.gitignore | 49 ------------- templates/Global/Ensime.gitignore | 4 -- templates/Global/Espresso.gitignore | 1 - templates/Global/FlexBuilder.gitignore | 3 - templates/Global/GPG.gitignore | 2 - templates/Global/Images.gitignore | 63 ----------------- templates/Global/JDeveloper.gitignore | 13 ---- templates/Global/JEnv.gitignore | 5 -- templates/Global/JetBrains.gitignore | 77 --------------------- templates/Global/KDevelop4.gitignore | 2 - templates/Global/Kate.gitignore | 3 - templates/Global/Lazarus.gitignore | 30 -------- templates/Global/LibreOffice.gitignore | 2 - templates/Global/Linux.gitignore | 13 ---- templates/Global/LyX.gitignore | 4 -- templates/Global/MATLAB.gitignore | 31 --------- templates/Global/Mercurial.gitignore | 6 -- templates/Global/Metals.gitignore | 5 -- templates/Global/MicrosoftOffice.gitignore | 19 ----- templates/Global/ModelSim.gitignore | 23 ------ templates/Global/Momentics.gitignore | 8 --- templates/Global/MonoDevelop.gitignore | 8 --- templates/Global/NetBeans.gitignore | 8 --- templates/Global/Ninja.gitignore | 2 - templates/Global/NotepadPP.gitignore | 2 - templates/Global/Octave.gitignore | 1 - templates/Global/Otto.gitignore | 1 - templates/Global/PSoCCreator.gitignore | 18 ----- templates/Global/Patch.gitignore | 2 - templates/Global/PuTTY.gitignore | 2 - templates/Global/README.md | 10 --- templates/Global/Redcar.gitignore | 1 - templates/Global/Redis.gitignore | 3 - templates/Global/SBT.gitignore | 12 ---- templates/Global/SVN.gitignore | 1 - templates/Global/SlickEdit.gitignore | 11 --- templates/Global/Stata.gitignore | 24 ------- templates/Global/SublimeText.gitignore | 31 --------- templates/Global/Syncthing.gitignore | 2 - templates/Global/SynopsysVCS.gitignore | 36 ---------- templates/Global/Tags.gitignore | 17 ----- templates/Global/TextMate.gitignore | 3 - templates/Global/TortoiseGit.gitignore | 2 - templates/Global/Vagrant.gitignore | 5 -- templates/Global/Vim.gitignore | 19 ----- templates/Global/VirtualEnv.gitignore | 12 ---- templates/Global/Virtuoso.gitignore | 18 ----- templates/Global/VisualStudioCode.gitignore | 12 ---- templates/Global/WebMethods.gitignore | 14 ---- templates/Global/Windows.gitignore | 24 ------- templates/Global/Xcode.gitignore | 2 - templates/Global/XilinxISE.gitignore | 67 ------------------ templates/Global/macOS.gitignore | 26 ------- 70 files changed, 917 deletions(-) delete mode 100644 templates/Global/AL.gitignore delete mode 100644 templates/Global/Anjuta.gitignore delete mode 100644 templates/Global/Ansible.gitignore delete mode 100644 templates/Global/Archives.gitignore delete mode 100644 templates/Global/Backup.gitignore delete mode 100644 templates/Global/Bazaar.gitignore delete mode 100644 templates/Global/BricxCC.gitignore delete mode 100644 templates/Global/CVS.gitignore delete mode 100644 templates/Global/Calabash.gitignore delete mode 100644 templates/Global/Cloud9.gitignore delete mode 100644 templates/Global/CodeKit.gitignore delete mode 100644 templates/Global/DartEditor.gitignore delete mode 100644 templates/Global/Diff.gitignore delete mode 100644 templates/Global/Dreamweaver.gitignore delete mode 100644 templates/Global/Dropbox.gitignore delete mode 100644 templates/Global/Eclipse.gitignore delete mode 100644 templates/Global/EiffelStudio.gitignore delete mode 100644 templates/Global/Emacs.gitignore delete mode 100644 templates/Global/Ensime.gitignore delete mode 100644 templates/Global/Espresso.gitignore delete mode 100644 templates/Global/FlexBuilder.gitignore delete mode 100644 templates/Global/GPG.gitignore delete mode 100644 templates/Global/Images.gitignore delete mode 100644 templates/Global/JDeveloper.gitignore delete mode 100644 templates/Global/JEnv.gitignore delete mode 100644 templates/Global/JetBrains.gitignore delete mode 100644 templates/Global/KDevelop4.gitignore delete mode 100644 templates/Global/Kate.gitignore delete mode 100644 templates/Global/Lazarus.gitignore delete mode 100644 templates/Global/LibreOffice.gitignore delete mode 100644 templates/Global/Linux.gitignore delete mode 100644 templates/Global/LyX.gitignore delete mode 100644 templates/Global/MATLAB.gitignore delete mode 100644 templates/Global/Mercurial.gitignore delete mode 100644 templates/Global/Metals.gitignore delete mode 100644 templates/Global/MicrosoftOffice.gitignore delete mode 100644 templates/Global/ModelSim.gitignore delete mode 100644 templates/Global/Momentics.gitignore delete mode 100644 templates/Global/MonoDevelop.gitignore delete mode 100644 templates/Global/NetBeans.gitignore delete mode 100644 templates/Global/Ninja.gitignore delete mode 100644 templates/Global/NotepadPP.gitignore delete mode 100644 templates/Global/Octave.gitignore delete mode 100644 templates/Global/Otto.gitignore delete mode 100644 templates/Global/PSoCCreator.gitignore delete mode 100644 templates/Global/Patch.gitignore delete mode 100644 templates/Global/PuTTY.gitignore delete mode 100644 templates/Global/README.md delete mode 100644 templates/Global/Redcar.gitignore delete mode 100644 templates/Global/Redis.gitignore delete mode 100644 templates/Global/SBT.gitignore delete mode 100644 templates/Global/SVN.gitignore delete mode 100644 templates/Global/SlickEdit.gitignore delete mode 100644 templates/Global/Stata.gitignore delete mode 100644 templates/Global/SublimeText.gitignore delete mode 100644 templates/Global/Syncthing.gitignore delete mode 100644 templates/Global/SynopsysVCS.gitignore delete mode 100644 templates/Global/Tags.gitignore delete mode 100644 templates/Global/TextMate.gitignore delete mode 100644 templates/Global/TortoiseGit.gitignore delete mode 100644 templates/Global/Vagrant.gitignore delete mode 100644 templates/Global/Vim.gitignore delete mode 100644 templates/Global/VirtualEnv.gitignore delete mode 100644 templates/Global/Virtuoso.gitignore delete mode 100644 templates/Global/VisualStudioCode.gitignore delete mode 100644 templates/Global/WebMethods.gitignore delete mode 100644 templates/Global/Windows.gitignore delete mode 100644 templates/Global/Xcode.gitignore delete mode 100644 templates/Global/XilinxISE.gitignore delete mode 100644 templates/Global/macOS.gitignore diff --git a/templates/Global/AL.gitignore b/templates/Global/AL.gitignore deleted file mode 100644 index 3cdf36b..0000000 --- a/templates/Global/AL.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -*.code-workspace - -# Local History for Visual Studio Code -.history/ -*.app -.snapshots/* diff --git a/templates/Global/Anjuta.gitignore b/templates/Global/Anjuta.gitignore deleted file mode 100644 index 20dd42c..0000000 --- a/templates/Global/Anjuta.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Local configuration folder and symbol database -/.anjuta/ -/.anjuta_sym_db.db diff --git a/templates/Global/Ansible.gitignore b/templates/Global/Ansible.gitignore deleted file mode 100644 index a8b42eb..0000000 --- a/templates/Global/Ansible.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.retry diff --git a/templates/Global/Archives.gitignore b/templates/Global/Archives.gitignore deleted file mode 100644 index 8c92521..0000000 --- a/templates/Global/Archives.gitignore +++ /dev/null @@ -1,34 +0,0 @@ -# It's better to unpack these files and commit the raw source because -# git has its own built in compression methods. -*.7z -*.jar -*.rar -*.zip -*.gz -*.gzip -*.tgz -*.bzip -*.bzip2 -*.bz2 -*.xz -*.lzma -*.cab -*.xar -*.zst -*.tzst - -# Packing-only formats -*.iso -*.tar - -# Package management formats -*.dmg -*.xpi -*.gem -*.egg -*.deb -*.rpm -*.msi -*.msm -*.msp -*.txz diff --git a/templates/Global/Backup.gitignore b/templates/Global/Backup.gitignore deleted file mode 100644 index 825ce52..0000000 --- a/templates/Global/Backup.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -*.bak -*.gho -*.ori -*.orig -*.tmp diff --git a/templates/Global/Bazaar.gitignore b/templates/Global/Bazaar.gitignore deleted file mode 100644 index 3cbbcbd..0000000 --- a/templates/Global/Bazaar.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.bzr/ -.bzrignore diff --git a/templates/Global/BricxCC.gitignore b/templates/Global/BricxCC.gitignore deleted file mode 100644 index c1d16a4..0000000 --- a/templates/Global/BricxCC.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Bricx Command Center IDE -# http://bricxcc.sourceforge.net -*.bak -*.sym diff --git a/templates/Global/CVS.gitignore b/templates/Global/CVS.gitignore deleted file mode 100644 index 1695352..0000000 --- a/templates/Global/CVS.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -/CVS/* -**/CVS/* -.cvsignore -*/.cvsignore diff --git a/templates/Global/Calabash.gitignore b/templates/Global/Calabash.gitignore deleted file mode 100644 index 8a75b32..0000000 --- a/templates/Global/Calabash.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Calabash / Cucumber -rerun/ -reports/ -screenshots/ -screenshot*.png -test-servers/ - -# bundler -.bundle -vendor diff --git a/templates/Global/Cloud9.gitignore b/templates/Global/Cloud9.gitignore deleted file mode 100644 index 3f4384d..0000000 --- a/templates/Global/Cloud9.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Cloud9 IDE - http://c9.io -.c9revisions -.c9 diff --git a/templates/Global/CodeKit.gitignore b/templates/Global/CodeKit.gitignore deleted file mode 100644 index 09b8412..0000000 --- a/templates/Global/CodeKit.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# General CodeKit files to ignore -config.codekit -config.codekit3 -/min diff --git a/templates/Global/DartEditor.gitignore b/templates/Global/DartEditor.gitignore deleted file mode 100644 index 948920b..0000000 --- a/templates/Global/DartEditor.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.project -.buildlog diff --git a/templates/Global/Diff.gitignore b/templates/Global/Diff.gitignore deleted file mode 100644 index 59491b4..0000000 --- a/templates/Global/Diff.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.patch -*.diff diff --git a/templates/Global/Dreamweaver.gitignore b/templates/Global/Dreamweaver.gitignore deleted file mode 100644 index 0621a3d..0000000 --- a/templates/Global/Dreamweaver.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -# DW Dreamweaver added files -_notes -_compareTemp -configs/ -dwsync.xml -dw_php_codehinting.config -*.mno diff --git a/templates/Global/Dropbox.gitignore b/templates/Global/Dropbox.gitignore deleted file mode 100644 index 40f4a46..0000000 --- a/templates/Global/Dropbox.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Dropbox settings and caches -.dropbox -.dropbox.attr -.dropbox.cache diff --git a/templates/Global/Eclipse.gitignore b/templates/Global/Eclipse.gitignore deleted file mode 100644 index acec74a..0000000 --- a/templates/Global/Eclipse.gitignore +++ /dev/null @@ -1,60 +0,0 @@ -.metadata -bin/ -tmp/ -*.tmp -*.bak -*.swp -*~.nib -local.properties -.settings/ -.loadpath -.recommenders - -# External tool builders -.externalToolBuilders/ - -# Locally stored "Eclipse launch configurations" -*.launch - -# PyDev specific (Python IDE for Eclipse) -*.pydevproject - -# CDT-specific (C/C++ Development Tooling) -.cproject - -# CDT- autotools -.autotools - -# Java annotation processor (APT) -.factorypath - -# PDT-specific (PHP Development Tools) -.buildpath - -# sbteclipse plugin -.target - -# Tern plugin -.tern-project - -# TeXlipse plugin -.texlipse - -# STS (Spring Tool Suite) -.springBeans - -# Code Recommenders -.recommenders/ - -# Annotation Processing -.apt_generated/ -.apt_generated_test/ - -# Scala IDE specific (Scala & Java development for Eclipse) -.cache-main -.scala_dependencies -.worksheet - -# Uncomment this line if you wish to ignore the project description file. -# Typically, this file would be tracked if it contains build/dependency configurations: -#.project diff --git a/templates/Global/EiffelStudio.gitignore b/templates/Global/EiffelStudio.gitignore deleted file mode 100644 index f41b4f7..0000000 --- a/templates/Global/EiffelStudio.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# The compilation directory -EIFGENs diff --git a/templates/Global/Emacs.gitignore b/templates/Global/Emacs.gitignore deleted file mode 100644 index d40e865..0000000 --- a/templates/Global/Emacs.gitignore +++ /dev/null @@ -1,49 +0,0 @@ -# -*- mode: gitignore; -*- -*~ -\#*\# -/.emacs.desktop -/.emacs.desktop.lock -*.elc -auto-save-list -tramp -.\#* - -# Org-mode -.org-id-locations -*_archive - -# flymake-mode -*_flymake.* - -# eshell files -/eshell/history -/eshell/lastdir - -# elpa packages -/elpa/ - -# reftex files -*.rel - -# AUCTeX auto folder -/auto/ - -# cask packages -.cask/ -dist/ - -# Flycheck -flycheck_*.el - -# server auth directory -/server/ - -# projectiles files -.projectile - -# directory configuration -.dir-locals.el - -# network security -/network-security.data - diff --git a/templates/Global/Ensime.gitignore b/templates/Global/Ensime.gitignore deleted file mode 100644 index f2daebb..0000000 --- a/templates/Global/Ensime.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Ensime specific -.ensime -.ensime_cache/ -.ensime_lucene/ diff --git a/templates/Global/Espresso.gitignore b/templates/Global/Espresso.gitignore deleted file mode 100644 index 1234530..0000000 --- a/templates/Global/Espresso.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.esproj diff --git a/templates/Global/FlexBuilder.gitignore b/templates/Global/FlexBuilder.gitignore deleted file mode 100644 index bbbfb91..0000000 --- a/templates/Global/FlexBuilder.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -bin/ -bin-debug/ -bin-release/ diff --git a/templates/Global/GPG.gitignore b/templates/Global/GPG.gitignore deleted file mode 100644 index 7740a01..0000000 --- a/templates/Global/GPG.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -secring.* - diff --git a/templates/Global/Images.gitignore b/templates/Global/Images.gitignore deleted file mode 100644 index 97dcdbe..0000000 --- a/templates/Global/Images.gitignore +++ /dev/null @@ -1,63 +0,0 @@ -# JPEG -*.jpg -*.jpeg -*.jpe -*.jif -*.jfif -*.jfi - -# JPEG 2000 -*.jp2 -*.j2k -*.jpf -*.jpx -*.jpm -*.mj2 - -# JPEG XR -*.jxr -*.hdp -*.wdp - -# Graphics Interchange Format -*.gif - -# RAW -*.raw - -# Web P -*.webp - -# Portable Network Graphics -*.png - -# Animated Portable Network Graphics -*.apng - -# Multiple-image Network Graphics -*.mng - -# Tagged Image File Format -*.tiff -*.tif - -# Scalable Vector Graphics -*.svg -*.svgz - -# Portable Document Format -*.pdf - -# X BitMap -*.xbm - -# BMP -*.bmp -*.dib - -# ICO -*.ico - -# 3D Images -*.3dm -*.max diff --git a/templates/Global/JDeveloper.gitignore b/templates/Global/JDeveloper.gitignore deleted file mode 100644 index 5bba6f3..0000000 --- a/templates/Global/JDeveloper.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -# default application storage directory used by the IDE Performance Cache feature -.data/ - -# used for ADF styles caching -temp/ - -# default output directories -classes/ -deploy/ -javadoc/ - -# lock file, a part of Oracle Credential Store Framework -cwallet.sso.lck \ No newline at end of file diff --git a/templates/Global/JEnv.gitignore b/templates/Global/JEnv.gitignore deleted file mode 100644 index d838300..0000000 --- a/templates/Global/JEnv.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# JEnv local Java version configuration file -.java-version - -# Used by previous versions of JEnv -.jenv-version diff --git a/templates/Global/JetBrains.gitignore b/templates/Global/JetBrains.gitignore deleted file mode 100644 index 3649d6d..0000000 --- a/templates/Global/JetBrains.gitignore +++ /dev/null @@ -1,77 +0,0 @@ -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider -# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 - -# User-specific stuff -.idea/**/workspace.xml -.idea/**/tasks.xml -.idea/**/usage.statistics.xml -.idea/**/dictionaries -.idea/**/shelf - -# AWS User-specific -.idea/**/aws.xml - -# Generated files -.idea/**/contentModel.xml - -# Sensitive or high-churn files -.idea/**/dataSources/ -.idea/**/dataSources.ids -.idea/**/dataSources.local.xml -.idea/**/sqlDataSources.xml -.idea/**/dynamic.xml -.idea/**/uiDesigner.xml -.idea/**/dbnavigator.xml - -# Gradle -.idea/**/gradle.xml -.idea/**/libraries - -# Gradle and Maven with auto-import -# When using Gradle or Maven with auto-import, you should exclude module files, -# since they will be recreated, and may cause churn. Uncomment if using -# auto-import. -# .idea/artifacts -# .idea/compiler.xml -# .idea/jarRepositories.xml -# .idea/modules.xml -# .idea/*.iml -# .idea/modules -# *.iml -# *.ipr - -# CMake -cmake-build-*/ - -# Mongo Explorer plugin -.idea/**/mongoSettings.xml - -# File-based project format -*.iws - -# IntelliJ -out/ - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Cursive Clojure plugin -.idea/replstate.xml - -# SonarLint plugin -.idea/sonarlint/ - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties -fabric.properties - -# Editor-based Rest Client -.idea/httpRequests - -# Android studio 3.1+ serialized cache file -.idea/caches/build_file_checksums.ser diff --git a/templates/Global/KDevelop4.gitignore b/templates/Global/KDevelop4.gitignore deleted file mode 100644 index 7ac57b1..0000000 --- a/templates/Global/KDevelop4.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.kdev4 -.kdev4/ diff --git a/templates/Global/Kate.gitignore b/templates/Global/Kate.gitignore deleted file mode 100644 index 7ff06ce..0000000 --- a/templates/Global/Kate.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Swap Files # -.*.kate-swp -.swp.* diff --git a/templates/Global/Lazarus.gitignore b/templates/Global/Lazarus.gitignore deleted file mode 100644 index b32943f..0000000 --- a/templates/Global/Lazarus.gitignore +++ /dev/null @@ -1,30 +0,0 @@ -# Lazarus compiler-generated binaries (safe to delete) -*.exe -*.dll -*.so -*.dylib -*.lrs -*.res -*.compiled -*.dbg -*.ppu -*.o -*.or -*.a - -# Lazarus autogenerated files (duplicated info) -*.rst -*.rsj -*.lrt - -# Lazarus local files (user-specific info) -*.lps - -# Lazarus backups and unit output folders. -# These can be changed by user in Lazarus/project options. -backup/ -*.bak -lib/ - -# Application bundle for Mac OS -*.app/ diff --git a/templates/Global/LibreOffice.gitignore b/templates/Global/LibreOffice.gitignore deleted file mode 100644 index 586beac..0000000 --- a/templates/Global/LibreOffice.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# LibreOffice locks -.~lock.*# diff --git a/templates/Global/Linux.gitignore b/templates/Global/Linux.gitignore deleted file mode 100644 index b56bf65..0000000 --- a/templates/Global/Linux.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* diff --git a/templates/Global/LyX.gitignore b/templates/Global/LyX.gitignore deleted file mode 100644 index 8efe019..0000000 --- a/templates/Global/LyX.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Ignore LyX backup and autosave files -# http://www.lyx.org/ -*.lyx~ -*.lyx# diff --git a/templates/Global/MATLAB.gitignore b/templates/Global/MATLAB.gitignore deleted file mode 100644 index 01d02dd..0000000 --- a/templates/Global/MATLAB.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -# Windows default autosave extension -*.asv - -# OSX / *nix default autosave extension -*.m~ - -# Compiled MEX binaries (all platforms) -*.mex* - -# Packaged app and toolbox files -*.mlappinstall -*.mltbx - -# Generated helpsearch folders -helpsearch*/ - -# Simulink code generation folders -slprj/ -sccprj/ - -# Matlab code generation folders -codegen/ - -# Simulink autosave extension -*.autosave - -# Simulink cache files -*.slxc - -# Octave session info -octave-workspace diff --git a/templates/Global/Mercurial.gitignore b/templates/Global/Mercurial.gitignore deleted file mode 100644 index e65d113..0000000 --- a/templates/Global/Mercurial.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -.hg/ -.hgignore -.hgsigs -.hgsub -.hgsubstate -.hgtags diff --git a/templates/Global/Metals.gitignore b/templates/Global/Metals.gitignore deleted file mode 100644 index 516e7e3..0000000 --- a/templates/Global/Metals.gitignore +++ /dev/null @@ -1,5 +0,0 @@ - # Generated Metals (Scala Language Server) files - # Reference: https://scalameta.org/metals/ -.metals/ -.bloop/ -project/metals.sbt diff --git a/templates/Global/MicrosoftOffice.gitignore b/templates/Global/MicrosoftOffice.gitignore deleted file mode 100644 index ddcc9cf..0000000 --- a/templates/Global/MicrosoftOffice.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -*.tmp - -# Word temporary -~$*.doc* - -# Word Auto Backup File -Backup of *.doc* - -# Excel temporary -~$*.xls* - -# Excel Backup File -*.xlk - -# PowerPoint temporary -~$*.ppt* - -# Visio autosave temporary files -*.~vsd* diff --git a/templates/Global/ModelSim.gitignore b/templates/Global/ModelSim.gitignore deleted file mode 100644 index 46592b8..0000000 --- a/templates/Global/ModelSim.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -# ignore ModelSim generated files and directories (temp files and so on) -[_@]* - -# ignore compilation output of ModelSim -*.mti -*.dat -*.dbs -*.psm -*.bak -*.cmp -*.jpg -*.html -*.bsf - -# ignore simulation output of ModelSim -wlf* -*.wlf -*.vstf -*.ucdb -cov*/ -transcript* -sc_dpiheader.h -vsim.dbg diff --git a/templates/Global/Momentics.gitignore b/templates/Global/Momentics.gitignore deleted file mode 100644 index b14db2d..0000000 --- a/templates/Global/Momentics.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Built files -x86/ -arm/ -arm-p/ -translations/*.qm - -# IDE settings -.settings/ diff --git a/templates/Global/MonoDevelop.gitignore b/templates/Global/MonoDevelop.gitignore deleted file mode 100644 index ef38d06..0000000 --- a/templates/Global/MonoDevelop.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -#User Specific -*.userprefs -*.usertasks - -#Mono Project Files -*.pidb -*.resources -test-results/ diff --git a/templates/Global/NetBeans.gitignore b/templates/Global/NetBeans.gitignore deleted file mode 100644 index 4511287..0000000 --- a/templates/Global/NetBeans.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -**/nbproject/private/ -**/nbproject/Makefile-*.mk -**/nbproject/Package-*.bash -build/ -nbbuild/ -dist/ -nbdist/ -.nb-gradle/ diff --git a/templates/Global/Ninja.gitignore b/templates/Global/Ninja.gitignore deleted file mode 100644 index 50e58f2..0000000 --- a/templates/Global/Ninja.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.ninja_deps -.ninja_log diff --git a/templates/Global/NotepadPP.gitignore b/templates/Global/NotepadPP.gitignore deleted file mode 100644 index f858518..0000000 --- a/templates/Global/NotepadPP.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Notepad++ backups # -*.bak diff --git a/templates/Global/Octave.gitignore b/templates/Global/Octave.gitignore deleted file mode 100644 index b1d6054..0000000 --- a/templates/Global/Octave.gitignore +++ /dev/null @@ -1 +0,0 @@ -MATLAB.gitignore \ No newline at end of file diff --git a/templates/Global/Otto.gitignore b/templates/Global/Otto.gitignore deleted file mode 100644 index 5aa263f..0000000 --- a/templates/Global/Otto.gitignore +++ /dev/null @@ -1 +0,0 @@ -.otto/ diff --git a/templates/Global/PSoCCreator.gitignore b/templates/Global/PSoCCreator.gitignore deleted file mode 100644 index 15ae040..0000000 --- a/templates/Global/PSoCCreator.gitignore +++ /dev/null @@ -1,18 +0,0 @@ -# Project Settings -*.cywrk.* -*.cyprj.* - -# Generated Assets and Resources -Debug/ -Release/ -Export/ -*/codegentemp -*/Generated_Source -*_datasheet.pdf -*_timing.html -*.cycdx -*.cyfit -*.rpt -*.svd -*.log -*.zip diff --git a/templates/Global/Patch.gitignore b/templates/Global/Patch.gitignore deleted file mode 100644 index 6ffab9a..0000000 --- a/templates/Global/Patch.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.orig -*.rej diff --git a/templates/Global/PuTTY.gitignore b/templates/Global/PuTTY.gitignore deleted file mode 100644 index c37466b..0000000 --- a/templates/Global/PuTTY.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Private key -*.ppk diff --git a/templates/Global/README.md b/templates/Global/README.md deleted file mode 100644 index 6e57d87..0000000 --- a/templates/Global/README.md +++ /dev/null @@ -1,10 +0,0 @@ -## Globally Useful gitignores - -This directory contains globally useful gitignores, -e.g. OS-specific and editor specific. - -For more on global gitignores: - - -And a good blog post about 'em: - diff --git a/templates/Global/Redcar.gitignore b/templates/Global/Redcar.gitignore deleted file mode 100644 index b4a9d1d..0000000 --- a/templates/Global/Redcar.gitignore +++ /dev/null @@ -1 +0,0 @@ -.redcar diff --git a/templates/Global/Redis.gitignore b/templates/Global/Redis.gitignore deleted file mode 100644 index 57c1c23..0000000 --- a/templates/Global/Redis.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Ignore redis binary dump (dump.rdb) files - -*.rdb diff --git a/templates/Global/SBT.gitignore b/templates/Global/SBT.gitignore deleted file mode 100644 index 5ed6acb..0000000 --- a/templates/Global/SBT.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -# Simple Build Tool -# http://www.scala-sbt.org/release/docs/Getting-Started/Directories.html#configuring-version-control - -dist/* -target/ -lib_managed/ -src_managed/ -project/boot/ -project/plugins/project/ -.history -.cache -.lib/ diff --git a/templates/Global/SVN.gitignore b/templates/Global/SVN.gitignore deleted file mode 100644 index 1b53ace..0000000 --- a/templates/Global/SVN.gitignore +++ /dev/null @@ -1 +0,0 @@ -.svn/ diff --git a/templates/Global/SlickEdit.gitignore b/templates/Global/SlickEdit.gitignore deleted file mode 100644 index f30b8da..0000000 --- a/templates/Global/SlickEdit.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -# SlickEdit workspace and project files are ignored by default because -# typically they are considered to be developer-specific and not part of a -# project. -*.vpw -*.vpj - -# SlickEdit workspace history and tag files always contain user-specific -# data so they should not be stored in a repository. -*.vpwhistu -*.vpwhist -*.vtg diff --git a/templates/Global/Stata.gitignore b/templates/Global/Stata.gitignore deleted file mode 100644 index 07997bb..0000000 --- a/templates/Global/Stata.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# .gitignore file for git projects containing Stata files -# Commercial statistical software: http://www.stata.com - -# Stata dataset and output files -*.dta -*.gph -*.log -*.smcl -*.stpr -*.stsem - -# Graphic export files from Stata -# Stata command graph export: http://www.stata.com/manuals14/g-2graphexport.pdf -# -# You may add graphic export files to your .gitignore. However you should be -# aware that this will exclude all image files from this main directory -# and subdirectories. -# *.ps -# *.eps -# *.wmf -# *.emf -# *.pdf -# *.png -# *.tif diff --git a/templates/Global/SublimeText.gitignore b/templates/Global/SublimeText.gitignore deleted file mode 100644 index fdf0abb..0000000 --- a/templates/Global/SublimeText.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -# Cache files for Sublime Text -*.tmlanguage.cache -*.tmPreferences.cache -*.stTheme.cache - -# Workspace files are user-specific -*.sublime-workspace - -# Project files should be checked into the repository, unless a significant -# proportion of contributors will probably not be using Sublime Text -# *.sublime-project - -# SFTP configuration file -sftp-config.json -sftp-config-alt*.json - -# Package control specific files -Package Control.last-run -Package Control.ca-list -Package Control.ca-bundle -Package Control.system-ca-bundle -Package Control.cache/ -Package Control.ca-certs/ -Package Control.merged-ca-bundle -Package Control.user-ca-bundle -oscrypto-ca-bundle.crt -bh_unicode_properties.cache - -# Sublime-github package stores a github token in this file -# https://packagecontrol.io/packages/sublime-github -GitHub.sublime-settings diff --git a/templates/Global/Syncthing.gitignore b/templates/Global/Syncthing.gitignore deleted file mode 100644 index e18c9a8..0000000 --- a/templates/Global/Syncthing.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Syncthing caches -.stversions diff --git a/templates/Global/SynopsysVCS.gitignore b/templates/Global/SynopsysVCS.gitignore deleted file mode 100644 index ad751f6..0000000 --- a/templates/Global/SynopsysVCS.gitignore +++ /dev/null @@ -1,36 +0,0 @@ -# Waveform formats -*.vcd -*.vpd -*.evcd -*.fsdb - -# Default name of the simulation executable. A different name can be -# specified with this switch (the associated daidir database name is -# also taken from here): -o / -simv - -# Generated for Verilog and VHDL top configs -simv.daidir/ -simv.db.dir/ - -# Infrastructure necessary to co-simulate SystemC models with -# Verilog/VHDL models. An alternate directory may be specified with this -# switch: -Mdir= -csrc/ - -# Log file - the following switch allows to specify the file that will be -# used to write all messages from simulation: -l -*.log - -# Coverage results (generated with urg) and database location. The -# following switch can also be used: urg -dir .vdb -simv.vdb/ -urgReport/ - -# DVE and UCLI related files. -DVEfiles/ -ucli.key - -# When the design is elaborated for DirectC, the following file is created -# with declarations for C/C++ functions. -vc_hdrs.h diff --git a/templates/Global/Tags.gitignore b/templates/Global/Tags.gitignore deleted file mode 100644 index 91927af..0000000 --- a/templates/Global/Tags.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -# Ignore tags created by etags, ctags, gtags (GNU global) and cscope -TAGS -.TAGS -!TAGS/ -tags -.tags -!tags/ -gtags.files -GTAGS -GRTAGS -GPATH -GSYMS -cscope.files -cscope.out -cscope.in.out -cscope.po.out - diff --git a/templates/Global/TextMate.gitignore b/templates/Global/TextMate.gitignore deleted file mode 100644 index 41e8d07..0000000 --- a/templates/Global/TextMate.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -*.tmproj -*.tmproject -tmtags diff --git a/templates/Global/TortoiseGit.gitignore b/templates/Global/TortoiseGit.gitignore deleted file mode 100644 index db89590..0000000 --- a/templates/Global/TortoiseGit.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Project-level settings -/.tgitconfig diff --git a/templates/Global/Vagrant.gitignore b/templates/Global/Vagrant.gitignore deleted file mode 100644 index a8e2345..0000000 --- a/templates/Global/Vagrant.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# General -.vagrant/ - -# Log files (if you are creating logs in debug mode, uncomment this) -# *.log diff --git a/templates/Global/Vim.gitignore b/templates/Global/Vim.gitignore deleted file mode 100644 index 19fa632..0000000 --- a/templates/Global/Vim.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -# Swap -[._]*.s[a-v][a-z] -!*.svg # comment out if you don't need vector files -[._]*.sw[a-p] -[._]s[a-rt-v][a-z] -[._]ss[a-gi-z] -[._]sw[a-p] - -# Session -Session.vim -Sessionx.vim - -# Temporary -.netrwhist -*~ -# Auto-generated tag files -tags -# Persistent undo -[._]*.un~ diff --git a/templates/Global/VirtualEnv.gitignore b/templates/Global/VirtualEnv.gitignore deleted file mode 100644 index b2c22f2..0000000 --- a/templates/Global/VirtualEnv.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -# Virtualenv -# http://iamzed.com/2009/05/07/a-primer-on-virtualenv/ -.Python -[Bb]in -[Ii]nclude -[Ll]ib -[Ll]ib64 -[Ll]ocal -[Ss]cripts -pyvenv.cfg -.venv -pip-selfcheck.json diff --git a/templates/Global/Virtuoso.gitignore b/templates/Global/Virtuoso.gitignore deleted file mode 100644 index 2de0367..0000000 --- a/templates/Global/Virtuoso.gitignore +++ /dev/null @@ -1,18 +0,0 @@ -# Gitignore for Cadence Virtuoso -################################################################ - -# Log files -*.log -panic*.log.* - -# OpenAccess database lock files -*.cdslck* - -# Run directories for layout vs. schematic and design rule check -lvsRunDir/* -drcRunDir/* - -# Abstract generation tool -abstract.log* -abstract.record* - diff --git a/templates/Global/VisualStudioCode.gitignore b/templates/Global/VisualStudioCode.gitignore deleted file mode 100644 index 45fce1d..0000000 --- a/templates/Global/VisualStudioCode.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -!.vscode/*.code-snippets - -# Local History for Visual Studio Code -.history/ - -# Built Visual Studio Code Extensions -*.vsix diff --git a/templates/Global/WebMethods.gitignore b/templates/Global/WebMethods.gitignore deleted file mode 100644 index b383c25..0000000 --- a/templates/Global/WebMethods.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -**/IntegrationServer/datastore/ -**/IntegrationServer/db/ -**/IntegrationServer/DocumentStore/ -**/IntegrationServer/lib/ -**/IntegrationServer/logs/ -**/IntegrationServer/replicate/ -**/IntegrationServer/sdk/ -**/IntegrationServer/support/ -**/IntegrationServer/update/ -**/IntegrationServer/userFtpRoot/ -**/IntegrationServer/web/ -**/IntegrationServer/WmRepository4/ -**/IntegrationServer/XAStore/ -**/IntegrationServer/packages/Wm*/ diff --git a/templates/Global/Windows.gitignore b/templates/Global/Windows.gitignore deleted file mode 100644 index 84bffec..0000000 --- a/templates/Global/Windows.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Windows thumbnail cache files -Thumbs.db -Thumbs.db:encryptable -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk diff --git a/templates/Global/Xcode.gitignore b/templates/Global/Xcode.gitignore deleted file mode 100644 index 5073505..0000000 --- a/templates/Global/Xcode.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -## User settings -xcuserdata/ diff --git a/templates/Global/XilinxISE.gitignore b/templates/Global/XilinxISE.gitignore deleted file mode 100644 index 4475f84..0000000 --- a/templates/Global/XilinxISE.gitignore +++ /dev/null @@ -1,67 +0,0 @@ -# intermediate build files -*.bgn -*.bit -*.bld -*.cmd_log -*.drc -*.ll -*.lso -*.msd -*.msk -*.ncd -*.ngc -*.ngd -*.ngr -*.pad -*.par -*.pcf -*.prj -*.ptwx -*.rbb -*.rbd -*.stx -*.syr -*.twr -*.twx -*.unroutes -*.ut -*.xpi -*.xst -*_bitgen.xwbt -*_envsettings.html -*_map.map -*_map.mrp -*_map.ngm -*_map.xrpt -*_ngdbuild.xrpt -*_pad.csv -*_pad.txt -*_par.xrpt -*_summary.html -*_summary.xml -*_usage.xml -*_xst.xrpt - -# iMPACT generated files -_impactbatch.log -impact.xsl -impact_impact.xwbt -ise_impact.cmd -webtalk_impact.xml - -# Core Generator generated files -xaw2verilog.log - -# project-wide generated files -*.gise -par_usage_statistics.html -usage_statistics_webtalk.html -webtalk.log -webtalk_pn.xml - -# generated folders -iseconfig/ -xlnx_auto_0_xdb/ -xst/ -_ngo/ -_xmsgs/ diff --git a/templates/Global/macOS.gitignore b/templates/Global/macOS.gitignore deleted file mode 100644 index 135767f..0000000 --- a/templates/Global/macOS.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk From c580b5b6756567078c9efd4106ddb45a727d0e77 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Mon, 1 Jul 2024 11:03:42 -0600 Subject: [PATCH 046/108] refactor: Deleted files that don't belong to templates folder --- templates/CONTRIBUTING.md | 39 ---------- templates/README.md | 155 -------------------------------------- 2 files changed, 194 deletions(-) delete mode 100644 templates/CONTRIBUTING.md delete mode 100644 templates/README.md diff --git a/templates/CONTRIBUTING.md b/templates/CONTRIBUTING.md deleted file mode 100644 index c693838..0000000 --- a/templates/CONTRIBUTING.md +++ /dev/null @@ -1,39 +0,0 @@ -# Contributing guidelines - -We’d love you to help us improve this project. To help us keep this collection -high quality, we request that contributions adhere to the following guidelines. - -- **Provide a link to the application or project’s homepage**. Unless it’s - extremely popular, there’s a chance the maintainers don’t know about or use - the language, framework, editor, app, or project your change applies to. - -- **Provide links to documentation** supporting the change you’re making. - Current, canonical documentation mentioning the files being ignored is best. - If documentation isn’t available to support your change, do the best you can - to explain what the files being ignored are for. - -- **Explain why you’re making a change**. Even if it seems self-evident, please - take a sentence or two to tell us why your change or addition should happen. - It’s especially helpful to articulate why this change applies to *everyone* - who works with the applicable technology, rather than just you or your team. - -- **Please consider the scope of your change**. If your change specific to a - certain language or framework, then make sure the change is made to the - template for that language or framework, rather than to the template for an - editor, tool, or operating system. - -- **Please only modify *one template* per pull request**. This helps keep pull - requests and feedback focused on a specific project or technology. - -In general, the more you can do to help us understand the change you’re making, -the more likely we’ll be to accept your contribution quickly. - -If a template is mostly a list of files installed by a particular version of -some software (e.g. a PHP framework) then it's brittle and probably no more -helpful than a simple `ls`. If it's not possible to curate a small set of -useful rules, then the template might not be a good fit for this collection. - -Please also understand that we can’t list every tool that ever existed. -Our aim is to curate a collection of the *most common and helpful* templates, -not to make sure we cover every project possible. If we choose not to -include your language, tool, or project, it’s not because it’s not awesome. diff --git a/templates/README.md b/templates/README.md deleted file mode 100644 index 7014eed..0000000 --- a/templates/README.md +++ /dev/null @@ -1,155 +0,0 @@ -# A collection of `.gitignore` templates - -This is GitHub’s collection of [`.gitignore`][man] file templates. -We use this list to populate the `.gitignore` template choosers available -in the GitHub.com interface when creating new repositories and files. - -For more information about how `.gitignore` files work, and how to use them, -the following resources are a great place to start: - -- The [Ignoring Files chapter][chapter] of the [Pro Git][progit] book. -- The [Ignoring Files article][help] on the GitHub Help site. -- The [gitignore(5)][man] manual page. - -[man]: http://git-scm.com/docs/gitignore -[help]: https://help.github.com/articles/ignoring-files -[chapter]: https://git-scm.com/book/en/Git-Basics-Recording-Changes-to-the-Repository#_ignoring -[progit]: http://git-scm.com/book - -## Folder structure - -We support a collection of templates, organized in this way: - -- The root folder contains templates in common use, to help people get started - with popular programming languages and technologies. These define a meaningful - set of rules to help get started, and ensure you are not committing - unimportant files into your repository. -- [`Global`](./Global) contains templates for various editors, tools and - operating systems that can be used in different situations. It is recommended - that you either [add these to your global template](https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files#configuring-ignored-files-for-all-repositories-on-your-computer) - or merge these rules into your project-specific templates if you want to use - them permanently. -- [`community`](./community) contains specialized templates for other popular - languages, tools and project, which don't currently belong in the mainstream - templates. These should be added to your project-specific templates when you - decide to adopt the framework or tool. - -## What makes a good template? - -A template should contain a set of rules to help Git repositories work with a -specific programming language, framework, tool or environment. - -If it's not possible to curate a small set of useful rules for this situation, -then the template is not a good fit for this collection. - -If a template is mostly a list of files installed by a particular version of -some software (e.g. a PHP framework), it could live under the `community` -directory. See [versioned templates](#versioned-templates) for more details. - -If you have a small set of rules, or want to support a technology that is not -widely in use, and still believe this will be helpful to others, please read the -section about [specialized templates](#specialized-templates) for more details. - -Include details when opening pull request if the template is important and visible. We -may not accept it immediately, but we can promote it to the root at a later date -based on interest. - -Please also understand that we can’t list every tool that ever existed. -Our aim is to curate a collection of the _most common and helpful_ templates, -not to make sure we cover every project possible. If we choose not to -include your language, tool, or project, it’s not because it’s not awesome. - -## Contributing guidelines - -We’d love for you to help us improve this project. To help us keep this collection -high quality, we request that contributions adhere to the following guidelines. - -- **Provide a link to the application or project’s homepage**. Unless it’s - extremely popular, there’s a chance the maintainers don’t know about or use - the language, framework, editor, app, or project your change applies to. - -- **Provide links to documentation** supporting the change you’re making. - Current, canonical documentation mentioning the files being ignored is best. - If documentation isn’t available to support your change, do the best you can - to explain what the files being ignored are for. - -- **Explain why you’re making a change**. Even if it seems self-evident, please - take a sentence or two to tell us why your change or addition should happen. - It’s especially helpful to articulate why this change applies to _everyone_ - who works with the applicable technology, rather than just you or your team. - -- **Please consider the scope of your change**. If your change is specific to a - certain language or framework, then make sure the change is made to the - template for that language or framework, rather than to the template for an - editor, tool, or operating system. - -- **Please only modify _one template_ per pull request**. This helps keep pull - requests and feedback focused on a specific project or technology. - -In general, the more you can do to help us understand the change you’re making, -the more likely we’ll be to accept your contribution quickly. - -## Versioned templates - -Some templates can change greatly between versions, and if you wish to contribute -to this repository we need to follow this specific flow: - -- the template at the root should be the current supported version -- the template at the root should not have a version in the filename (i.e. - "evergreen") -- previous versions of templates should live under `community/` -- previous versions of the template should embed the version in the filename, - for readability - -This helps ensure users get the latest version (because they'll use whatever is -at the root) but helps maintainers support older versions still in the wild. - -## Specialized templates - -If you have a template that you would like to contribute, but it isn't quite -mainstream, please consider adding this to the `community` directory under a -folder that best suits where it belongs. - -The rules in your specialized template should be specific to the framework or -tool, and any additional templates should be mentioned in a comment in the -header of the template. - -For example, this template might live at `community/DotNet/InforCRM.gitignore`: - -``` -# gitignore template for InforCRM (formerly SalesLogix) -# website: https://www.infor.com/product-summary/cx/infor-crm/ -# -# Recommended: VisualStudio.gitignore - -# Ignore model files that are auto-generated -ModelIndex.xml -ExportedFiles.xml - -# Ignore deployment files -[Mm]odel/[Dd]eployment - -# Force include portal SupportFiles -!Model/Portal/*/SupportFiles/[Bb]in/ -!Model/Portal/PortalTemplates/*/SupportFiles/[Bb]in -``` - -## Contributing workflow - -Here’s how we suggest you go about proposing a change to this project: - -1. [Fork this project][fork] to your account. -2. [Create a branch][branch] for the change you intend to make. -3. Make your changes to your fork. -4. [Send a pull request][pr] from your fork’s branch to our `main` branch. - -Using the web-based interface to make changes is fine too, and will help you -by automatically forking the project and prompting to send a pull request too. - -[fork]: https://help.github.com/articles/fork-a-repo/ -[branch]: https://help.github.com/articles/creating-and-deleting-branches-within-your-repository -[pr]: https://help.github.com/articles/using-pull-requests/ - -## License - -[CC0-1.0](./LICENSE). From 667d48dda89d518154c18d885ecf8baa68ce443b Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Mon, 1 Jul 2024 13:20:22 -0600 Subject: [PATCH 047/108] refactor(FilePreview): Modified unnecesary inheritance --- ignori/widgets/file_preview.py | 17 ++++++++--------- styles/global.tcss | 10 +++++----- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/ignori/widgets/file_preview.py b/ignori/widgets/file_preview.py index 7592c15..0fa8ebf 100644 --- a/ignori/widgets/file_preview.py +++ b/ignori/widgets/file_preview.py @@ -12,7 +12,7 @@ class FilePreview( - Widget, + Container, can_focus=True, can_focus_children=False, inherit_bindings=False, @@ -27,7 +27,7 @@ class FilePreview( border: tall transparent; padding: 0 1; - & #file-preview-label { + & Label { width: 100%; background: $primary; color: $text; @@ -93,10 +93,9 @@ def watch_highlighted_ignore_file( def compose(self: Self) -> ComposeResult: - with Container(id="file-preview-container"): - yield Label("Preview", id="file-preview-label") - with VerticalScroll(): - yield Static( - id="file-preview-code", - expand=True, - ) + yield Label("Preview", id="file-preview-label") + with VerticalScroll(): + yield Static( + id="file-preview-code", + expand=True, + ) diff --git a/styles/global.tcss b/styles/global.tcss index 7f73000..c7bc890 100644 --- a/styles/global.tcss +++ b/styles/global.tcss @@ -1,8 +1,8 @@ -$primary: #F35530; -$secondary: #F3AE9B; -$background: #000000; +# $primary: #F35530; +# $secondary: #F3AE9B; +# $background: #000000; # $panel: #000000; -$accent: #F35530; +# $accent: #F35530; $error: #EE678E; $warning: #F6D661; @@ -37,4 +37,4 @@ $success: #66EAC6; .highlighted-text { background: $accent; color: $text 80%; -} \ No newline at end of file +} From 8e36008f7d30e6ab26c00c7714fdd88d10424627 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Mon, 1 Jul 2024 18:05:16 -0600 Subject: [PATCH 048/108] refactor(GenerationForm): Improved UX for file generation --- ignori/screens/__init__.py | 0 ignori/screens/modals/__init__.py | 0 ignori/widgets/__init__.py | 0 ignori/widgets/file_preview.py | 1 - ignori/widgets/generation_form.py | 46 ++++++++++++++----------------- ignori/widgets/input.py | 26 +++++++++++++++++ 6 files changed, 46 insertions(+), 27 deletions(-) create mode 100644 ignori/screens/__init__.py create mode 100644 ignori/screens/modals/__init__.py create mode 100644 ignori/widgets/__init__.py create mode 100644 ignori/widgets/input.py diff --git a/ignori/screens/__init__.py b/ignori/screens/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ignori/screens/modals/__init__.py b/ignori/screens/modals/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ignori/widgets/__init__.py b/ignori/widgets/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ignori/widgets/file_preview.py b/ignori/widgets/file_preview.py index 0fa8ebf..7c440ac 100644 --- a/ignori/widgets/file_preview.py +++ b/ignori/widgets/file_preview.py @@ -5,7 +5,6 @@ from textual.binding import Binding from textual.containers import Container, VerticalScroll from textual.reactive import reactive -from textual.widget import Widget from textual.widgets import Label, Static from ignori.ignore_file import IgnoreFile diff --git a/ignori/widgets/generation_form.py b/ignori/widgets/generation_form.py index 91553cb..4b5c5a5 100644 --- a/ignori/widgets/generation_form.py +++ b/ignori/widgets/generation_form.py @@ -12,30 +12,9 @@ from ignori.ignore_file import IgnoreFile from ignori.util.file import copy_file_content from ignori.util.validators import PathValidator +from ignori.widgets.input import BorderlessInput -class PathInput(Input): - - DEFAULT_CSS = """\ - PathInput { - border: none; - width: 1fr; - height: 1; - - &:focus { - /* TODO: CHECK WHY IS REQUIRED THE IMPORTANT */ - border: none !important; - width: 1fr; - height: 1 !important; - - & .input--cursor { - color: $text; - background: $accent-lighten-2; - } - } - } - """ - class PathGenerationButton(Button): DEFAULT_CSS = """\ @@ -64,6 +43,9 @@ class GenerationForm(Widget): padding: 1; & #path-form-container{ height: 1; + & Label { + padding: 0 1; + } } } """ @@ -87,15 +69,22 @@ def watch_selected_ignore_file(self: Self, ignore_file: IgnoreFile | None) -> No label.set_class(ignore_file is not None, "highlighted-text") @on(Button.Pressed, selector="#path-button") - def generate_file(self: Self) -> None: - input_field = self.query_one("#path-input", expect_type=Input) - result = input_field.validate(input_field.value) + @on(Input.Submitted, selector="#path-input") + def generate_file(self: Self, event: Input.Submitted | Button.Pressed) -> None: + if isinstance(event, Input.Submitted): + input_field = event.control + result = event.validation_result + elif isinstance(event, Button.Pressed): + input_field = self.query_one("#path-input", expect_type=Input) + result = input_field.validate(input_field.value) + if not input_field.is_valid and result: self.notify( "".join(result.failure_descriptions), title="Error", severity="error", ) + input_field.focus() return if self.selected_ignore_file is None: @@ -120,13 +109,18 @@ def compose(self: Self) -> ComposeResult: id="path-label", ) with Horizontal(id="path-form-container"): - yield PathInput( + yield Label("Output:") + yield BorderlessInput( id="path-input", placeholder=f"{Path.cwd()}", type="text", validators=[ PathValidator(), ], + validate_on=[ + "blur", + "submitted", + ], ) yield PathGenerationButton( "Generate", diff --git a/ignori/widgets/input.py b/ignori/widgets/input.py new file mode 100644 index 0000000..c9fa665 --- /dev/null +++ b/ignori/widgets/input.py @@ -0,0 +1,26 @@ +from textual.widgets import Input + + +class BorderlessInput(Input): + DEFAULT_CSS = """\ + BorderlessInput{ + border: none; + width: 1fr; + height: 1; + + &:focus { + border: none !important; + height: 1 !important; + } + & > .input--cursor { + color: $text; + background: $accent-lighten-2; + } + &.-invalid { + border: none !important; + height: 1; + background: red 10%; + color: $text; + } + } + """ From 46b47c2790b69d2c08e33eddff3f63606021bf78 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Tue, 2 Jul 2024 11:56:08 -0600 Subject: [PATCH 049/108] fix: Removed case sensitive search --- ignori/widgets/search_form.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ignori/widgets/search_form.py b/ignori/widgets/search_form.py index 3b99dfa..aa9635e 100644 --- a/ignori/widgets/search_form.py +++ b/ignori/widgets/search_form.py @@ -95,7 +95,7 @@ def select_file(self: Self, event: OptionList.OptionSelected) -> None: def compute_filtered_ignore_files(self: Self) -> list[IgnoreFile]: return [ file for file in self.ignore_files - if self.search_name in file.language + if self.search_name.lower() in file.language.lower() ] def watch_filtered_ignore_files(self: Self, ignore_files: list[IgnoreFile]) -> None: From 098791e8150a9f486284f2584408c28967ec3aef Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Tue, 2 Jul 2024 15:42:53 -0600 Subject: [PATCH 050/108] refactor: Improved UX for language search --- ignori/widgets/search_form.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ignori/widgets/search_form.py b/ignori/widgets/search_form.py index aa9635e..85e5308 100644 --- a/ignori/widgets/search_form.py +++ b/ignori/widgets/search_form.py @@ -70,6 +70,7 @@ def __init__( highlighted_ignore_file: reactive[IgnoreFile | None] = reactive(None) @on(Button.Pressed, selector="#search-button") + @on(Input.Submitted, selector="#search-input") def search_ignore_file(self: Self, event: Button.Pressed) -> None: path_input = self.query_one(selector="#search-input", expect_type=Input) From 6b779da190f87cc7a90454cdd1d0a2388abb9195 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Wed, 3 Jul 2024 20:48:04 -0600 Subject: [PATCH 051/108] refactor(GenerationForm): Change Label background color --- ignori/widgets/generation_form.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ignori/widgets/generation_form.py b/ignori/widgets/generation_form.py index 4b5c5a5..7708498 100644 --- a/ignori/widgets/generation_form.py +++ b/ignori/widgets/generation_form.py @@ -45,6 +45,7 @@ class GenerationForm(Widget): height: 1; & Label { padding: 0 1; + background: $primary-darken-3; } } } From dab2c315974911900ba939959e420aad096f354f Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Mon, 8 Jul 2024 00:27:23 -0600 Subject: [PATCH 052/108] feat: Added data_binding and unselect languague feature --- ignori/app.py | 5 +++ ignori/widgets/generation_form.py | 31 +++++------------ ignori/widgets/language_badge.py | 58 +++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+), 23 deletions(-) create mode 100644 ignori/widgets/language_badge.py diff --git a/ignori/app.py b/ignori/app.py index 887700f..4e5be3c 100644 --- a/ignori/app.py +++ b/ignori/app.py @@ -11,6 +11,7 @@ from ignori.util.settings import APP_TITLE, STYLES_PATH from ignori.widgets.generation_form import GenerationForm from ignori.widgets.header import Header +from ignori.widgets.language_badge import LanguageBadge from ignori.widgets.search_form import SearchForm @@ -35,6 +36,10 @@ class IgnoriApp(App[None], inherit_bindings=False): selected_ignore_file: reactive[IgnoreFile | None] = reactive(None) + @on(LanguageBadge.Pressed) + def unselect_file(self: Self, event: LanguageBadge.Pressed) -> None: + self.selected_ignore_file = None + @on(SearchForm.Selected) def selected_file(self: Self, event: SearchForm.Selected) -> None: self.selected_ignore_file = event.selected_file diff --git a/ignori/widgets/generation_form.py b/ignori/widgets/generation_form.py index 7708498..ef4466d 100644 --- a/ignori/widgets/generation_form.py +++ b/ignori/widgets/generation_form.py @@ -13,10 +13,10 @@ from ignori.util.file import copy_file_content from ignori.util.validators import PathValidator from ignori.widgets.input import BorderlessInput +from ignori.widgets.language_badge import LanguageBadge class PathGenerationButton(Button): - DEFAULT_CSS = """\ PathGenerationButton { padding: 0 1; @@ -36,8 +36,8 @@ class PathGenerationButton(Button): } """ -class GenerationForm(Widget): +class GenerationForm(Widget): DEFAULT_CSS = """\ GenerationForm { padding: 1; @@ -51,24 +51,10 @@ class GenerationForm(Widget): } """ - class Generated(Message): - ... + class Generated(Message): ... selected_ignore_file: reactive[IgnoreFile | None] = reactive(None) - def watch_selected_ignore_file(self: Self, ignore_file: IgnoreFile | None) -> None: - label = self.query_one("#path-label", expect_type=Label) - label.update( - ( - f"[b]Language:[/b] {ignore_file.language}" - if ignore_file - else "No language selected" - ), - ) - - label.set_class(ignore_file is None, "muted-text") - label.set_class(ignore_file is not None, "highlighted-text") - @on(Button.Pressed, selector="#path-button") @on(Input.Submitted, selector="#path-input") def generate_file(self: Self, event: Input.Submitted | Button.Pressed) -> None: @@ -105,10 +91,9 @@ def reset_form(self: Self) -> None: self.post_message(self.Generated()) def compose(self: Self) -> ComposeResult: - yield Label( - "No language selected", - id="path-label", - ) + yield LanguageBadge().data_bind( + language_selected = GenerationForm.selected_ignore_file + ) with Horizontal(id="path-form-container"): yield Label("Output:") yield BorderlessInput( @@ -124,6 +109,6 @@ def compose(self: Self) -> ComposeResult: ], ) yield PathGenerationButton( - "Generate", - id="path-button", + "Generate", + id="path-button", ) diff --git a/ignori/widgets/language_badge.py b/ignori/widgets/language_badge.py new file mode 100644 index 0000000..90286cc --- /dev/null +++ b/ignori/widgets/language_badge.py @@ -0,0 +1,58 @@ +from typing import Self + +from textual.app import ComposeResult +from textual.binding import Binding +from textual.containers import Horizontal +from textual.message import Message +from textual.reactive import reactive +from textual.widgets import Label + +from ignori.ignore_file import IgnoreFile + + +class LanguageBadge( + Horizontal, + can_focus=True, + can_focus_children=False, + inherit_bindings=False, +): + DEFAULT_CSS = """\ + LanguageBadge { + height: 1; + width: auto; + padding: 0 1; + + & #icon { + padding: 0 1; + background: white; + color: $text; + } + & #language-name{ + + } + } + + LanguageBadge:focus { + background: $primary; + } + """ + + BINDINGS = [ + Binding("enter", "press", "Unselect languague", show=False), + ] + + language_selected: reactive[IgnoreFile | None] = reactive(None) + + class Pressed(Message): ... + + + def watch_language_selected(self: Self, ignore_file: IgnoreFile | None) -> None: + language_name = self.query_one("#language-name", expect_type=Label) + language_name.update(ignore_file.language if ignore_file else "No Language") + + def action_press(self: Self) -> None: + self.post_message(self.Pressed()) + + def compose(self: Self) -> ComposeResult: + yield Label("X", id="icon") + yield Label("LANGUAGE", id="language-name") From 35fc3bc44895e1b25e0a976907f2dee2a3b71580 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Mon, 8 Jul 2024 20:06:13 -0600 Subject: [PATCH 053/108] refactor: Improved design for languague_badge and remove previous label for selected language --- ignori/widgets/generation_form.py | 4 ++-- ignori/widgets/language_badge.py | 31 +++++++++++++++++++++++++------ 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/ignori/widgets/generation_form.py b/ignori/widgets/generation_form.py index ef4466d..db66747 100644 --- a/ignori/widgets/generation_form.py +++ b/ignori/widgets/generation_form.py @@ -92,8 +92,8 @@ def reset_form(self: Self) -> None: def compose(self: Self) -> ComposeResult: yield LanguageBadge().data_bind( - language_selected = GenerationForm.selected_ignore_file - ) + language_selected=GenerationForm.selected_ignore_file, + ) with Horizontal(id="path-form-container"): yield Label("Output:") yield BorderlessInput( diff --git a/ignori/widgets/language_badge.py b/ignori/widgets/language_badge.py index 90286cc..0e089c6 100644 --- a/ignori/widgets/language_badge.py +++ b/ignori/widgets/language_badge.py @@ -20,20 +20,38 @@ class LanguageBadge( LanguageBadge { height: 1; width: auto; - padding: 0 1; + background: $secondary-darken-3; + + &.no-language{ + background: $secondary-background; + & #icon { + display: none; + } + } & #icon { padding: 0 1; - background: white; + background: $secondary; color: $text; } - & #language-name{ + & #language-name { + color: $text; + min-width: 10; + padding: 0 1; } } LanguageBadge:focus { - background: $primary; + &.no-language { + background: $secondary-darken-3; + } + + & #icon { + background: white; + color: $text; + text-style: bold; + } } """ @@ -45,14 +63,15 @@ class LanguageBadge( class Pressed(Message): ... - def watch_language_selected(self: Self, ignore_file: IgnoreFile | None) -> None: language_name = self.query_one("#language-name", expect_type=Label) language_name.update(ignore_file.language if ignore_file else "No Language") + self.set_class(ignore_file is None, "no-language") + def action_press(self: Self) -> None: self.post_message(self.Pressed()) def compose(self: Self) -> ComposeResult: yield Label("X", id="icon") - yield Label("LANGUAGE", id="language-name") + yield Label("No language", id="language-name") From 8044fd5523198a266c69a5daa16bae55a3d57529 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Mon, 8 Jul 2024 20:23:57 -0600 Subject: [PATCH 054/108] style: Formatted code with black --- ignori/ignore_file.py | 14 ++++++++------ ignori/util/file.py | 29 +++++++++++++++-------------- ignori/util/settings.py | 1 - ignori/widgets/file_preview.py | 1 - ignori/widgets/header.py | 2 +- ignori/widgets/search_form.py | 3 ++- 6 files changed, 26 insertions(+), 24 deletions(-) diff --git a/ignori/ignore_file.py b/ignori/ignore_file.py index d40934a..2501c35 100644 --- a/ignori/ignore_file.py +++ b/ignori/ignore_file.py @@ -16,10 +16,12 @@ class IgnoreFile: def __post_init__(self: Self) -> None: self.language = self.path.stem self.id = self.language.lower() - self.id = "-".join([ - self.language.lower(), - *self.categories, - ]) + self.id = "-".join( + [ + self.language.lower(), + *self.categories, + ], + ) def __rich_console__( self: Self, @@ -34,10 +36,10 @@ def __rich_console__( "black on yellow", ], ) - categories = " ".join([ + categories = " ".join( + [ f"[{(color:=next(categories_colors))}]{category}[/{color}]" for category in self.categories ], ) yield f"{self.language} {categories}" if categories else f"{self.language}" - diff --git a/ignori/util/file.py b/ignori/util/file.py index 6ae4150..720ddb8 100644 --- a/ignori/util/file.py +++ b/ignori/util/file.py @@ -11,11 +11,11 @@ def get_gitignore_templates() -> list[IgnoreFile]: for path in TEMPLATES_PATH.iterdir(): if path.is_dir(): template_files.extend( - __get_files( - template_subpath=path, - categories=current_categories, - ), - ) + __get_files( + template_subpath=path, + categories=current_categories, + ), + ) else: template_files.append( @@ -36,24 +36,25 @@ def __get_files(template_subpath: Path, categories: list[str]) -> list[IgnoreFil for path in template_subpath.iterdir(): if path.is_dir(): template_files.extend( - __get_files( - template_subpath=path, - categories=current_categories, - ), + __get_files( + template_subpath=path, + categories=current_categories, + ), ) else: template_files.append( - IgnoreFile( - path=path, - categories=current_categories, - ), + IgnoreFile( + path=path, + categories=current_categories, + ), ) return template_files -def copy_file_content(*, +def copy_file_content( + *, source_file: Path, destination_path: Path, file_name: str = ".gitignore", diff --git a/ignori/util/settings.py b/ignori/util/settings.py index e54b9da..1c93158 100644 --- a/ignori/util/settings.py +++ b/ignori/util/settings.py @@ -9,4 +9,3 @@ APP_TITLE = "Ignori" APP_VERSION = "" - diff --git a/ignori/widgets/file_preview.py b/ignori/widgets/file_preview.py index 7c440ac..2e04155 100644 --- a/ignori/widgets/file_preview.py +++ b/ignori/widgets/file_preview.py @@ -90,7 +90,6 @@ def watch_highlighted_ignore_file( else: preview.update("No file selected") - def compose(self: Self) -> ComposeResult: yield Label("Preview", id="file-preview-label") with VerticalScroll(): diff --git a/ignori/widgets/header.py b/ignori/widgets/header.py index 10e1363..d5d5018 100644 --- a/ignori/widgets/header.py +++ b/ignori/widgets/header.py @@ -9,7 +9,7 @@ class Header(Horizontal): - DEFAULT_CSS ="""\ + DEFAULT_CSS = """\ Header { background: $primary; height: 1; diff --git a/ignori/widgets/search_form.py b/ignori/widgets/search_form.py index 85e5308..fbc54cb 100644 --- a/ignori/widgets/search_form.py +++ b/ignori/widgets/search_form.py @@ -95,7 +95,8 @@ def select_file(self: Self, event: OptionList.OptionSelected) -> None: def compute_filtered_ignore_files(self: Self) -> list[IgnoreFile]: return [ - file for file in self.ignore_files + file + for file in self.ignore_files if self.search_name.lower() in file.language.lower() ] From b8e6a1e39ddb8ca1ca2cc834bf40de9dce79f616 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Mon, 8 Jul 2024 20:59:56 -0600 Subject: [PATCH 055/108] feat(ConfirModal): Created confirm modal --- ignori/screens/modals/confirm_modal.py | 52 ++++++++++++++++++++++++++ ignori/screens/modals/info_modal.py | 2 +- 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 ignori/screens/modals/confirm_modal.py diff --git a/ignori/screens/modals/confirm_modal.py b/ignori/screens/modals/confirm_modal.py new file mode 100644 index 0000000..736c914 --- /dev/null +++ b/ignori/screens/modals/confirm_modal.py @@ -0,0 +1,52 @@ +from typing import Self + +from textual.app import ComposeResult, on +from textual.containers import Container, Horizontal +from textual.screen import ModalScreen +from textual.widgets import Button, Label + + +class ConfirmModal(ModalScreen[bool]): + DEFAULT_CSS = """\ + ConfirmModal { + align: center middle; + } + + ConfirmModal > Container { + width: auto; + height: auto; + border: thick $background 80%; + background: $surface; + } + + ConfirmModal > Container > Label { + width: 100%; + content-align-horizontal: center; + margin-top: 1; + } + + ConfirmModal > Container > Horizontal { + width: auto; + height: auto; + } + + ConfirmModal > Container > Horizontal > Button { + margin: 2 4; + }""" + + message: str + + def __init__(self: "ConfirmModal", message: str) -> None: + super().__init__() + self.message = message + + @on(Button.Pressed) + def close_model(self: Self, event: Button.Pressed) -> None: + self.dismiss(event.control.id == "yes") + + def compose(self: Self) -> ComposeResult: + with Container(): + yield Label(self.message) + with Horizontal(): + yield Button("No", id="no", variant="error") + yield Button("Yes", id="yes", variant="success") diff --git a/ignori/screens/modals/info_modal.py b/ignori/screens/modals/info_modal.py index e38616a..47a2676 100644 --- a/ignori/screens/modals/info_modal.py +++ b/ignori/screens/modals/info_modal.py @@ -7,7 +7,7 @@ from textual.widgets import Button, Label -class InfoModal(ModalScreen): +class InfoModal(ModalScreen[None]): DEFAULT_CSS = """ InfoModal { From 87dcd5c3b7c956ef3ed45f2f384318269cebfa9a Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Mon, 8 Jul 2024 23:40:30 -0600 Subject: [PATCH 056/108] feat(GenerationForm): Added confirmation dialog when a .gitignore already exists in output path --- ignori/screens/modals/confirm_modal.py | 2 +- ignori/util/file.py | 7 ++--- ignori/util/settings.py | 2 ++ ignori/widgets/generation_form.py | 41 +++++++++++++++++++++++--- 4 files changed, 42 insertions(+), 10 deletions(-) diff --git a/ignori/screens/modals/confirm_modal.py b/ignori/screens/modals/confirm_modal.py index 736c914..1a32bd9 100644 --- a/ignori/screens/modals/confirm_modal.py +++ b/ignori/screens/modals/confirm_modal.py @@ -36,7 +36,7 @@ class ConfirmModal(ModalScreen[bool]): message: str - def __init__(self: "ConfirmModal", message: str) -> None: + def __init__(self: "ConfirmModal", *, message: str) -> None: super().__init__() self.message = message diff --git a/ignori/util/file.py b/ignori/util/file.py index 720ddb8..15e2902 100644 --- a/ignori/util/file.py +++ b/ignori/util/file.py @@ -56,10 +56,7 @@ def __get_files(template_subpath: Path, categories: list[str]) -> list[IgnoreFil def copy_file_content( *, source_file: Path, - destination_path: Path, - file_name: str = ".gitignore", + output_file: Path, ) -> None: - destination_file = destination_path / file_name - - with source_file.open("r") as source, destination_file.open("w") as destination: + with source_file.open("r") as source, output_file.open("w") as destination: destination.write(source.read()) diff --git a/ignori/util/settings.py b/ignori/util/settings.py index 1c93158..4d33a77 100644 --- a/ignori/util/settings.py +++ b/ignori/util/settings.py @@ -9,3 +9,5 @@ APP_TITLE = "Ignori" APP_VERSION = "" + +DEFAULT_OUTPUT_FILE = ".gitignore" diff --git a/ignori/widgets/generation_form.py b/ignori/widgets/generation_form.py index db66747..4a3b0ab 100644 --- a/ignori/widgets/generation_form.py +++ b/ignori/widgets/generation_form.py @@ -1,3 +1,4 @@ +from functools import partial from pathlib import Path from typing import Self @@ -10,7 +11,9 @@ from textual.widgets import Button, Input, Label from ignori.ignore_file import IgnoreFile +from ignori.screens.modals.confirm_modal import ConfirmModal from ignori.util.file import copy_file_content +from ignori.util.settings import DEFAULT_OUTPUT_FILE from ignori.util.validators import PathValidator from ignori.widgets.input import BorderlessInput from ignori.widgets.language_badge import LanguageBadge @@ -78,13 +81,43 @@ def generate_file(self: Self, event: Input.Submitted | Button.Pressed) -> None: self.notify("No language selected", title="Error", severity="error") return - copy_file_content( + self.validate_generation( source_file=self.selected_ignore_file.path, - destination_path=Path(input_field.value), + output_path=Path(input_field.value), ) - self.notify("File generated successfully", title="Success") - self.reset_form() + def validate_generation(self: Self, source_file: Path, output_path: Path) -> None: + def handle_confirm( + response: bool, + source_file: Path, + output_file: Path, + ) -> None: + if response: + copy_file_content( + source_file=source_file, + output_file=output_file, + ) + self.notify("File generated successfully", title="Success") + self.reset_form() + + output_file = output_path / DEFAULT_OUTPUT_FILE + if output_file.exists(): + confirm_callback = partial( + handle_confirm, source_file=source_file, output_file=output_file, + ) + self.app.push_screen( + ConfirmModal( + message=".gitignore already exists. Do you want to overwrite?", + ), + callback=confirm_callback, + ) + else: + copy_file_content( + source_file=source_file, + output_file=output_file, + ) + self.notify("File generated successfully", title="Success") + self.reset_form() def reset_form(self: Self) -> None: self.query_one(selector="#path-input", expect_type=Input).clear() From 60d7eb289a26674f49c30d111cf253d3beadb114 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Tue, 9 Jul 2024 11:48:59 -0600 Subject: [PATCH 057/108] refactor: Added description to custom Messages --- ignori/screens/modals/confirm_modal.py | 2 +- ignori/widgets/generation_form.py | 12 ++++++++---- ignori/widgets/language_badge.py | 4 +++- ignori/widgets/search_form.py | 12 +++++------- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/ignori/screens/modals/confirm_modal.py b/ignori/screens/modals/confirm_modal.py index 1a32bd9..00626ba 100644 --- a/ignori/screens/modals/confirm_modal.py +++ b/ignori/screens/modals/confirm_modal.py @@ -48,5 +48,5 @@ def compose(self: Self) -> ComposeResult: with Container(): yield Label(self.message) with Horizontal(): - yield Button("No", id="no", variant="error") yield Button("Yes", id="yes", variant="success") + yield Button("No", id="no", variant="error") diff --git a/ignori/widgets/generation_form.py b/ignori/widgets/generation_form.py index 4a3b0ab..dfcbaad 100644 --- a/ignori/widgets/generation_form.py +++ b/ignori/widgets/generation_form.py @@ -54,7 +54,9 @@ class GenerationForm(Widget): } """ - class Generated(Message): ... + class Generated(Message): + """Event sent when `.gitignore` file is generated""" + ... selected_ignore_file: reactive[IgnoreFile | None] = reactive(None) @@ -103,11 +105,13 @@ def handle_confirm( output_file = output_path / DEFAULT_OUTPUT_FILE if output_file.exists(): confirm_callback = partial( - handle_confirm, source_file=source_file, output_file=output_file, + handle_confirm, + source_file=source_file, + output_file=output_file, ) self.app.push_screen( - ConfirmModal( - message=".gitignore already exists. Do you want to overwrite?", + screen=ConfirmModal( + message=".gitignore already exists. Do you want to overwrite it?", ), callback=confirm_callback, ) diff --git a/ignori/widgets/language_badge.py b/ignori/widgets/language_badge.py index 0e089c6..1e42dcf 100644 --- a/ignori/widgets/language_badge.py +++ b/ignori/widgets/language_badge.py @@ -61,7 +61,9 @@ class LanguageBadge( language_selected: reactive[IgnoreFile | None] = reactive(None) - class Pressed(Message): ... + class Pressed(Message): + """Event sent when `LanguageBadge` is pressed""" + ... def watch_language_selected(self: Self, ignore_file: IgnoreFile | None) -> None: language_name = self.query_one("#language-name", expect_type=Label) diff --git a/ignori/widgets/search_form.py b/ignori/widgets/search_form.py index fbc54cb..1e02c86 100644 --- a/ignori/widgets/search_form.py +++ b/ignori/widgets/search_form.py @@ -1,3 +1,4 @@ +from dataclasses import dataclass from typing import Self from textual import on @@ -27,7 +28,6 @@ def get_option_by_id( class SearchForm(Widget): - DEFAULT_CSS = """ SearchForm { width: 100%; @@ -55,13 +55,11 @@ class SearchForm(Widget): } """ + @dataclass class Selected(Message): - def __init__( - self: "SearchForm.Selected", - selected_file: IgnoreFile | None, - ) -> None: - self.selected_file = selected_file - super().__init__() + """Event sent when language is selected""" + + selected_file: IgnoreFile | None ignore_files: reactive[list[IgnoreFile]] = reactive(get_gitignore_templates()) filtered_ignore_files: reactive[list[IgnoreFile]] = reactive([]) From 7ed9acef3234734ba07c1cddb410c8c79f94aae0 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Tue, 9 Jul 2024 13:22:36 -0600 Subject: [PATCH 058/108] refactor(GenerationForm): Improved design of form --- ignori/widgets/generation_form.py | 15 +++++++++------ ignori/widgets/language_badge.py | 3 ++- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/ignori/widgets/generation_form.py b/ignori/widgets/generation_form.py index dfcbaad..25dc7f4 100644 --- a/ignori/widgets/generation_form.py +++ b/ignori/widgets/generation_form.py @@ -44,9 +44,9 @@ class GenerationForm(Widget): DEFAULT_CSS = """\ GenerationForm { padding: 1; - & #path-form-container{ + & Horizontal { height: 1; - & Label { + & .label { padding: 0 1; background: $primary-darken-3; } @@ -56,6 +56,7 @@ class GenerationForm(Widget): class Generated(Message): """Event sent when `.gitignore` file is generated""" + ... selected_ignore_file: reactive[IgnoreFile | None] = reactive(None) @@ -128,11 +129,13 @@ def reset_form(self: Self) -> None: self.post_message(self.Generated()) def compose(self: Self) -> ComposeResult: - yield LanguageBadge().data_bind( - language_selected=GenerationForm.selected_ignore_file, - ) + with Horizontal(): + yield Label("Language:", classes="label") + yield LanguageBadge().data_bind( + language_selected=GenerationForm.selected_ignore_file, + ) with Horizontal(id="path-form-container"): - yield Label("Output:") + yield Label("Output:", classes="label") yield BorderlessInput( id="path-input", placeholder=f"{Path.cwd()}", diff --git a/ignori/widgets/language_badge.py b/ignori/widgets/language_badge.py index 1e42dcf..ec59d22 100644 --- a/ignori/widgets/language_badge.py +++ b/ignori/widgets/language_badge.py @@ -63,6 +63,7 @@ class LanguageBadge( class Pressed(Message): """Event sent when `LanguageBadge` is pressed""" + ... def watch_language_selected(self: Self, ignore_file: IgnoreFile | None) -> None: @@ -75,5 +76,5 @@ def action_press(self: Self) -> None: self.post_message(self.Pressed()) def compose(self: Self) -> ComposeResult: - yield Label("X", id="icon") yield Label("No language", id="language-name") + yield Label("X", id="icon") From 57fc8b2755b850baf6286f48ac318df6fbd497df Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Tue, 9 Jul 2024 18:32:40 -0600 Subject: [PATCH 059/108] feat(IgnoriApp): Display version in header --- ignori/util/file.py | 18 ++++----- ignori/util/settings.py | 12 +++++- ignori/widgets/language_badge.py | 2 +- ignori/widgets/search_form.py | 68 +++++++++++++++++++++----------- styles/global.tcss | 5 --- 5 files changed, 67 insertions(+), 38 deletions(-) diff --git a/ignori/util/file.py b/ignori/util/file.py index 15e2902..31fc636 100644 --- a/ignori/util/file.py +++ b/ignori/util/file.py @@ -4,11 +4,12 @@ from ignori.util.settings import TEMPLATES_PATH -def get_gitignore_templates() -> list[IgnoreFile]: +def __get_files(template_subpath: Path, categories: list[str]) -> list[IgnoreFile]: template_files: list[IgnoreFile] = [] - current_categories: list[str] = [] - for path in TEMPLATES_PATH.iterdir(): + current_categories: list[str] = [*categories, template_subpath.name] + + for path in template_subpath.iterdir(): if path.is_dir(): template_files.extend( __get_files( @@ -25,15 +26,14 @@ def get_gitignore_templates() -> list[IgnoreFile]: ), ) - return sorted(template_files, key=lambda file: file.language) + return template_files -def __get_files(template_subpath: Path, categories: list[str]) -> list[IgnoreFile]: +def get_gitignore_templates() -> list[IgnoreFile]: template_files: list[IgnoreFile] = [] + current_categories: list[str] = [] - current_categories: list[str] = [*categories, template_subpath.name] - - for path in template_subpath.iterdir(): + for path in TEMPLATES_PATH.iterdir(): if path.is_dir(): template_files.extend( __get_files( @@ -50,7 +50,7 @@ def __get_files(template_subpath: Path, categories: list[str]) -> list[IgnoreFil ), ) - return template_files + return sorted(template_files, key=lambda file: file.language) def copy_file_content( diff --git a/ignori/util/settings.py b/ignori/util/settings.py index 4d33a77..7f4756c 100644 --- a/ignori/util/settings.py +++ b/ignori/util/settings.py @@ -1,5 +1,15 @@ from pathlib import Path +import tomllib + + +def get_version() -> str: + file_path = BASE_DIR / "pyproject.toml" + with file_path.open("rb") as file: + pyproject_data = tomllib.load(file) + return pyproject_data["tool"]["poetry"]["version"] + + BASE_DIR = Path(__file__).resolve().parent.parent.parent STYLES_PATH = BASE_DIR / "styles" @@ -8,6 +18,6 @@ APP_TITLE = "Ignori" -APP_VERSION = "" +APP_VERSION = get_version() DEFAULT_OUTPUT_FILE = ".gitignore" diff --git a/ignori/widgets/language_badge.py b/ignori/widgets/language_badge.py index ec59d22..e77cc7c 100644 --- a/ignori/widgets/language_badge.py +++ b/ignori/widgets/language_badge.py @@ -56,7 +56,7 @@ class LanguageBadge( """ BINDINGS = [ - Binding("enter", "press", "Unselect languague", show=False), + Binding("enter,space", "press", "Unselect languague", show=False), ] language_selected: reactive[IgnoreFile | None] = reactive(None) diff --git a/ignori/widgets/search_form.py b/ignori/widgets/search_form.py index 1e02c86..27bddc3 100644 --- a/ignori/widgets/search_form.py +++ b/ignori/widgets/search_form.py @@ -6,13 +6,13 @@ from textual.containers import Container, Horizontal from textual.message import Message from textual.reactive import reactive -from textual.widget import Widget from textual.widgets import Button, Input, OptionList from textual.widgets.option_list import Option from ignori.ignore_file import IgnoreFile from ignori.util.file import get_gitignore_templates from ignori.widgets.file_preview import FilePreview +from ignori.widgets.input import BorderlessInput from ignori.widgets.language_list import LanguageList @@ -27,22 +27,33 @@ def get_option_by_id( return selected_file -class SearchForm(Widget): - DEFAULT_CSS = """ +class SearchButton(Button): + DEFAULT_CSS = """\ + SearchButton { + height: 1; + min-width: 5; + background: $secondary; + color: $text; + border: none; + text-style: none; + + &:hover { + text-style: b; + padding: 0 1; + border: none; + background: $secondary-darken-1; + } + } + """ + + +class SearchForm(Container): + DEFAULT_CSS = """\ SearchForm { width: 100%; - & #ignore-container{ - & OptionList { - width: 1fr; - height:100%; - } - & #ignore-code{ - width: 1fr !important; - } - } & #search-container{ - height: auto; + height: 1; & #search-input { width: 1fr; @@ -52,6 +63,16 @@ class SearchForm(Widget): width: auto; } } + + & #ignore-container{ + & OptionList { + width: 1fr; + height:100%; + } + & #ignore-code{ + width: 1fr !important; + } + } } """ @@ -110,12 +131,15 @@ def watch_filtered_ignore_files(self: Self, ignore_files: list[IgnoreFile]) -> N ignore_list.add_option(Option("No files found", disabled=True)) def compose(self: Self) -> ComposeResult: - with Container(): - with Horizontal(id="search-container"): - yield Input(placeholder="Search...", type="text", id="search-input") - yield Button("Search", id="search-button") - with Horizontal(id="ignore-container"): - yield LanguageList(id="ignore-list") - yield FilePreview(id="ignore-code").data_bind( - SearchForm.highlighted_ignore_file, - ) + with Horizontal(id="search-container"): + yield BorderlessInput( + placeholder="Search...", + type="text", + id="search-input", + ) + yield SearchButton("Search", id="search-button") + with Horizontal(id="ignore-container"): + yield LanguageList(id="ignore-list") + yield FilePreview(id="ignore-code").data_bind( + SearchForm.highlighted_ignore_file, + ) diff --git a/styles/global.tcss b/styles/global.tcss index c7bc890..4f30c0c 100644 --- a/styles/global.tcss +++ b/styles/global.tcss @@ -33,8 +33,3 @@ $success: #66EAC6; .muted-text { color: $text 20%; } - -.highlighted-text { - background: $accent; - color: $text 80%; -} From 50ca11e83b19aa06c277e63b4cba0e88d8c433f7 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Thu, 11 Jul 2024 00:10:26 -0600 Subject: [PATCH 060/108] chore(pyproject): Removed ruff from dependencies --- poetry.lock | 126 ++++++++++++++++++++++++------------------------- pyproject.toml | 3 +- 2 files changed, 64 insertions(+), 65 deletions(-) diff --git a/poetry.lock b/poetry.lock index 65e7abb..32e862e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -347,13 +347,13 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "mdit-py-plugins" -version = "0.4.0" +version = "0.4.1" description = "Collection of plugins for markdown-it-py" optional = false python-versions = ">=3.8" files = [ - {file = "mdit_py_plugins-0.4.0-py3-none-any.whl", hash = "sha256:b51b3bb70691f57f974e257e367107857a93b36f322a9e6d44ca5bf28ec2def9"}, - {file = "mdit_py_plugins-0.4.0.tar.gz", hash = "sha256:d8ab27e9aed6c38aa716819fedfde15ca275715955f8a185a8e1cf90fb1d2c1b"}, + {file = "mdit_py_plugins-0.4.1-py3-none-any.whl", hash = "sha256:1020dfe4e6bfc2c79fb49ae4e3f5b297f5ccd20f010187acc52af2921e27dc6a"}, + {file = "mdit_py_plugins-0.4.1.tar.gz", hash = "sha256:834b8ac23d1cd60cec703646ffd22ae97b7955a6d596eb1d304be1e251ae499c"}, ] [package.dependencies] @@ -541,38 +541,38 @@ files = [ [[package]] name = "mypy" -version = "1.10.0" +version = "1.10.1" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da1cbf08fb3b851ab3b9523a884c232774008267b1f83371ace57f412fe308c2"}, - {file = "mypy-1.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:12b6bfc1b1a66095ab413160a6e520e1dc076a28f3e22f7fb25ba3b000b4ef99"}, - {file = "mypy-1.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e36fb078cce9904c7989b9693e41cb9711e0600139ce3970c6ef814b6ebc2b2"}, - {file = "mypy-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2b0695d605ddcd3eb2f736cd8b4e388288c21e7de85001e9f85df9187f2b50f9"}, - {file = "mypy-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:cd777b780312ddb135bceb9bc8722a73ec95e042f911cc279e2ec3c667076051"}, - {file = "mypy-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3be66771aa5c97602f382230165b856c231d1277c511c9a8dd058be4784472e1"}, - {file = "mypy-1.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8b2cbaca148d0754a54d44121b5825ae71868c7592a53b7292eeb0f3fdae95ee"}, - {file = "mypy-1.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ec404a7cbe9fc0e92cb0e67f55ce0c025014e26d33e54d9e506a0f2d07fe5de"}, - {file = "mypy-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e22e1527dc3d4aa94311d246b59e47f6455b8729f4968765ac1eacf9a4760bc7"}, - {file = "mypy-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:a87dbfa85971e8d59c9cc1fcf534efe664d8949e4c0b6b44e8ca548e746a8d53"}, - {file = "mypy-1.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a781f6ad4bab20eef8b65174a57e5203f4be627b46291f4589879bf4e257b97b"}, - {file = "mypy-1.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b808e12113505b97d9023b0b5e0c0705a90571c6feefc6f215c1df9381256e30"}, - {file = "mypy-1.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f55583b12156c399dce2df7d16f8a5095291354f1e839c252ec6c0611e86e2e"}, - {file = "mypy-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cf18f9d0efa1b16478c4c129eabec36148032575391095f73cae2e722fcf9d5"}, - {file = "mypy-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:bc6ac273b23c6b82da3bb25f4136c4fd42665f17f2cd850771cb600bdd2ebeda"}, - {file = "mypy-1.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9fd50226364cd2737351c79807775136b0abe084433b55b2e29181a4c3c878c0"}, - {file = "mypy-1.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f90cff89eea89273727d8783fef5d4a934be2fdca11b47def50cf5d311aff727"}, - {file = "mypy-1.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fcfc70599efde5c67862a07a1aaf50e55bce629ace26bb19dc17cece5dd31ca4"}, - {file = "mypy-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:075cbf81f3e134eadaf247de187bd604748171d6b79736fa9b6c9685b4083061"}, - {file = "mypy-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:3f298531bca95ff615b6e9f2fc0333aae27fa48052903a0ac90215021cdcfa4f"}, - {file = "mypy-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa7ef5244615a2523b56c034becde4e9e3f9b034854c93639adb667ec9ec2976"}, - {file = "mypy-1.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3236a4c8f535a0631f85f5fcdffba71c7feeef76a6002fcba7c1a8e57c8be1ec"}, - {file = "mypy-1.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a2b5cdbb5dd35aa08ea9114436e0d79aceb2f38e32c21684dcf8e24e1e92821"}, - {file = "mypy-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92f93b21c0fe73dc00abf91022234c79d793318b8a96faac147cd579c1671746"}, - {file = "mypy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:28d0e038361b45f099cc086d9dd99c15ff14d0188f44ac883010e172ce86c38a"}, - {file = "mypy-1.10.0-py3-none-any.whl", hash = "sha256:f8c083976eb530019175aabadb60921e73b4f45736760826aa1689dda8208aee"}, - {file = "mypy-1.10.0.tar.gz", hash = "sha256:3d087fcbec056c4ee34974da493a826ce316947485cef3901f511848e687c131"}, + {file = "mypy-1.10.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e36f229acfe250dc660790840916eb49726c928e8ce10fbdf90715090fe4ae02"}, + {file = "mypy-1.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:51a46974340baaa4145363b9e051812a2446cf583dfaeba124af966fa44593f7"}, + {file = "mypy-1.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:901c89c2d67bba57aaaca91ccdb659aa3a312de67f23b9dfb059727cce2e2e0a"}, + {file = "mypy-1.10.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0cd62192a4a32b77ceb31272d9e74d23cd88c8060c34d1d3622db3267679a5d9"}, + {file = "mypy-1.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:a2cbc68cb9e943ac0814c13e2452d2046c2f2b23ff0278e26599224cf164e78d"}, + {file = "mypy-1.10.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bd6f629b67bb43dc0d9211ee98b96d8dabc97b1ad38b9b25f5e4c4d7569a0c6a"}, + {file = "mypy-1.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a1bbb3a6f5ff319d2b9d40b4080d46cd639abe3516d5a62c070cf0114a457d84"}, + {file = "mypy-1.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8edd4e9bbbc9d7b79502eb9592cab808585516ae1bcc1446eb9122656c6066f"}, + {file = "mypy-1.10.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6166a88b15f1759f94a46fa474c7b1b05d134b1b61fca627dd7335454cc9aa6b"}, + {file = "mypy-1.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:5bb9cd11c01c8606a9d0b83ffa91d0b236a0e91bc4126d9ba9ce62906ada868e"}, + {file = "mypy-1.10.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d8681909f7b44d0b7b86e653ca152d6dff0eb5eb41694e163c6092124f8246d7"}, + {file = "mypy-1.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:378c03f53f10bbdd55ca94e46ec3ba255279706a6aacaecac52ad248f98205d3"}, + {file = "mypy-1.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bacf8f3a3d7d849f40ca6caea5c055122efe70e81480c8328ad29c55c69e93e"}, + {file = "mypy-1.10.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:701b5f71413f1e9855566a34d6e9d12624e9e0a8818a5704d74d6b0402e66c04"}, + {file = "mypy-1.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:3c4c2992f6ea46ff7fce0072642cfb62af7a2484efe69017ed8b095f7b39ef31"}, + {file = "mypy-1.10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:604282c886497645ffb87b8f35a57ec773a4a2721161e709a4422c1636ddde5c"}, + {file = "mypy-1.10.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37fd87cab83f09842653f08de066ee68f1182b9b5282e4634cdb4b407266bade"}, + {file = "mypy-1.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8addf6313777dbb92e9564c5d32ec122bf2c6c39d683ea64de6a1fd98b90fe37"}, + {file = "mypy-1.10.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5cc3ca0a244eb9a5249c7c583ad9a7e881aa5d7b73c35652296ddcdb33b2b9c7"}, + {file = "mypy-1.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:1b3a2ffce52cc4dbaeee4df762f20a2905aa171ef157b82192f2e2f368eec05d"}, + {file = "mypy-1.10.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fe85ed6836165d52ae8b88f99527d3d1b2362e0cb90b005409b8bed90e9059b3"}, + {file = "mypy-1.10.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c2ae450d60d7d020d67ab440c6e3fae375809988119817214440033f26ddf7bf"}, + {file = "mypy-1.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6be84c06e6abd72f960ba9a71561c14137a583093ffcf9bbfaf5e613d63fa531"}, + {file = "mypy-1.10.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2189ff1e39db399f08205e22a797383613ce1cb0cb3b13d8bcf0170e45b96cc3"}, + {file = "mypy-1.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:97a131ee36ac37ce9581f4220311247ab6cba896b4395b9c87af0675a13a755f"}, + {file = "mypy-1.10.1-py3-none-any.whl", hash = "sha256:71d8ac0b906354ebda8ef1673e5fde785936ac1f29ff6987c7483cfbd5a4235a"}, + {file = "mypy-1.10.1.tar.gz", hash = "sha256:1f8f492d7db9e3593ef42d4f115f04e556130f2819ad33ab84551403e97dd4c0"}, ] [package.dependencies] @@ -598,13 +598,13 @@ files = [ [[package]] name = "packaging" -version = "24.0" +version = "24.1" description = "Core utilities for Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, - {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, + {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, + {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, ] [[package]] @@ -667,13 +667,13 @@ windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pytest" -version = "8.2.1" +version = "8.2.2" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-8.2.1-py3-none-any.whl", hash = "sha256:faccc5d332b8c3719f40283d0d44aa5cf101cec36f88cde9ed8f2bc0538612b1"}, - {file = "pytest-8.2.1.tar.gz", hash = "sha256:5046e5b46d8e4cac199c373041f26be56fdb81eb4e67dc11d4e10811fc3408fd"}, + {file = "pytest-8.2.2-py3-none-any.whl", hash = "sha256:c434598117762e2bd304e526244f67bf66bbd7b5d6cf22138be51ff661980343"}, + {file = "pytest-8.2.2.tar.gz", hash = "sha256:de4bb8104e201939ccdc688b27a89a7be2079b22e2bd2b07f806b6ba71117977"}, ] [package.dependencies] @@ -705,28 +705,28 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.4.6" +version = "0.4.10" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.4.6-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ef995583a038cd4a7edf1422c9e19118e2511b8ba0b015861b4abd26ec5367c5"}, - {file = "ruff-0.4.6-py3-none-macosx_11_0_arm64.whl", hash = "sha256:602ebd7ad909eab6e7da65d3c091547781bb06f5f826974a53dbe563d357e53c"}, - {file = "ruff-0.4.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f9ced5cbb7510fd7525448eeb204e0a22cabb6e99a3cb160272262817d49786"}, - {file = "ruff-0.4.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:04a80acfc862e0e1630c8b738e70dcca03f350bad9e106968a8108379e12b31f"}, - {file = "ruff-0.4.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be47700ecb004dfa3fd4dcdddf7322d4e632de3c06cd05329d69c45c0280e618"}, - {file = "ruff-0.4.6-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:1ff930d6e05f444090a0139e4e13e1e2e1f02bd51bb4547734823c760c621e79"}, - {file = "ruff-0.4.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f13410aabd3b5776f9c5699f42b37a3a348d65498c4310589bc6e5c548dc8a2f"}, - {file = "ruff-0.4.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0cf5cc02d3ae52dfb0c8a946eb7a1d6ffe4d91846ffc8ce388baa8f627e3bd50"}, - {file = "ruff-0.4.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea3424793c29906407e3cf417f28fc33f689dacbbadfb52b7e9a809dd535dcef"}, - {file = "ruff-0.4.6-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:1fa8561489fadf483ffbb091ea94b9c39a00ed63efacd426aae2f197a45e67fc"}, - {file = "ruff-0.4.6-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:4d5b914818d8047270308fe3e85d9d7f4a31ec86c6475c9f418fbd1624d198e0"}, - {file = "ruff-0.4.6-py3-none-musllinux_1_2_i686.whl", hash = "sha256:4f02284335c766678778475e7698b7ab83abaf2f9ff0554a07b6f28df3b5c259"}, - {file = "ruff-0.4.6-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:3a6a0a4f4b5f54fff7c860010ab3dd81425445e37d35701a965c0248819dde7a"}, - {file = "ruff-0.4.6-py3-none-win32.whl", hash = "sha256:9018bf59b3aa8ad4fba2b1dc0299a6e4e60a4c3bc62bbeaea222679865453062"}, - {file = "ruff-0.4.6-py3-none-win_amd64.whl", hash = "sha256:a769ae07ac74ff1a019d6bd529426427c3e30d75bdf1e08bb3d46ac8f417326a"}, - {file = "ruff-0.4.6-py3-none-win_arm64.whl", hash = "sha256:735a16407a1a8f58e4c5b913ad6102722e80b562dd17acb88887685ff6f20cf6"}, - {file = "ruff-0.4.6.tar.gz", hash = "sha256:a797a87da50603f71e6d0765282098245aca6e3b94b7c17473115167d8dfb0b7"}, + {file = "ruff-0.4.10-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:5c2c4d0859305ac5a16310eec40e4e9a9dec5dcdfbe92697acd99624e8638dac"}, + {file = "ruff-0.4.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a79489607d1495685cdd911a323a35871abfb7a95d4f98fc6f85e799227ac46e"}, + {file = "ruff-0.4.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1dd1681dfa90a41b8376a61af05cc4dc5ff32c8f14f5fe20dba9ff5deb80cd6"}, + {file = "ruff-0.4.10-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c75c53bb79d71310dc79fb69eb4902fba804a81f374bc86a9b117a8d077a1784"}, + {file = "ruff-0.4.10-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18238c80ee3d9100d3535d8eb15a59c4a0753b45cc55f8bf38f38d6a597b9739"}, + {file = "ruff-0.4.10-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:d8f71885bce242da344989cae08e263de29752f094233f932d4f5cfb4ef36a81"}, + {file = "ruff-0.4.10-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:330421543bd3222cdfec481e8ff3460e8702ed1e58b494cf9d9e4bf90db52b9d"}, + {file = "ruff-0.4.10-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e9b6fb3a37b772628415b00c4fc892f97954275394ed611056a4b8a2631365e"}, + {file = "ruff-0.4.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f54c481b39a762d48f64d97351048e842861c6662d63ec599f67d515cb417f6"}, + {file = "ruff-0.4.10-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:67fe086b433b965c22de0b4259ddfe6fa541c95bf418499bedb9ad5fb8d1c631"}, + {file = "ruff-0.4.10-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:acfaaab59543382085f9eb51f8e87bac26bf96b164839955f244d07125a982ef"}, + {file = "ruff-0.4.10-py3-none-musllinux_1_2_i686.whl", hash = "sha256:3cea07079962b2941244191569cf3a05541477286f5cafea638cd3aa94b56815"}, + {file = "ruff-0.4.10-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:338a64ef0748f8c3a80d7f05785930f7965d71ca260904a9321d13be24b79695"}, + {file = "ruff-0.4.10-py3-none-win32.whl", hash = "sha256:ffe3cd2f89cb54561c62e5fa20e8f182c0a444934bf430515a4b422f1ab7b7ca"}, + {file = "ruff-0.4.10-py3-none-win_amd64.whl", hash = "sha256:67f67cef43c55ffc8cc59e8e0b97e9e60b4837c8f21e8ab5ffd5d66e196e25f7"}, + {file = "ruff-0.4.10-py3-none-win_arm64.whl", hash = "sha256:dd1fcee327c20addac7916ca4e2653fbbf2e8388d8a6477ce5b4e986b68ae6c0"}, + {file = "ruff-0.4.10.tar.gz", hash = "sha256:3aa4f2bc388a30d346c56524f7cacca85945ba124945fe489952aadb6b5cd804"}, ] [[package]] @@ -752,13 +752,13 @@ dev = ["mypy (==1.4.1)", "pip-tools (>=6.13.0,<7.0.0)", "pytest (>=7.3.1,<8.0.0) [[package]] name = "textual" -version = "0.63.5" +version = "0.63.6" description = "Modern Text User Interface framework" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "textual-0.63.5-py3-none-any.whl", hash = "sha256:28ae178de544b297000b07ddf55b0f20d281c31e0956cd79cdf307208cf18095"}, - {file = "textual-0.63.5.tar.gz", hash = "sha256:c55b7e96d4ddfd075e88d99414a53c18907e532a29d7f13931a455e66532c271"}, + {file = "textual-0.63.6-py3-none-any.whl", hash = "sha256:7cf6c320b7445bcab42360d3957ed5b14163f8687fad282d772e2af6407ea3a1"}, + {file = "textual-0.63.6.tar.gz", hash = "sha256:cac575e60fe8b376bed3d6ac1723c137cea69f3e48cecdc78b289da10de7f9e5"}, ] [package.dependencies] @@ -789,13 +789,13 @@ typing-extensions = ">=4.4.0,<5.0.0" [[package]] name = "typing-extensions" -version = "4.11.0" +version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, - {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] [[package]] @@ -918,4 +918,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "cc10e5f66f4066bf515436da4363c5d51fdfe6eed97de95e512a8d1c315823b4" +content-hash = "eef87acb9dbf3c7a5afc9be601a14763055d4379f0949d1926ecc35cf05a0ecc" diff --git a/pyproject.toml b/pyproject.toml index 32446d7..fe720d3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,12 +10,11 @@ python = "^3.12" textual = "^0.63.5" rich = "^13.7.1" pipe = "^2.2" -ruff = "^0.4.6" [tool.poetry.group.dev.dependencies] textual-dev = "^1.5.1" -ruff = "^0.4.4" +ruff = "^0.4.6" mypy = "^1.10.0" pytest = "^8.2.1" ruff-lsp = "^0.0.53" From 010ad5cafa1332729269ae09f25809a34c893340 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Thu, 11 Jul 2024 22:27:36 -0600 Subject: [PATCH 061/108] refactor: Created style files and moved default css from some components to this files --- ignori/app.py | 2 +- ignori/util/settings.py | 4 +++- ignori/widgets/file_preview.py | 1 - ignori/widgets/input.py | 24 +----------------------- ignori/widgets/language_list.py | 1 + styles/app.tcss | 29 +++++++++++++++++++++++++++++ 6 files changed, 35 insertions(+), 26 deletions(-) create mode 100644 styles/app.tcss diff --git a/ignori/app.py b/ignori/app.py index 4e5be3c..cfae7fc 100644 --- a/ignori/app.py +++ b/ignori/app.py @@ -17,7 +17,7 @@ class IgnoriApp(App[None], inherit_bindings=False): TITLE = APP_TITLE - CSS_PATH = str(STYLES_PATH / "global.tcss") + CSS_PATH = STYLES_PATH BINDINGS = [ Binding( diff --git a/ignori/util/settings.py b/ignori/util/settings.py index 7f4756c..539d06c 100644 --- a/ignori/util/settings.py +++ b/ignori/util/settings.py @@ -12,7 +12,9 @@ def get_version() -> str: BASE_DIR = Path(__file__).resolve().parent.parent.parent -STYLES_PATH = BASE_DIR / "styles" +STYLES_DIR = BASE_DIR / "styles" + +STYLES_PATH = [STYLES_DIR / "global.tcss", STYLES_DIR / "app.tcss"] TEMPLATES_PATH = BASE_DIR / "templates" diff --git a/ignori/widgets/file_preview.py b/ignori/widgets/file_preview.py index 2e04155..8262d23 100644 --- a/ignori/widgets/file_preview.py +++ b/ignori/widgets/file_preview.py @@ -16,7 +16,6 @@ class FilePreview( can_focus_children=False, inherit_bindings=False, ): - DEFAULT_CSS = """ FilePreview { height: auto; diff --git a/ignori/widgets/input.py b/ignori/widgets/input.py index c9fa665..329db61 100644 --- a/ignori/widgets/input.py +++ b/ignori/widgets/input.py @@ -1,26 +1,4 @@ from textual.widgets import Input -class BorderlessInput(Input): - DEFAULT_CSS = """\ - BorderlessInput{ - border: none; - width: 1fr; - height: 1; - - &:focus { - border: none !important; - height: 1 !important; - } - & > .input--cursor { - color: $text; - background: $accent-lighten-2; - } - &.-invalid { - border: none !important; - height: 1; - background: red 10%; - color: $text; - } - } - """ +class BorderlessInput(Input): ... diff --git a/ignori/widgets/language_list.py b/ignori/widgets/language_list.py index 8275a22..08900bc 100644 --- a/ignori/widgets/language_list.py +++ b/ignori/widgets/language_list.py @@ -12,6 +12,7 @@ class LanguageList(OptionList): BINDINGS = [ Binding("ctrl+o", "open_templates", "Open explorer", show=True), ] + BORDER_TITLE = "Available languagues" def action_open_templates(self: Self) -> None: try: diff --git a/styles/app.tcss b/styles/app.tcss new file mode 100644 index 0000000..718f627 --- /dev/null +++ b/styles/app.tcss @@ -0,0 +1,29 @@ +BorderlessInput{ + border: none; + width: 1fr; + height: 1; + + &:focus { + border: none !important; + height: 1 !important; + } + & > .input--cursor { + color: $text; + background: $accent-lighten-2; + } + &.-invalid { + border: none !important; + height: 1; + background: red 10%; + color: $text; + } +} + +LanguageList { + border: round $accent 20%; + background: transparent; + + &:focus { + border: round $accent; + } +} From 59386703707bbfcc2e0d22b1af4e6fc6b75246df Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Fri, 12 Jul 2024 19:46:36 -0600 Subject: [PATCH 062/108] refactor(LanguageList): Updated design of widget to be rounded --- ignori/widgets/file_preview.py | 71 +++++---------------------------- ignori/widgets/language_list.py | 2 +- styles/app.tcss | 13 ++++++ 3 files changed, 23 insertions(+), 63 deletions(-) diff --git a/ignori/widgets/file_preview.py b/ignori/widgets/file_preview.py index 8262d23..328a1b1 100644 --- a/ignori/widgets/file_preview.py +++ b/ignori/widgets/file_preview.py @@ -2,82 +2,31 @@ from rich.syntax import Syntax from textual.app import ComposeResult -from textual.binding import Binding -from textual.containers import Container, VerticalScroll +from textual.containers import VerticalScroll from textual.reactive import reactive -from textual.widgets import Label, Static +from textual.widgets import Static from ignori.ignore_file import IgnoreFile class FilePreview( - Container, + VerticalScroll, can_focus=True, can_focus_children=False, - inherit_bindings=False, ): - DEFAULT_CSS = """ - FilePreview { - height: auto; - max-height: 100%; - background: $boost; - overflow-x: hidden; - border: tall transparent; - padding: 0 1; - - & Label { - width: 100%; - background: $primary; - color: $text; - text-style: bold; - padding: 0 1; - } - } - - FilePreview:focus { - border: tall $accent; - } - """ - - BINDINGS = [ - Binding("up", "scroll_up", "Scroll Up", show=False), - Binding("down", "scroll_down", "Scroll Down", show=False), - Binding("home", "scroll_home", "Scroll Home", show=False), - Binding("end", "scroll_end", "Scroll End", show=False), - Binding("pageup", "page_up", "Page Up", show=False), - Binding("pagedown", "page_down", "Page Down", show=False), - ] + BORDER_TITLE = "Preview" highlighted_ignore_file: reactive[IgnoreFile | None] = reactive(None) - def action_scroll_up(self: Self) -> None: - self.query_one(VerticalScroll).scroll_up() - - def action_scroll_down(self: Self) -> None: - self.query_one(VerticalScroll).scroll_down() - - def action_scroll_home(self: Self) -> None: - self.query_one(VerticalScroll).scroll_home() - - def action_scroll_end(self: Self) -> None: - self.query_one(VerticalScroll).scroll_end() - - def action_page_up(self: Self) -> None: - self.query_one(VerticalScroll).scroll_page_up() - - def action_page_down(self: Self) -> None: - self.query_one(VerticalScroll).scroll_page_down() - def watch_highlighted_ignore_file( self: Self, ignore_file: IgnoreFile | None, ) -> None: - vertical_scroll = self.query_one(VerticalScroll) preview = self.query_one("#file-preview-code", expect_type=Static) preview.set_class(ignore_file is None, "muted-text") if ignore_file: - vertical_scroll.scroll_home(animate=False) + self.scroll_home(animate=False) preview.update( Syntax.from_path( str(ignore_file.path), @@ -90,9 +39,7 @@ def watch_highlighted_ignore_file( preview.update("No file selected") def compose(self: Self) -> ComposeResult: - yield Label("Preview", id="file-preview-label") - with VerticalScroll(): - yield Static( - id="file-preview-code", - expand=True, - ) + yield Static( + id="file-preview-code", + expand=True, + ) diff --git a/ignori/widgets/language_list.py b/ignori/widgets/language_list.py index 08900bc..4da2557 100644 --- a/ignori/widgets/language_list.py +++ b/ignori/widgets/language_list.py @@ -12,7 +12,7 @@ class LanguageList(OptionList): BINDINGS = [ Binding("ctrl+o", "open_templates", "Open explorer", show=True), ] - BORDER_TITLE = "Available languagues" + BORDER_TITLE = "Languagues" def action_open_templates(self: Self) -> None: try: diff --git a/styles/app.tcss b/styles/app.tcss index 718f627..68db576 100644 --- a/styles/app.tcss +++ b/styles/app.tcss @@ -27,3 +27,16 @@ LanguageList { border: round $accent; } } + +FilePreview { + height: 100%; + background: $boost; + overflow-x: hidden; + border: round $accent 20%; + background: transparent; + padding: 0 1; +} + +FilePreview:focus { + border: round $accent; +} From c79618787550aa07bb40c238f9323e1ed9c267db Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Sat, 13 Jul 2024 20:54:49 -0600 Subject: [PATCH 063/108] refactor(SearchForm): Improved design for search form and header widget --- ignori/widgets/header.py | 23 +---------------------- ignori/widgets/search_form.py | 2 +- styles/app.tcss | 4 ++++ styles/global.tcss | 22 ++++++++++++++++++++++ 4 files changed, 28 insertions(+), 23 deletions(-) diff --git a/ignori/widgets/header.py b/ignori/widgets/header.py index d5d5018..2e091dd 100644 --- a/ignori/widgets/header.py +++ b/ignori/widgets/header.py @@ -8,27 +8,6 @@ class Header(Horizontal): - - DEFAULT_CSS = """\ - Header { - background: $primary; - height: 1; - margin-bottom: 1; - padding: 0 2; - - & #app-title { - width: 1fr; - content-align: center middle; - } - - & #app-version { - content-align: left middle; - color: $text 40%; - text-style: italic; - } - } - """ - def compose(self: Self) -> ComposeResult: yield Label(APP_TITLE, id="app-title") - yield Label(APP_VERSION, id="app-version") + yield Label(f"v{APP_VERSION}", id="app-version") diff --git a/ignori/widgets/search_form.py b/ignori/widgets/search_form.py index 27bddc3..9ef392f 100644 --- a/ignori/widgets/search_form.py +++ b/ignori/widgets/search_form.py @@ -133,7 +133,7 @@ def watch_filtered_ignore_files(self: Self, ignore_files: list[IgnoreFile]) -> N def compose(self: Self) -> ComposeResult: with Horizontal(id="search-container"): yield BorderlessInput( - placeholder="Search...", + placeholder="Name...", type="text", id="search-input", ) diff --git a/styles/app.tcss b/styles/app.tcss index 68db576..884c08b 100644 --- a/styles/app.tcss +++ b/styles/app.tcss @@ -19,6 +19,10 @@ BorderlessInput{ } } +SearchForm { + padding: 0 1; +} + LanguageList { border: round $accent 20%; background: transparent; diff --git a/styles/global.tcss b/styles/global.tcss index 4f30c0c..54df713 100644 --- a/styles/global.tcss +++ b/styles/global.tcss @@ -22,6 +22,28 @@ $success: #66EAC6; } } + Header { + height: 1; + margin-bottom: 1; + padding: 0 2; + margin: 1 0; + + & #app-title { + width: auto; + content-align: left middle; + color: $text; + background: $primary; + padding: 0 1; + } + + & #app-version { + content-align: right middle; + color: $text 40%; + text-style: italic; + width:1fr; + } + } + .show { display: block; } From 5b0382fa5f9b0cb42be60e410ba04bf95f975d76 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Sun, 14 Jul 2024 17:32:25 -0600 Subject: [PATCH 064/108] style: Improved python code readabilty --- ignori/widgets/generation_form.py | 2 -- ignori/widgets/language_badge.py | 2 -- ignori/widgets/search_form.py | 4 ++-- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/ignori/widgets/generation_form.py b/ignori/widgets/generation_form.py index 25dc7f4..61dcc1f 100644 --- a/ignori/widgets/generation_form.py +++ b/ignori/widgets/generation_form.py @@ -57,8 +57,6 @@ class GenerationForm(Widget): class Generated(Message): """Event sent when `.gitignore` file is generated""" - ... - selected_ignore_file: reactive[IgnoreFile | None] = reactive(None) @on(Button.Pressed, selector="#path-button") diff --git a/ignori/widgets/language_badge.py b/ignori/widgets/language_badge.py index e77cc7c..2a7d933 100644 --- a/ignori/widgets/language_badge.py +++ b/ignori/widgets/language_badge.py @@ -64,8 +64,6 @@ class LanguageBadge( class Pressed(Message): """Event sent when `LanguageBadge` is pressed""" - ... - def watch_language_selected(self: Self, ignore_file: IgnoreFile | None) -> None: language_name = self.query_one("#language-name", expect_type=Label) language_name.update(ignore_file.language if ignore_file else "No Language") diff --git a/ignori/widgets/search_form.py b/ignori/widgets/search_form.py index 9ef392f..5d95508 100644 --- a/ignori/widgets/search_form.py +++ b/ignori/widgets/search_form.py @@ -6,7 +6,7 @@ from textual.containers import Container, Horizontal from textual.message import Message from textual.reactive import reactive -from textual.widgets import Button, Input, OptionList +from textual.widgets import Button, Input, Label, OptionList from textual.widgets.option_list import Option from ignori.ignore_file import IgnoreFile @@ -133,7 +133,7 @@ def watch_filtered_ignore_files(self: Self, ignore_files: list[IgnoreFile]) -> N def compose(self: Self) -> ComposeResult: with Horizontal(id="search-container"): yield BorderlessInput( - placeholder="Name...", + placeholder="Language...", type="text", id="search-input", ) From 23fab95b15c15741876e2da29163dcc857fd8375 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Sun, 14 Jul 2024 20:08:51 -0600 Subject: [PATCH 065/108] feat(LanguageBadge): Added click event when is pressed --- ignori/widgets/language_badge.py | 3 ++- ignori/widgets/search_form.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/ignori/widgets/language_badge.py b/ignori/widgets/language_badge.py index 2a7d933..0a71e6f 100644 --- a/ignori/widgets/language_badge.py +++ b/ignori/widgets/language_badge.py @@ -1,6 +1,6 @@ from typing import Self -from textual.app import ComposeResult +from textual.app import ComposeResult, events, on from textual.binding import Binding from textual.containers import Horizontal from textual.message import Message @@ -70,6 +70,7 @@ def watch_language_selected(self: Self, ignore_file: IgnoreFile | None) -> None: self.set_class(ignore_file is None, "no-language") + @on(events.Click) def action_press(self: Self) -> None: self.post_message(self.Pressed()) diff --git a/ignori/widgets/search_form.py b/ignori/widgets/search_form.py index 5d95508..aa8e0d9 100644 --- a/ignori/widgets/search_form.py +++ b/ignori/widgets/search_form.py @@ -6,7 +6,7 @@ from textual.containers import Container, Horizontal from textual.message import Message from textual.reactive import reactive -from textual.widgets import Button, Input, Label, OptionList +from textual.widgets import Button, Input, OptionList from textual.widgets.option_list import Option from ignori.ignore_file import IgnoreFile From b1ce61b9b565a0431a8ec61eec0f42babafaa932 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Tue, 16 Jul 2024 00:14:23 -0600 Subject: [PATCH 066/108] chore: Update textual to latest version --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 32e862e..c0d70ad 100644 --- a/poetry.lock +++ b/poetry.lock @@ -752,13 +752,13 @@ dev = ["mypy (==1.4.1)", "pip-tools (>=6.13.0,<7.0.0)", "pytest (>=7.3.1,<8.0.0) [[package]] name = "textual" -version = "0.63.6" +version = "0.72.0" description = "Modern Text User Interface framework" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "textual-0.63.6-py3-none-any.whl", hash = "sha256:7cf6c320b7445bcab42360d3957ed5b14163f8687fad282d772e2af6407ea3a1"}, - {file = "textual-0.63.6.tar.gz", hash = "sha256:cac575e60fe8b376bed3d6ac1723c137cea69f3e48cecdc78b289da10de7f9e5"}, + {file = "textual-0.72.0-py3-none-any.whl", hash = "sha256:a9886eb96bd6391b8795244d2b8fe592204556c42264ea7513a1211584e17366"}, + {file = "textual-0.72.0.tar.gz", hash = "sha256:14174ce8d49016a85aa6c0669d0881b5419e98cf46d429f263314295409ed262"}, ] [package.dependencies] @@ -918,4 +918,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "eef87acb9dbf3c7a5afc9be601a14763055d4379f0949d1926ecc35cf05a0ecc" +content-hash = "157bf11d8cf0a1b5936210b1f6f7a56772d1fc0a0efdda5e77101d6ce147fac5" diff --git a/pyproject.toml b/pyproject.toml index fe720d3..5aa3ec8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ readme = "README.md" [tool.poetry.dependencies] python = "^3.12" -textual = "^0.63.5" +textual = "^0.72.0" rich = "^13.7.1" pipe = "^2.2" From 05882bf08b4eab0d48634578cc0798bd5e3cb9d1 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Tue, 16 Jul 2024 17:21:42 -0600 Subject: [PATCH 067/108] refator: Moved all default css from widgets to app.tcss --- ignori/widgets/generation_form.py | 32 +-------- ignori/widgets/language_badge.py | 39 ----------- ignori/widgets/search_form.py | 47 +------------- styles/app.tcss | 104 ++++++++++++++++++++++++++++++ 4 files changed, 106 insertions(+), 116 deletions(-) diff --git a/ignori/widgets/generation_form.py b/ignori/widgets/generation_form.py index 61dcc1f..d436ba5 100644 --- a/ignori/widgets/generation_form.py +++ b/ignori/widgets/generation_form.py @@ -19,40 +19,10 @@ from ignori.widgets.language_badge import LanguageBadge -class PathGenerationButton(Button): - DEFAULT_CSS = """\ - PathGenerationButton { - padding: 0 1; - height: 1; - min-width: 5; - background: $primary; - color: $text; - border: none; - text-style: none; - - &:hover { - text-style: b; - padding: 0 1; - border: none; - background: $primary-darken-1; - } - } - """ +class PathGenerationButton(Button): ... class GenerationForm(Widget): - DEFAULT_CSS = """\ - GenerationForm { - padding: 1; - & Horizontal { - height: 1; - & .label { - padding: 0 1; - background: $primary-darken-3; - } - } - } - """ class Generated(Message): """Event sent when `.gitignore` file is generated""" diff --git a/ignori/widgets/language_badge.py b/ignori/widgets/language_badge.py index 0a71e6f..49c2392 100644 --- a/ignori/widgets/language_badge.py +++ b/ignori/widgets/language_badge.py @@ -16,45 +16,6 @@ class LanguageBadge( can_focus_children=False, inherit_bindings=False, ): - DEFAULT_CSS = """\ - LanguageBadge { - height: 1; - width: auto; - background: $secondary-darken-3; - - &.no-language{ - background: $secondary-background; - & #icon { - display: none; - } - } - - & #icon { - padding: 0 1; - background: $secondary; - color: $text; - } - - & #language-name { - color: $text; - min-width: 10; - padding: 0 1; - } - } - - LanguageBadge:focus { - &.no-language { - background: $secondary-darken-3; - } - - & #icon { - background: white; - color: $text; - text-style: bold; - } - } - """ - BINDINGS = [ Binding("enter,space", "press", "Unselect languague", show=False), ] diff --git a/ignori/widgets/search_form.py b/ignori/widgets/search_form.py index aa8e0d9..ce9d15c 100644 --- a/ignori/widgets/search_form.py +++ b/ignori/widgets/search_form.py @@ -27,55 +27,10 @@ def get_option_by_id( return selected_file -class SearchButton(Button): - DEFAULT_CSS = """\ - SearchButton { - height: 1; - min-width: 5; - background: $secondary; - color: $text; - border: none; - text-style: none; - - &:hover { - text-style: b; - padding: 0 1; - border: none; - background: $secondary-darken-1; - } - } - """ +class SearchButton(Button): ... class SearchForm(Container): - DEFAULT_CSS = """\ - SearchForm { - width: 100%; - - & #search-container{ - height: 1; - - & #search-input { - width: 1fr; - } - - & #search-button { - width: auto; - } - } - - & #ignore-container{ - & OptionList { - width: 1fr; - height:100%; - } - & #ignore-code{ - width: 1fr !important; - } - } - } - """ - @dataclass class Selected(Message): """Event sent when language is selected""" diff --git a/styles/app.tcss b/styles/app.tcss index 884c08b..a7abba9 100644 --- a/styles/app.tcss +++ b/styles/app.tcss @@ -44,3 +44,107 @@ FilePreview { FilePreview:focus { border: round $accent; } + + PathGenerationButton { + padding: 0 1; + height: 1; + min-width: 5; + background: $primary; + color: $text; + border: none; + text-style: none; + + &:hover { + text-style: b; + padding: 0 1; + border: none; + background: $primary-darken-1; + } + } + +GenerationForm { + padding: 1; + & Horizontal { + height: 1; + & .label { + padding: 0 1; + background: $primary-darken-3; + } + } + } + LanguageBadge { + height: 1; + width: auto; + background: $secondary-darken-3; + + &.no-language{ + background: $secondary-background; + & #icon { + display: none; + } + } + + & #icon { + padding: 0 1; + background: $secondary; + color: $text; + } + + & #language-name { + color: $text; + min-width: 10; + padding: 0 1; + } + } + + LanguageBadge:focus { + &.no-language { + background: $secondary-darken-3; + } + + & #icon { + background: white; + color: $text; + text-style: bold; + } + } + SearchButton { + height: 1; + min-width: 5; + background: $secondary; + color: $text; + border: none; + text-style: none; + + &:hover { + text-style: b; + padding: 0 1; + border: none; + background: $secondary-darken-1; + } + } + SearchForm { + width: 100%; + + & #search-container{ + height: 1; + + & #search-input { + width: 1fr; + } + + & #search-button { + width: auto; + } + } + + & #ignore-container{ + & OptionList { + width: 1fr; + height:100%; + } + & #ignore-code{ + width: 1fr !important; + } + } + } From 34abc3f66da33028b20624bb91e5abc4de41540c Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Tue, 16 Jul 2024 17:42:06 -0600 Subject: [PATCH 068/108] Revert "chore: Update textual to latest version" This reverts commit b1ce61b9b565a0431a8ec61eec0f42babafaa932. --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index c0d70ad..32e862e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -752,13 +752,13 @@ dev = ["mypy (==1.4.1)", "pip-tools (>=6.13.0,<7.0.0)", "pytest (>=7.3.1,<8.0.0) [[package]] name = "textual" -version = "0.72.0" +version = "0.63.6" description = "Modern Text User Interface framework" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "textual-0.72.0-py3-none-any.whl", hash = "sha256:a9886eb96bd6391b8795244d2b8fe592204556c42264ea7513a1211584e17366"}, - {file = "textual-0.72.0.tar.gz", hash = "sha256:14174ce8d49016a85aa6c0669d0881b5419e98cf46d429f263314295409ed262"}, + {file = "textual-0.63.6-py3-none-any.whl", hash = "sha256:7cf6c320b7445bcab42360d3957ed5b14163f8687fad282d772e2af6407ea3a1"}, + {file = "textual-0.63.6.tar.gz", hash = "sha256:cac575e60fe8b376bed3d6ac1723c137cea69f3e48cecdc78b289da10de7f9e5"}, ] [package.dependencies] @@ -918,4 +918,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "157bf11d8cf0a1b5936210b1f6f7a56772d1fc0a0efdda5e77101d6ce147fac5" +content-hash = "eef87acb9dbf3c7a5afc9be601a14763055d4379f0949d1926ecc35cf05a0ecc" diff --git a/pyproject.toml b/pyproject.toml index 5aa3ec8..fe720d3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ readme = "README.md" [tool.poetry.dependencies] python = "^3.12" -textual = "^0.72.0" +textual = "^0.63.5" rich = "^13.7.1" pipe = "^2.2" From 57ca00805ece90ecedee6ce77fe2f1e267425785 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Tue, 16 Jul 2024 23:15:36 -0600 Subject: [PATCH 069/108] refactor(templates): Changed useless .gitignores content --- templates/Kotlin.gitignore | 63 +++++++++++++++++++++++++++- templates/Neovim.gitignore | 85 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 147 insertions(+), 1 deletion(-) create mode 100644 templates/Neovim.gitignore diff --git a/templates/Kotlin.gitignore b/templates/Kotlin.gitignore index c48376e..402382d 100644 --- a/templates/Kotlin.gitignore +++ b/templates/Kotlin.gitignore @@ -1 +1,62 @@ -Java.gitignore \ No newline at end of file +.DS_Store +.idea/shelf +/confluence/target +/dependencies/repo +/android.tests.dependencies +/dependencies/android.tests.dependencies +/dist +/local +/gh-pages +/ideaSDK +/clionSDK +/android-studio/sdk +out/ +/tmp +/intellij +workspace.xml +*.versionsBackup +/idea/testData/debugger/tinyApp/classes* +/jps-plugin/testData/kannotator +/js/js.translator/testData/out/ +/js/js.translator/testData/out-min/ +/js/js.translator/testData/out-pir/ +.gradle/ +build/ +!**/src/**/build +!**/test/**/build +*.iml +!**/testData/**/*.iml +.idea/artifacts +.idea/remote-targets.xml +.idea/libraries/Gradle*.xml +.idea/libraries/Maven*.xml +.idea/modules +.idea/runConfigurations/JPS_*.xml +.idea/runConfigurations/_JPS_*.xml +.idea/runConfigurations/PILL_*.xml +.idea/runConfigurations/_FP_*.xml +.idea/runConfigurations/_MT_*.xml +.idea/libraries +.idea/modules.xml +.idea/gradle.xml +.idea/compiler.xml +.idea/inspectionProfiles/profiles_settings.xml +.idea/.name +.idea/jarRepositories.xml +.idea/csv-plugin.xml +.idea/libraries-with-intellij-classes.xml +.idea/misc.xml +.idea/protoeditor.xml +.idea/uiDesigner.xml +node_modules/ +.rpt2_cache/ +libraries/tools/kotlin-test-js-runner/lib/ +local.properties +buildSrcTmp/ +distTmp/ +outTmp/ +/test.output +/kotlin-native/dist +kotlin-ide/ +.kotlin/ +.teamcity/ diff --git a/templates/Neovim.gitignore b/templates/Neovim.gitignore new file mode 100644 index 0000000..f1661e1 --- /dev/null +++ b/templates/Neovim.gitignore @@ -0,0 +1,85 @@ +# Tools +/.direnv/ +/venv/ +compile_commands.json +/.envrc + +# IDEs +/.vs/ +/.vscode/ +/.idea/ + +# Build/deps dir +/build/ +/.deps/ +/tmp/ +/.clangd/ +/.cache/clangd/ +/.ccls-cache/ +/.clang-tidy + +.DS_Store +*.mo +.*.sw? +*~ +*.pyc +*.o +*.so + +/src/nvim/po/vim.pot +/src/nvim/po/*.ck + +# Generated by tests with $NVIM_LOG_FILE set. +/.nvimlog + +# Generated by scripts/vim-patch.sh +/.vim-src +*.rej + +# Generated by old (Vim) tests. +/test/old/testdir/del +/test/old/testdir/test*.out +/test/old/testdir/test*.res +/test/old/testdir/test*.log +/test/old/testdir/messages +/test/old/testdir/starttime +/test/old/testdir/viminfo +/test/old/testdir/test.ok +/test/old/testdir/*.failed +/test/old/testdir/X* +/test/old/testdir/valgrind.* +/test/old/testdir/.gdbinit +/runtime/indent/testdir/*.out ++runtime/indent/testdir/*.fail +# Generated by test/old/testdir/runnvim.sh. +/test/old/testdir/*.tlog + +# Generated by unit tests. +/test/includes/post/ + +# Generated by luacheck during `make lualint' +.luacheckcache + +# local make targets +local.mk + +# Generated from :help docs +tags +/runtime/doc/*.html +/runtime/doc/tags.ref +/runtime/doc/errors.log + +# Generated by gen_vimdoc.py: +/runtime/doc/*.mpack +/tmp-*-doc + +# vim patches +/vim-*.patch + +# nix build results +/result +/result-* +/contrib/result +/contrib/result-* + +CMakeUserPresets.json From 0e27d4122bc75e1d8f4646d6333b48ed3a3e5c39 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Wed, 17 Jul 2024 09:56:50 -0600 Subject: [PATCH 070/108] refactor(templates): Remove license --- templates/LICENSE | 116 ---------------------------------------------- 1 file changed, 116 deletions(-) delete mode 100644 templates/LICENSE diff --git a/templates/LICENSE b/templates/LICENSE deleted file mode 100644 index 670154e..0000000 --- a/templates/LICENSE +++ /dev/null @@ -1,116 +0,0 @@ -CC0 1.0 Universal - -Statement of Purpose - -The laws of most jurisdictions throughout the world automatically confer -exclusive Copyright and Related Rights (defined below) upon the creator and -subsequent owner(s) (each and all, an "owner") of an original work of -authorship and/or a database (each, a "Work"). - -Certain owners wish to permanently relinquish those rights to a Work for the -purpose of contributing to a commons of creative, cultural and scientific -works ("Commons") that the public can reliably and without fear of later -claims of infringement build upon, modify, incorporate in other works, reuse -and redistribute as freely as possible in any form whatsoever and for any -purposes, including without limitation commercial purposes. These owners may -contribute to the Commons to promote the ideal of a free culture and the -further production of creative, cultural and scientific works, or to gain -reputation or greater distribution for their Work in part through the use and -efforts of others. - -For these and/or other purposes and motivations, and without any expectation -of additional consideration or compensation, the person associating CC0 with a -Work (the "Affirmer"), to the extent that he or she is an owner of Copyright -and Related Rights in the Work, voluntarily elects to apply CC0 to the Work -and publicly distribute the Work under its terms, with knowledge of his or her -Copyright and Related Rights in the Work and the meaning and intended legal -effect of CC0 on those rights. - -1. Copyright and Related Rights. A Work made available under CC0 may be -protected by copyright and related or neighboring rights ("Copyright and -Related Rights"). Copyright and Related Rights include, but are not limited -to, the following: - - i. the right to reproduce, adapt, distribute, perform, display, communicate, - and translate a Work; - - ii. moral rights retained by the original author(s) and/or performer(s); - - iii. publicity and privacy rights pertaining to a person's image or likeness - depicted in a Work; - - iv. rights protecting against unfair competition in regards to a Work, - subject to the limitations in paragraph 4(a), below; - - v. rights protecting the extraction, dissemination, use and reuse of data in - a Work; - - vi. database rights (such as those arising under Directive 96/9/EC of the - European Parliament and of the Council of 11 March 1996 on the legal - protection of databases, and under any national implementation thereof, - including any amended or successor version of such directive); and - - vii. other similar, equivalent or corresponding rights throughout the world - based on applicable law or treaty, and any national implementations thereof. - -2. Waiver. To the greatest extent permitted by, but not in contravention of, -applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and -unconditionally waives, abandons, and surrenders all of Affirmer's Copyright -and Related Rights and associated claims and causes of action, whether now -known or unknown (including existing as well as future claims and causes of -action), in the Work (i) in all territories worldwide, (ii) for the maximum -duration provided by applicable law or treaty (including future time -extensions), (iii) in any current or future medium and for any number of -copies, and (iv) for any purpose whatsoever, including without limitation -commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes -the Waiver for the benefit of each member of the public at large and to the -detriment of Affirmer's heirs and successors, fully intending that such Waiver -shall not be subject to revocation, rescission, cancellation, termination, or -any other legal or equitable action to disrupt the quiet enjoyment of the Work -by the public as contemplated by Affirmer's express Statement of Purpose. - -3. Public License Fallback. Should any part of the Waiver for any reason be -judged legally invalid or ineffective under applicable law, then the Waiver -shall be preserved to the maximum extent permitted taking into account -Affirmer's express Statement of Purpose. In addition, to the extent the Waiver -is so judged Affirmer hereby grants to each affected person a royalty-free, -non transferable, non sublicensable, non exclusive, irrevocable and -unconditional license to exercise Affirmer's Copyright and Related Rights in -the Work (i) in all territories worldwide, (ii) for the maximum duration -provided by applicable law or treaty (including future time extensions), (iii) -in any current or future medium and for any number of copies, and (iv) for any -purpose whatsoever, including without limitation commercial, advertising or -promotional purposes (the "License"). The License shall be deemed effective as -of the date CC0 was applied by Affirmer to the Work. Should any part of the -License for any reason be judged legally invalid or ineffective under -applicable law, such partial invalidity or ineffectiveness shall not -invalidate the remainder of the License, and in such case Affirmer hereby -affirms that he or she will not (i) exercise any of his or her remaining -Copyright and Related Rights in the Work or (ii) assert any associated claims -and causes of action with respect to the Work, in either case contrary to -Affirmer's express Statement of Purpose. - -4. Limitations and Disclaimers. - - a. No trademark or patent rights held by Affirmer are waived, abandoned, - surrendered, licensed or otherwise affected by this document. - - b. Affirmer offers the Work as-is and makes no representations or warranties - of any kind concerning the Work, express, implied, statutory or otherwise, - including without limitation warranties of title, merchantability, fitness - for a particular purpose, non infringement, or the absence of latent or - other defects, accuracy, or the present or absence of errors, whether or not - discoverable, all to the greatest extent permissible under applicable law. - - c. Affirmer disclaims responsibility for clearing rights of other persons - that may apply to the Work or any use thereof, including without limitation - any person's Copyright and Related Rights in the Work. Further, Affirmer - disclaims responsibility for obtaining any necessary consents, permissions - or other rights required for any use of the Work. - - d. Affirmer understands and acknowledges that Creative Commons is not a - party to this document and has no duty or obligation with respect to this - CC0 or use of the Work. - -For more information, please see - From 1d0d1d10c2a681cbcb9621e08d9a2fbbfcf9be13 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Wed, 17 Jul 2024 13:52:19 -0600 Subject: [PATCH 071/108] ci(test): Created test workflow --- .github/workflows/test.yml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..87d7f4f --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,26 @@ +name: Tests + +on: + push: + +jobs: + test: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest] + python-version: ['3.12'] + + steps: + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v3 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install --updagre pip + pip install poetry + poetry install + - name: Run Tests + run: poetry run pytest From 044d7983e391a6bb42daa901116beec5124c2b05 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Wed, 17 Jul 2024 13:53:44 -0600 Subject: [PATCH 072/108] fix(test.yml): Misstyping error fixed --- .github/workflows/test.yml | 2 +- poetry.lock | 131 ++++++++++++++++++++++++++++++++++++- pyproject.toml | 1 + 3 files changed, 132 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 87d7f4f..cb1146e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -19,7 +19,7 @@ jobs: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | - python -m pip install --updagre pip + python -m pip install --upgrade pip pip install poetry poetry install - name: Run Tests diff --git a/poetry.lock b/poetry.lock index c0d70ad..8588dc8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -128,6 +128,17 @@ tests = ["attrs[tests-no-zope]", "zope-interface"] tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] +[[package]] +name = "cachetools" +version = "5.4.0" +description = "Extensible memoizing collections and decorators" +optional = false +python-versions = ">=3.7" +files = [ + {file = "cachetools-5.4.0-py3-none-any.whl", hash = "sha256:3ae3b49a3d5e28a77a0be2b37dbcb89005058959cb2323858c2657c4a8cab474"}, + {file = "cachetools-5.4.0.tar.gz", hash = "sha256:b8adc2e7c07f105ced7bc56dbb6dfbe7c4a00acce20e2227b3f355be89bc6827"}, +] + [[package]] name = "cattrs" version = "23.2.3" @@ -151,6 +162,17 @@ pyyaml = ["pyyaml (>=6.0)"] tomlkit = ["tomlkit (>=0.11.8)"] ujson = ["ujson (>=5.7.0)"] +[[package]] +name = "chardet" +version = "5.2.0" +description = "Universal encoding detector for Python 3" +optional = false +python-versions = ">=3.7" +files = [ + {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"}, + {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"}, +] + [[package]] name = "click" version = "8.1.7" @@ -176,6 +198,33 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +[[package]] +name = "distlib" +version = "0.3.8" +description = "Distribution utilities" +optional = false +python-versions = "*" +files = [ + {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"}, + {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, +] + +[[package]] +name = "filelock" +version = "3.15.4" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.8" +files = [ + {file = "filelock-3.15.4-py3-none-any.whl", hash = "sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7"}, + {file = "filelock-3.15.4.tar.gz", hash = "sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb"}, +] + +[package.extras] +docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-asyncio (>=0.21)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)", "virtualenv (>=20.26.2)"] +typing = ["typing-extensions (>=4.8)"] + [[package]] name = "frozenlist" version = "1.4.1" @@ -618,6 +667,22 @@ files = [ {file = "pipe-2.2.tar.gz", hash = "sha256:6a253198e3bc542ffaf0a4222376586bce8583b27a9ddbc2cfbaa554c049230d"}, ] +[[package]] +name = "platformdirs" +version = "4.2.2" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +optional = false +python-versions = ">=3.8" +files = [ + {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, + {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, +] + +[package.extras] +docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] +type = ["mypy (>=1.8)"] + [[package]] name = "pluggy" version = "1.5.0" @@ -665,6 +730,24 @@ files = [ [package.extras] windows-terminal = ["colorama (>=0.4.6)"] +[[package]] +name = "pyproject-api" +version = "1.7.1" +description = "API to interact with the python pyproject.toml based projects" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyproject_api-1.7.1-py3-none-any.whl", hash = "sha256:2dc1654062c2b27733d8fd4cdda672b22fe8741ef1dde8e3a998a9547b071eeb"}, + {file = "pyproject_api-1.7.1.tar.gz", hash = "sha256:7ebc6cd10710f89f4cf2a2731710a98abce37ebff19427116ff2174c9236a827"}, +] + +[package.dependencies] +packaging = ">=24.1" + +[package.extras] +docs = ["furo (>=2024.5.6)", "sphinx-autodoc-typehints (>=2.2.1)"] +testing = ["covdefaults (>=2.3)", "pytest (>=8.2.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "setuptools (>=70.1)"] + [[package]] name = "pytest" version = "8.2.2" @@ -787,6 +870,32 @@ msgpack = ">=1.0.3" textual = ">=0.36.0" typing-extensions = ">=4.4.0,<5.0.0" +[[package]] +name = "tox" +version = "4.16.0" +description = "tox is a generic virtualenv management and test command line tool" +optional = false +python-versions = ">=3.8" +files = [ + {file = "tox-4.16.0-py3-none-any.whl", hash = "sha256:61e101061b977b46cf00093d4319438055290ad0009f84497a07bf2d2d7a06d0"}, + {file = "tox-4.16.0.tar.gz", hash = "sha256:43499656f9949edb681c0f907f86fbfee98677af9919d8b11ae5ad77cb800748"}, +] + +[package.dependencies] +cachetools = ">=5.3.3" +chardet = ">=5.2" +colorama = ">=0.4.6" +filelock = ">=3.15.4" +packaging = ">=24.1" +platformdirs = ">=4.2.2" +pluggy = ">=1.5" +pyproject-api = ">=1.7.1" +virtualenv = ">=20.26.3" + +[package.extras] +docs = ["furo (>=2024.5.6)", "sphinx (>=7.3.7)", "sphinx-argparse-cli (>=1.16)", "sphinx-autodoc-typehints (>=2.2.2)", "sphinx-copybutton (>=0.5.2)", "sphinx-inline-tabs (>=2023.4.21)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.11)"] +testing = ["build[virtualenv] (>=1.2.1)", "covdefaults (>=2.3)", "detect-test-pollution (>=1.2)", "devpi-process (>=1)", "diff-cover (>=9.1)", "distlib (>=0.3.8)", "flaky (>=3.8.1)", "hatch-vcs (>=0.4)", "hatchling (>=1.25)", "psutil (>=6)", "pytest (>=8.2.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-xdist (>=3.6.1)", "re-assert (>=1.1)", "setuptools (>=70.2)", "time-machine (>=2.14.2)", "wheel (>=0.43)"] + [[package]] name = "typing-extensions" version = "4.12.2" @@ -812,6 +921,26 @@ files = [ [package.extras] test = ["coverage", "pytest", "pytest-cov"] +[[package]] +name = "virtualenv" +version = "20.26.3" +description = "Virtual Python Environment builder" +optional = false +python-versions = ">=3.7" +files = [ + {file = "virtualenv-20.26.3-py3-none-any.whl", hash = "sha256:8cc4a31139e796e9a7de2cd5cf2489de1217193116a8fd42328f1bd65f434589"}, + {file = "virtualenv-20.26.3.tar.gz", hash = "sha256:4c43a2a236279d9ea36a0d76f98d84bd6ca94ac4e0f4a3b9d46d05e10fea542a"}, +] + +[package.dependencies] +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" +platformdirs = ">=3.9.1,<5" + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] + [[package]] name = "yarl" version = "1.9.4" @@ -918,4 +1047,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "157bf11d8cf0a1b5936210b1f6f7a56772d1fc0a0efdda5e77101d6ce147fac5" +content-hash = "fb09f7e7af81944d1fbf252e2cb90470ccfbab4a00398010f11dc884ff3ec1fb" diff --git a/pyproject.toml b/pyproject.toml index 5aa3ec8..9202828 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,6 +10,7 @@ python = "^3.12" textual = "^0.72.0" rich = "^13.7.1" pipe = "^2.2" +tox = "^4.16.0" [tool.poetry.group.dev.dependencies] From 189db6e2585aaf3cff8c2ea741f03ed9cfc45810 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Wed, 17 Jul 2024 14:00:38 -0600 Subject: [PATCH 073/108] chore(mypy): Set target python vervion --- pyproject.toml | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 9202828..a635da1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,22 +33,22 @@ exclude = [".git", "__pycache__", "styles", ".vscode"] [tool.ruff.lint] select = [ - "F", - "E", - "W", - "N", - "UP", - "ANN", - "BLE", - "A", - "COM", - "C4", - "DTZ", - "Q", - "SLF", - "SIM", - "PTH", - "I", + "F", + "E", + "W", + "N", + "UP", + "ANN", + "BLE", + "A", + "COM", + "C4", + "DTZ", + "Q", + "SLF", + "SIM", + "PTH", + "I", ] ignore = [] @@ -61,6 +61,8 @@ line-ending = "auto" [tool.mypy] +python_version = "3.10" + check_untyped_defs = true ignore_missing_imports = true From b7e7b90276ac88d39184e3728038e61adcb55a6a Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Wed, 17 Jul 2024 14:04:16 -0600 Subject: [PATCH 074/108] ci(linter.yml): Divided in different jobs typing and linting check --- .github/workflows/linter.yml | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index a425c2c..bedffd5 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -7,7 +7,7 @@ on: branches: [master] jobs: - test: + check-linting: runs-on: ${{ matrix.os }} strategy: matrix: @@ -25,7 +25,25 @@ jobs: python -m pip install --upgrade pip pip install poetry poetry install - - name: Linting + - name: Run Ruff run: poetry run ruff check - - name: Type checking - run: poetry run mypy ignori \ No newline at end of file + check-typing: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest] + python-version: ['3.12'] + + steps: + - uses: actions/checkout@v3 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v3 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install poetry + poetry install + - name: Run Mypy + run: poetry run mypy ignori From eb17e1c23beec0a1e52282f86ace313df520168b Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Wed, 17 Jul 2024 14:15:21 -0600 Subject: [PATCH 075/108] ci(test.yml): Set trigger events to start action --- .github/workflows/test.yml | 3 +++ poetry.lock | 2 +- pyproject.toml | 1 + tests/test_search.py | 2 ++ 4 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 tests/test_search.py diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index cb1146e..d29567f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,7 +1,10 @@ name: Tests on: + pull_request: + branches: [master] push: + branches: [master] jobs: test: diff --git a/poetry.lock b/poetry.lock index ce78534..dd38da8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1047,4 +1047,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "bc396c9afc33b1fec0c2abec0d93c239454fdb093f53571ffd32fa44223df88c" +content-hash = "e34c85a0c74ce86baf03ab24540618198132a923e0ff8548cc8a6af69c49b034" diff --git a/pyproject.toml b/pyproject.toml index 5a92625..7827e34 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,6 +11,7 @@ textual = "^0.63.5" rich = "^13.7.1" pipe = "^2.2" tox = "^4.16.0" +pytest = "^8.2.2" [tool.poetry.group.dev.dependencies] diff --git a/tests/test_search.py b/tests/test_search.py new file mode 100644 index 0000000..bb3b511 --- /dev/null +++ b/tests/test_search.py @@ -0,0 +1,2 @@ +def test_empty_search() -> None: + assert 2 + 3 == 5 From 117c95451be073fa9228747a310afde65a58659c Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Fri, 19 Jul 2024 15:02:37 -0600 Subject: [PATCH 076/108] refactor(ignore_file): Moved function from search_form to ignore_file --- ignori/ignore_file.py | 11 +++++++++++ ignori/widgets/search_form.py | 35 ++++++++++++++++++++++------------- 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/ignori/ignore_file.py b/ignori/ignore_file.py index 2501c35..3f3269c 100644 --- a/ignori/ignore_file.py +++ b/ignori/ignore_file.py @@ -43,3 +43,14 @@ def __rich_console__( ], ) yield f"{self.language} {categories}" if categories else f"{self.language}" + + +def get_option_by_id( + ignore_files: list[IgnoreFile], + option_id: str, +) -> IgnoreFile | None: + selected_file = next( + (file for file in ignore_files if file.id == option_id), + None, + ) + return selected_file diff --git a/ignori/widgets/search_form.py b/ignori/widgets/search_form.py index ce9d15c..0eb0e87 100644 --- a/ignori/widgets/search_form.py +++ b/ignori/widgets/search_form.py @@ -9,25 +9,34 @@ from textual.widgets import Button, Input, OptionList from textual.widgets.option_list import Option -from ignori.ignore_file import IgnoreFile +from ignori.ignore_file import IgnoreFile, get_option_by_id from ignori.util.file import get_gitignore_templates from ignori.widgets.file_preview import FilePreview from ignori.widgets.input import BorderlessInput from ignori.widgets.language_list import LanguageList -def get_option_by_id( - ignore_files: list[IgnoreFile], - option_id: str, -) -> IgnoreFile | None: - selected_file = next( - (file for file in ignore_files if file.id == option_id), - None, - ) - return selected_file - - -class SearchButton(Button): ... +class SearchButton(Button): + DEFAULT_CSS = """\ + SearchButton { + height: 1; + min-width: 5; + background: $secondary; + color: $text; + border: none; + text-style: none; + + &:hover { + text-style: b; + padding: 0 1; + border: none; + background: $secondary-darken-1; + } + &.-active { + border: none; + } + } + """ class SearchForm(Container): From fe99bf1515676e2bef17c847ce9ed5d28c1d11b2 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Fri, 19 Jul 2024 15:02:37 -0600 Subject: [PATCH 077/108] refactor(ignore_file): Moved function from search_form to ignore_file --- ignori/ignore_file.py | 11 +++++++++++ ignori/widgets/search_form.py | 35 ++++++++++++++++++++++------------- 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/ignori/ignore_file.py b/ignori/ignore_file.py index 2501c35..3f3269c 100644 --- a/ignori/ignore_file.py +++ b/ignori/ignore_file.py @@ -43,3 +43,14 @@ def __rich_console__( ], ) yield f"{self.language} {categories}" if categories else f"{self.language}" + + +def get_option_by_id( + ignore_files: list[IgnoreFile], + option_id: str, +) -> IgnoreFile | None: + selected_file = next( + (file for file in ignore_files if file.id == option_id), + None, + ) + return selected_file diff --git a/ignori/widgets/search_form.py b/ignori/widgets/search_form.py index ce9d15c..0eb0e87 100644 --- a/ignori/widgets/search_form.py +++ b/ignori/widgets/search_form.py @@ -9,25 +9,34 @@ from textual.widgets import Button, Input, OptionList from textual.widgets.option_list import Option -from ignori.ignore_file import IgnoreFile +from ignori.ignore_file import IgnoreFile, get_option_by_id from ignori.util.file import get_gitignore_templates from ignori.widgets.file_preview import FilePreview from ignori.widgets.input import BorderlessInput from ignori.widgets.language_list import LanguageList -def get_option_by_id( - ignore_files: list[IgnoreFile], - option_id: str, -) -> IgnoreFile | None: - selected_file = next( - (file for file in ignore_files if file.id == option_id), - None, - ) - return selected_file - - -class SearchButton(Button): ... +class SearchButton(Button): + DEFAULT_CSS = """\ + SearchButton { + height: 1; + min-width: 5; + background: $secondary; + color: $text; + border: none; + text-style: none; + + &:hover { + text-style: b; + padding: 0 1; + border: none; + background: $secondary-darken-1; + } + &.-active { + border: none; + } + } + """ class SearchForm(Container): From 426c40ce3b76ac2c3ed10116847268911cce1697 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Fri, 19 Jul 2024 15:08:14 -0600 Subject: [PATCH 078/108] chore: Installed pytest and pytest-asyncio inside "test" dependencies group --- poetry.lock | 20 +++++++++++++++++++- pyproject.toml | 6 +++++- tests/test_search.py | 11 ++++++++++- 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index dd38da8..d82a5cf 100644 --- a/poetry.lock +++ b/poetry.lock @@ -768,6 +768,24 @@ pluggy = ">=1.5,<2.0" [package.extras] dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] +[[package]] +name = "pytest-asyncio" +version = "0.23.8" +description = "Pytest support for asyncio" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest_asyncio-0.23.8-py3-none-any.whl", hash = "sha256:50265d892689a5faefb84df80819d1ecef566eb3549cf915dfb33569359d1ce2"}, + {file = "pytest_asyncio-0.23.8.tar.gz", hash = "sha256:759b10b33a6dc61cce40a8bd5205e302978bbbcc00e279a8b61d9a6a3c82e4d3"}, +] + +[package.dependencies] +pytest = ">=7.0.0,<9" + +[package.extras] +docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1.0)"] +testing = ["coverage (>=6.2)", "hypothesis (>=5.7.1)"] + [[package]] name = "rich" version = "13.7.1" @@ -1047,4 +1065,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "e34c85a0c74ce86baf03ab24540618198132a923e0ff8548cc8a6af69c49b034" +content-hash = "b1db194ce694e1fa87c96e62a73d2c2470f375b7d7dc62815320edc89d9c79bb" diff --git a/pyproject.toml b/pyproject.toml index 7827e34..c22146b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,9 +18,13 @@ pytest = "^8.2.2" textual-dev = "^1.5.1" ruff = "^0.4.6" mypy = "^1.10.0" -pytest = "^8.2.1" ruff-lsp = "^0.0.53" + +[tool.poetry.group.test.dependencies] +pytest = "^8.2.2" +pytest-asyncio = "^0.23.8" + [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" diff --git a/tests/test_search.py b/tests/test_search.py index bb3b511..573a2be 100644 --- a/tests/test_search.py +++ b/tests/test_search.py @@ -1,2 +1,11 @@ -def test_empty_search() -> None: +import pytest + +from ignori.app import IgnoriApp + + +@pytest.mark.asyncio +async def test_empty_search() -> None: + app = IgnoriApp() + async with app.run_test() as pilot: + await pilot.click("#search-button") assert 2 + 3 == 5 From 4352446dbfd13309a5fa65b0bce6e851d7f02203 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Fri, 19 Jul 2024 20:36:53 -0600 Subject: [PATCH 079/108] refactor: Move modals css to app.tcss, also formatted all tcss files --- .editorconfig | 9 ++ ignori/screens/modals/confirm_modal.py | 27 ---- ignori/screens/modals/info_modal.py | 27 ---- ignori/util/settings.py | 5 +- ignori/widgets/generation_form.py | 23 ++- styles/app.tcss | 197 ++++++++++++++----------- styles/global.tcss | 44 +++--- 7 files changed, 162 insertions(+), 170 deletions(-) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..3cd9a81 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*.tcss] +charset = utf-8 +indent_size = 4 +trim_trailing_whitespace = true +indent_style = space +end_of_line = crlf +insert_final_newline = true diff --git a/ignori/screens/modals/confirm_modal.py b/ignori/screens/modals/confirm_modal.py index 00626ba..b38cf81 100644 --- a/ignori/screens/modals/confirm_modal.py +++ b/ignori/screens/modals/confirm_modal.py @@ -7,33 +7,6 @@ class ConfirmModal(ModalScreen[bool]): - DEFAULT_CSS = """\ - ConfirmModal { - align: center middle; - } - - ConfirmModal > Container { - width: auto; - height: auto; - border: thick $background 80%; - background: $surface; - } - - ConfirmModal > Container > Label { - width: 100%; - content-align-horizontal: center; - margin-top: 1; - } - - ConfirmModal > Container > Horizontal { - width: auto; - height: auto; - } - - ConfirmModal > Container > Horizontal > Button { - margin: 2 4; - }""" - message: str def __init__(self: "ConfirmModal", *, message: str) -> None: diff --git a/ignori/screens/modals/info_modal.py b/ignori/screens/modals/info_modal.py index 47a2676..38a2ba7 100644 --- a/ignori/screens/modals/info_modal.py +++ b/ignori/screens/modals/info_modal.py @@ -8,33 +8,6 @@ class InfoModal(ModalScreen[None]): - - DEFAULT_CSS = """ - InfoModal { - align: center middle; - } - - InfoModal > Container { - width: auto; - height: auto; - border: tall $secondary 80%; - background: $surface; - padding: 2 4; - } - - InfoModal > Container > Label { - width: 100%; - content-align-horizontal: center; - margin-top: 1; - } - - InfoModal > Container > Button { - margin: 2 4; - width: auto; - height: auto; - } - """ - message: str button_text: str diff --git a/ignori/util/settings.py b/ignori/util/settings.py index 539d06c..09ec08e 100644 --- a/ignori/util/settings.py +++ b/ignori/util/settings.py @@ -5,9 +5,12 @@ def get_version() -> str: file_path = BASE_DIR / "pyproject.toml" + with file_path.open("rb") as file: pyproject_data = tomllib.load(file) - return pyproject_data["tool"]["poetry"]["version"] + + version: str = pyproject_data["tool"]["poetry"]["version"] + return version BASE_DIR = Path(__file__).resolve().parent.parent.parent diff --git a/ignori/widgets/generation_form.py b/ignori/widgets/generation_form.py index d436ba5..bf181cf 100644 --- a/ignori/widgets/generation_form.py +++ b/ignori/widgets/generation_form.py @@ -19,11 +19,30 @@ from ignori.widgets.language_badge import LanguageBadge -class PathGenerationButton(Button): ... +class PathGenerationButton(Button): + DEFAULT_CSS = """\ + PathGenerationButton { + padding: 0 1; + height: 1; + min-width: 5; + background: $primary; + color: $text; + border: none; + text-style: none; + + &:hover { + text-style: b; + padding: 0 1; + border: none; + background: $primary-darken-1; + } + &.-activate { + border: none; + } + }""" class GenerationForm(Widget): - class Generated(Message): """Event sent when `.gitignore` file is generated""" diff --git a/styles/app.tcss b/styles/app.tcss index a7abba9..f5c5573 100644 --- a/styles/app.tcss +++ b/styles/app.tcss @@ -1,4 +1,4 @@ -BorderlessInput{ +BorderlessInput { border: none; width: 1fr; height: 1; @@ -7,10 +7,12 @@ BorderlessInput{ border: none !important; height: 1 !important; } + & > .input--cursor { color: $text; background: $accent-lighten-2; } + &.-invalid { border: none !important; height: 1; @@ -33,118 +35,139 @@ LanguageList { } FilePreview { - height: 100%; - background: $boost; - overflow-x: hidden; - border: round $accent 20%; - background: transparent; - padding: 0 1; + height: 100%; + background: $boost; + overflow-x: hidden; + border: round $accent 20%; + background: transparent; + padding: 0 1; } FilePreview:focus { border: round $accent; } - PathGenerationButton { - padding: 0 1; +GenerationForm { + padding: 1; + & Horizontal { height: 1; - min-width: 5; - background: $primary; - color: $text; - border: none; - text-style: none; - - &:hover { - text-style: b; + & .label { padding: 0 1; - border: none; - background: $primary-darken-1; + background: $primary-darken-3; } } +} -GenerationForm { - padding: 1; - & Horizontal { - height: 1; - & .label { - padding: 0 1; - background: $primary-darken-3; - } +LanguageBadge { + height: 1; + width: auto; + background: $secondary-darken-3; + + &.no-language{ + background: $secondary-background; + & #icon { + display: none; } } - LanguageBadge { - height: 1; - width: auto; - background: $secondary-darken-3; - &.no-language{ - background: $secondary-background; - & #icon { - display: none; - } - } + & #icon { + padding: 0 1; + background: $secondary; + color: $text; + } - & #icon { - padding: 0 1; - background: $secondary; - color: $text; - } + & #language-name { + color: $text; + min-width: 10; + padding: 0 1; + } +} - & #language-name { - color: $text; - min-width: 10; - padding: 0 1; - } +LanguageBadge:focus { + &.no-language { + background: $secondary-darken-3; } - LanguageBadge:focus { - &.no-language { - background: $secondary-darken-3; + & #icon { + background: white; + color: $text; + text-style: bold; + } +} + +SearchForm { + width: 100%; + + & #search-container{ + height: 1; + + & #search-input { + width: 1fr; } - & #icon { - background: white; - color: $text; - text-style: bold; + & #search-button { + width: auto; } } - SearchButton { - height: 1; - min-width: 5; - background: $secondary; - color: $text; - border: none; - text-style: none; - &:hover { - text-style: b; - padding: 0 1; - border: none; - background: $secondary-darken-1; + & #ignore-container{ + & OptionList { + width: 1fr; + height:100%; + } + & #ignore-code{ + width: 1fr !important; } } - SearchForm { - width: 100%; +} - & #search-container{ - height: 1; +ConfirmModal { + align: center middle; +} - & #search-input { - width: 1fr; - } +ConfirmModal > Container { + width: auto; + height: auto; + border: thick $background 80%; + background: $surface; + padding: 1; +} - & #search-button { - width: auto; - } - } +ConfirmModal > Container > Label { + width: 100%; + content-align-horizontal: center; + margin-top: 1; +} - & #ignore-container{ - & OptionList { - width: 1fr; - height:100%; - } - & #ignore-code{ - width: 1fr !important; - } - } - } +ConfirmModal > Container > Horizontal { + width: auto; + height: auto; +} + +ConfirmModal > Container > Horizontal > Button { + margin: 2 4; +} + +InfoModal { + align: center middle; +} + +InfoModal > Container { + width: auto; + height: auto; + border: tall $secondary 80%; + background: $surface; + padding: 2 4; +} + +InfoModal > Container > Label { + width: 100%; + content-align-horizontal: center; + margin-top: 1; +} + +InfoModal > Container > Button { + margin: 2 4; + width: auto; + height: auto; +} diff --git a/styles/global.tcss b/styles/global.tcss index 54df713..abbd14a 100644 --- a/styles/global.tcss +++ b/styles/global.tcss @@ -22,34 +22,26 @@ $success: #66EAC6; } } - Header { - height: 1; - margin-bottom: 1; - padding: 0 2; - margin: 1 0; - - & #app-title { - width: auto; - content-align: left middle; - color: $text; - background: $primary; - padding: 0 1; - } - - & #app-version { - content-align: right middle; - color: $text 40%; - text-style: italic; - width:1fr; - } +Header { + height: 1; + margin-bottom: 1; + padding: 0 2; + margin: 1 0; + + & #app-title { + width: auto; + content-align: left middle; + color: $text; + background: $primary; + padding: 0 1; } -.show { - display: block; -} - -.hide { - display: none; + & #app-version { + content-align: right middle; + color: $text 40%; + text-style: italic; + width:1fr; + } } .muted-text { From 9c21b0ab38d5b1402b479e475ff80cdc349b8698 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Fri, 19 Jul 2024 20:44:29 -0600 Subject: [PATCH 080/108] refactor: Move all css that belongs to modals into modals.tcss --- ignori/util/settings.py | 6 +++- styles/modals.tcss | 50 ++++++++++++++++++++++++++++++ styles/{app.tcss => widgets.tcss} | 51 ------------------------------- 3 files changed, 55 insertions(+), 52 deletions(-) create mode 100644 styles/modals.tcss rename styles/{app.tcss => widgets.tcss} (69%) diff --git a/ignori/util/settings.py b/ignori/util/settings.py index 09ec08e..e94fc45 100644 --- a/ignori/util/settings.py +++ b/ignori/util/settings.py @@ -17,7 +17,11 @@ def get_version() -> str: STYLES_DIR = BASE_DIR / "styles" -STYLES_PATH = [STYLES_DIR / "global.tcss", STYLES_DIR / "app.tcss"] +STYLES_PATH = [ + STYLES_DIR / "global.tcss", + STYLES_DIR / "widgets.tcss", + STYLES_DIR / "modals.tcss", +] TEMPLATES_PATH = BASE_DIR / "templates" diff --git a/styles/modals.tcss b/styles/modals.tcss new file mode 100644 index 0000000..d5d9aeb --- /dev/null +++ b/styles/modals.tcss @@ -0,0 +1,50 @@ +ConfirmModal { + align: center middle; +} + +ConfirmModal > Container { + width: auto; + height: auto; + border: thick $background 80%; + background: $surface; + padding: 1; +} + +ConfirmModal > Container > Label { + width: 100%; + content-align-horizontal: center; + margin-top: 1; +} + +ConfirmModal > Container > Horizontal { + width: auto; + height: auto; +} + +ConfirmModal > Container > Horizontal > Button { + margin: 2 4; +} + +InfoModal { + align: center middle; +} + +InfoModal > Container { + width: auto; + height: auto; + border: tall $secondary 80%; + background: $surface; + padding: 2 4; +} + +InfoModal > Container > Label { + width: 100%; + content-align-horizontal: center; + margin-top: 1; +} + +InfoModal > Container > Button { + margin: 2 4; + width: auto; + height: auto; +} diff --git a/styles/app.tcss b/styles/widgets.tcss similarity index 69% rename from styles/app.tcss rename to styles/widgets.tcss index f5c5573..ef9ad16 100644 --- a/styles/app.tcss +++ b/styles/widgets.tcss @@ -120,54 +120,3 @@ SearchForm { } } } - -ConfirmModal { - align: center middle; -} - -ConfirmModal > Container { - width: auto; - height: auto; - border: thick $background 80%; - background: $surface; - padding: 1; -} - -ConfirmModal > Container > Label { - width: 100%; - content-align-horizontal: center; - margin-top: 1; -} - -ConfirmModal > Container > Horizontal { - width: auto; - height: auto; -} - -ConfirmModal > Container > Horizontal > Button { - margin: 2 4; -} - -InfoModal { - align: center middle; -} - -InfoModal > Container { - width: auto; - height: auto; - border: tall $secondary 80%; - background: $surface; - padding: 2 4; -} - -InfoModal > Container > Label { - width: 100%; - content-align-horizontal: center; - margin-top: 1; -} - -InfoModal > Container > Button { - margin: 2 4; - width: auto; - height: auto; -} From b5c71edd271f6a0505809e5fe6e3fb01e99b3d67 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Fri, 19 Jul 2024 21:55:18 -0600 Subject: [PATCH 081/108] style: Remove redundant definition of SearchForm --- styles/widgets.tcss | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/styles/widgets.tcss b/styles/widgets.tcss index ef9ad16..b83d5a6 100644 --- a/styles/widgets.tcss +++ b/styles/widgets.tcss @@ -21,10 +21,6 @@ BorderlessInput { } } -SearchForm { - padding: 0 1; -} - LanguageList { border: round $accent 20%; background: transparent; @@ -97,6 +93,7 @@ LanguageBadge:focus { SearchForm { width: 100%; + padding: 0 1; & #search-container{ height: 1; From dfa2af26f5da06f2460ef920ec833d6185e6cd0c Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Fri, 19 Jul 2024 21:56:19 -0600 Subject: [PATCH 082/108] refactor(templates): Set content to language gitignore files that inherties from other language gitignore --- templates/Clojure.gitignore | 15 ++++++++++++++- templates/EPiServer.gitignore | 4 ---- templates/Fortran.gitignore | 33 ++++++++++++++++++++++++++++++++- 3 files changed, 46 insertions(+), 6 deletions(-) delete mode 100644 templates/EPiServer.gitignore diff --git a/templates/Clojure.gitignore b/templates/Clojure.gitignore index 7657a27..a4cb69a 100644 --- a/templates/Clojure.gitignore +++ b/templates/Clojure.gitignore @@ -1 +1,14 @@ -Leiningen.gitignore \ No newline at end of file +pom.xml +pom.xml.asc +*.jar +*.class +/lib/ +/classes/ +/target/ +/checkouts/ +.lein-deps-sum +.lein-repl-history +.lein-plugins/ +.lein-failures +.nrepl-port +.cpcache/ diff --git a/templates/EPiServer.gitignore b/templates/EPiServer.gitignore deleted file mode 100644 index 97037de..0000000 --- a/templates/EPiServer.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -###################### -## EPiServer Files -###################### -*License.config diff --git a/templates/Fortran.gitignore b/templates/Fortran.gitignore index 5daba98..259148f 100644 --- a/templates/Fortran.gitignore +++ b/templates/Fortran.gitignore @@ -1 +1,32 @@ -C++.gitignore \ No newline at end of file +# Prerequisites +*.d + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod +*.smod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app From 925742edf60c5a99edc74914ae00b839a26f6ad1 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Sun, 21 Jul 2024 22:46:52 -0600 Subject: [PATCH 083/108] ci(test): Added verbose parameter to pytest --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d29567f..b934169 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -26,4 +26,4 @@ jobs: pip install poetry poetry install - name: Run Tests - run: poetry run pytest + run: poetry run pytest -v From 6217cd88ff3347a08f9dc008d99f7a511ad47162 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Sun, 21 Jul 2024 22:47:37 -0600 Subject: [PATCH 084/108] refactor(IgnoriApp): Remove dark mode binding --- ignori/app.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/ignori/app.py b/ignori/app.py index cfae7fc..1cf1523 100644 --- a/ignori/app.py +++ b/ignori/app.py @@ -26,12 +26,6 @@ class IgnoriApp(App[None], inherit_bindings=False): description="Quit", priority=True, ), - Binding( - key="ctrl+d", - action="toggle_dark", - description="Toggle Dark Mode", - priority=True, - ), ] selected_ignore_file: reactive[IgnoreFile | None] = reactive(None) From 7d76b40b3f7ad6eb0db764ceb56847d3f8ae0bfc Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Sun, 21 Jul 2024 22:49:40 -0600 Subject: [PATCH 085/108] refactor: Added total of languages found in LanguageList widget border title --- ignori/widgets/language_list.py | 3 ++- ignori/widgets/search_form.py | 7 +++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/ignori/widgets/language_list.py b/ignori/widgets/language_list.py index 4da2557..271c7e8 100644 --- a/ignori/widgets/language_list.py +++ b/ignori/widgets/language_list.py @@ -9,10 +9,11 @@ class LanguageList(OptionList): + DEFAULT_BORDER_TITLE = "Languages" BINDINGS = [ Binding("ctrl+o", "open_templates", "Open explorer", show=True), ] - BORDER_TITLE = "Languagues" + BORDER_TITLE = DEFAULT_BORDER_TITLE def action_open_templates(self: Self) -> None: try: diff --git a/ignori/widgets/search_form.py b/ignori/widgets/search_form.py index 0eb0e87..3dce6aa 100644 --- a/ignori/widgets/search_form.py +++ b/ignori/widgets/search_form.py @@ -28,7 +28,6 @@ class SearchButton(Button): &:hover { text-style: b; - padding: 0 1; border: none; background: $secondary-darken-1; } @@ -84,15 +83,19 @@ def compute_filtered_ignore_files(self: Self) -> list[IgnoreFile]: ] def watch_filtered_ignore_files(self: Self, ignore_files: list[IgnoreFile]) -> None: - ignore_list = self.query_one("#ignore-list", expect_type=OptionList) + ignore_list = self.query_one("#ignore-list", expect_type=LanguageList) ignore_list.clear_options() if ignore_files: ignore_list.add_options( [Option(file, id=file.id) for file in ignore_files], ) + ignore_list.border_title = ( + f"{ignore_list.DEFAULT_BORDER_TITLE} ({ignore_list.option_count})" + ) else: ignore_list.add_option(Option("No files found", disabled=True)) + ignore_list.border_title = f"{ignore_list.DEFAULT_BORDER_TITLE}" def compose(self: Self) -> ComposeResult: with Horizontal(id="search-container"): From 8785f05e7c32ed82c2af61dff5128f5757cc3340 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Sun, 21 Jul 2024 22:51:00 -0600 Subject: [PATCH 086/108] test(test_search): Created test for empty search, different capitalization search and different languages search --- tests/test_search.py | 46 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/tests/test_search.py b/tests/test_search.py index 573a2be..861ce0a 100644 --- a/tests/test_search.py +++ b/tests/test_search.py @@ -1,11 +1,55 @@ import pytest from ignori.app import IgnoriApp +from ignori.util.file import get_gitignore_templates +from ignori.widgets.input import BorderlessInput +from ignori.widgets.language_list import LanguageList @pytest.mark.asyncio async def test_empty_search() -> None: app = IgnoriApp() async with app.run_test() as pilot: + search_input = pilot.app.query_one("#search-input", expect_type=BorderlessInput) + search_input.focus() await pilot.click("#search-button") - assert 2 + 3 == 5 + + language_list = pilot.app.query_one("#ignore-list", expect_type=LanguageList) + assert language_list.option_count == len(get_gitignore_templates()) + + +@pytest.mark.asyncio +@pytest.mark.parametrize( + "language, option_count", + [("py", 2), ("python", 1), ("c++", 1), ("c", 52), ("java", 1)], +) +async def test_languages_search(language: str, option_count: int) -> None: + app = IgnoriApp() + async with app.run_test() as pilot: + search_input = pilot.app.query_one("#search-input", expect_type=BorderlessInput) + search_input.focus() + await pilot.press(*language) + await pilot.click("#search-button") + + language_list = pilot.app.query_one("#ignore-list", expect_type=LanguageList) + assert language_list.option_count == option_count + + +@pytest.mark.asyncio +@pytest.mark.parametrize( + "language, option_count", + [("python", 1), ("PyThOn", 1), ("PYTHON", 1)], +) +async def test_search_with_different_capitalization( + language: str, + option_count: int, +) -> None: + app = IgnoriApp() + async with app.run_test() as pilot: + search_input = pilot.app.query_one("#search-input", expect_type=BorderlessInput) + search_input.focus() + await pilot.press(*language) + await pilot.click("#search-button") + + language_list = pilot.app.query_one("#ignore-list", expect_type=LanguageList) + assert language_list.option_count == option_count From 0423ec036df77661d838ecf346a94482622d8db4 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Sun, 21 Jul 2024 23:04:10 -0600 Subject: [PATCH 087/108] refactor(tests): Moved functional test to its own directory --- tests/functional_tests/test_generation.py | 9 +++++++++ tests/{ => functional_tests}/test_search.py | 0 2 files changed, 9 insertions(+) create mode 100644 tests/functional_tests/test_generation.py rename tests/{ => functional_tests}/test_search.py (100%) diff --git a/tests/functional_tests/test_generation.py b/tests/functional_tests/test_generation.py new file mode 100644 index 0000000..c1eea06 --- /dev/null +++ b/tests/functional_tests/test_generation.py @@ -0,0 +1,9 @@ +import pytest + + +@pytest.fixture(scope="module", autouse=True) +def cleanup(request: pytest.FixtureRequest) -> None: + def delete_ignore_file() -> None: + pass + + request.addfinalizer(delete_ignore_file) diff --git a/tests/test_search.py b/tests/functional_tests/test_search.py similarity index 100% rename from tests/test_search.py rename to tests/functional_tests/test_search.py From 1d1e1a380040490a25bbd3faeb80c8c9262232df Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Mon, 22 Jul 2024 00:12:49 -0600 Subject: [PATCH 088/108] test(test_file): Created unit tests to ensure the content is copied from the template file into an output file --- tests/conftest.py | 9 +++++++ tests/data/unit_tests/Example.gitignore | 4 +++ tests/data/unit_tests/Example2.gitignore | 19 ++++++++++++++ tests/unit_tests/conftest.py | 8 ++++++ tests/unit_tests/test_file.py | 32 ++++++++++++++++++++++++ 5 files changed, 72 insertions(+) create mode 100644 tests/conftest.py create mode 100644 tests/data/unit_tests/Example.gitignore create mode 100644 tests/data/unit_tests/Example2.gitignore create mode 100644 tests/unit_tests/conftest.py create mode 100644 tests/unit_tests/test_file.py diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..2d296c4 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,9 @@ +from pathlib import Path + +import pytest + + +@pytest.fixture +def data_dir() -> Path: + tests_dir = Path(__file__) + return tests_dir.parent / "data" diff --git a/tests/data/unit_tests/Example.gitignore b/tests/data/unit_tests/Example.gitignore new file mode 100644 index 0000000..749ccda --- /dev/null +++ b/tests/data/unit_tests/Example.gitignore @@ -0,0 +1,4 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class diff --git a/tests/data/unit_tests/Example2.gitignore b/tests/data/unit_tests/Example2.gitignore new file mode 100644 index 0000000..36646ba --- /dev/null +++ b/tests/data/unit_tests/Example2.gitignore @@ -0,0 +1,19 @@ +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST diff --git a/tests/unit_tests/conftest.py b/tests/unit_tests/conftest.py new file mode 100644 index 0000000..f25da2c --- /dev/null +++ b/tests/unit_tests/conftest.py @@ -0,0 +1,8 @@ +from pathlib import Path + +import pytest + + +@pytest.fixture(scope="package") +def generated_file(tmp_path_factory: pytest.TempPathFactory) -> Path: + return tmp_path_factory.mktemp("output") / "Output.gitignore" diff --git a/tests/unit_tests/test_file.py b/tests/unit_tests/test_file.py new file mode 100644 index 0000000..96599ad --- /dev/null +++ b/tests/unit_tests/test_file.py @@ -0,0 +1,32 @@ +from pathlib import Path + +import pytest + +from ignori.util.file import copy_file_content + + +@pytest.mark.parametrize( + "template,exists", + [("Example.gitignore", False), ("Example2.gitignore", True)], +) +def test_copy_file_content( + template: str, + exists: bool, + generated_file: Path, + data_dir: Path, +) -> None: + source_file = data_dir / "unit_tests" / template + + assert generated_file.exists() == exists + + copy_file_content(source_file=source_file, output_file=generated_file) + with source_file.open() as source, generated_file.open() as output: + assert source.read() == output.read() + + +@pytest.fixture(scope="module", autouse=True) +def cleanup(request: pytest.FixtureRequest) -> None: + def delete_output_file() -> None: + pass + + request.addfinalizer(delete_output_file) From 2719f0c3a7772ebf30b9d4adb53217e850d5fcd2 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Mon, 22 Jul 2024 00:19:13 -0600 Subject: [PATCH 089/108] refactor(test_file): Removed useless fixture to delete output file, to use tmp_path_factory fixture --- tests/unit_tests/test_file.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/tests/unit_tests/test_file.py b/tests/unit_tests/test_file.py index 96599ad..ecdfe7e 100644 --- a/tests/unit_tests/test_file.py +++ b/tests/unit_tests/test_file.py @@ -22,11 +22,3 @@ def test_copy_file_content( copy_file_content(source_file=source_file, output_file=generated_file) with source_file.open() as source, generated_file.open() as output: assert source.read() == output.read() - - -@pytest.fixture(scope="module", autouse=True) -def cleanup(request: pytest.FixtureRequest) -> None: - def delete_output_file() -> None: - pass - - request.addfinalizer(delete_output_file) From 4c3a2ea5016dbcb1a65c5323f68a3f539f3094ca Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Mon, 22 Jul 2024 13:59:52 -0600 Subject: [PATCH 090/108] test(test_file): Done all the possible test for file.py module --- ignori/ignore_file.py | 1 - ignori/util/file.py | 6 ++-- .../category1/ExampleWithCategory.gitignore | 0 .../category2/ExampleWithCategories.gitignore | 0 tests/unit_tests/test_file.py | 31 ++++++++++++++++++- 5 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 tests/data/unit_tests/category1/ExampleWithCategory.gitignore create mode 100644 tests/data/unit_tests/category1/category2/ExampleWithCategories.gitignore diff --git a/ignori/ignore_file.py b/ignori/ignore_file.py index 3f3269c..db7b562 100644 --- a/ignori/ignore_file.py +++ b/ignori/ignore_file.py @@ -15,7 +15,6 @@ class IgnoreFile: def __post_init__(self: Self) -> None: self.language = self.path.stem - self.id = self.language.lower() self.id = "-".join( [ self.language.lower(), diff --git a/ignori/util/file.py b/ignori/util/file.py index 31fc636..5e7b55e 100644 --- a/ignori/util/file.py +++ b/ignori/util/file.py @@ -29,11 +29,11 @@ def __get_files(template_subpath: Path, categories: list[str]) -> list[IgnoreFil return template_files -def get_gitignore_templates() -> list[IgnoreFile]: +def get_gitignore_templates(templates_path: Path = TEMPLATES_PATH) -> list[IgnoreFile]: template_files: list[IgnoreFile] = [] current_categories: list[str] = [] - for path in TEMPLATES_PATH.iterdir(): + for path in templates_path.iterdir(): if path.is_dir(): template_files.extend( __get_files( @@ -58,5 +58,5 @@ def copy_file_content( source_file: Path, output_file: Path, ) -> None: - with source_file.open("r") as source, output_file.open("w") as destination: + with source_file.open() as source, output_file.open("w") as destination: destination.write(source.read()) diff --git a/tests/data/unit_tests/category1/ExampleWithCategory.gitignore b/tests/data/unit_tests/category1/ExampleWithCategory.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/tests/data/unit_tests/category1/category2/ExampleWithCategories.gitignore b/tests/data/unit_tests/category1/category2/ExampleWithCategories.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/tests/unit_tests/test_file.py b/tests/unit_tests/test_file.py index ecdfe7e..8cbc4f5 100644 --- a/tests/unit_tests/test_file.py +++ b/tests/unit_tests/test_file.py @@ -2,7 +2,8 @@ import pytest -from ignori.util.file import copy_file_content +from ignori.ignore_file import IgnoreFile +from ignori.util.file import copy_file_content, get_gitignore_templates @pytest.mark.parametrize( @@ -22,3 +23,31 @@ def test_copy_file_content( copy_file_content(source_file=source_file, output_file=generated_file) with source_file.open() as source, generated_file.open() as output: assert source.read() == output.read() + + +def test_get_gitignore_templates(data_dir: Path) -> None: + unit_test_dir = data_dir / "unit_tests" + + expected_templates: list[IgnoreFile] = sorted( + [ + IgnoreFile(unit_test_dir / "Example.gitignore"), + IgnoreFile(unit_test_dir / "Example2.gitignore"), + IgnoreFile( + unit_test_dir + / "category1" + / "category2" + / "ExampleWithCategories.gitignore", + categories=["category1", "category2"], + ), + IgnoreFile( + unit_test_dir / "category1" / "ExampleWithCategory.gitignore", + categories=["category1"], + ), + ], + key=lambda file: file.language, + ) + + templates = get_gitignore_templates(unit_test_dir) + + assert len(templates) == len(expected_templates) + assert templates == expected_templates From 9feade90fa8b6255899ae39616c275e53d759b0e Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Mon, 22 Jul 2024 15:26:38 -0600 Subject: [PATCH 091/108] refactor(file): Improved readability by using methods includen in Path class natively --- ignori/util/file.py | 5 +++-- tests/unit_tests/test_file.py | 3 +-- tests/unit_tests/test_validators.py | 0 3 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 tests/unit_tests/test_validators.py diff --git a/ignori/util/file.py b/ignori/util/file.py index 5e7b55e..a7b4dfb 100644 --- a/ignori/util/file.py +++ b/ignori/util/file.py @@ -58,5 +58,6 @@ def copy_file_content( source_file: Path, output_file: Path, ) -> None: - with source_file.open() as source, output_file.open("w") as destination: - destination.write(source.read()) + output_file.write_text( + data=source_file.read_text(), + ) diff --git a/tests/unit_tests/test_file.py b/tests/unit_tests/test_file.py index 8cbc4f5..4655778 100644 --- a/tests/unit_tests/test_file.py +++ b/tests/unit_tests/test_file.py @@ -21,8 +21,7 @@ def test_copy_file_content( assert generated_file.exists() == exists copy_file_content(source_file=source_file, output_file=generated_file) - with source_file.open() as source, generated_file.open() as output: - assert source.read() == output.read() + assert source_file.read_text() == generated_file.read_text() def test_get_gitignore_templates(data_dir: Path) -> None: diff --git a/tests/unit_tests/test_validators.py b/tests/unit_tests/test_validators.py new file mode 100644 index 0000000..e69de29 From 4ad88fc5852b6d4f0b769f0c9b81afe461f7b01b Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Mon, 22 Jul 2024 15:34:33 -0600 Subject: [PATCH 092/108] test(test_validators): Created and passed for PathValidator --- tests/unit_tests/test_validators.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/unit_tests/test_validators.py b/tests/unit_tests/test_validators.py index e69de29..6b1603a 100644 --- a/tests/unit_tests/test_validators.py +++ b/tests/unit_tests/test_validators.py @@ -0,0 +1,18 @@ +from pathlib import Path + +import pytest + +from ignori.util.validators import PathValidator + + +@pytest.mark.parametrize( + "dir_path, is_valid", + [("Example.gitignore", False), ("category1", True)], +) +def test_path_validator(dir_path: Path, is_valid: bool, data_dir: Path) -> None: + path = data_dir / "unit_tests" / dir_path + + validator = PathValidator() + validation_result = validator.validate(str(path)) + + assert validation_result.is_valid == is_valid From 566353a2128c0cd6c421563f967a12e3584a1437 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Tue, 23 Jul 2024 00:12:55 -0600 Subject: [PATCH 093/108] test(test_generation): Created conftest for functional tests --- ignori/app.py | 2 +- tests/functional_tests/conftest.py | 8 +++++++ tests/functional_tests/test_generation.py | 28 +++++++++++++++++++---- tests/unit_tests/conftest.py | 2 +- 4 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 tests/functional_tests/conftest.py diff --git a/ignori/app.py b/ignori/app.py index 1cf1523..262b856 100644 --- a/ignori/app.py +++ b/ignori/app.py @@ -17,7 +17,7 @@ class IgnoriApp(App[None], inherit_bindings=False): TITLE = APP_TITLE - CSS_PATH = STYLES_PATH + CSS_PATH = STYLES_PATH BINDINGS = [ Binding( diff --git a/tests/functional_tests/conftest.py b/tests/functional_tests/conftest.py new file mode 100644 index 0000000..0a3ec9d --- /dev/null +++ b/tests/functional_tests/conftest.py @@ -0,0 +1,8 @@ +from pathlib import Path + +import pytest + + +@pytest.fixture(scope="package") +def generated_file(tmp_path_factory: pytest.TempPathFactory) -> Path: + return tmp_path_factory.mktemp("output") / ".gitignore" diff --git a/tests/functional_tests/test_generation.py b/tests/functional_tests/test_generation.py index c1eea06..8b06e48 100644 --- a/tests/functional_tests/test_generation.py +++ b/tests/functional_tests/test_generation.py @@ -1,9 +1,27 @@ import pytest +from textual.widgets import OptionList +from ignori.app import IgnoriApp +from ignori.widgets.input import BorderlessInput +from ignori.widgets.language_list import LanguageList -@pytest.fixture(scope="module", autouse=True) -def cleanup(request: pytest.FixtureRequest) -> None: - def delete_ignore_file() -> None: - pass - request.addfinalizer(delete_ignore_file) +@pytest.mark.asyncio +@pytest.mark.parametrize("language", ["Python", "Java", "Kotlin"]) +async def test_language_selection(language: str) -> None: + app = IgnoriApp() + async with app.run_test() as pilot: + search_input = pilot.app.query_one("#search-input", expect_type=BorderlessInput) + search_input.focus() + await pilot.press(*language) + await pilot.click("#search-button") + + language_list: OptionList = pilot.app.query_one( + "#ignore-list", + expect_type=OptionList, + ) + language_list.focus() + + # await pilot.click("#ignore-list", offset=(3, 3)) + print(language_list.highlighted, language_list.option_count) + assert True diff --git a/tests/unit_tests/conftest.py b/tests/unit_tests/conftest.py index f25da2c..0a3ec9d 100644 --- a/tests/unit_tests/conftest.py +++ b/tests/unit_tests/conftest.py @@ -5,4 +5,4 @@ @pytest.fixture(scope="package") def generated_file(tmp_path_factory: pytest.TempPathFactory) -> Path: - return tmp_path_factory.mktemp("output") / "Output.gitignore" + return tmp_path_factory.mktemp("output") / ".gitignore" From d2abf892faee81c7ebc4e2bbf8fb51aa74231ebe Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Tue, 23 Jul 2024 00:13:41 -0600 Subject: [PATCH 094/108] ci(test): Added parameter to pytest for more verbosity --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b934169..c7aa6d8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -26,4 +26,4 @@ jobs: pip install poetry poetry install - name: Run Tests - run: poetry run pytest -v + run: poetry run pytest -vv From 479a1e2b5bdfa732b433197c630665bff7da217b Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Tue, 23 Jul 2024 00:14:04 -0600 Subject: [PATCH 095/108] chore: Updated pytest and textual versions --- poetry.lock | 119 +++++++++++++++++++++++++------------------------ pyproject.toml | 6 +-- 2 files changed, 63 insertions(+), 62 deletions(-) diff --git a/poetry.lock b/poetry.lock index d82a5cf..cc5267b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -590,43 +590,43 @@ files = [ [[package]] name = "mypy" -version = "1.10.1" +version = "1.11.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.10.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e36f229acfe250dc660790840916eb49726c928e8ce10fbdf90715090fe4ae02"}, - {file = "mypy-1.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:51a46974340baaa4145363b9e051812a2446cf583dfaeba124af966fa44593f7"}, - {file = "mypy-1.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:901c89c2d67bba57aaaca91ccdb659aa3a312de67f23b9dfb059727cce2e2e0a"}, - {file = "mypy-1.10.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0cd62192a4a32b77ceb31272d9e74d23cd88c8060c34d1d3622db3267679a5d9"}, - {file = "mypy-1.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:a2cbc68cb9e943ac0814c13e2452d2046c2f2b23ff0278e26599224cf164e78d"}, - {file = "mypy-1.10.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bd6f629b67bb43dc0d9211ee98b96d8dabc97b1ad38b9b25f5e4c4d7569a0c6a"}, - {file = "mypy-1.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a1bbb3a6f5ff319d2b9d40b4080d46cd639abe3516d5a62c070cf0114a457d84"}, - {file = "mypy-1.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8edd4e9bbbc9d7b79502eb9592cab808585516ae1bcc1446eb9122656c6066f"}, - {file = "mypy-1.10.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6166a88b15f1759f94a46fa474c7b1b05d134b1b61fca627dd7335454cc9aa6b"}, - {file = "mypy-1.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:5bb9cd11c01c8606a9d0b83ffa91d0b236a0e91bc4126d9ba9ce62906ada868e"}, - {file = "mypy-1.10.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d8681909f7b44d0b7b86e653ca152d6dff0eb5eb41694e163c6092124f8246d7"}, - {file = "mypy-1.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:378c03f53f10bbdd55ca94e46ec3ba255279706a6aacaecac52ad248f98205d3"}, - {file = "mypy-1.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bacf8f3a3d7d849f40ca6caea5c055122efe70e81480c8328ad29c55c69e93e"}, - {file = "mypy-1.10.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:701b5f71413f1e9855566a34d6e9d12624e9e0a8818a5704d74d6b0402e66c04"}, - {file = "mypy-1.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:3c4c2992f6ea46ff7fce0072642cfb62af7a2484efe69017ed8b095f7b39ef31"}, - {file = "mypy-1.10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:604282c886497645ffb87b8f35a57ec773a4a2721161e709a4422c1636ddde5c"}, - {file = "mypy-1.10.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37fd87cab83f09842653f08de066ee68f1182b9b5282e4634cdb4b407266bade"}, - {file = "mypy-1.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8addf6313777dbb92e9564c5d32ec122bf2c6c39d683ea64de6a1fd98b90fe37"}, - {file = "mypy-1.10.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5cc3ca0a244eb9a5249c7c583ad9a7e881aa5d7b73c35652296ddcdb33b2b9c7"}, - {file = "mypy-1.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:1b3a2ffce52cc4dbaeee4df762f20a2905aa171ef157b82192f2e2f368eec05d"}, - {file = "mypy-1.10.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fe85ed6836165d52ae8b88f99527d3d1b2362e0cb90b005409b8bed90e9059b3"}, - {file = "mypy-1.10.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c2ae450d60d7d020d67ab440c6e3fae375809988119817214440033f26ddf7bf"}, - {file = "mypy-1.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6be84c06e6abd72f960ba9a71561c14137a583093ffcf9bbfaf5e613d63fa531"}, - {file = "mypy-1.10.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2189ff1e39db399f08205e22a797383613ce1cb0cb3b13d8bcf0170e45b96cc3"}, - {file = "mypy-1.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:97a131ee36ac37ce9581f4220311247ab6cba896b4395b9c87af0675a13a755f"}, - {file = "mypy-1.10.1-py3-none-any.whl", hash = "sha256:71d8ac0b906354ebda8ef1673e5fde785936ac1f29ff6987c7483cfbd5a4235a"}, - {file = "mypy-1.10.1.tar.gz", hash = "sha256:1f8f492d7db9e3593ef42d4f115f04e556130f2819ad33ab84551403e97dd4c0"}, + {file = "mypy-1.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3824187c99b893f90c845bab405a585d1ced4ff55421fdf5c84cb7710995229"}, + {file = "mypy-1.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:96f8dbc2c85046c81bcddc246232d500ad729cb720da4e20fce3b542cab91287"}, + {file = "mypy-1.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a5d8d8dd8613a3e2be3eae829ee891b6b2de6302f24766ff06cb2875f5be9c6"}, + {file = "mypy-1.11.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:72596a79bbfb195fd41405cffa18210af3811beb91ff946dbcb7368240eed6be"}, + {file = "mypy-1.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:35ce88b8ed3a759634cb4eb646d002c4cef0a38f20565ee82b5023558eb90c00"}, + {file = "mypy-1.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:98790025861cb2c3db8c2f5ad10fc8c336ed2a55f4daf1b8b3f877826b6ff2eb"}, + {file = "mypy-1.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:25bcfa75b9b5a5f8d67147a54ea97ed63a653995a82798221cca2a315c0238c1"}, + {file = "mypy-1.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bea2a0e71c2a375c9fa0ede3d98324214d67b3cbbfcbd55ac8f750f85a414e3"}, + {file = "mypy-1.11.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d2b3d36baac48e40e3064d2901f2fbd2a2d6880ec6ce6358825c85031d7c0d4d"}, + {file = "mypy-1.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:d8e2e43977f0e09f149ea69fd0556623919f816764e26d74da0c8a7b48f3e18a"}, + {file = "mypy-1.11.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1d44c1e44a8be986b54b09f15f2c1a66368eb43861b4e82573026e04c48a9e20"}, + {file = "mypy-1.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cea3d0fb69637944dd321f41bc896e11d0fb0b0aa531d887a6da70f6e7473aba"}, + {file = "mypy-1.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a83ec98ae12d51c252be61521aa5731f5512231d0b738b4cb2498344f0b840cd"}, + {file = "mypy-1.11.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c7b73a856522417beb78e0fb6d33ef89474e7a622db2653bc1285af36e2e3e3d"}, + {file = "mypy-1.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:f2268d9fcd9686b61ab64f077be7ffbc6fbcdfb4103e5dd0cc5eaab53a8886c2"}, + {file = "mypy-1.11.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:940bfff7283c267ae6522ef926a7887305945f716a7704d3344d6d07f02df850"}, + {file = "mypy-1.11.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:14f9294528b5f5cf96c721f231c9f5b2733164e02c1c018ed1a0eff8a18005ac"}, + {file = "mypy-1.11.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7b54c27783991399046837df5c7c9d325d921394757d09dbcbf96aee4649fe9"}, + {file = "mypy-1.11.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:65f190a6349dec29c8d1a1cd4aa71284177aee5949e0502e6379b42873eddbe7"}, + {file = "mypy-1.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:dbe286303241fea8c2ea5466f6e0e6a046a135a7e7609167b07fd4e7baf151bf"}, + {file = "mypy-1.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:104e9c1620c2675420abd1f6c44bab7dd33cc85aea751c985006e83dcd001095"}, + {file = "mypy-1.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f006e955718ecd8d159cee9932b64fba8f86ee6f7728ca3ac66c3a54b0062abe"}, + {file = "mypy-1.11.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:becc9111ca572b04e7e77131bc708480cc88a911adf3d0239f974c034b78085c"}, + {file = "mypy-1.11.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6801319fe76c3f3a3833f2b5af7bd2c17bb93c00026a2a1b924e6762f5b19e13"}, + {file = "mypy-1.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:c1a184c64521dc549324ec6ef7cbaa6b351912be9cb5edb803c2808a0d7e85ac"}, + {file = "mypy-1.11.0-py3-none-any.whl", hash = "sha256:56913ec8c7638b0091ef4da6fcc9136896914a9d60d54670a75880c3e5b99ace"}, + {file = "mypy-1.11.0.tar.gz", hash = "sha256:93743608c7348772fdc717af4aeee1997293a1ad04bc0ea6efa15bf65385c538"}, ] [package.dependencies] mypy-extensions = ">=1.0.0" -typing-extensions = ">=4.1.0" +typing-extensions = ">=4.6.0" [package.extras] dmypy = ["psutil (>=4.0)"] @@ -750,20 +750,20 @@ testing = ["covdefaults (>=2.3)", "pytest (>=8.2.2)", "pytest-cov (>=5)", "pytes [[package]] name = "pytest" -version = "8.2.2" +version = "8.3.1" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-8.2.2-py3-none-any.whl", hash = "sha256:c434598117762e2bd304e526244f67bf66bbd7b5d6cf22138be51ff661980343"}, - {file = "pytest-8.2.2.tar.gz", hash = "sha256:de4bb8104e201939ccdc688b27a89a7be2079b22e2bd2b07f806b6ba71117977"}, + {file = "pytest-8.3.1-py3-none-any.whl", hash = "sha256:e9600ccf4f563976e2c99fa02c7624ab938296551f280835ee6516df8bc4ae8c"}, + {file = "pytest-8.3.1.tar.gz", hash = "sha256:7e8e5c5abd6e93cb1cc151f23e57adc31fcf8cfd2a3ff2da63e23f732de35db6"}, ] [package.dependencies] colorama = {version = "*", markers = "sys_platform == \"win32\""} iniconfig = "*" packaging = "*" -pluggy = ">=1.5,<2.0" +pluggy = ">=1.5,<2" [package.extras] dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] @@ -806,39 +806,40 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.4.10" +version = "0.5.4" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.4.10-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:5c2c4d0859305ac5a16310eec40e4e9a9dec5dcdfbe92697acd99624e8638dac"}, - {file = "ruff-0.4.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a79489607d1495685cdd911a323a35871abfb7a95d4f98fc6f85e799227ac46e"}, - {file = "ruff-0.4.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1dd1681dfa90a41b8376a61af05cc4dc5ff32c8f14f5fe20dba9ff5deb80cd6"}, - {file = "ruff-0.4.10-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c75c53bb79d71310dc79fb69eb4902fba804a81f374bc86a9b117a8d077a1784"}, - {file = "ruff-0.4.10-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18238c80ee3d9100d3535d8eb15a59c4a0753b45cc55f8bf38f38d6a597b9739"}, - {file = "ruff-0.4.10-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:d8f71885bce242da344989cae08e263de29752f094233f932d4f5cfb4ef36a81"}, - {file = "ruff-0.4.10-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:330421543bd3222cdfec481e8ff3460e8702ed1e58b494cf9d9e4bf90db52b9d"}, - {file = "ruff-0.4.10-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e9b6fb3a37b772628415b00c4fc892f97954275394ed611056a4b8a2631365e"}, - {file = "ruff-0.4.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f54c481b39a762d48f64d97351048e842861c6662d63ec599f67d515cb417f6"}, - {file = "ruff-0.4.10-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:67fe086b433b965c22de0b4259ddfe6fa541c95bf418499bedb9ad5fb8d1c631"}, - {file = "ruff-0.4.10-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:acfaaab59543382085f9eb51f8e87bac26bf96b164839955f244d07125a982ef"}, - {file = "ruff-0.4.10-py3-none-musllinux_1_2_i686.whl", hash = "sha256:3cea07079962b2941244191569cf3a05541477286f5cafea638cd3aa94b56815"}, - {file = "ruff-0.4.10-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:338a64ef0748f8c3a80d7f05785930f7965d71ca260904a9321d13be24b79695"}, - {file = "ruff-0.4.10-py3-none-win32.whl", hash = "sha256:ffe3cd2f89cb54561c62e5fa20e8f182c0a444934bf430515a4b422f1ab7b7ca"}, - {file = "ruff-0.4.10-py3-none-win_amd64.whl", hash = "sha256:67f67cef43c55ffc8cc59e8e0b97e9e60b4837c8f21e8ab5ffd5d66e196e25f7"}, - {file = "ruff-0.4.10-py3-none-win_arm64.whl", hash = "sha256:dd1fcee327c20addac7916ca4e2653fbbf2e8388d8a6477ce5b4e986b68ae6c0"}, - {file = "ruff-0.4.10.tar.gz", hash = "sha256:3aa4f2bc388a30d346c56524f7cacca85945ba124945fe489952aadb6b5cd804"}, + {file = "ruff-0.5.4-py3-none-linux_armv6l.whl", hash = "sha256:82acef724fc639699b4d3177ed5cc14c2a5aacd92edd578a9e846d5b5ec18ddf"}, + {file = "ruff-0.5.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:da62e87637c8838b325e65beee485f71eb36202ce8e3cdbc24b9fcb8b99a37be"}, + {file = "ruff-0.5.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e98ad088edfe2f3b85a925ee96da652028f093d6b9b56b76fc242d8abb8e2059"}, + {file = "ruff-0.5.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c55efbecc3152d614cfe6c2247a3054cfe358cefbf794f8c79c8575456efe19"}, + {file = "ruff-0.5.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f9b85eaa1f653abd0a70603b8b7008d9e00c9fa1bbd0bf40dad3f0c0bdd06793"}, + {file = "ruff-0.5.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0cf497a47751be8c883059c4613ba2f50dd06ec672692de2811f039432875278"}, + {file = "ruff-0.5.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:09c14ed6a72af9ccc8d2e313d7acf7037f0faff43cde4b507e66f14e812e37f7"}, + {file = "ruff-0.5.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:628f6b8f97b8bad2490240aa84f3e68f390e13fabc9af5c0d3b96b485921cd60"}, + {file = "ruff-0.5.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3520a00c0563d7a7a7c324ad7e2cde2355733dafa9592c671fb2e9e3cd8194c1"}, + {file = "ruff-0.5.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93789f14ca2244fb91ed481456f6d0bb8af1f75a330e133b67d08f06ad85b516"}, + {file = "ruff-0.5.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:029454e2824eafa25b9df46882f7f7844d36fd8ce51c1b7f6d97e2615a57bbcc"}, + {file = "ruff-0.5.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:9492320eed573a13a0bc09a2957f17aa733fff9ce5bf00e66e6d4a88ec33813f"}, + {file = "ruff-0.5.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a6e1f62a92c645e2919b65c02e79d1f61e78a58eddaebca6c23659e7c7cb4ac7"}, + {file = "ruff-0.5.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:768fa9208df2bec4b2ce61dbc7c2ddd6b1be9fb48f1f8d3b78b3332c7d71c1ff"}, + {file = "ruff-0.5.4-py3-none-win32.whl", hash = "sha256:e1e7393e9c56128e870b233c82ceb42164966f25b30f68acbb24ed69ce9c3a4e"}, + {file = "ruff-0.5.4-py3-none-win_amd64.whl", hash = "sha256:58b54459221fd3f661a7329f177f091eb35cf7a603f01d9eb3eb11cc348d38c4"}, + {file = "ruff-0.5.4-py3-none-win_arm64.whl", hash = "sha256:bd53da65f1085fb5b307c38fd3c0829e76acf7b2a912d8d79cadcdb4875c1eb7"}, + {file = "ruff-0.5.4.tar.gz", hash = "sha256:2795726d5f71c4f4e70653273d1c23a8182f07dd8e48c12de5d867bfb7557eed"}, ] [[package]] name = "ruff-lsp" -version = "0.0.53" +version = "0.0.54" description = "A Language Server Protocol implementation for Ruff." optional = false python-versions = ">=3.7" files = [ - {file = "ruff_lsp-0.0.53-py3-none-any.whl", hash = "sha256:5ea39968510d046b3c62dc5a7e3b52e867c2de14af34a406883fe05d55bab2b0"}, - {file = "ruff_lsp-0.0.53.tar.gz", hash = "sha256:de38eccd06020350630ac3518fe04a9640c8f66908758d8a623b5ea021bf84b0"}, + {file = "ruff_lsp-0.0.54-py3-none-any.whl", hash = "sha256:1cc7d2f1cb69cbea1dfeba0f2d7dd5832bc68b0b052c7166530bcce63aa75f57"}, + {file = "ruff_lsp-0.0.54.tar.gz", hash = "sha256:33e1d4dd20ca481fc6a811afcfdd451798c22fc39f2104df23c2855e322a0582"}, ] [package.dependencies] @@ -849,17 +850,17 @@ ruff = ">=0.0.274" typing-extensions = "*" [package.extras] -dev = ["mypy (==1.4.1)", "pip-tools (>=6.13.0,<7.0.0)", "pytest (>=7.3.1,<8.0.0)", "pytest-asyncio (==0.21.1)", "python-lsp-jsonrpc (==1.0.0)"] +dev = ["mypy (==1.4.1)", "pip-tools (>=6.13.0,<7.0.0)", "pytest (>=7.3.1,<8.0.0)", "pytest-asyncio (==0.21.2)", "python-lsp-jsonrpc (==1.0.0)"] [[package]] name = "textual" -version = "0.63.6" +version = "0.73.0" description = "Modern Text User Interface framework" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "textual-0.63.6-py3-none-any.whl", hash = "sha256:7cf6c320b7445bcab42360d3957ed5b14163f8687fad282d772e2af6407ea3a1"}, - {file = "textual-0.63.6.tar.gz", hash = "sha256:cac575e60fe8b376bed3d6ac1723c137cea69f3e48cecdc78b289da10de7f9e5"}, + {file = "textual-0.73.0-py3-none-any.whl", hash = "sha256:4d93d80d203f7fb7ba51828a546e8777019700d529a1b405ceee313dea2edfc2"}, + {file = "textual-0.73.0.tar.gz", hash = "sha256:ccd1e873370577f557dfdf2b3411f2a4f68b57d4365f9d83a00d084afb15f5a6"}, ] [package.dependencies] @@ -1065,4 +1066,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "b1db194ce694e1fa87c96e62a73d2c2470f375b7d7dc62815320edc89d9c79bb" +content-hash = "c06aa2924d74c8a38891d421688b41a0e3d0fe530c034484590a1d4d763ae5bf" diff --git a/pyproject.toml b/pyproject.toml index c22146b..8b6f5cb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ readme = "README.md" [tool.poetry.dependencies] python = "^3.12" -textual = "^0.63.5" +textual = "^0.73.0" rich = "^13.7.1" pipe = "^2.2" tox = "^4.16.0" @@ -16,9 +16,9 @@ pytest = "^8.2.2" [tool.poetry.group.dev.dependencies] textual-dev = "^1.5.1" -ruff = "^0.4.6" +ruff = "^0.5.4" mypy = "^1.10.0" -ruff-lsp = "^0.0.53" +ruff-lsp = "^0.0.54" [tool.poetry.group.test.dependencies] From e95ca5165c400183f15fb894c6819add4a85d689 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Thu, 25 Jul 2024 22:36:56 -0600 Subject: [PATCH 096/108] test(test_generation): Created test for language selection --- .vscode/settings.json | 7 ++++- ignori/app.py | 5 ++-- ignori/widgets/generation_form.py | 4 +-- tests/functional_tests/test_generation.py | 31 ++++++++++++++++++----- 4 files changed, 35 insertions(+), 12 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 457f44d..e59d60b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,8 @@ { - "python.analysis.typeCheckingMode": "basic" + "python.analysis.typeCheckingMode": "basic", + "python.testing.pytestArgs": [ + "tests" + ], + "python.testing.unittestEnabled": false, + "python.testing.pytestEnabled": true } \ No newline at end of file diff --git a/ignori/app.py b/ignori/app.py index 262b856..811a894 100644 --- a/ignori/app.py +++ b/ignori/app.py @@ -1,11 +1,10 @@ -from typing import Self - from textual import on from textual.app import App, ComposeResult from textual.binding import Binding from textual.containers import Vertical from textual.reactive import reactive from textual.widgets import Footer +from typing_extensions import Self from ignori.ignore_file import IgnoreFile from ignori.util.settings import APP_TITLE, STYLES_PATH @@ -17,7 +16,7 @@ class IgnoriApp(App[None], inherit_bindings=False): TITLE = APP_TITLE - CSS_PATH = STYLES_PATH + CSS_PATH = STYLES_PATH BINDINGS = [ Binding( diff --git a/ignori/widgets/generation_form.py b/ignori/widgets/generation_form.py index bf181cf..d3eb710 100644 --- a/ignori/widgets/generation_form.py +++ b/ignori/widgets/generation_form.py @@ -1,6 +1,5 @@ from functools import partial from pathlib import Path -from typing import Self from textual import on from textual.app import ComposeResult @@ -9,6 +8,7 @@ from textual.reactive import reactive from textual.widget import Widget from textual.widgets import Button, Input, Label +from typing_extensions import Self from ignori.ignore_file import IgnoreFile from ignori.screens.modals.confirm_modal import ConfirmModal @@ -118,7 +118,7 @@ def reset_form(self: Self) -> None: def compose(self: Self) -> ComposeResult: with Horizontal(): yield Label("Language:", classes="label") - yield LanguageBadge().data_bind( + yield LanguageBadge(id="language-badge").data_bind( language_selected=GenerationForm.selected_ignore_file, ) with Horizontal(id="path-form-container"): diff --git a/tests/functional_tests/test_generation.py b/tests/functional_tests/test_generation.py index 8b06e48..e58ade8 100644 --- a/tests/functional_tests/test_generation.py +++ b/tests/functional_tests/test_generation.py @@ -1,8 +1,8 @@ import pytest -from textual.widgets import OptionList from ignori.app import IgnoriApp from ignori.widgets.input import BorderlessInput +from ignori.widgets.language_badge import LanguageBadge from ignori.widgets.language_list import LanguageList @@ -16,12 +16,31 @@ async def test_language_selection(language: str) -> None: await pilot.press(*language) await pilot.click("#search-button") - language_list: OptionList = pilot.app.query_one( + language_list: LanguageList = pilot.app.query_one( "#ignore-list", - expect_type=OptionList, + expect_type=LanguageList, ) language_list.focus() - # await pilot.click("#ignore-list", offset=(3, 3)) - print(language_list.highlighted, language_list.option_count) - assert True + # FIXME: Improve option selection to be independent of the list order + await pilot.press("down") + await pilot.press("enter") + + language_badge: LanguageBadge = pilot.app.query_one( + "#language-badge", + expect_type=LanguageBadge, + ) + + assert language_badge.language_selected is not None + assert language_badge.language_selected.language == language + + +@pytest.mark.asyncio +@pytest.mark.parametrize( + "languages", + [ + ["Python", "Kotlin"], + ], +) +async def test_language_selection_and_unselection(languages: list[str]) -> None: + pass From 5bc9683aff515674fe7727f869a502a70333ab8c Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Sun, 28 Jul 2024 18:35:53 -0600 Subject: [PATCH 097/108] test(test_generation): Created and passed test for selection and unselection --- tests/functional_tests/test_generation.py | 46 +++++++++++++++++++++-- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/tests/functional_tests/test_generation.py b/tests/functional_tests/test_generation.py index e58ade8..9bf6744 100644 --- a/tests/functional_tests/test_generation.py +++ b/tests/functional_tests/test_generation.py @@ -1,6 +1,9 @@ +from pathlib import Path + import pytest from ignori.app import IgnoriApp +from ignori.ignore_file import IgnoreFile from ignori.widgets.input import BorderlessInput from ignori.widgets.language_badge import LanguageBadge from ignori.widgets.language_list import LanguageList @@ -39,8 +42,45 @@ async def test_language_selection(language: str) -> None: @pytest.mark.parametrize( "languages", [ - ["Python", "Kotlin"], + ["Kotlin", "Python"], ], ) -async def test_language_selection_and_unselection(languages: list[str]) -> None: - pass +async def test_language_selection_and_unselection( + languages: list[str], + data_dir: Path, +) -> None: + app = IgnoriApp() + async with app.run_test() as pilot: + for language in languages: + ignore_file = IgnoreFile(data_dir / "unit_tests" / f"{language}.gitignore") + + search_input = pilot.app.query_one( + "#search-input", + expect_type=BorderlessInput, + ) + search_input.clear() + search_input.focus() + + await pilot.press(*language) + await pilot.click("#search-button") + + language_list: LanguageList = pilot.app.query_one( + "#ignore-list", + expect_type=LanguageList, + ) + language_list.focus() + + for index in range(language_list.option_count): + option = language_list.get_option_at_index(index) + + await pilot.press("down") + if option.id == ignore_file.id: + await pilot.press("enter") + + language_badge: LanguageBadge = pilot.app.query_one( + "#language-badge", + expect_type=LanguageBadge, + ) + + assert language_badge.language_selected is not None + assert language_badge.language_selected.language == language From 6a40a662aa1e58a7e4350819d9c249eeeb8207b4 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Sun, 28 Jul 2024 19:06:16 -0600 Subject: [PATCH 098/108] style: Improved typing according with Mypy results --- ignori/app.py | 2 +- ignori/ignore_file.py | 2 +- ignori/screens/modals/confirm_modal.py | 6 +++--- ignori/screens/modals/info_modal.py | 3 +-- ignori/util/validators.py | 2 +- ignori/widgets/file_preview.py | 3 +-- ignori/widgets/header.py | 3 +-- ignori/widgets/language_badge.py | 6 +++--- ignori/widgets/language_list.py | 3 +-- ignori/widgets/search_form.py | 2 +- 10 files changed, 14 insertions(+), 18 deletions(-) diff --git a/ignori/app.py b/ignori/app.py index 811a894..5e48a26 100644 --- a/ignori/app.py +++ b/ignori/app.py @@ -16,7 +16,7 @@ class IgnoriApp(App[None], inherit_bindings=False): TITLE = APP_TITLE - CSS_PATH = STYLES_PATH + CSS_PATH = STYLES_PATH # type: ignore BINDINGS = [ Binding( diff --git a/ignori/ignore_file.py b/ignori/ignore_file.py index db7b562..c9ce52a 100644 --- a/ignori/ignore_file.py +++ b/ignori/ignore_file.py @@ -1,9 +1,9 @@ from dataclasses import dataclass, field from itertools import cycle from pathlib import Path -from typing import Self from rich.console import Console, ConsoleOptions, RenderResult +from typing_extensions import Self @dataclass diff --git a/ignori/screens/modals/confirm_modal.py b/ignori/screens/modals/confirm_modal.py index b38cf81..58f55cf 100644 --- a/ignori/screens/modals/confirm_modal.py +++ b/ignori/screens/modals/confirm_modal.py @@ -1,9 +1,9 @@ -from typing import Self - -from textual.app import ComposeResult, on +from textual import on +from textual.app import ComposeResult from textual.containers import Container, Horizontal from textual.screen import ModalScreen from textual.widgets import Button, Label +from typing_extensions import Self class ConfirmModal(ModalScreen[bool]): diff --git a/ignori/screens/modals/info_modal.py b/ignori/screens/modals/info_modal.py index 38a2ba7..18394ea 100644 --- a/ignori/screens/modals/info_modal.py +++ b/ignori/screens/modals/info_modal.py @@ -1,10 +1,9 @@ -from typing import Self - from textual import on from textual.app import ComposeResult from textual.containers import Container from textual.screen import ModalScreen from textual.widgets import Button, Label +from typing_extensions import Self class InfoModal(ModalScreen[None]): diff --git a/ignori/util/validators.py b/ignori/util/validators.py index 5634149..fc3f384 100644 --- a/ignori/util/validators.py +++ b/ignori/util/validators.py @@ -1,7 +1,7 @@ from pathlib import Path -from typing import Self from textual.validation import ValidationResult, Validator +from typing_extensions import Self class PathValidator(Validator): diff --git a/ignori/widgets/file_preview.py b/ignori/widgets/file_preview.py index 328a1b1..acda56e 100644 --- a/ignori/widgets/file_preview.py +++ b/ignori/widgets/file_preview.py @@ -1,10 +1,9 @@ -from typing import Self - from rich.syntax import Syntax from textual.app import ComposeResult from textual.containers import VerticalScroll from textual.reactive import reactive from textual.widgets import Static +from typing_extensions import Self from ignori.ignore_file import IgnoreFile diff --git a/ignori/widgets/header.py b/ignori/widgets/header.py index 2e091dd..d882837 100644 --- a/ignori/widgets/header.py +++ b/ignori/widgets/header.py @@ -1,8 +1,7 @@ -from typing import Self - from textual.app import ComposeResult from textual.containers import Horizontal from textual.widgets import Label +from typing_extensions import Self from ignori.util.settings import APP_TITLE, APP_VERSION diff --git a/ignori/widgets/language_badge.py b/ignori/widgets/language_badge.py index 49c2392..ee7f8bd 100644 --- a/ignori/widgets/language_badge.py +++ b/ignori/widgets/language_badge.py @@ -1,11 +1,11 @@ -from typing import Self - -from textual.app import ComposeResult, events, on +from textual import events, on +from textual.app import ComposeResult from textual.binding import Binding from textual.containers import Horizontal from textual.message import Message from textual.reactive import reactive from textual.widgets import Label +from typing_extensions import Self from ignori.ignore_file import IgnoreFile diff --git a/ignori/widgets/language_list.py b/ignori/widgets/language_list.py index 271c7e8..4e504c4 100644 --- a/ignori/widgets/language_list.py +++ b/ignori/widgets/language_list.py @@ -1,7 +1,6 @@ -from typing import Self - from textual.binding import Binding from textual.widgets import OptionList +from typing_extensions import Self from ignori.screens.modals.info_modal import InfoModal from ignori.util.explorer import open_file_explorer diff --git a/ignori/widgets/search_form.py b/ignori/widgets/search_form.py index 3dce6aa..bdb0f25 100644 --- a/ignori/widgets/search_form.py +++ b/ignori/widgets/search_form.py @@ -1,5 +1,4 @@ from dataclasses import dataclass -from typing import Self from textual import on from textual.app import ComposeResult @@ -8,6 +7,7 @@ from textual.reactive import reactive from textual.widgets import Button, Input, OptionList from textual.widgets.option_list import Option +from typing_extensions import Self from ignori.ignore_file import IgnoreFile, get_option_by_id from ignori.util.file import get_gitignore_templates From 37498d158e54a5828347b9c399137b53abcc068b Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Sun, 28 Jul 2024 23:25:58 -0600 Subject: [PATCH 099/108] refactor(test_generation): Solved fixme for parameters independence --- tests/functional_tests/test_generation.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/tests/functional_tests/test_generation.py b/tests/functional_tests/test_generation.py index 9bf6744..fdb03fb 100644 --- a/tests/functional_tests/test_generation.py +++ b/tests/functional_tests/test_generation.py @@ -11,9 +11,11 @@ @pytest.mark.asyncio @pytest.mark.parametrize("language", ["Python", "Java", "Kotlin"]) -async def test_language_selection(language: str) -> None: +async def test_language_selection(language: str, data_dir: Path) -> None: app = IgnoriApp() async with app.run_test() as pilot: + ignore_file = IgnoreFile(data_dir / "unit_tests" / f"{language}.gitignore") + search_input = pilot.app.query_one("#search-input", expect_type=BorderlessInput) search_input.focus() await pilot.press(*language) @@ -25,9 +27,12 @@ async def test_language_selection(language: str) -> None: ) language_list.focus() - # FIXME: Improve option selection to be independent of the list order - await pilot.press("down") - await pilot.press("enter") + for index in range(language_list.option_count): + option = language_list.get_option_at_index(index) + + await pilot.press("down") + if option.id == ignore_file.id: + await pilot.press("enter") language_badge: LanguageBadge = pilot.app.query_one( "#language-badge", From c629c2fa4196cc95f6c3c887afd6112bfd0e3baa Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Wed, 31 Jul 2024 12:57:45 -0600 Subject: [PATCH 100/108] test(test_generation)!: Created an passed tests when is tried to generate with invalid output path and without language selection, and a succesful generation --- tests/conftest.py | 11 +++ tests/functional_tests/conftest.py | 8 -- tests/functional_tests/test_generation.py | 103 ++++++++++++++++++++++ tests/unit_tests/conftest.py | 8 -- 4 files changed, 114 insertions(+), 16 deletions(-) delete mode 100644 tests/functional_tests/conftest.py delete mode 100644 tests/unit_tests/conftest.py diff --git a/tests/conftest.py b/tests/conftest.py index 2d296c4..fae4f6c 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -7,3 +7,14 @@ def data_dir() -> Path: tests_dir = Path(__file__) return tests_dir.parent / "data" + + +@pytest.fixture +def templates_dir() -> Path: + test_dir = Path(__file__) + return test_dir.parent.parent / "templates" + + +@pytest.fixture(scope="module") +def generated_file(tmp_path_factory: pytest.TempPathFactory) -> Path: + return tmp_path_factory.mktemp("output") / ".gitignore" diff --git a/tests/functional_tests/conftest.py b/tests/functional_tests/conftest.py deleted file mode 100644 index 0a3ec9d..0000000 --- a/tests/functional_tests/conftest.py +++ /dev/null @@ -1,8 +0,0 @@ -from pathlib import Path - -import pytest - - -@pytest.fixture(scope="package") -def generated_file(tmp_path_factory: pytest.TempPathFactory) -> Path: - return tmp_path_factory.mktemp("output") / ".gitignore" diff --git a/tests/functional_tests/test_generation.py b/tests/functional_tests/test_generation.py index fdb03fb..1a82bbb 100644 --- a/tests/functional_tests/test_generation.py +++ b/tests/functional_tests/test_generation.py @@ -1,6 +1,7 @@ from pathlib import Path import pytest +from textual.notifications import Notification, Notifications from ignori.app import IgnoriApp from ignori.ignore_file import IgnoreFile @@ -89,3 +90,105 @@ async def test_language_selection_and_unselection( assert language_badge.language_selected is not None assert language_badge.language_selected.language == language + + +@pytest.mark.asyncio +@pytest.mark.parametrize("path", ["this/path/doesnt/exists"]) +async def test_generation_without_language_selection(path: str) -> None: + app = IgnoriApp() + async with app.run_test() as pilot: + path_input = pilot.app.query_one("#path-input", expect_type=BorderlessInput) + path_input.focus() + + await pilot.press(*path) + await pilot.click("#path-button") + + path_input = pilot.app.query_one("#path-input", expect_type=BorderlessInput) + + notifications: Notifications = pilot.app._notifications # noqa + + assert not path_input.is_valid + assert len(notifications) == 1 + + last_notification: Notification = ( + list(notifications._notifications.values())[-1] # noqa + ) + + assert last_notification.title == "Error" + assert last_notification.message == "Path does not exist or is not a directory" + + +@pytest.mark.asyncio +async def test_generation_with_invalid_output_path() -> None: + app = IgnoriApp() + async with app.run_test() as pilot: + notifications = pilot.app._notifications # noqa + await pilot.click("#path-button") + + assert len(notifications) == 1 + last_notification: Notification = ( + list(notifications._notifications.values())[-1] # noqa + ) + + assert last_notification.title == "Error" + assert last_notification.message == "No language selected" + + +@pytest.mark.asyncio +@pytest.mark.parametrize( + "language", + [ + "Python", + ], +) +async def test_ignore_generation( + language: str, + generated_file: Path, + templates_dir: Path, +) -> None: + app = IgnoriApp() + + async with app.run_test() as pilot: + source_file = templates_dir / f"{language}.gitignore" + generated_file_dir = str(generated_file.parent) + ignore_file = IgnoreFile(source_file) + + search_input = pilot.app.query_one( + "#search-input", + expect_type=BorderlessInput, + ) + search_input.focus() + await pilot.press(*language) + await pilot.click("#search-button") + + language_list: LanguageList = pilot.app.query_one( + "#ignore-list", + expect_type=LanguageList, + ) + language_list.focus() + + for index in range(language_list.option_count): + option = language_list.get_option_at_index(index) + + await pilot.press("down") + if option.id == ignore_file.id: + await pilot.press("enter") + + path_input = pilot.app.query_one("#path-input", expect_type=BorderlessInput) + path_input.focus() + + await pilot.press(*generated_file_dir) + await pilot.click("#path-button") + + path_input = pilot.app.query_one("#path-input", expect_type=BorderlessInput) + + assert path_input.is_valid + assert generated_file.read_text() == source_file.read_text() + + notifications = pilot.app._notifications # noqa + last_notification: Notification = ( + list(notifications._notifications.values())[-1] # noqa + ) + + assert last_notification.title == "Success" + assert last_notification.message == "File generated successfully" diff --git a/tests/unit_tests/conftest.py b/tests/unit_tests/conftest.py deleted file mode 100644 index 0a3ec9d..0000000 --- a/tests/unit_tests/conftest.py +++ /dev/null @@ -1,8 +0,0 @@ -from pathlib import Path - -import pytest - - -@pytest.fixture(scope="package") -def generated_file(tmp_path_factory: pytest.TempPathFactory) -> Path: - return tmp_path_factory.mktemp("output") / ".gitignore" From 67a93346cd56f9f8bdfb79d4fbeffc8baafe27f7 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Wed, 31 Jul 2024 13:39:37 -0600 Subject: [PATCH 101/108] chore: Poetry locked --- poetry.lock | 281 +++++++++++++++++++++++++------------------------ pyproject.toml | 9 +- 2 files changed, 144 insertions(+), 146 deletions(-) diff --git a/poetry.lock b/poetry.lock index cc5267b..39dde7f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,91 +1,103 @@ # This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +[[package]] +name = "aiohappyeyeballs" +version = "2.3.4" +description = "Happy Eyeballs for asyncio" +optional = false +python-versions = "<4.0,>=3.8" +files = [ + {file = "aiohappyeyeballs-2.3.4-py3-none-any.whl", hash = "sha256:40a16ceffcf1fc9e142fd488123b2e218abc4188cf12ac20c67200e1579baa42"}, + {file = "aiohappyeyeballs-2.3.4.tar.gz", hash = "sha256:7e1ae8399c320a8adec76f6c919ed5ceae6edd4c3672f4d9eae2b27e37c80ff6"}, +] + [[package]] name = "aiohttp" -version = "3.9.5" +version = "3.10.0" description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.8" files = [ - {file = "aiohttp-3.9.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fcde4c397f673fdec23e6b05ebf8d4751314fa7c24f93334bf1f1364c1c69ac7"}, - {file = "aiohttp-3.9.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5d6b3f1fabe465e819aed2c421a6743d8debbde79b6a8600739300630a01bf2c"}, - {file = "aiohttp-3.9.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ae79c1bc12c34082d92bf9422764f799aee4746fd7a392db46b7fd357d4a17a"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d3ebb9e1316ec74277d19c5f482f98cc65a73ccd5430540d6d11682cd857430"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84dabd95154f43a2ea80deffec9cb44d2e301e38a0c9d331cc4aa0166fe28ae3"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c8a02fbeca6f63cb1f0475c799679057fc9268b77075ab7cf3f1c600e81dd46b"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c26959ca7b75ff768e2776d8055bf9582a6267e24556bb7f7bd29e677932be72"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:714d4e5231fed4ba2762ed489b4aec07b2b9953cf4ee31e9871caac895a839c0"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e7a6a8354f1b62e15d48e04350f13e726fa08b62c3d7b8401c0a1314f02e3558"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c413016880e03e69d166efb5a1a95d40f83d5a3a648d16486592c49ffb76d0db"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ff84aeb864e0fac81f676be9f4685f0527b660f1efdc40dcede3c251ef1e867f"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ad7f2919d7dac062f24d6f5fe95d401597fbb015a25771f85e692d043c9d7832"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:702e2c7c187c1a498a4e2b03155d52658fdd6fda882d3d7fbb891a5cf108bb10"}, - {file = "aiohttp-3.9.5-cp310-cp310-win32.whl", hash = "sha256:67c3119f5ddc7261d47163ed86d760ddf0e625cd6246b4ed852e82159617b5fb"}, - {file = "aiohttp-3.9.5-cp310-cp310-win_amd64.whl", hash = "sha256:471f0ef53ccedec9995287f02caf0c068732f026455f07db3f01a46e49d76bbb"}, - {file = "aiohttp-3.9.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0ae53e33ee7476dd3d1132f932eeb39bf6125083820049d06edcdca4381f342"}, - {file = "aiohttp-3.9.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c088c4d70d21f8ca5c0b8b5403fe84a7bc8e024161febdd4ef04575ef35d474d"}, - {file = "aiohttp-3.9.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:639d0042b7670222f33b0028de6b4e2fad6451462ce7df2af8aee37dcac55424"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f26383adb94da5e7fb388d441bf09c61e5e35f455a3217bfd790c6b6bc64b2ee"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66331d00fb28dc90aa606d9a54304af76b335ae204d1836f65797d6fe27f1ca2"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ff550491f5492ab5ed3533e76b8567f4b37bd2995e780a1f46bca2024223233"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f22eb3a6c1080d862befa0a89c380b4dafce29dc6cd56083f630073d102eb595"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a81b1143d42b66ffc40a441379387076243ef7b51019204fd3ec36b9f69e77d6"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f64fd07515dad67f24b6ea4a66ae2876c01031de91c93075b8093f07c0a2d93d"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:93e22add827447d2e26d67c9ac0161756007f152fdc5210277d00a85f6c92323"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:55b39c8684a46e56ef8c8d24faf02de4a2b2ac60d26cee93bc595651ff545de9"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4715a9b778f4293b9f8ae7a0a7cef9829f02ff8d6277a39d7f40565c737d3771"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:afc52b8d969eff14e069a710057d15ab9ac17cd4b6753042c407dcea0e40bf75"}, - {file = "aiohttp-3.9.5-cp311-cp311-win32.whl", hash = "sha256:b3df71da99c98534be076196791adca8819761f0bf6e08e07fd7da25127150d6"}, - {file = "aiohttp-3.9.5-cp311-cp311-win_amd64.whl", hash = "sha256:88e311d98cc0bf45b62fc46c66753a83445f5ab20038bcc1b8a1cc05666f428a"}, - {file = "aiohttp-3.9.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:c7a4b7a6cf5b6eb11e109a9755fd4fda7d57395f8c575e166d363b9fc3ec4678"}, - {file = "aiohttp-3.9.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:0a158704edf0abcac8ac371fbb54044f3270bdbc93e254a82b6c82be1ef08f3c"}, - {file = "aiohttp-3.9.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d153f652a687a8e95ad367a86a61e8d53d528b0530ef382ec5aaf533140ed00f"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82a6a97d9771cb48ae16979c3a3a9a18b600a8505b1115cfe354dfb2054468b4"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:60cdbd56f4cad9f69c35eaac0fbbdf1f77b0ff9456cebd4902f3dd1cf096464c"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8676e8fd73141ded15ea586de0b7cda1542960a7b9ad89b2b06428e97125d4fa"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da00da442a0e31f1c69d26d224e1efd3a1ca5bcbf210978a2ca7426dfcae9f58"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18f634d540dd099c262e9f887c8bbacc959847cfe5da7a0e2e1cf3f14dbf2daf"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:320e8618eda64e19d11bdb3bd04ccc0a816c17eaecb7e4945d01deee2a22f95f"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:2faa61a904b83142747fc6a6d7ad8fccff898c849123030f8e75d5d967fd4a81"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:8c64a6dc3fe5db7b1b4d2b5cb84c4f677768bdc340611eca673afb7cf416ef5a"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:393c7aba2b55559ef7ab791c94b44f7482a07bf7640d17b341b79081f5e5cd1a"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c671dc117c2c21a1ca10c116cfcd6e3e44da7fcde37bf83b2be485ab377b25da"}, - {file = "aiohttp-3.9.5-cp312-cp312-win32.whl", hash = "sha256:5a7ee16aab26e76add4afc45e8f8206c95d1d75540f1039b84a03c3b3800dd59"}, - {file = "aiohttp-3.9.5-cp312-cp312-win_amd64.whl", hash = "sha256:5ca51eadbd67045396bc92a4345d1790b7301c14d1848feaac1d6a6c9289e888"}, - {file = "aiohttp-3.9.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:694d828b5c41255e54bc2dddb51a9f5150b4eefa9886e38b52605a05d96566e8"}, - {file = "aiohttp-3.9.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0605cc2c0088fcaae79f01c913a38611ad09ba68ff482402d3410bf59039bfb8"}, - {file = "aiohttp-3.9.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4558e5012ee03d2638c681e156461d37b7a113fe13970d438d95d10173d25f78"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dbc053ac75ccc63dc3a3cc547b98c7258ec35a215a92bd9f983e0aac95d3d5b"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4109adee842b90671f1b689901b948f347325045c15f46b39797ae1bf17019de"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6ea1a5b409a85477fd8e5ee6ad8f0e40bf2844c270955e09360418cfd09abac"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3c2890ca8c59ee683fd09adf32321a40fe1cf164e3387799efb2acebf090c11"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3916c8692dbd9d55c523374a3b8213e628424d19116ac4308e434dbf6d95bbdd"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8d1964eb7617907c792ca00b341b5ec3e01ae8c280825deadbbd678447b127e1"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d5ab8e1f6bee051a4bf6195e38a5c13e5e161cb7bad83d8854524798bd9fcd6e"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:52c27110f3862a1afbcb2af4281fc9fdc40327fa286c4625dfee247c3ba90156"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:7f64cbd44443e80094309875d4f9c71d0401e966d191c3d469cde4642bc2e031"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8b4f72fbb66279624bfe83fd5eb6aea0022dad8eec62b71e7bf63ee1caadeafe"}, - {file = "aiohttp-3.9.5-cp38-cp38-win32.whl", hash = "sha256:6380c039ec52866c06d69b5c7aad5478b24ed11696f0e72f6b807cfb261453da"}, - {file = "aiohttp-3.9.5-cp38-cp38-win_amd64.whl", hash = "sha256:da22dab31d7180f8c3ac7c7635f3bcd53808f374f6aa333fe0b0b9e14b01f91a"}, - {file = "aiohttp-3.9.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1732102949ff6087589408d76cd6dea656b93c896b011ecafff418c9661dc4ed"}, - {file = "aiohttp-3.9.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c6021d296318cb6f9414b48e6a439a7f5d1f665464da507e8ff640848ee2a58a"}, - {file = "aiohttp-3.9.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:239f975589a944eeb1bad26b8b140a59a3a320067fb3cd10b75c3092405a1372"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b7b30258348082826d274504fbc7c849959f1989d86c29bc355107accec6cfb"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd2adf5c87ff6d8b277814a28a535b59e20bfea40a101db6b3bdca7e9926bc24"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e9a3d838441bebcf5cf442700e3963f58b5c33f015341f9ea86dcd7d503c07e2"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e3a1ae66e3d0c17cf65c08968a5ee3180c5a95920ec2731f53343fac9bad106"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c69e77370cce2d6df5d12b4e12bdcca60c47ba13d1cbbc8645dd005a20b738b"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf56238f4bbf49dab8c2dc2e6b1b68502b1e88d335bea59b3f5b9f4c001475"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d1469f228cd9ffddd396d9948b8c9cd8022b6d1bf1e40c6f25b0fb90b4f893ed"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:45731330e754f5811c314901cebdf19dd776a44b31927fa4b4dbecab9e457b0c"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3fcb4046d2904378e3aeea1df51f697b0467f2aac55d232c87ba162709478c46"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8cf142aa6c1a751fcb364158fd710b8a9be874b81889c2bd13aa8893197455e2"}, - {file = "aiohttp-3.9.5-cp39-cp39-win32.whl", hash = "sha256:7b179eea70833c8dee51ec42f3b4097bd6370892fa93f510f76762105568cf09"}, - {file = "aiohttp-3.9.5-cp39-cp39-win_amd64.whl", hash = "sha256:38d80498e2e169bc61418ff36170e0aad0cd268da8b38a17c4cf29d254a8b3f1"}, - {file = "aiohttp-3.9.5.tar.gz", hash = "sha256:edea7d15772ceeb29db4aff55e482d4bcfb6ae160ce144f2682de02f6d693551"}, + {file = "aiohttp-3.10.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:68ab608118e212f56feef44d4785aa90b713042da301f26338f36497b481cd79"}, + {file = "aiohttp-3.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:64a117c16273ca9f18670f33fc7fd9604b9f46ddb453ce948262889a6be72868"}, + {file = "aiohttp-3.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:54076a25f32305e585a3abae1f0ad10646bec539e0e5ebcc62b54ee4982ec29f"}, + {file = "aiohttp-3.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71c76685773444d90ae83874433505ed800e1706c391fdf9e57cc7857611e2f4"}, + {file = "aiohttp-3.10.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bdda86ab376f9b3095a1079a16fbe44acb9ddde349634f1c9909d13631ff3bcf"}, + {file = "aiohttp-3.10.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d6dcd1d21da5ae1416f69aa03e883a51e84b6c803b8618cbab341ac89a85b9e"}, + {file = "aiohttp-3.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06ef0135d7ab7fb0284342fbbf8e8ddf73b7fee8ecc55f5c3a3d0a6b765e6d8b"}, + {file = "aiohttp-3.10.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ccab9381f38c669bb9254d848f3b41a3284193b3e274a34687822f98412097e9"}, + {file = "aiohttp-3.10.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:947da3aee057010bc750b7b4bb65cbd01b0bdb7c4e1cf278489a1d4a1e9596b3"}, + {file = "aiohttp-3.10.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5268b35fee7eb754fb5b3d0f16a84a2e9ed21306f5377f3818596214ad2d7714"}, + {file = "aiohttp-3.10.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ff25d988fd6ce433b5c393094a5ca50df568bdccf90a8b340900e24e0d5fb45c"}, + {file = "aiohttp-3.10.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:594b4b4f1dfe8378b4a0342576dc87a930c960641159f5ae83843834016dbd59"}, + {file = "aiohttp-3.10.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c8820dad615cd2f296ed3fdea8402b12663ac9e5ea2aafc90ef5141eb10b50b8"}, + {file = "aiohttp-3.10.0-cp310-cp310-win32.whl", hash = "sha256:ab1d870403817c9a0486ca56ccbc0ebaf85d992277d48777faa5a95e40e5bcca"}, + {file = "aiohttp-3.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:563705a94ea3af43467167f3a21c665f3b847b2a0ae5544fa9e18df686a660da"}, + {file = "aiohttp-3.10.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:13679e11937d3f37600860de1f848e2e062e2b396d3aa79b38c89f9c8ab7e791"}, + {file = "aiohttp-3.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8c66a1aadafbc0bd7d648cb7fcb3860ec9beb1b436ce3357036a4d9284fcef9a"}, + {file = "aiohttp-3.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b7e3545b06aae925f90f06402e05cfb9c62c6409ce57041932163b09c48daad6"}, + {file = "aiohttp-3.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:effafe5144aa32f0388e8f99b1b2692cf094ea2f6b7ceca384b54338b77b1f50"}, + {file = "aiohttp-3.10.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a04f2c8d41821a2507b49b2694c40495a295b013afb0cc7355b337980b47c546"}, + {file = "aiohttp-3.10.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6dbfac556219d884d50edc6e1952a93545c2786193f00f5521ec0d9d464040ab"}, + {file = "aiohttp-3.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a65472256c5232681968deeea3cd5453aa091c44e8db09f22f1a1491d422c2d9"}, + {file = "aiohttp-3.10.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:941366a554e566efdd3f042e17a9e461a36202469e5fd2aee66fe3efe6412aef"}, + {file = "aiohttp-3.10.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:927b4aca6340301e7d8bb05278d0b6585b8633ea852b7022d604a5df920486bf"}, + {file = "aiohttp-3.10.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:34adb8412e736a5d0df6d1fccdf71599dfb07a63add241a94a189b6364e997f1"}, + {file = "aiohttp-3.10.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:43c60d9b332a01ee985f080f639f3e56abcfb95ec1320013c94083c3b6a2e143"}, + {file = "aiohttp-3.10.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:3f49edf7c5cd2987634116e1b6a0ee2438fca17f7c4ee480ff41decb76cf6158"}, + {file = "aiohttp-3.10.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9784246431eaf9d651b3cc06f9c64f9a9f57299f4971c5ea778fa0b81074ef13"}, + {file = "aiohttp-3.10.0-cp311-cp311-win32.whl", hash = "sha256:bec91402df78b897a47b66b9c071f48051cea68d853d8bc1d4404896c6de41ae"}, + {file = "aiohttp-3.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:25a9924343bf91b0c5082cae32cfc5a1f8787ac0433966319ec07b0ed4570722"}, + {file = "aiohttp-3.10.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:21dab4a704c68dc7bc2a1219a4027158e8968e2079f1444eda2ba88bc9f2895f"}, + {file = "aiohttp-3.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:872c0dcaccebd5733d535868fe2356aa6939f5827dcea7a8b9355bb2eff6f56e"}, + {file = "aiohttp-3.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f381424dbce313bb5a666a215e7a9dcebbc533e9a2c467a1f0c95279d24d1fa7"}, + {file = "aiohttp-3.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ca48e9f092a417c6669ee8d3a19d40b3c66dde1a2ae0d57e66c34812819b671"}, + {file = "aiohttp-3.10.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbe2f6d0466f5c59c7258e0745c20d74806a1385fbb7963e5bbe2309a11cc69b"}, + {file = "aiohttp-3.10.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:03799a95402a7ed62671c4465e1eae51d749d5439dbc49edb6eee52ea165c50b"}, + {file = "aiohttp-3.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5549c71c35b5f057a4eebcc538c41299826f7813f28880722b60e41c861a57ec"}, + {file = "aiohttp-3.10.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f6fa7a42b78d8698491dc4ad388169de54cca551aa9900f750547372de396277"}, + {file = "aiohttp-3.10.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:77bbf0a2f6fefac6c0db1792c234f577d80299a33ce7125467439097cf869198"}, + {file = "aiohttp-3.10.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:34eaf5cfcc979846d73571b1a4be22cad5e029d55cdbe77cdc7545caa4dcb925"}, + {file = "aiohttp-3.10.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4f1de31a585344a106db43a9c3af2e15bb82e053618ff759f1fdd31d82da38eb"}, + {file = "aiohttp-3.10.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:f3a1ea61d96146e9b9e5597069466e2e4d9e01e09381c5dd51659f890d5e29e7"}, + {file = "aiohttp-3.10.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:73c01201219eb039a828bb58dcc13112eec2fed6eea718356316cd552df26e04"}, + {file = "aiohttp-3.10.0-cp312-cp312-win32.whl", hash = "sha256:33e915971eee6d2056d15470a1214e4e0f72b6aad10225548a7ab4c4f54e2db7"}, + {file = "aiohttp-3.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:2dc75da06c35a7b47a88ceadbf993a53d77d66423c2a78de8c6f9fb41ec35687"}, + {file = "aiohttp-3.10.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f1bc4d68b83966012813598fe39b35b4e6019b69d29385cf7ec1cb08e1ff829b"}, + {file = "aiohttp-3.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d9b8b31c057a0b7bb822a159c490af05cb11b8069097f3236746a78315998afa"}, + {file = "aiohttp-3.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:10f0d7894ddc6ff8f369e3fdc082ef1f940dc1f5b9003cd40945d24845477220"}, + {file = "aiohttp-3.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72de8ffba4a27e3c6e83e58a379fc4fe5548f69f9b541fde895afb9be8c31658"}, + {file = "aiohttp-3.10.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd36d0f0afc2bd84f007cedd2d9a449c3cf04af471853a25eb71f28bc2e1a119"}, + {file = "aiohttp-3.10.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f64d503c661864866c09806ac360b95457f872d639ca61719115a9f389b2ec90"}, + {file = "aiohttp-3.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31616121369bc823791056c632f544c6c8f8d1ceecffd8bf3f72ef621eaabf49"}, + {file = "aiohttp-3.10.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f76c12abb88b7ee64b3f9ae72f0644af49ff139067b5add142836dab405d60d4"}, + {file = "aiohttp-3.10.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:6c99eef30a7e98144bcf44d615bc0f445b3a3730495fcc16124cb61117e1f81e"}, + {file = "aiohttp-3.10.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:39e7ec718e7a1971a5d98357e3e8c0529477d45c711d32cd91999dc8d8404e1e"}, + {file = "aiohttp-3.10.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f1cef548ee4e84264b78879de0c754bbe223193c6313beb242ce862f82eab184"}, + {file = "aiohttp-3.10.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:f98f036eab11d2f90cdd01b9d1410de9d7eb520d070debeb2edadf158b758431"}, + {file = "aiohttp-3.10.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:cc4376ff537f7d2c1e98f97f6d548e99e5d96078b0333c1d3177c11467b972de"}, + {file = "aiohttp-3.10.0-cp38-cp38-win32.whl", hash = "sha256:ebedc51ee6d39f9ea5e26e255fd56a7f4e79a56e77d960f9bae75ef4f95ed57f"}, + {file = "aiohttp-3.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:aad87626f31a85fd4af02ba7fd6cc424b39d4bff5c8677e612882649da572e47"}, + {file = "aiohttp-3.10.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1dc95c5e2a5e60095f1bb51822e3b504e6a7430c9b44bff2120c29bb876c5202"}, + {file = "aiohttp-3.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1c83977f7b6f4f4a96fab500f5a76d355f19f42675224a3002d375b3fb309174"}, + {file = "aiohttp-3.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8cedc48d36652dd3ac40e5c7c139d528202393e341a5e3475acedb5e8d5c4c75"}, + {file = "aiohttp-3.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b099fbb823efed3c1d736f343ac60d66531b13680ee9b2669e368280f41c2b8"}, + {file = "aiohttp-3.10.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d583755ddb9c97a2da1322f17fc7d26792f4e035f472d675e2761c766f94c2ff"}, + {file = "aiohttp-3.10.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a03a4407bdb9ae815f0d5a19df482b17df530cf7bf9c78771aa1c713c37ff1f"}, + {file = "aiohttp-3.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcb6e65f6ea7caa0188e36bebe9e72b259d3d525634758c91209afb5a6cbcba7"}, + {file = "aiohttp-3.10.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b6612c6ed3147a4a2d6463454b94b877566b38215665be4c729cd8b7bdce15b4"}, + {file = "aiohttp-3.10.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0b0c0148d2a69b82ffe650c2ce235b431d49a90bde7dd2629bcb40314957acf6"}, + {file = "aiohttp-3.10.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:0d85a173b4dbbaaad1900e197181ea0fafa617ca6656663f629a8a372fdc7d06"}, + {file = "aiohttp-3.10.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:12c43dace645023583f3dd2337dfc3aa92c99fb943b64dcf2bc15c7aa0fb4a95"}, + {file = "aiohttp-3.10.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:33acb0d9bf12cdc80ceec6f5fda83ea7990ce0321c54234d629529ca2c54e33d"}, + {file = "aiohttp-3.10.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:91e0b76502205484a4d1d6f25f461fa60fe81a7987b90e57f7b941b0753c3ec8"}, + {file = "aiohttp-3.10.0-cp39-cp39-win32.whl", hash = "sha256:1ebd8ed91428ffbe8b33a5bd6f50174e11882d5b8e2fe28670406ab5ee045ede"}, + {file = "aiohttp-3.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:0433795c4a8bafc03deb3e662192250ba5db347c41231b0273380d2f53c9ea0b"}, + {file = "aiohttp-3.10.0.tar.gz", hash = "sha256:e8dd7da2609303e3574c95b0ec9f1fd49647ef29b94701a2862cceae76382e1d"}, ] [package.dependencies] +aiohappyeyeballs = ">=2.3.0" aiosignal = ">=1.1.2" attrs = ">=17.3.0" frozenlist = ">=1.1.1" @@ -93,7 +105,7 @@ multidict = ">=4.5,<7.0" yarl = ">=1.0,<2.0" [package.extras] -speedups = ["Brotli", "aiodns", "brotlicffi"] +speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"] [[package]] name = "aiosignal" @@ -590,38 +602,38 @@ files = [ [[package]] name = "mypy" -version = "1.11.0" +version = "1.11.1" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3824187c99b893f90c845bab405a585d1ced4ff55421fdf5c84cb7710995229"}, - {file = "mypy-1.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:96f8dbc2c85046c81bcddc246232d500ad729cb720da4e20fce3b542cab91287"}, - {file = "mypy-1.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a5d8d8dd8613a3e2be3eae829ee891b6b2de6302f24766ff06cb2875f5be9c6"}, - {file = "mypy-1.11.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:72596a79bbfb195fd41405cffa18210af3811beb91ff946dbcb7368240eed6be"}, - {file = "mypy-1.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:35ce88b8ed3a759634cb4eb646d002c4cef0a38f20565ee82b5023558eb90c00"}, - {file = "mypy-1.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:98790025861cb2c3db8c2f5ad10fc8c336ed2a55f4daf1b8b3f877826b6ff2eb"}, - {file = "mypy-1.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:25bcfa75b9b5a5f8d67147a54ea97ed63a653995a82798221cca2a315c0238c1"}, - {file = "mypy-1.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bea2a0e71c2a375c9fa0ede3d98324214d67b3cbbfcbd55ac8f750f85a414e3"}, - {file = "mypy-1.11.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d2b3d36baac48e40e3064d2901f2fbd2a2d6880ec6ce6358825c85031d7c0d4d"}, - {file = "mypy-1.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:d8e2e43977f0e09f149ea69fd0556623919f816764e26d74da0c8a7b48f3e18a"}, - {file = "mypy-1.11.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1d44c1e44a8be986b54b09f15f2c1a66368eb43861b4e82573026e04c48a9e20"}, - {file = "mypy-1.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cea3d0fb69637944dd321f41bc896e11d0fb0b0aa531d887a6da70f6e7473aba"}, - {file = "mypy-1.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a83ec98ae12d51c252be61521aa5731f5512231d0b738b4cb2498344f0b840cd"}, - {file = "mypy-1.11.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c7b73a856522417beb78e0fb6d33ef89474e7a622db2653bc1285af36e2e3e3d"}, - {file = "mypy-1.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:f2268d9fcd9686b61ab64f077be7ffbc6fbcdfb4103e5dd0cc5eaab53a8886c2"}, - {file = "mypy-1.11.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:940bfff7283c267ae6522ef926a7887305945f716a7704d3344d6d07f02df850"}, - {file = "mypy-1.11.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:14f9294528b5f5cf96c721f231c9f5b2733164e02c1c018ed1a0eff8a18005ac"}, - {file = "mypy-1.11.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7b54c27783991399046837df5c7c9d325d921394757d09dbcbf96aee4649fe9"}, - {file = "mypy-1.11.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:65f190a6349dec29c8d1a1cd4aa71284177aee5949e0502e6379b42873eddbe7"}, - {file = "mypy-1.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:dbe286303241fea8c2ea5466f6e0e6a046a135a7e7609167b07fd4e7baf151bf"}, - {file = "mypy-1.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:104e9c1620c2675420abd1f6c44bab7dd33cc85aea751c985006e83dcd001095"}, - {file = "mypy-1.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f006e955718ecd8d159cee9932b64fba8f86ee6f7728ca3ac66c3a54b0062abe"}, - {file = "mypy-1.11.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:becc9111ca572b04e7e77131bc708480cc88a911adf3d0239f974c034b78085c"}, - {file = "mypy-1.11.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6801319fe76c3f3a3833f2b5af7bd2c17bb93c00026a2a1b924e6762f5b19e13"}, - {file = "mypy-1.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:c1a184c64521dc549324ec6ef7cbaa6b351912be9cb5edb803c2808a0d7e85ac"}, - {file = "mypy-1.11.0-py3-none-any.whl", hash = "sha256:56913ec8c7638b0091ef4da6fcc9136896914a9d60d54670a75880c3e5b99ace"}, - {file = "mypy-1.11.0.tar.gz", hash = "sha256:93743608c7348772fdc717af4aeee1997293a1ad04bc0ea6efa15bf65385c538"}, + {file = "mypy-1.11.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a32fc80b63de4b5b3e65f4be82b4cfa362a46702672aa6a0f443b4689af7008c"}, + {file = "mypy-1.11.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c1952f5ea8a5a959b05ed5f16452fddadbaae48b5d39235ab4c3fc444d5fd411"}, + {file = "mypy-1.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1e30dc3bfa4e157e53c1d17a0dad20f89dc433393e7702b813c10e200843b03"}, + {file = "mypy-1.11.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2c63350af88f43a66d3dfeeeb8d77af34a4f07d760b9eb3a8697f0386c7590b4"}, + {file = "mypy-1.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:a831671bad47186603872a3abc19634f3011d7f83b083762c942442d51c58d58"}, + {file = "mypy-1.11.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7b6343d338390bb946d449677726edf60102a1c96079b4f002dedff375953fc5"}, + {file = "mypy-1.11.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4fe9f4e5e521b458d8feb52547f4bade7ef8c93238dfb5bbc790d9ff2d770ca"}, + {file = "mypy-1.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:886c9dbecc87b9516eff294541bf7f3655722bf22bb898ee06985cd7269898de"}, + {file = "mypy-1.11.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fca4a60e1dd9fd0193ae0067eaeeb962f2d79e0d9f0f66223a0682f26ffcc809"}, + {file = "mypy-1.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:0bd53faf56de9643336aeea1c925012837432b5faf1701ccca7fde70166ccf72"}, + {file = "mypy-1.11.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f39918a50f74dc5969807dcfaecafa804fa7f90c9d60506835036cc1bc891dc8"}, + {file = "mypy-1.11.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0bc71d1fb27a428139dd78621953effe0d208aed9857cb08d002280b0422003a"}, + {file = "mypy-1.11.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b868d3bcff720dd7217c383474008ddabaf048fad8d78ed948bb4b624870a417"}, + {file = "mypy-1.11.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a707ec1527ffcdd1c784d0924bf5cb15cd7f22683b919668a04d2b9c34549d2e"}, + {file = "mypy-1.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:64f4a90e3ea07f590c5bcf9029035cf0efeae5ba8be511a8caada1a4893f5525"}, + {file = "mypy-1.11.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:749fd3213916f1751fff995fccf20c6195cae941dc968f3aaadf9bb4e430e5a2"}, + {file = "mypy-1.11.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b639dce63a0b19085213ec5fdd8cffd1d81988f47a2dec7100e93564f3e8fb3b"}, + {file = "mypy-1.11.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c956b49c5d865394d62941b109728c5c596a415e9c5b2be663dd26a1ff07bc0"}, + {file = "mypy-1.11.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45df906e8b6804ef4b666af29a87ad9f5921aad091c79cc38e12198e220beabd"}, + {file = "mypy-1.11.1-cp38-cp38-win_amd64.whl", hash = "sha256:d44be7551689d9d47b7abc27c71257adfdb53f03880841a5db15ddb22dc63edb"}, + {file = "mypy-1.11.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2684d3f693073ab89d76da8e3921883019ea8a3ec20fa5d8ecca6a2db4c54bbe"}, + {file = "mypy-1.11.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:79c07eb282cb457473add5052b63925e5cc97dfab9812ee65a7c7ab5e3cb551c"}, + {file = "mypy-1.11.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11965c2f571ded6239977b14deebd3f4c3abd9a92398712d6da3a772974fad69"}, + {file = "mypy-1.11.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a2b43895a0f8154df6519706d9bca8280cda52d3d9d1514b2d9c3e26792a0b74"}, + {file = "mypy-1.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:1a81cf05975fd61aec5ae16501a091cfb9f605dc3e3c878c0da32f250b74760b"}, + {file = "mypy-1.11.1-py3-none-any.whl", hash = "sha256:0624bdb940255d2dd24e829d99a13cfeb72e4e9031f9492148f410ed30bcab54"}, + {file = "mypy-1.11.1.tar.gz", hash = "sha256:f404a0b069709f18bbdb702eb3dcfe51910602995de00bd39cea3050b5772d08"}, ] [package.dependencies] @@ -656,17 +668,6 @@ files = [ {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, ] -[[package]] -name = "pipe" -version = "2.2" -description = "Module enabling a sh like infix syntax (using pipes)" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pipe-2.2-py3-none-any.whl", hash = "sha256:0a5c3202ff35122f69a34ccbd40c9658646f033cc941055304fe8bfa7e13376e"}, - {file = "pipe-2.2.tar.gz", hash = "sha256:6a253198e3bc542ffaf0a4222376586bce8583b27a9ddbc2cfbaa554c049230d"}, -] - [[package]] name = "platformdirs" version = "4.2.2" @@ -750,13 +751,13 @@ testing = ["covdefaults (>=2.3)", "pytest (>=8.2.2)", "pytest-cov (>=5)", "pytes [[package]] name = "pytest" -version = "8.3.1" +version = "8.3.2" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-8.3.1-py3-none-any.whl", hash = "sha256:e9600ccf4f563976e2c99fa02c7624ab938296551f280835ee6516df8bc4ae8c"}, - {file = "pytest-8.3.1.tar.gz", hash = "sha256:7e8e5c5abd6e93cb1cc151f23e57adc31fcf8cfd2a3ff2da63e23f732de35db6"}, + {file = "pytest-8.3.2-py3-none-any.whl", hash = "sha256:4ba08f9ae7dcf84ded419494d229b48d0903ea6407b030eaec46df5e6a73bba5"}, + {file = "pytest-8.3.2.tar.gz", hash = "sha256:c132345d12ce551242c87269de812483f5bcc87cdbb4722e48487ba194f9fdce"}, ] [package.dependencies] @@ -806,29 +807,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.5.4" +version = "0.5.5" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.5.4-py3-none-linux_armv6l.whl", hash = "sha256:82acef724fc639699b4d3177ed5cc14c2a5aacd92edd578a9e846d5b5ec18ddf"}, - {file = "ruff-0.5.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:da62e87637c8838b325e65beee485f71eb36202ce8e3cdbc24b9fcb8b99a37be"}, - {file = "ruff-0.5.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e98ad088edfe2f3b85a925ee96da652028f093d6b9b56b76fc242d8abb8e2059"}, - {file = "ruff-0.5.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c55efbecc3152d614cfe6c2247a3054cfe358cefbf794f8c79c8575456efe19"}, - {file = "ruff-0.5.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f9b85eaa1f653abd0a70603b8b7008d9e00c9fa1bbd0bf40dad3f0c0bdd06793"}, - {file = "ruff-0.5.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0cf497a47751be8c883059c4613ba2f50dd06ec672692de2811f039432875278"}, - {file = "ruff-0.5.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:09c14ed6a72af9ccc8d2e313d7acf7037f0faff43cde4b507e66f14e812e37f7"}, - {file = "ruff-0.5.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:628f6b8f97b8bad2490240aa84f3e68f390e13fabc9af5c0d3b96b485921cd60"}, - {file = "ruff-0.5.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3520a00c0563d7a7a7c324ad7e2cde2355733dafa9592c671fb2e9e3cd8194c1"}, - {file = "ruff-0.5.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93789f14ca2244fb91ed481456f6d0bb8af1f75a330e133b67d08f06ad85b516"}, - {file = "ruff-0.5.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:029454e2824eafa25b9df46882f7f7844d36fd8ce51c1b7f6d97e2615a57bbcc"}, - {file = "ruff-0.5.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:9492320eed573a13a0bc09a2957f17aa733fff9ce5bf00e66e6d4a88ec33813f"}, - {file = "ruff-0.5.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a6e1f62a92c645e2919b65c02e79d1f61e78a58eddaebca6c23659e7c7cb4ac7"}, - {file = "ruff-0.5.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:768fa9208df2bec4b2ce61dbc7c2ddd6b1be9fb48f1f8d3b78b3332c7d71c1ff"}, - {file = "ruff-0.5.4-py3-none-win32.whl", hash = "sha256:e1e7393e9c56128e870b233c82ceb42164966f25b30f68acbb24ed69ce9c3a4e"}, - {file = "ruff-0.5.4-py3-none-win_amd64.whl", hash = "sha256:58b54459221fd3f661a7329f177f091eb35cf7a603f01d9eb3eb11cc348d38c4"}, - {file = "ruff-0.5.4-py3-none-win_arm64.whl", hash = "sha256:bd53da65f1085fb5b307c38fd3c0829e76acf7b2a912d8d79cadcdb4875c1eb7"}, - {file = "ruff-0.5.4.tar.gz", hash = "sha256:2795726d5f71c4f4e70653273d1c23a8182f07dd8e48c12de5d867bfb7557eed"}, + {file = "ruff-0.5.5-py3-none-linux_armv6l.whl", hash = "sha256:605d589ec35d1da9213a9d4d7e7a9c761d90bba78fc8790d1c5e65026c1b9eaf"}, + {file = "ruff-0.5.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:00817603822a3e42b80f7c3298c8269e09f889ee94640cd1fc7f9329788d7bf8"}, + {file = "ruff-0.5.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:187a60f555e9f865a2ff2c6984b9afeffa7158ba6e1eab56cb830404c942b0f3"}, + {file = "ruff-0.5.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe26fc46fa8c6e0ae3f47ddccfbb136253c831c3289bba044befe68f467bfb16"}, + {file = "ruff-0.5.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4ad25dd9c5faac95c8e9efb13e15803cd8bbf7f4600645a60ffe17c73f60779b"}, + {file = "ruff-0.5.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f70737c157d7edf749bcb952d13854e8f745cec695a01bdc6e29c29c288fc36e"}, + {file = "ruff-0.5.5-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:cfd7de17cef6ab559e9f5ab859f0d3296393bc78f69030967ca4d87a541b97a0"}, + {file = "ruff-0.5.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a09b43e02f76ac0145f86a08e045e2ea452066f7ba064fd6b0cdccb486f7c3e7"}, + {file = "ruff-0.5.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0b856cb19c60cd40198be5d8d4b556228e3dcd545b4f423d1ad812bfdca5884"}, + {file = "ruff-0.5.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3687d002f911e8a5faf977e619a034d159a8373514a587249cc00f211c67a091"}, + {file = "ruff-0.5.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:ac9dc814e510436e30d0ba535f435a7f3dc97f895f844f5b3f347ec8c228a523"}, + {file = "ruff-0.5.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:af9bdf6c389b5add40d89b201425b531e0a5cceb3cfdcc69f04d3d531c6be74f"}, + {file = "ruff-0.5.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d40a8533ed545390ef8315b8e25c4bb85739b90bd0f3fe1280a29ae364cc55d8"}, + {file = "ruff-0.5.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:cab904683bf9e2ecbbe9ff235bfe056f0eba754d0168ad5407832928d579e7ab"}, + {file = "ruff-0.5.5-py3-none-win32.whl", hash = "sha256:696f18463b47a94575db635ebb4c178188645636f05e934fdf361b74edf1bb2d"}, + {file = "ruff-0.5.5-py3-none-win_amd64.whl", hash = "sha256:50f36d77f52d4c9c2f1361ccbfbd09099a1b2ea5d2b2222c586ab08885cf3445"}, + {file = "ruff-0.5.5-py3-none-win_arm64.whl", hash = "sha256:3191317d967af701f1b73a31ed5788795936e423b7acce82a2b63e26eb3e89d6"}, + {file = "ruff-0.5.5.tar.gz", hash = "sha256:cc5516bdb4858d972fbc31d246bdb390eab8df1a26e2353be2dbc0c2d7f5421a"}, ] [[package]] @@ -1066,4 +1067,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "c06aa2924d74c8a38891d421688b41a0e3d0fe530c034484590a1d4d763ae5bf" +content-hash = "26dc64a08a73511c0398f69b0a74dae1a4fbe329f2ee5b90130f1904b1f31990" diff --git a/pyproject.toml b/pyproject.toml index 8b6f5cb..7e51437 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "ignori" -version = "0.1.0" +version = "1.0.0" description = "" authors = ["Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com>"] readme = "README.md" @@ -9,10 +9,6 @@ readme = "README.md" python = "^3.12" textual = "^0.73.0" rich = "^13.7.1" -pipe = "^2.2" -tox = "^4.16.0" -pytest = "^8.2.2" - [tool.poetry.group.dev.dependencies] textual-dev = "^1.5.1" @@ -24,6 +20,7 @@ ruff-lsp = "^0.0.54" [tool.poetry.group.test.dependencies] pytest = "^8.2.2" pytest-asyncio = "^0.23.8" +tox = "^4.16.0" [build-system] requires = ["poetry-core"] @@ -34,7 +31,7 @@ line-length = 88 indent-width = 4 target-version = "py310" -exclude = [".git", "__pycache__", "styles", ".vscode"] +exclude = [".git", "__pycache__", "styles", ".vscode", ".github"] [tool.ruff.lint] select = [ From 1f1036ff282071002577e90538cdad287dc01cbc Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Wed, 31 Jul 2024 20:21:31 -0600 Subject: [PATCH 102/108] ci: Setup tox to execute tests in different python versions (#2) --- .github/workflows/test.yml | 8 ++++---- poetry.lock | 19 ++++++++++++++++++- pyproject.toml | 6 +++--- tox.ini | 16 ++++++++++++++++ 4 files changed, 41 insertions(+), 8 deletions(-) create mode 100644 tox.ini diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c7aa6d8..8bf6489 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -11,8 +11,8 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest] - python-version: ['3.12'] + os: [ubuntu-latest, windows-latest, macos-latest] + python-version: ['3.12', '3.11', '3.10'] steps: - uses: actions/checkout@v3 @@ -24,6 +24,6 @@ jobs: run: | python -m pip install --upgrade pip pip install poetry - poetry install + poetry install --no-root - name: Run Tests - run: poetry run pytest -vv + run: poetry run tox diff --git a/poetry.lock b/poetry.lock index cc5267b..52d3906 100644 --- a/poetry.lock +++ b/poetry.lock @@ -915,6 +915,23 @@ virtualenv = ">=20.26.3" docs = ["furo (>=2024.5.6)", "sphinx (>=7.3.7)", "sphinx-argparse-cli (>=1.16)", "sphinx-autodoc-typehints (>=2.2.2)", "sphinx-copybutton (>=0.5.2)", "sphinx-inline-tabs (>=2023.4.21)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.11)"] testing = ["build[virtualenv] (>=1.2.1)", "covdefaults (>=2.3)", "detect-test-pollution (>=1.2)", "devpi-process (>=1)", "diff-cover (>=9.1)", "distlib (>=0.3.8)", "flaky (>=3.8.1)", "hatch-vcs (>=0.4)", "hatchling (>=1.25)", "psutil (>=6)", "pytest (>=8.2.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-xdist (>=3.6.1)", "re-assert (>=1.1)", "setuptools (>=70.2)", "time-machine (>=2.14.2)", "wheel (>=0.43)"] +[[package]] +name = "tox-gh-actions" +version = "3.2.0" +description = "Seamless integration of tox into GitHub Actions" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tox-gh-actions-3.2.0.tar.gz", hash = "sha256:ac6fa3b8da51bc90dd77985fd55f09e746c6558c55910c0a93d643045a2b0ccc"}, + {file = "tox_gh_actions-3.2.0-py2.py3-none-any.whl", hash = "sha256:821b66a4751a788fa3e9617bd796d696507b08c6e1d929ee4faefba06b73b694"}, +] + +[package.dependencies] +tox = ">=4,<5" + +[package.extras] +testing = ["black", "devpi-process", "flake8 (>=6,<7)", "mypy", "pytest (>=7,<8)", "pytest-cov (>=3,<4)", "pytest-mock (>=3,<4)", "pytest-randomly (>=3)"] + [[package]] name = "typing-extensions" version = "4.12.2" @@ -1066,4 +1083,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "c06aa2924d74c8a38891d421688b41a0e3d0fe530c034484590a1d4d763ae5bf" +content-hash = "505268d1b9ddcb4f08661993245d5281a73eab09953da3ccb69637e1d6e9dc58" diff --git a/pyproject.toml b/pyproject.toml index 8b6f5cb..78d1598 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,9 +9,6 @@ readme = "README.md" python = "^3.12" textual = "^0.73.0" rich = "^13.7.1" -pipe = "^2.2" -tox = "^4.16.0" -pytest = "^8.2.2" [tool.poetry.group.dev.dependencies] @@ -24,6 +21,9 @@ ruff-lsp = "^0.0.54" [tool.poetry.group.test.dependencies] pytest = "^8.2.2" pytest-asyncio = "^0.23.8" +tox-gh-actions = "^3.2.0" +tox = "^4.16.0" + [build-system] requires = ["poetry-core"] diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..ecb9fa4 --- /dev/null +++ b/tox.ini @@ -0,0 +1,16 @@ +[tox] +envlist = py310,py311,py12 +isolated_build = true + +[gh-actions] +python= + 3.10: py310, + 3.11: py311, + 3.12: py312 + +[testenv] +allowlist_externals= + poetry + +commands= + poetry run pytest --basetemp={envtmpytestdir} -v From 7160c97a9985b87ec4f82c7314feb63c431eb5c2 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Thu, 1 Aug 2024 13:34:28 -0600 Subject: [PATCH 103/108] refactor(templates): Added gitignore for Gleam language --- templates/Gleam.gitignore | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 templates/Gleam.gitignore diff --git a/templates/Gleam.gitignore b/templates/Gleam.gitignore new file mode 100644 index 0000000..599be4e --- /dev/null +++ b/templates/Gleam.gitignore @@ -0,0 +1,4 @@ +*.beam +*.ez +/build +erl_crash.dump From 91130a018269a982e6b42ceb29ddc416b125a944 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Thu, 1 Aug 2024 17:42:22 -0600 Subject: [PATCH 104/108] ci(test): Added argument to not install current package --- .github/pull_request_template.md | 15 ++++++++++ .github/workflows/test.yml | 5 ++-- README.md | 3 +- poetry.lock | 48 ++++++++++++++++++++++++++++++-- pyproject.toml | 2 +- 5 files changed, 67 insertions(+), 6 deletions(-) create mode 100644 .github/pull_request_template.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..b957231 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,15 @@ +# Pull Request + +What this pull request changes... + +- Change 1 +- Change 2 + +**Issues fixed with this pull request...** + +- Issue 1 +- Issue 2 + +**Optionally, what changes should join this PR..** + +- Change Docs diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8bf6489..c22326d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -20,10 +20,11 @@ jobs: uses: actions/setup-python@v3 with: python-version: ${{ matrix.python-version }} - - name: Install dependencies + - name: Install Poetry and dependencies run: | python -m pip install --upgrade pip pip install poetry - poetry install --no-root + - name: Install dependencies + run: poetry install --no-root - name: Run Tests run: poetry run tox diff --git a/README.md b/README.md index 4986a53..d15f3ac 100644 --- a/README.md +++ b/README.md @@ -1 +1,2 @@ -# Ignori \ No newline at end of file +# Ignori + diff --git a/poetry.lock b/poetry.lock index c65ef0a..cad6513 100644 --- a/poetry.lock +++ b/poetry.lock @@ -99,6 +99,7 @@ files = [ [package.dependencies] aiohappyeyeballs = ">=2.3.0" aiosignal = ">=1.1.2" +async-timeout = {version = ">=4.0,<5.0", markers = "python_version < \"3.11\""} attrs = ">=17.3.0" frozenlist = ">=1.1.1" multidict = ">=4.5,<7.0" @@ -121,6 +122,17 @@ files = [ [package.dependencies] frozenlist = ">=1.1.0" +[[package]] +name = "async-timeout" +version = "4.0.3" +description = "Timeout context manager for asyncio programs" +optional = false +python-versions = ">=3.7" +files = [ + {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, + {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, +] + [[package]] name = "attrs" version = "23.2.0" @@ -164,6 +176,8 @@ files = [ [package.dependencies] attrs = ">=23.1.0" +exceptiongroup = {version = ">=1.1.1", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=4.1.0,<4.6.3 || >4.6.3", markers = "python_version < \"3.11\""} [package.extras] bson = ["pymongo (>=4.4.0)"] @@ -221,6 +235,20 @@ files = [ {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, ] +[[package]] +name = "exceptiongroup" +version = "1.2.2" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, + {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, +] + +[package.extras] +test = ["pytest (>=6)"] + [[package]] name = "filelock" version = "3.15.4" @@ -638,6 +666,7 @@ files = [ [package.dependencies] mypy-extensions = ">=1.0.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} typing-extensions = ">=4.6.0" [package.extras] @@ -744,6 +773,7 @@ files = [ [package.dependencies] packaging = ">=24.1" +tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} [package.extras] docs = ["furo (>=2024.5.6)", "sphinx-autodoc-typehints (>=2.2.1)"] @@ -762,9 +792,11 @@ files = [ [package.dependencies] colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" packaging = "*" pluggy = ">=1.5,<2" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} [package.extras] dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] @@ -890,6 +922,17 @@ msgpack = ">=1.0.3" textual = ">=0.36.0" typing-extensions = ">=4.4.0,<5.0.0" +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + [[package]] name = "tox" version = "4.16.0" @@ -910,6 +953,7 @@ packaging = ">=24.1" platformdirs = ">=4.2.2" pluggy = ">=1.5" pyproject-api = ">=1.7.1" +tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} virtualenv = ">=20.26.3" [package.extras] @@ -1083,5 +1127,5 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" -python-versions = "^3.12" -content-hash = "52c2ac1ea8566f7449e917dc4ba074f343719bbb0a45761e5fd906ffebef9511" +python-versions = ">=3.10,<4.0.0" +content-hash = "456db87c54ec25e546b544d3454ae7ea28e9065024f1828e753b90af843b7ea1" diff --git a/pyproject.toml b/pyproject.toml index 691e94d..5230804 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ authors = ["Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com>"] readme = "README.md" [tool.poetry.dependencies] -python = "^3.12" +python = ">=3.10,<4.0.0" textual = "^0.73.0" rich = "^13.7.1" From 32bf682998137ba19510d03d9fd741b730210a44 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Thu, 1 Aug 2024 17:42:50 -0600 Subject: [PATCH 105/108] ci(publuish): Created workflow to publish package on release --- .github/workflows/publish.yml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 .github/workflows/publish.yml diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..1bea57d --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,30 @@ +name: Publish to Pypi + +on: + release: + types: + - published + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ['3.12'] + + steps: + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v3 + with: + python-version: ${{ matrix.python-version }} + - name: Install Poetry + run: | + python -m pip install --upgrade pip + pip install poetry + - name: Install dependencies + run: poetry install --no-root --without dev test + - name: Publish to Pipy + env: + POETRY_PYPI_TOKEN_PYPI: ${{ secrets.PYPI_API_TOKEN }} + run: poetry publish --build --username __token__ --password $POETRY_PYPI_TOKEN_PYPI From 94b7add101cb40e80af9f1612f997a6b9aca02f1 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Thu, 1 Aug 2024 21:57:52 -0600 Subject: [PATCH 106/108] build: Defined data required for its publishment, created CONTRIBUTING.md and fill README.md with content about the project --- CONTRIBUTING.md | 30 +++++++++++++++++++++++++++ README.md | 20 ++++++++++++++++++ assets/ignori_screenshoot.png | Bin 0 -> 118807 bytes ignori/app.py | 9 ++++++++ pyproject.toml | 38 ++++++++++++++++++++++++++++++++++ 5 files changed, 97 insertions(+) create mode 100644 CONTRIBUTING.md create mode 100644 assets/ignori_screenshoot.png diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..a258c2c --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,30 @@ +# Contributing to Ignori + +## How to commit + +Please put a meaningful commit message following the specification of [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/). Some examples of messages: + +### **OK:** + +* Fixed issue#301 - Tasks searched aren't displayed +* Formatted with black +* Fixed README +* Updated requirements.txt + +### **Not OK:** + +* Pushed code +* A bug fixed +* Hacktober fest commit + +## Every unit test and functional test must have pass + +If you make a pull request and a unit test or functional test fails, please correct the problem and add it to the pull request. +*Note + +* If your changes modify existing functions, you may need to edit the test itself to reflect them. +* If you are adding a new function, please add unit tests or functional tests and confirm that they pass as well. + +## Who can contribute? + +Anyone is free to contribute :3. diff --git a/README.md b/README.md index d15f3ac..73c5442 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,22 @@ # Ignori +[![PyPI](https://img.shields.io/pypi/v/ignori)](https://pypi.org/project/ignori/) +![PyPI - Python Version](https://img.shields.io/pypi/pyversions/ignori) +![GitHub License](https://img.shields.io/github/license/egamagz/ignori) +[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) + +Generate .gitignore file without leaving the terminal. +![Ignori screenshot](./assets/ignori_screenshoot.png "Ignori Screenshot") +Ignori was built with [Textual](https://github.com/textualize/textual) + +## Why? + +Normally, when I start a project from scratch or the project initialiser does not generate a gitignore file, I have to search for it. With this, the workflow will not be interrupted by having to google it. + +## Credits + +Created by Gamaliel Garcia / [@EGAMAGZ](https://github.com/EGAMAGZ) + +## LICENSE + +[MIT License](./LICENSE) diff --git a/assets/ignori_screenshoot.png b/assets/ignori_screenshoot.png new file mode 100644 index 0000000000000000000000000000000000000000..9fd8e4a6a6a485fab945d98edf26590e467e7abd GIT binary patch literal 118807 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 =sqfKGulU*3hr@6+NR%YYw5*? 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 w)igxrZ-jQeOaFm?$ZY$5ibN9c;k literal 0 HcmV?d00001 diff --git a/ignori/app.py b/ignori/app.py index 5e48a26..7588264 100644 --- a/ignori/app.py +++ b/ignori/app.py @@ -47,3 +47,12 @@ def compose(self: Self) -> ComposeResult: yield SearchForm() yield GenerationForm().data_bind(IgnoriApp.selected_ignore_file) yield Footer() + + +def main() -> None: + app = IgnoriApp() + app.run() + + +if __name__ == "__main__": + main() diff --git a/pyproject.toml b/pyproject.toml index 5230804..aa9506a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,13 +3,51 @@ name = "ignori" version = "1.0.0" description = "" authors = ["Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com>"] +maintainers = ["Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com>"] readme = "README.md" +repository = "https://github.com/EGAMAGZ/ignori" +homepage = "https://github.com/EGAMAGZ/ignori" +license = "MIT" +keywords = [ + "gitignore-generator", + "generator", + "ignori", + "tui", + "textual", + "textualize", + "developer-tool", + "tool", +] +classifiers = [ + 'License :: OSI Approved :: MIT License', + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Environment :: Console :: Curses", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Operating System :: OS Independent", + "Topic :: Software Development", + "Topic :: Software Development :: Code Generators", + "Topic :: Software Development :: Version Control :: Git", + "Typing :: Typed", +] + +exclude = ["tests", "assets", "CONTRIBUTING.md"] +include = ["LICENSE", "styles", "templates", "README.md"] + [tool.poetry.dependencies] python = ">=3.10,<4.0.0" textual = "^0.73.0" rich = "^13.7.1" +[tool.poetry.scripts] +ignori = "ignori.app:main" + +[tool.poetry.urls] +"Bug Tracker" = "https://github.com/EGAMAGZ/ignori/issues" + [tool.poetry.group.dev.dependencies] textual-dev = "^1.5.1" ruff = "^0.5.4" From 160df3c19672260643d302f994d00cf8c3b4ca53 Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Thu, 1 Aug 2024 21:57:52 -0600 Subject: [PATCH 107/108] build: Defined data required for its publishment, created CONTRIBUTING.md and fill README.md with content about the project --- CONTRIBUTING.md | 31 +++++++++++++++++++++++++++ README.md | 20 ++++++++++++++++++ assets/ignori_screenshoot.png | Bin 0 -> 118807 bytes ignori/app.py | 9 ++++++++ pyproject.toml | 38 ++++++++++++++++++++++++++++++++++ 5 files changed, 98 insertions(+) create mode 100644 CONTRIBUTING.md create mode 100644 assets/ignori_screenshoot.png diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..4722e78 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,31 @@ +# Contributing to Ignori + +## How to commit + +Please put a meaningful commit message following the specification of [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/). Some examples of messages: + +### **OK:** + +* Fixed issue#301 - Tasks searched aren't displayed +* Formatted with black +* Fixed README +* Updated requirements.txt + +### **Not OK:** + +* Pushed code +* A bug fixed +* Hacktober fest commit + +## Every unit test and functional test must have pass + +If you make a pull request and a unit test or functional test fails, please correct the problem and add it to the pull request. + +**Note:** + +* If your changes modify existing functions, you may need to edit the test itself to reflect them. +* If you are adding a new function, please add unit tests or functional tests and confirm that they pass as well. + +## Who can contribute? + +Anyone is free to contribute :3. diff --git a/README.md b/README.md index d15f3ac..73c5442 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,22 @@ # Ignori +[![PyPI](https://img.shields.io/pypi/v/ignori)](https://pypi.org/project/ignori/) +![PyPI - Python Version](https://img.shields.io/pypi/pyversions/ignori) +![GitHub License](https://img.shields.io/github/license/egamagz/ignori) +[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) + +Generate .gitignore file without leaving the terminal. +![Ignori screenshot](./assets/ignori_screenshoot.png "Ignori Screenshot") +Ignori was built with [Textual](https://github.com/textualize/textual) + +## Why? + +Normally, when I start a project from scratch or the project initialiser does not generate a gitignore file, I have to search for it. With this, the workflow will not be interrupted by having to google it. + +## Credits + +Created by Gamaliel Garcia / [@EGAMAGZ](https://github.com/EGAMAGZ) + +## LICENSE + +[MIT License](./LICENSE) diff --git a/assets/ignori_screenshoot.png b/assets/ignori_screenshoot.png new file mode 100644 index 0000000000000000000000000000000000000000..9fd8e4a6a6a485fab945d98edf26590e467e7abd GIT binary patch literal 118807 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 =sqfKGulU*3hr@6+NR%YYw5*? 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 w)igxrZ-jQeOaFm?$ZY$5ibN9c;k literal 0 HcmV?d00001 diff --git a/ignori/app.py b/ignori/app.py index 5e48a26..7588264 100644 --- a/ignori/app.py +++ b/ignori/app.py @@ -47,3 +47,12 @@ def compose(self: Self) -> ComposeResult: yield SearchForm() yield GenerationForm().data_bind(IgnoriApp.selected_ignore_file) yield Footer() + + +def main() -> None: + app = IgnoriApp() + app.run() + + +if __name__ == "__main__": + main() diff --git a/pyproject.toml b/pyproject.toml index 5230804..aa9506a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,13 +3,51 @@ name = "ignori" version = "1.0.0" description = "" authors = ["Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com>"] +maintainers = ["Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com>"] readme = "README.md" +repository = "https://github.com/EGAMAGZ/ignori" +homepage = "https://github.com/EGAMAGZ/ignori" +license = "MIT" +keywords = [ + "gitignore-generator", + "generator", + "ignori", + "tui", + "textual", + "textualize", + "developer-tool", + "tool", +] +classifiers = [ + 'License :: OSI Approved :: MIT License', + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Environment :: Console :: Curses", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Operating System :: OS Independent", + "Topic :: Software Development", + "Topic :: Software Development :: Code Generators", + "Topic :: Software Development :: Version Control :: Git", + "Typing :: Typed", +] + +exclude = ["tests", "assets", "CONTRIBUTING.md"] +include = ["LICENSE", "styles", "templates", "README.md"] + [tool.poetry.dependencies] python = ">=3.10,<4.0.0" textual = "^0.73.0" rich = "^13.7.1" +[tool.poetry.scripts] +ignori = "ignori.app:main" + +[tool.poetry.urls] +"Bug Tracker" = "https://github.com/EGAMAGZ/ignori/issues" + [tool.poetry.group.dev.dependencies] textual-dev = "^1.5.1" ruff = "^0.5.4" From 44d93457aa254b747191a3fd4f57b673d51d0baf Mon Sep 17 00:00:00 2001 From: Gamaliel Garcia <46827955+EGAMAGZ@users.noreply.github.com> Date: Thu, 1 Aug 2024 22:09:58 -0600 Subject: [PATCH 108/108] build!: Removed support for Python 3.10 --- .github/workflows/test.yml | 2 +- ignori/app.py | 3 +- ignori/ignore_file.py | 2 +- ignori/screens/modals/confirm_modal.py | 3 +- ignori/screens/modals/info_modal.py | 3 +- ignori/util/settings.py | 3 +- ignori/util/validators.py | 2 +- ignori/widgets/file_preview.py | 3 +- ignori/widgets/generation_form.py | 2 +- ignori/widgets/header.py | 3 +- ignori/widgets/language_badge.py | 3 +- ignori/widgets/language_list.py | 3 +- ignori/widgets/search_form.py | 2 +- poetry.lock | 48 ++------------------------ pyproject.toml | 7 ++-- tox.ini | 1 - 16 files changed, 25 insertions(+), 65 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c22326d..09eb48a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -12,7 +12,7 @@ jobs: strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] - python-version: ['3.12', '3.11', '3.10'] + python-version: ['3.12', '3.11'] steps: - uses: actions/checkout@v3 diff --git a/ignori/app.py b/ignori/app.py index 7588264..2e333e2 100644 --- a/ignori/app.py +++ b/ignori/app.py @@ -1,10 +1,11 @@ +from typing import Self + from textual import on from textual.app import App, ComposeResult from textual.binding import Binding from textual.containers import Vertical from textual.reactive import reactive from textual.widgets import Footer -from typing_extensions import Self from ignori.ignore_file import IgnoreFile from ignori.util.settings import APP_TITLE, STYLES_PATH diff --git a/ignori/ignore_file.py b/ignori/ignore_file.py index c9ce52a..db7b562 100644 --- a/ignori/ignore_file.py +++ b/ignori/ignore_file.py @@ -1,9 +1,9 @@ from dataclasses import dataclass, field from itertools import cycle from pathlib import Path +from typing import Self from rich.console import Console, ConsoleOptions, RenderResult -from typing_extensions import Self @dataclass diff --git a/ignori/screens/modals/confirm_modal.py b/ignori/screens/modals/confirm_modal.py index 58f55cf..212e2a5 100644 --- a/ignori/screens/modals/confirm_modal.py +++ b/ignori/screens/modals/confirm_modal.py @@ -1,9 +1,10 @@ +from typing import Self + from textual import on from textual.app import ComposeResult from textual.containers import Container, Horizontal from textual.screen import ModalScreen from textual.widgets import Button, Label -from typing_extensions import Self class ConfirmModal(ModalScreen[bool]): diff --git a/ignori/screens/modals/info_modal.py b/ignori/screens/modals/info_modal.py index 18394ea..38a2ba7 100644 --- a/ignori/screens/modals/info_modal.py +++ b/ignori/screens/modals/info_modal.py @@ -1,9 +1,10 @@ +from typing import Self + from textual import on from textual.app import ComposeResult from textual.containers import Container from textual.screen import ModalScreen from textual.widgets import Button, Label -from typing_extensions import Self class InfoModal(ModalScreen[None]): diff --git a/ignori/util/settings.py b/ignori/util/settings.py index e94fc45..737a5bf 100644 --- a/ignori/util/settings.py +++ b/ignori/util/settings.py @@ -1,6 +1,5 @@ -from pathlib import Path - import tomllib +from pathlib import Path def get_version() -> str: diff --git a/ignori/util/validators.py b/ignori/util/validators.py index fc3f384..5634149 100644 --- a/ignori/util/validators.py +++ b/ignori/util/validators.py @@ -1,7 +1,7 @@ from pathlib import Path +from typing import Self from textual.validation import ValidationResult, Validator -from typing_extensions import Self class PathValidator(Validator): diff --git a/ignori/widgets/file_preview.py b/ignori/widgets/file_preview.py index acda56e..328a1b1 100644 --- a/ignori/widgets/file_preview.py +++ b/ignori/widgets/file_preview.py @@ -1,9 +1,10 @@ +from typing import Self + from rich.syntax import Syntax from textual.app import ComposeResult from textual.containers import VerticalScroll from textual.reactive import reactive from textual.widgets import Static -from typing_extensions import Self from ignori.ignore_file import IgnoreFile diff --git a/ignori/widgets/generation_form.py b/ignori/widgets/generation_form.py index d3eb710..e5ec761 100644 --- a/ignori/widgets/generation_form.py +++ b/ignori/widgets/generation_form.py @@ -1,5 +1,6 @@ from functools import partial from pathlib import Path +from typing import Self from textual import on from textual.app import ComposeResult @@ -8,7 +9,6 @@ from textual.reactive import reactive from textual.widget import Widget from textual.widgets import Button, Input, Label -from typing_extensions import Self from ignori.ignore_file import IgnoreFile from ignori.screens.modals.confirm_modal import ConfirmModal diff --git a/ignori/widgets/header.py b/ignori/widgets/header.py index d882837..2e091dd 100644 --- a/ignori/widgets/header.py +++ b/ignori/widgets/header.py @@ -1,7 +1,8 @@ +from typing import Self + from textual.app import ComposeResult from textual.containers import Horizontal from textual.widgets import Label -from typing_extensions import Self from ignori.util.settings import APP_TITLE, APP_VERSION diff --git a/ignori/widgets/language_badge.py b/ignori/widgets/language_badge.py index ee7f8bd..9b6a95d 100644 --- a/ignori/widgets/language_badge.py +++ b/ignori/widgets/language_badge.py @@ -1,3 +1,5 @@ +from typing import Self + from textual import events, on from textual.app import ComposeResult from textual.binding import Binding @@ -5,7 +7,6 @@ from textual.message import Message from textual.reactive import reactive from textual.widgets import Label -from typing_extensions import Self from ignori.ignore_file import IgnoreFile diff --git a/ignori/widgets/language_list.py b/ignori/widgets/language_list.py index 4e504c4..271c7e8 100644 --- a/ignori/widgets/language_list.py +++ b/ignori/widgets/language_list.py @@ -1,6 +1,7 @@ +from typing import Self + from textual.binding import Binding from textual.widgets import OptionList -from typing_extensions import Self from ignori.screens.modals.info_modal import InfoModal from ignori.util.explorer import open_file_explorer diff --git a/ignori/widgets/search_form.py b/ignori/widgets/search_form.py index bdb0f25..3dce6aa 100644 --- a/ignori/widgets/search_form.py +++ b/ignori/widgets/search_form.py @@ -1,4 +1,5 @@ from dataclasses import dataclass +from typing import Self from textual import on from textual.app import ComposeResult @@ -7,7 +8,6 @@ from textual.reactive import reactive from textual.widgets import Button, Input, OptionList from textual.widgets.option_list import Option -from typing_extensions import Self from ignori.ignore_file import IgnoreFile, get_option_by_id from ignori.util.file import get_gitignore_templates diff --git a/poetry.lock b/poetry.lock index cad6513..ac569f0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -99,7 +99,6 @@ files = [ [package.dependencies] aiohappyeyeballs = ">=2.3.0" aiosignal = ">=1.1.2" -async-timeout = {version = ">=4.0,<5.0", markers = "python_version < \"3.11\""} attrs = ">=17.3.0" frozenlist = ">=1.1.1" multidict = ">=4.5,<7.0" @@ -122,17 +121,6 @@ files = [ [package.dependencies] frozenlist = ">=1.1.0" -[[package]] -name = "async-timeout" -version = "4.0.3" -description = "Timeout context manager for asyncio programs" -optional = false -python-versions = ">=3.7" -files = [ - {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, - {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, -] - [[package]] name = "attrs" version = "23.2.0" @@ -176,8 +164,6 @@ files = [ [package.dependencies] attrs = ">=23.1.0" -exceptiongroup = {version = ">=1.1.1", markers = "python_version < \"3.11\""} -typing-extensions = {version = ">=4.1.0,<4.6.3 || >4.6.3", markers = "python_version < \"3.11\""} [package.extras] bson = ["pymongo (>=4.4.0)"] @@ -235,20 +221,6 @@ files = [ {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, ] -[[package]] -name = "exceptiongroup" -version = "1.2.2" -description = "Backport of PEP 654 (exception groups)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, - {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, -] - -[package.extras] -test = ["pytest (>=6)"] - [[package]] name = "filelock" version = "3.15.4" @@ -666,7 +638,6 @@ files = [ [package.dependencies] mypy-extensions = ">=1.0.0" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} typing-extensions = ">=4.6.0" [package.extras] @@ -773,7 +744,6 @@ files = [ [package.dependencies] packaging = ">=24.1" -tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} [package.extras] docs = ["furo (>=2024.5.6)", "sphinx-autodoc-typehints (>=2.2.1)"] @@ -792,11 +762,9 @@ files = [ [package.dependencies] colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" packaging = "*" pluggy = ">=1.5,<2" -tomli = {version = ">=1", markers = "python_version < \"3.11\""} [package.extras] dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] @@ -922,17 +890,6 @@ msgpack = ">=1.0.3" textual = ">=0.36.0" typing-extensions = ">=4.4.0,<5.0.0" -[[package]] -name = "tomli" -version = "2.0.1" -description = "A lil' TOML parser" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] - [[package]] name = "tox" version = "4.16.0" @@ -953,7 +910,6 @@ packaging = ">=24.1" platformdirs = ">=4.2.2" pluggy = ">=1.5" pyproject-api = ">=1.7.1" -tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} virtualenv = ">=20.26.3" [package.extras] @@ -1127,5 +1083,5 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" -python-versions = ">=3.10,<4.0.0" -content-hash = "456db87c54ec25e546b544d3454ae7ea28e9065024f1828e753b90af843b7ea1" +python-versions = ">=3.11,<4.0.0" +content-hash = "53d251b832cd60c74b840b2aba062895b2eb7075b35546f75d87a52b2f5a2f15" diff --git a/pyproject.toml b/pyproject.toml index aa9506a..c49c5d7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,7 +23,6 @@ classifiers = [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Environment :: Console :: Curses", - "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Operating System :: OS Independent", @@ -38,7 +37,7 @@ include = ["LICENSE", "styles", "templates", "README.md"] [tool.poetry.dependencies] -python = ">=3.10,<4.0.0" +python = ">=3.11,<4.0.0" textual = "^0.73.0" rich = "^13.7.1" @@ -69,7 +68,7 @@ build-backend = "poetry.core.masonry.api" [tool.ruff] line-length = 88 indent-width = 4 -target-version = "py310" +target-version = "py311" exclude = [".git", "__pycache__", "styles", ".vscode", ".github"] @@ -103,7 +102,7 @@ line-ending = "auto" [tool.mypy] -python_version = "3.10" +python_version = "3.11" check_untyped_defs = true diff --git a/tox.ini b/tox.ini index ecb9fa4..8e5fc2e 100644 --- a/tox.ini +++ b/tox.ini @@ -4,7 +4,6 @@ isolated_build = true [gh-actions] python= - 3.10: py310, 3.11: py311, 3.12: py312