1
0
Fork 0

2023-07-31

This commit is contained in:
Gennadiy 2023-12-17 08:06:45 +03:00
parent 6434e68250
commit 0cd5672195
37 changed files with 360 additions and 417 deletions

4
.gitattributes vendored
View file

@ -1,3 +1 @@
README*.md linguist-language=HTML
draft/2023-06-05-round-robin.md linguist-language=Java
draft/2023-06-13-directory-tree.md linguist-language=Shell
*.md linguist-language=HTML

2
.gitignore vendored
View file

@ -1,4 +1,4 @@
.idea
*.iml
.repo_*.sh
.token_*
.repo_*

View file

@ -1,46 +0,0 @@
## Дерево каталогов
<pre>
.
├─ <a href='bash_scripts'>bash_scripts</a>
│ ├─ <a href='bash_scripts/README.en.md'>README.en.md</a>
│ ├─ <a href='bash_scripts/README.md'>README.md</a>
│ ├─ <a href='bash_scripts/archive-common.sh'>archive-common.sh</a>
│ ├─ <a href='bash_scripts/archive-packages.sh'>archive-packages.sh</a>
│ ├─ <a href='bash_scripts/info-copy.sh'>info-copy.sh</a>
│ ├─ <a href='bash_scripts/info-domain.sh'>info-domain.sh</a>
│ ├─ <a href='bash_scripts/info-toggle.sh'>info-toggle.sh</a>
│ ├─ <a href='bash_scripts/repo-compose.sh'>repo-compose.sh</a>
│ ├─ <a href='bash_scripts/repo-gitea.tmpl.sh'>repo-gitea.tmpl.sh</a>
│ ├─ <a href='bash_scripts/repo-gitlab.tmpl.sh'>repo-gitlab.tmpl.sh</a>
│ ├─ <a href='bash_scripts/repo-local.tmpl.sh'>repo-local.tmpl.sh</a>
│ └─ <a href='bash_scripts/repo-update.sh'>repo-update.sh</a>
├─ <a href='draft'>draft</a>
│ ├─ <a href='draft/2023-06-05-round-robin.md'>2023-06-05-round-robin.md</a>
│ ├─ <a href='draft/2023-06-13-directory-tree.md'>2023-06-13-directory-tree.md</a>
│ └─ <a href='draft/README.md'>README.md</a>
├─ <a href='pictures'>pictures</a>
│ ├─ <a href='pictures/1.jpg'>1.jpg</a>
│ ├─ <a href='pictures/2.jpg'>2.jpg</a>
│ ├─ <a href='pictures/3.jpg'>3.jpg</a>
│ ├─ <a href='pictures/4.jpg'>4.jpg</a>
│ ├─ <a href='pictures/5.jpg'>5.jpg</a>
│ ├─ <a href='pictures/README.md'>README.md</a>
│ ├─ <a href='pictures/color-tomato-theme.jpg'>color-tomato-theme.jpg</a>
│ ├─ <a href='pictures/directory-tree1.jpg'>directory-tree1.jpg</a>
│ ├─ <a href='pictures/directory-tree2.jpg'>directory-tree2.jpg</a>
│ ├─ <a href='pictures/directory-tree3.jpg'>directory-tree3.jpg</a>
│ ├─ <a href='pictures/directory-tree4.jpg'>directory-tree4.jpg</a>
│ ├─ <a href='pictures/draft.jpg'>draft.jpg</a>
│ ├─ <a href='pictures/maintenance.jpg'>maintenance.jpg</a>
│ ├─ <a href='pictures/older-tomato-theme.jpg'>older-tomato-theme.jpg</a>
│ ├─ <a href='pictures/pictures.jpg'>pictures.jpg</a>
│ └─ <a href='pictures/pomodoro.jpg'>pomodoro.jpg</a>
├─ <a href='CONTRIBUTING.md'>CONTRIBUTING.md</a>
├─ <a href='DIRECTORY-TREE.md'>DIRECTORY-TREE.md</a>
├─ <a href='LICENSE.md'>LICENSE.md</a>
├─ <a href='OPEN_LICENSE.txt'>OPEN_LICENSE.txt</a>
├─ <a href='README.en.md'>README.en.md</a>
├─ <a href='README.md'>README.md</a>
└─ <a href='WIKI.md'>WIKI.md</a>
</pre>

39
DIRECTORY_TREE.md Normal file
View file

@ -0,0 +1,39 @@
## Дерево каталогов
<pre>
<a href='.'>.</a>
├─ <a href='bash_scripts'>bash_scripts</a>
│ ├─ <a href='bash_scripts/README.en.md'>README.en.md</a>
│ ├─ <a href='bash_scripts/README.md'>README.md</a>
│ ├─ <a href='bash_scripts/archive_backup.sh'>archive_backup.sh</a>
│ ├─ <a href='bash_scripts/archive_packages.sh'>archive_packages.sh</a>
│ ├─ <a href='bash_scripts/info_param.sh'>info_param.sh</a>
│ ├─ <a href='bash_scripts/info_references.sh'>info_references.sh</a>
│ ├─ <a href='bash_scripts/info_tree_license.sh'>info_tree_license.sh</a>
│ ├─ <a href='bash_scripts/repo_compose.sh'>repo_compose.sh</a>
│ ├─ <a href='bash_scripts/repo_gitea.tmpl.sh'>repo_gitea.tmpl.sh</a>
│ ├─ <a href='bash_scripts/repo_gitlab.tmpl.sh'>repo_gitlab.tmpl.sh</a>
│ ├─ <a href='bash_scripts/repo_local.tmpl.sh'>repo_local.tmpl.sh</a>
│ └─ <a href='bash_scripts/repo_update.sh'>repo_update.sh</a>
├─ <a href='draft'>draft</a>
│ ├─ <a href='draft/README.md'>README.md</a>
│ └─ <a href='draft/round-robin.md'>round-robin.md</a>
├─ <a href='pictures'>pictures</a>
│ ├─ <a href='pictures/README.md'>README.md</a>
│ ├─ <a href='pictures/bash_scripts.jpg'>bash_scripts.jpg</a>
│ ├─ <a href='pictures/color-tomato-theme.jpg'>color-tomato-theme.jpg</a>
│ ├─ <a href='pictures/draft.jpg'>draft.jpg</a>
│ ├─ <a href='pictures/older-tomato-theme.jpg'>older-tomato-theme.jpg</a>
│ ├─ <a href='pictures/pictures.jpg'>pictures.jpg</a>
│ ├─ <a href='pictures/pomodoro-website.jpg'>pomodoro-website.jpg</a>
│ └─ <a href='pictures/pomodoro.jpg'>pomodoro.jpg</a>
├─ <a href='.gitattributes'>.gitattributes</a>
├─ <a href='.gitignore'>.gitignore</a>
├─ <a href='CONTRIBUTING.md'>CONTRIBUTING.md</a>
├─ <a href='DIRECTORY_TREE.md'>DIRECTORY_TREE.md</a>
├─ <a href='LICENSE.md'>LICENSE.md</a>
├─ <a href='OPEN_LICENSE.txt'>OPEN_LICENSE.txt</a>
├─ <a href='README.en.md'>README.en.md</a>
├─ <a href='README.md'>README.md</a>
└─ <a href='WIKI.md'>WIKI.md</a>
</pre>

View file

@ -17,11 +17,21 @@ Constructive criticism and error descriptions can be sent over electronic mail
interesting for me and useful for professional growth. Because, firstly, not all mistakes are made
intentionally and, secondly, not all of them — are mistakes.
- [pomodoro1](https://hub.mos.ru/pomodoro/1/blob/master/README.en.md) — Three-dimensional graphics in JavaScript.
- [pomodoro2](https://hub.mos.ru/pomodoro/2/blob/master/README.en.md) — Cartesian product, combinatorics.
- [pomodoro3](https://hub.mos.ru/pomodoro/3/blob/master/README.en.md) — Matrix multiplication, rotations.
- [pomodoro4](https://hub.mos.ru/pomodoro/4/blob/master/README.en.md) — Poetry. Humor.
- [pomodoro5](https://hub.mos.ru/pomodoro/5/blob/master/README.en.md) — Drawing pictures with text.
1. [Three-dimensional graphics in JavaScript](https://pomodoro1.mircloud.ru/en/).
2. [Cartesian product, combinatorics](https://pomodoro2.mircloud.ru/en/).
3. [Matrix multiplication and rotations](https://pomodoro3.mircloud.ru/en/).
4. [Poetry, humor](https://pomodoro4.mircloud.ru/en/).
5. [Drawing pictures with text](https://pomodoro5.mircloud.ru/en/).
### Process
The creative process continues continuously, especially when there is no work. Fully mature
thoughts become separate projects, and immature ones go as parts of this project. It is
difficult for some thoughts to mature, so they remain incomplete.
- [Process management](bash_scripts/README.en.md) — scripts Bash.
- [Incomplete publications](draft/README.md) — draft without translation.
- [Avatars for repositories](pictures/README.md) — pictures.
### Build
@ -30,33 +40,20 @@ obfuscation was performed for all classes, variables and functions of HTML, CSS
substitution cipher. Code blocks were left without obfuscation, and syntax highlighting was performed on
the client. *Obusificator* — is a unique solution, no longer used.
Now the site is generated by Jekyll, the template language is Liquid, syntax
highlighting during build time, and the content of the pages is in Markdown format.
[Maintenance](bash_scripts/README.en.md)
is performed by Bash scripts. The thought does not leave me, that
I made a *senseless swap* — in general, nothing has changed.
Now the site is generated by Jekyll, the template language is Liquid, syntax highlighting during build
time, and the content of the pages is in Markdown format. Process management is performed by Bash scripts.
The thought does not leave me, that I made a *senseless swap* — in general, nothing has changed.
### Design
Two design themes for Jekyll in the Liquid template language:
[«Color tomato»](https://hub.mos.ru/golovin.gg/color-tomato-theme/blob/master/README.en.md)
was written earlier using AngularJS and Material, this was
the design of the previous version of my blog, then an
[«Older tomato»](https://hub.mos.ru/golovin.gg/older-tomato-theme/blob/master/README.en.md)
— lightweight single-color variant was written using only HTML and CSS, the appearance resembles
the default design theme on GitHub Pages. Both tomatoes supplement each other and are similar to
each other, commonalities and differences between them are marked in the list below.
Two design themes for Jekyll in the Liquid template language: «Color tomato» was written earlier using
AngularJS and Material, this was the design of the previous version of my blog, then an «Older tomato»
— lightweight single-color variant was written using only HTML and CSS, the appearance resembles the
default design theme on GitHub Pages. Both tomatoes supplement each other and are similar to each other,
so they can be used together on the same site.
- [x] Responsive layout.
- [x] User JS and CSS files in the head block of HTML pages.
- [x] SEO-markup using JSON-LD and Open Graph.
- [x] Switch between two languages and two tomato themes.
- [x] Map of site pages with their translations in XML format.
- [x] Simple 404 page for non-existing URLs.
- [x] Fonts: Roboto for text and JBMono for code blocks.
- [x] Tomatoes: PNG, JPG 120x120, SVG 64x64, ICO 32x32.
- [ ] Color selection during the build, green is the default color.
- [ ] Scroll-to-top button in Material style.
- [Color tomato](https://hub.mos.ru/golovin.gg/color-tomato-theme/blob/master/README.en.md) — color selection during the build.
- [Older tomato](https://hub.mos.ru/golovin.gg/older-tomato-theme/blob/master/README.en.md) — lightweight decoration theme.
### License

View file

@ -1,70 +1,64 @@
# [Помидоры](README.en.md)
Обновлённый и ещё раз переписанный вариант моего старого блога, новые версии
старых программ: объёмный тетрис, простая капча и другие — упрощённая сборка
сайта без обфускации, облегчённое оформление страниц без JavaScript и открытая
лицензия РФ вместо MIT — изменений много и везде, но суть осталась прежней —
ничего не изменилось. Серия статических вёб-сайтов «Помидоры» — чтобы не скучать и
чтобы не забыть, как программы писать, когда работы нет.
Обновлённый и ещё раз переписанный вариант моего старого блога, новые версии старых программ: объёмный тетрис,
простая капча и другие — упрощённая сборка сайта без обфускации, облегчённое оформление страниц без JavaScript и
открытая лицензия РФ вместо MIT — изменений много и везде, но суть осталась прежней — ничего не изменилось. Серия
статических вёб-сайтов «Помидоры» — чтобы не скучать и чтобы не забыть, как программы писать, когда работы нет.
### Содержание
Решения задач по программированию с ошибками и описания решений. Исправление ошибок — дополнительная
задача для троечников и любителей списывать. Весь код проверен и работает — выглядит красиво, но на
продуктовом сервере такой код использовать нельзя. Вопрос на четвёрку: найти хотя бы одну ошибку.
Вопрос на пятёрку: найти *больше* ошибок и написать *своё* решение.
Решения задач по программированию с ошибками и описания решений. Исправление ошибок — дополнительная задача для
троечников и любителей списывать. Весь код проверен и работает — выглядит красиво, но на продуктовом сервере такой
код использовать нельзя. Вопрос на четвёрку: найти хотя бы одну ошибку. Вопрос на пятёрку: найти *больше* ошибок и
написать *своё* решение.
Конструктивную критику и описания ошибок можно отправлять по электронной почте — как минимум мне
это интересно и полезно для профессионального роста. Потому что, во-первых, не все ошибки допущены
намеренно и, во-вторых, не все они — есть ошибки.
Конструктивную критику и описания ошибок можно отправлять по электронной почте — как минимум мне это интересно и
полезно для профессионального роста. Потому что, во-первых, не все ошибки допущены намеренно и, во-вторых, не все
они — есть ошибки.
- [pomodoro1](https://hub.mos.ru/pomodoro/1/blob/master/README.md) — Трёхмерная графика на JavaScript.
- [pomodoro2](https://hub.mos.ru/pomodoro/2/blob/master/README.md) — Декартово произведение, комбинаторика.
- [pomodoro3](https://hub.mos.ru/pomodoro/3/blob/master/README.md) — Умножение матриц, повороты.
- [pomodoro4](https://hub.mos.ru/pomodoro/4/blob/master/README.md) — Поэзия. Юмор.
- [pomodoro5](https://hub.mos.ru/pomodoro/5/blob/master/README.md) — Рисуем картинки текстом.
1. [Трёхмерная графика на JavaScript](https://pomodoro1.mircloud.ru/).
2. [Декартово произведение, комбинаторика](https://pomodoro2.mircloud.ru/).
3. [Умножение матриц и повороты](https://pomodoro3.mircloud.ru/).
4. [Поэзия, юмор](https://pomodoro4.mircloud.ru/).
5. [Рисуем картинки текстом](https://pomodoro5.mircloud.ru/).
### Процесс
Творческий процесс продолжается непрерывно, особенно, когда работы нет. Полностью созревшие мысли
становятся отдельными проектами, а несозревшие идут как части этого проекта. Некоторым мыслям
сложно созреть, поэтому они остаются незавершёнными.
- [Управление процессами](bash_scripts/README.md) — скрипты Bash.
- [Незавершённые публикации](draft/README.md) — черновик.
- [Аватарки для репозиториев](pictures/README.md) — картинки.
### Сборка
Раньше сборку сайта из шаблонов выполняла кастомная программа на Java. После сборки выполнялась
обфускация для всех классов, переменных и функций HTML, CSS и JS шифром замены по словарю. Блоки
кода оставлялись без обфускации, а подсветка синтаксиса выполнялась на клиенте. *Обусификатор* —
уникальное решение, больше не используется.
Раньше сборку сайта из шаблонов выполняла кастомная программа на Java. После сборки выполнялась обфускация для
всех классов, переменных и функций HTML, CSS и JS шифром замены по словарю. Блоки кода оставлялись без обфускации,
а подсветка синтаксиса выполнялась на клиенте. *Обусификатор* — уникальное решение, больше не используется.
Теперь сборку сайта выполняет Jekyll, язык шаблонов Liquid, подсветка
синтаксиса во время сборки, а содержание страниц в формате Markdown.
[Обслуживание](bash_scripts/README.md)
выполняется скриптами Bash. Меня не покидает мысль, что
я *поменял шило на мыло* — в целом ничего не изменилось.
Теперь сборку сайта выполняет Jekyll, язык шаблонов Liquid, подсветка синтаксиса во время
сборки, а содержание страниц в формате Markdown. Управление процессами выполняют скрипты Bash.
Меня не покидает мысль, что я *поменял шило на мыло* — в целом ничего не изменилось.
### Оформление
Две темы оформления для Jekyll на языке шаблонов Liquid:
[«Цветной помидор»](https://hub.mos.ru/golovin.gg/color-tomato-theme/blob/master/README.md)
был написан раньше с использованием AngularJS и Material, таким
было оформление предыдущей версии моего блога, затем был написан
[«Старый помидор»](https://hub.mos.ru/golovin.gg/older-tomato-theme/blob/master/README.md)
— облегчённый одноцветный вариант с использованием только HTML и CSS, внешний вид
напоминает тему оформления по умолчанию на GitHub Pages. Оба помидора дополняют друг
друга и похожи друг на друга, общие черты и различия между ними отмечены в списке ниже.
Две темы оформления для Jekyll на языке шаблонов Liquid: «Цветной помидор» был написан раньше с
использованием AngularJS и Material, таким было оформление предыдущей версии моего блога, затем
был написан «Старый помидор» — облегчённый одноцветный вариант с использованием только HTML и CSS,
внешний вид напоминает тему оформления по умолчанию на GitHub Pages. Оба помидора дополняют друг
друга и похожи друг на друга, поэтому их можно использовать вместе на одном сайте.
- [x] Адаптивная вёрстка или Responsive layout.
- [x] Файлы пользователя JS и CSS в блоке head страниц HTML.
- [x] SEO-разметка с использованием JSON-LD и Open Graph.
- [x] Переключение между двумя языками и помидорными темами.
- [x] Карта страниц сайта с их переводами в формате XML.
- [x] Простая страница 404 для несуществующих URL-адресов.
- [x] Шрифты: Roboto для текста и JBMono для блоков кода.
- [x] Помидоры: PNG, JPG 120x120, SVG 64x64, ICO 32x32.
- [ ] Выбор цвета во время сборки, зелёный цвет по умолчанию.
- [ ] Кнопка прокрутки вверх в стиле Material.
- [Цветной помидор](https://hub.mos.ru/golovin.gg/color-tomato-theme/blob/master/README.md) — выбор цвета во время сборки.
- [Старый помидор](https://hub.mos.ru/golovin.gg/older-tomato-theme/blob/master/README.md) — легковесная тема оформления.
### Лицензия
Раньше к своим проектам в интернете прикладывал лицензию MIT, но когда появилась открытая
лицензия РФ — перешёл на неё, сразу внёс небольшие изменения в текст и дополнил от себя,
хотя я не юрист. Основной смысл лицензии остался прежним — программа предоставляется
бесплатно, но без каких-либо гарантий, и автор программы — это я.
Раньше к своим проектам в интернете прикладывал лицензию MIT, но когда появилась открытая лицензия РФ
— перешёл на неё, сразу внёс небольшие изменения в текст и дополнил от себя, хотя я не юрист. Основной
смысл лицензии остался прежним — программа предоставляется бесплатно, но без каких-либо гарантий,
и автор программы — это я.
- [OPEN_LICENSE.txt](OPEN_LICENSE.txt) — основной текст лицензии и пояснение к нему без
изменений, можно найти в интернете. Из него удалил лишние пробелы и пробельные символы,

18
WIKI.md
View file

@ -1,7 +1,7 @@
<hr>
<details open>
<summary><h3>Содержание</h3></summary>
<summary><h3>Оглавление</h3></summary>
<hr>
@ -16,16 +16,17 @@
- [Комбинации элементов по столбцам](https://pomodoro2.mircloud.ru/ru/2021/09/13/combinations-by-columns.html) — 13.09.2021.
- [Треугольник Паскаля на Java](https://pomodoro2.mircloud.ru/ru/2021/09/09/pascals-triangle-in-java.html) — 09.09.2021.
- [Декартово произведение множеств](https://pomodoro2.mircloud.ru/ru/2021/09/06/cartesian-product-of-sets.html) — 06.09.2021.
3. Оптимизация умножения матриц.
3. Умножение матриц и повороты.
- [Алгоритм Винограда — Штрассена](https://pomodoro3.mircloud.ru/ru/2022/02/10/winograd-strassen-algorithm.html) — 10.02.2022.
- [Умножение матриц в параллельных потоках](https://pomodoro3.mircloud.ru/ru/2022/02/08/matrix-multiplication-parallel-streams.html) — 08.02.2022.
- [Поворот матрицы на 180 градусов](https://pomodoro3.mircloud.ru/ru/2021/12/16/matrix-rotation-180-degrees.html) — 16.12.2021.
- [Поворот матрицы на 90 градусов](https://pomodoro3.mircloud.ru/ru/2021/12/12/matrix-rotation-90-degrees.html) — 12.12.2021.
- [Оптимизация умножения матриц](https://pomodoro3.mircloud.ru/ru/2021/12/09/optimizing-matrix-multiplication.html) — 09.12.2021.
4. Юмор. Поэзия.
4. Поэзия, юмор.
- [Поэзия начала 20 века](https://pomodoro4.mircloud.ru/ru/2022/01/07/poetry-early-20th-century.html) — 07.01.2022.
- [История про лес, название утеряно](https://pomodoro4.mircloud.ru/ru/2022/01/05/forest-story-title-lost.html) — 05.01.2022.
5. Рисуем картинки на Java.
5. Рисуем картинки текстом.
- [Дерево каталогов со ссылками](https://pomodoro5.mircloud.ru/ru/2023/08/03/directory-tree.html) — 03.08.2023.
- [Генератор паролей](https://pomodoro5.mircloud.ru/ru/2023/06/19/password-generator.html) — 19.06.2023.
- [Рисуем сердечко в консоли](https://pomodoro5.mircloud.ru/ru/2023/03/08/drawing-heart-in-console.html) — 08.03.2023.
- [График функции в консоли](https://pomodoro5.mircloud.ru/ru/2023/02/05/function-graph-in-console.html) — 05.02.2023.
@ -36,7 +37,7 @@
<hr>
<details open>
<summary><h3>Content</h3></summary>
<summary><h3>Contents</h3></summary>
<hr>
@ -51,16 +52,17 @@
- [Combinations of elements by columns](https://pomodoro2.mircloud.ru/en/2021/09/14/combinations-by-columns.html) — 14.09.2021.
- [Pascal's Triangle in Java](https://pomodoro2.mircloud.ru/en/2021/09/10/pascals-triangle-in-java.html) — 10.09.2021.
- [Cartesian product of sets](https://pomodoro2.mircloud.ru/en/2021/09/07/cartesian-product-of-sets.html) — 07.09.2021.
3. Optimizing matrix multiplication.
3. Matrix multiplication and rotations.
- [Winograd — Strassen algorithm](https://pomodoro3.mircloud.ru/en/2022/02/11/winograd-strassen-algorithm.html) — 11.02.2022.
- [Matrix multiplication in parallel streams](https://pomodoro3.mircloud.ru/en/2022/02/09/matrix-multiplication-parallel-streams.html) — 09.02.2022.
- [Matrix rotation 180 degrees](https://pomodoro3.mircloud.ru/en/2021/12/17/matrix-rotation-180-degrees.html) — 17.12.2021.
- [Matrix rotation 90 degrees](https://pomodoro3.mircloud.ru/en/2021/12/13/matrix-rotation-90-degrees.html) — 13.12.2021.
- [Optimizing matrix multiplication](https://pomodoro3.mircloud.ru/en/2021/12/10/optimizing-matrix-multiplication.html) — 10.12.2021.
4. Humor. Poetry.
4. Poetry, humor.
- [Poetry early 20th century](https://pomodoro4.mircloud.ru/en/2022/01/08/poetry-early-20th-century.html) — 08.01.2022.
- [Forest story, title lost](https://pomodoro4.mircloud.ru/en/2022/01/06/forest-story-title-lost.html) — 06.01.2022.
5. Drawing images in Java.
5. Drawing pictures with text.
- [Directory tree with links](https://pomodoro5.mircloud.ru/en/2023/08/04/directory-tree.html) — 04.08.2023.
- [Password generator](https://pomodoro5.mircloud.ru/en/2023/06/20/password-generator.html) — 20.06.2023.
- [Drawing heart in console](https://pomodoro5.mircloud.ru/en/2023/03/08/drawing-heart-in-console.html) — 08.03.2023.
- [Function graph in console](https://pomodoro5.mircloud.ru/en/2023/02/06/function-graph-in-console.html) — 06.02.2023.

View file

@ -1,36 +1,36 @@
# [Maintenance](README.md)
# [Process management](README.md)
Process automation for static websites [«Pomodori»](https://hub.mos.ru/golovin.gg/pomodoro/blob/master/README.en.md).
Creating an archive, switching the domain, composing scripts and creating repositories for publishing.
Creating archives, building websites, creating local and remote repositories for publishing.
| Bash scripts | Actions performed |
|:---------------------------------------------|:--------------------------------------------------------------------------------------------|
| [**archive_backup.sh**](archive_backup.sh) | Creating a common archive for the directories of projects on the current date. |
| [archive_packages.sh](archive_packages.sh) | Building websites, creating and copying archives for deployment. |
| [**info_param.sh**](info_param.sh) | Parameter for other scripts. Switching the domain of the remote repository. |
| [info_references.sh](info_references.sh) | Updating the domain of a remote repository in cross-references in descriptions. |
| [info_tree_license.sh](info_tree_license.sh) | Building a directory tree for each project and copying license files. |
| [**repo_compose.sh**](repo_compose.sh) | Composing scripts with parameters and copying them to the directories of projects. |
| [repo_gitea.tmpl.sh](repo_gitea.tmpl.sh) | Script template without parameters to create a remote repository gitea. |
| [repo_gitlab.tmpl.sh](repo_gitlab.tmpl.sh) | Script template without parameters to create a remote repository gitlab. |
| [repo_local.tmpl.sh](repo_local.tmpl.sh) | Script template without parameters to create a local repository. |
| [**repo_update.sh**](repo_update.sh) | Parallel execution of scripts and creation of repositories for the directories of projects. |
| Bash scripts | Actions performed |
|:-------------------------------------------|:------------------------------------------------------------------------------------------------|
| [archive-common.sh](archive-common.sh) | Creating a common archive for the directories of projects on the current date. |
| [archive-packages.sh](archive-packages.sh) | Building websites, creating and copying archives for deployment. |
| [info-copy.sh](info-copy.sh) | Copying information files and building a tree in each of the directories of projects. |
| [**info-domain.sh**](info-domain.sh) | Used in other scripts. Setting the domain parameter of the remote repository. |
| [info-toggle.sh](info-toggle.sh) | Toggling the remote repository for cross-references in descriptions. |
| [**repo-compose.sh**](repo-compose.sh) | Setting parameters for templates and copying ready-made scripts to the directories of projects. |
| [repo-local.tmpl.sh](repo-local.tmpl.sh) | Script template without parameters to create a local repository. |
| [repo-gitea.tmpl.sh](repo-gitea.tmpl.sh) | Script template without parameters to create a remote repository gitea. |
| [repo-gitlab.tmpl.sh](repo-gitlab.tmpl.sh) | Script template without parameters to create a remote repository gitlab. |
| [**repo-update.sh**](repo-update.sh) | Executing scripts in parallel mode and creating repositories for the directories of projects. |
## Directories of projects
## Structure
Linear directory structure — all projects are located in one folder.
Scripts are launched from those directories, in which they are located.
Single-level directory structure — local projects are located on the same level.
On the server, repositories with websites are moved to a separate group, and the
rest of the repositories remain with the user. The directory structure for
[git&period;org&period;ru](https://git&period;org&period;ru/golovin.gg) and
[hub&period;mos&period;ru](https://hub&period;mos&period;ru/golovin.gg).
<pre>
.
├─ <a href='https://hub.mos.ru/golovin.gg/color-tomato-theme/blob/master/README.en.md'>color-tomato-theme</a> — Decoration
├─ <a href='https://hub.mos.ru/golovin.gg/older-tomato-theme/blob/master/README.en.md'>older-tomato-theme</a> — Decoration
├─ <a href='https://hub.mos.ru/golovin.gg/pomodoro/blob/master/README.en.md'>pomodoro</a> — Description
├─ <a href='https://hub.mos.ru/pomodoro/1/blob/master/README.en.md'>pomodoro1</a> — Website
├─ <a href='https://hub.mos.ru/pomodoro/2/blob/master/README.en.md'>pomodoro2</a> — Website
├─ <a href='https://hub.mos.ru/pomodoro/3/blob/master/README.en.md'>pomodoro3</a> — Website
├─ <a href='https://hub.mos.ru/pomodoro/4/blob/master/README.en.md'>pomodoro4</a> — Website
└─ <a href='https://hub.mos.ru/pomodoro/5/blob/master/README.en.md'>pomodoro5</a> — Website
<a href='https://hub.mos.ru/golovin.gg'>.</a>
├─ <a href='https://hub.mos.ru/golovin.gg/color-tomato-theme'>color-tomato-theme</a>
├─ <a href='https://hub.mos.ru/golovin.gg/older-tomato-theme'>older-tomato-theme</a>
├─ <a href='https://hub.mos.ru/golovin.gg/pomodoro'>pomodoro</a>
├─ <a href='https://hub.mos.ru/pomodoro/1'>pomodoro1</a>
├─ <a href='https://hub.mos.ru/pomodoro/2'>pomodoro2</a>
├─ <a href='https://hub.mos.ru/pomodoro/3'>pomodoro3</a>
├─ <a href='https://hub.mos.ru/pomodoro/4'>pomodoro4</a>
└─ <a href='https://hub.mos.ru/pomodoro/5'>pomodoro5</a>
</pre>

View file

@ -1,36 +1,36 @@
# [Обслуживание](README.en.md)
# [Управление процессами](README.en.md)
Автоматизация процессов для статических вёб-сайтов [«Помидоры»](https://hub.mos.ru/golovin.gg/pomodoro/blob/master/README.md).
Создание архива, переключение домена, составление скриптов и создание репозиториев для публикации.
Создание архивов, сборка вёб-сайтов, создание локальных и удалённых репозиториев для публикации.
| Скрипты Bash | Выполняемые действия |
|:---------------------------------------------|:---------------------------------------------------------------------------------|
| [**archive_backup.sh**](archive_backup.sh) | Создание общего архива для каталогов проектов на текущую дату. |
| [archive_packages.sh](archive_packages.sh) | Сборка вёб-сайтов, создание и копирование архивов для развёртывания. |
| [**info_param.sh**](info_param.sh) | Параметр для других скриптов. Переключение домена удалённого репозитория. |
| [info_references.sh](info_references.sh) | Обновление домена удалённого репозитория в перекрёстных ссылках в описаниях. |
| [info_tree_license.sh](info_tree_license.sh) | Построение дерева каталогов для каждого проекта и копирование файлов лицензии. |
| [**repo_compose.sh**](repo_compose.sh) | Составление скриптов с параметрами и копирование их в каталоги проектов. |
| [repo_gitea.tmpl.sh](repo_gitea.tmpl.sh) | Шаблон скрипта без параметров для создания удалённого репозитория gitea. |
| [repo_gitlab.tmpl.sh](repo_gitlab.tmpl.sh) | Шаблон скрипта без параметров для создания удалённого репозитория gitlab. |
| [repo_local.tmpl.sh](repo_local.tmpl.sh) | Шаблон скрипта без параметров для создания локального репозитория. |
| [**repo_update.sh**](repo_update.sh) | Параллельное выполнение скриптов и создание репозиториев для каталогов проектов. |
| Скрипты Bash | Выполняемые действия |
|:-------------------------------------------|:------------------------------------------------------------------------------------------|
| [archive-common.sh](archive-common.sh) | Создание общего архива для каталогов проектов на текущую дату. |
| [archive-packages.sh](archive-packages.sh) | Сборка вёб-сайтов, создание и копирование архивов для развёртывания. |
| [info-copy.sh](info-copy.sh) | Копирование информационных файлов и построение дерева в каждом из каталогов проектов. |
| [**info-domain.sh**](info-domain.sh) | Используется в других скриптах. Установка параметра домена удалённого репозитория. |
| [info-toggle.sh](info-toggle.sh) | Переключение удалённого репозитория для перекрёстных ссылок в описаниях. |
| [**repo-compose.sh**](repo-compose.sh) | Установка параметров для шаблонов и копирование готовых скриптов в каталоги проектов. |
| [repo-local.tmpl.sh](repo-local.tmpl.sh) | Шаблон скрипта без параметров для создания локального репозитория. |
| [repo-gitea.tmpl.sh](repo-gitea.tmpl.sh) | Шаблон скрипта без параметров для создания удалённого репозитория gitea. |
| [repo-gitlab.tmpl.sh](repo-gitlab.tmpl.sh) | Шаблон скрипта без параметров для создания удалённого репозитория gitlab. |
| [**repo-update.sh**](repo-update.sh) | Выполнение скриптов в параллельном режиме и создание репозиториев для каталогов проектов. |
## Каталоги проектов
## Структура
Линейная структура каталогов — все проекты расположены в одной папке.
Скрипты запускаются из тех каталогов, в которых они расположены.
Одноуровневая структура каталогов — локальные проекты расположены на одном
уровне. На сервере репозитории с вёб-сайтами переходят в отдельную группу,
а остальные репозитории остаются у пользователя. Структура каталогов для
[git&period;org&period;ru](https://git&period;org&period;ru/golovin.gg) и
[hub&period;mos&period;ru](https://hub&period;mos&period;ru/golovin.gg).
<pre>
.
├─ <a href='https://hub.mos.ru/golovin.gg/color-tomato-theme/blob/master/README.md'>color-tomato-theme</a> — Оформление
├─ <a href='https://hub.mos.ru/golovin.gg/older-tomato-theme/blob/master/README.md'>older-tomato-theme</a> — Оформление
├─ <a href='https://hub.mos.ru/golovin.gg/pomodoro/blob/master/README.md'>pomodoro</a> — Описание
├─ <a href='https://hub.mos.ru/pomodoro/1/blob/master/README.md'>pomodoro1</a> — Вёб-сайт
├─ <a href='https://hub.mos.ru/pomodoro/2/blob/master/README.md'>pomodoro2</a> — Вёб-сайт
├─ <a href='https://hub.mos.ru/pomodoro/3/blob/master/README.md'>pomodoro3</a> — Вёб-сайт
├─ <a href='https://hub.mos.ru/pomodoro/4/blob/master/README.md'>pomodoro4</a> — Вёб-сайт
└─ <a href='https://hub.mos.ru/pomodoro/5/blob/master/README.md'>pomodoro5</a> — Вёб-сайт
<a href='https://hub.mos.ru/golovin.gg'>.</a>
├─ <a href='https://hub.mos.ru/golovin.gg/color-tomato-theme'>color-tomato-theme</a>
├─ <a href='https://hub.mos.ru/golovin.gg/older-tomato-theme'>older-tomato-theme</a>
├─ <a href='https://hub.mos.ru/golovin.gg/pomodoro'>pomodoro</a>
├─ <a href='https://hub.mos.ru/pomodoro/1'>pomodoro1</a>
├─ <a href='https://hub.mos.ru/pomodoro/2'>pomodoro2</a>
├─ <a href='https://hub.mos.ru/pomodoro/3'>pomodoro3</a>
├─ <a href='https://hub.mos.ru/pomodoro/4'>pomodoro4</a>
└─ <a href='https://hub.mos.ru/pomodoro/5'>pomodoro5</a>
</pre>

View file

@ -3,5 +3,6 @@ echo "Создание общего архива для каталогов пр
cd ../..
filename="pomodoro-$(date '+%Y-%m-%d').zip"
rm -rf "$filename"
7z a -tzip -ssw -mx9 -r0 "$filename" ./* -xr!".idea" -xr!".git" -x!".token_*" \
-x!"*.iml" -x!"*.gem" -x!"*.lock" -x!"*.zip" -x!"_site*" -x!".repo_*.sh"
7z a -tzip -ssw -mx9 -r0 "$filename" ./* -xr!".idea" -xr!".git" -x!"*.iml" \
-x!"*.gem" -x!"*.lock" -x!"*.zip" -x!"_site*" -x!".token_*" -x!".repo_*" \
-xr!"DIRECTORY_TREE.md" -xr!"CONTRIBUTING.md" -x!"*LICENSE*"

View file

@ -7,6 +7,6 @@ for ((i = 1; i <= 5; i++)); do
cd "../pomodoro$i" || continue
./build.sh
./package.sh
cp -uv "pomodoro$i.zip" ..
cp -v "pomodoro$i.zip" ..
done
echo "Общее время выполнения: $(("$(date '+%s%3N')" - "$milliseconds")) мс."

View file

@ -1,26 +0,0 @@
#!/bin/bash
echo "Копирование информационных файлов и построение дерева в каждом из каталогов проектов."
cd ..
basedir=$(pwd)
milliseconds=$(date '+%s%3N')
find .. -mindepth 1 -maxdepth 1 -type d | sort -r | while read -r dir; do
echo "Обработка: $dir"
cd "$dir" || continue
if [ "${dir##*/}" != "${basedir##*/}" ]; then
cp -uv "$basedir"/CONTRIBUTING.md .
cp -uv "$basedir"/*LICENSE* .
fi
{
echo "## Дерево каталогов"
echo
echo "<pre>"
tree -nvf --dirsfirst -I "*.gem|*.lock|*.zip|_site*" --noreport
echo "</pre>"
} >DIRECTORY-TREE.md
sed -i -e "s/ / /g" -e "s/ / /g" -e "s/──/─/g" DIRECTORY-TREE.md
find . -mindepth 1 -type f,d -not -regex '.*\.\(gem\|lock\|zip\)\|.*/\(\.\|_site\).*' | sort -r | while read -r file; do
# echo "${dir#*/} => \\$file >> ${file#*/} >> ${file##*/}"
sed -i "s|\\$file|<a href='${file#*/}'>${file##*/}<\/a>|g" DIRECTORY-TREE.md
done
done
echo "Время выполнения: $(("$(date '+%s%3N')" - "$milliseconds")) мс."

View file

@ -1,4 +0,0 @@
#!/bin/bash
#remote="git.org.ru"
remote="hub.mos.ru"
echo "Репозиторий: $remote"

4
bash_scripts/info_param.sh Executable file
View file

@ -0,0 +1,4 @@
#!/bin/bash
#remote="git.org.ru"
remote="hub.mos.ru"
echo "Переключение домена удалённого репозитория: $remote"

View file

@ -1,6 +1,6 @@
#!/bin/bash
echo "Переключение удалённого репозитория для перекрёстных ссылок в описаниях."
source info-domain.sh || remote="git.org.ru"
echo "Обновление домена удалённого репозитория в перекрёстных ссылках в описаниях."
remote="git.org.ru" && source info_param.sh
cd ../..
find . -type f -name 'README*.md' -o -name '*.gemspec' | sort -r | while read -r file; do
echo "$remote => $file"

View file

@ -0,0 +1,54 @@
#!/bin/bash
echo "Построение дерева каталогов для каждого проекта и копирование файлов лицензии."
function list_directory_contents {
eval "LC_COLLATE=C ls -A --group-directories-first $exclusions $1"
}
function directory_tree {
local path="$1"
local head="$2"
local tail="$3"
if [ "one" == "$4" ]; then
echo -n "/"
else
echo -ne "\n$head"
fi
echo -n "<a href='${path#*/}'>${path##*/}</a>"
if [ -d "$path" ]; then
local list
readarray -t list <<<"$(list_directory_contents "$path")"
local len=${#list[@]}
local i
for ((i = 0; i < len; i++)); do
if [ -z "${list[$i]}" ]; then
continue
elif ((len == 1)); then
directory_tree "$path/${list[$i]}" "$tail" "$tail" "one"
elif ((i < len - 1)); then
directory_tree "$path/${list[$i]}" "$tail├─ " "$tail"
else
directory_tree "$path/${list[$i]}" "$tail└─ " "$tail "
fi
done
fi
}
cd ..
basedir=$(pwd)
milliseconds=$(date '+%s%3N')
find .. -mindepth 1 -maxdepth 1 -type d | sort -r | while read -r dir; do
echo "Обработка: $dir"
cd "$dir" || continue
exclusions="-I \".git\" $(sed 's/^/ -I "/;s/$/"/' .gitignore | tr -d '\n')"
{
echo "## Дерево каталогов"
echo -ne "\n<pre>"
directory_tree .
echo -e "\n</pre>"
} >DIRECTORY_TREE.md
if [ "${dir##*/}" != "${basedir##*/}" ]; then
rm CONTRIBUTING.md
rm ./*LICENSE*
cp "$basedir"/CONTRIBUTING.md .
cp "$basedir"/*LICENSE* .
fi
done
echo "Время выполнения: $(("$(date '+%s%3N')" - "$milliseconds")) мс."

View file

@ -1,69 +0,0 @@
#!/bin/bash
echo "Установка параметров для шаблонов и копирование готовых скриптов в каталоги проектов."
source info-domain.sh || remote="git.org.ru"
basedir=$(pwd)
cd ../..
find . -mindepth 1 -maxdepth 1 -type d | sort -r | while read -r dir; do
echo "Обработка: $dir"
if [ ! -f "$dir"/.gitignore ] || [ "$(grep -cx "\.repo_\*\.sh" "$dir"/.gitignore)" == 0 ]; then
echo ".repo_*.sh" >>"$dir"/.gitignore
echo "Обновлён файл .gitignore"
fi
owner="golovin.gg"
repo=${dir##*/}
description=""
type="usr"
wiki=""
if [[ "$dir" =~ "pomodoro" ]]; then
if [[ "$dir" =~ [[:digit:]] ]]; then
owner="pomodoro"
repo=${dir//[^[:digit:]]/}
type="org"
description="Вёб-сайт: https://${owner}${repo}.mircloud.ru"
else
if [ "$remote" == "hub.mos.ru" ]; then
wiki=$(uni2ascii -a U -qpsn "$dir"/WIKI.md)
else
wiki=$(basenc "$dir"/WIKI.md --base64)
fi
description="Серия статических вёб-сайтов / Содержание / Сборка / Оформление / Открытая лицензия РФ"
fi
elif [[ "$dir" =~ "color-tomato" ]]; then
description="Цветной помидор / Тема оформления Jekyll"
elif [[ "$dir" =~ "older-tomato" ]]; then
description="Старый помидор / Тема оформления Jekyll"
elif [[ "$dir" =~ "maintenance" ]]; then
description="Скрипты Bash / Обслуживание / Автоматизация процессов / Создание архивов / Сборка вёб-сайтов / "
description+="Копирование файлов / Построение дерева каталогов / Создание скриптов из шаблонов / "
description+="Шаблоны скриптов / Создание локальных и удалённых репозиториев"
elif [[ "$dir" =~ "draft" ]]; then
description="Черновик / Код с комментариями"
elif [[ "$dir" =~ "pictures" ]]; then
description="Картинки / Аватарки для репозиториев"
fi
{
echo "#!/bin/bash"
if [ "$remote" == "hub.mos.ru" ]; then
echo "user=\"golovin.gg\""
fi
echo "owner=\"$owner\""
echo "repo=\"$repo\""
echo "description=\"$description\""
echo "type=\"$type\""
echo "wiki=\"$wiki\""
if [ "$remote" == "hub.mos.ru" ]; then
echo "token=\"$(cat "$basedir/.token_hub_mos_ru")\""
cat "$basedir/repo-gitlab.tmpl.sh"
else
echo "token=\"$(cat "$basedir/.token_git_org_ru")\""
cat "$basedir/repo-gitea.tmpl.sh"
fi
} >"$dir"/.repo_remote.sh && chmod +x "$dir"/.repo_remote.sh
{
echo "#!/bin/bash"
echo "remote=\"$remote\""
echo "owner=\"$owner\""
echo "repo=\"$repo\""
cat "$basedir/repo-local.tmpl.sh"
} >"$dir"/.repo_local.sh && chmod +x "$dir"/.repo_local.sh
done

View file

@ -1,7 +0,0 @@
#!/bin/bash
echo "Выполнение скриптов в параллельном режиме и создание репозиториев для каталогов проектов."
cd ..
milliseconds=$(date '+%s%3N')
find .. -mindepth 1 -maxdepth 1 -type d -printf \
'cd %h/%f && ./.repo_remote.sh >/dev/null && ./.repo_local.sh >/dev/null\0' | xargs -L1 -0 -P0 bash -c
echo "Общее время выполнения: $(("$(date '+%s%3N')" - "$milliseconds")) мс."

64
bash_scripts/repo_compose.sh Executable file
View file

@ -0,0 +1,64 @@
#!/bin/bash
echo "Составление скриптов с параметрами и копирование их в каталоги проектов."
remote="git.org.ru" && source info_param.sh
basedir=$(pwd)
cd ../..
find . -mindepth 1 -maxdepth 1 -type d | sort -r | while read -r dir; do
echo "Обработка: $dir"
if [ ! -f "$dir"/.gitignore ] || [ "$(grep -cx "\.repo_\*" "$dir"/.gitignore)" == 0 ]; then
echo ".repo_*" >>"$dir"/.gitignore
echo "Обновлён файл .gitignore"
fi
owner="golovin.gg"
repo=${dir##*/}
description=""
type="usr"
wiki=""
if [ -f "$dir"/WIKI.md ]; then
if [ "$remote" == "hub.mos.ru" ]; then
wiki=$(uni2ascii -a U -qpsn "$dir"/WIKI.md)
else
wiki=$(basenc "$dir"/WIKI.md --base64)
fi
fi
if [[ "$dir" =~ "pomodoro" ]]; then
if [[ "$dir" =~ [[:digit:]] ]]; then
owner="pomodoro"
repo=${dir//[^[:digit:]]/}
type="org"
description="Вёб-сайт: https://${owner}${repo}.mircloud.ru"
else
description="Описание / Управление процессами / Незавершённые публикации / Аватарки для репозиториев"
fi
elif [[ "$dir" =~ "color-tomato" ]]; then
description="Цветной помидор / Тема оформления Jekyll"
elif [[ "$dir" =~ "older-tomato" ]]; then
description="Старый помидор / Тема оформления Jekyll"
fi
{
echo "#!/bin/bash"
if [ "$remote" == "hub.mos.ru" ]; then
echo "user=\"golovin.gg\""
fi
echo "owner=\"$owner\""
echo "repo=\"$repo\""
echo "description=\"$description\""
echo "type=\"$type\""
echo "wiki=\"$wiki\""
if [ "$remote" == "hub.mos.ru" ]; then
echo "token=\"$(cat "$basedir/.token_hub_mos_ru")\""
cat "$basedir/repo_gitlab.tmpl.sh"
else
echo "token=\"$(cat "$basedir/.token_git_org_ru")\""
cat "$basedir/repo_gitea.tmpl.sh"
fi
} >"$dir"/.repo_remote.sh && chmod +x "$dir"/.repo_remote.sh
{
echo "#!/bin/bash"
echo "remote=\"$remote\""
echo "owner=\"$owner\""
echo "repo=\"$repo\""
echo "folder=\"${dir##*/}\""
cat "$basedir/repo_local.tmpl.sh"
} >"$dir"/.repo_local.sh && chmod +x "$dir"/.repo_local.sh
done

View file

@ -2,7 +2,7 @@ if [ -z "$token" ] || [ -z "$owner" ] || [ -z "$repo" ] || [ -z "$description" ]
echo "Не указаны обязательные параметры." && exit 2
fi
echo "Создание удалённого репозитория для текущего каталога."
seconds=2
seconds=3
milliseconds=$(date '+%s%3N')
echo "Удаление старого репозитория."
curl -X DELETE "https://git.org.ru/api/v1/repos/$owner/$repo" \

View file

@ -80,8 +80,12 @@ echo
echo "Ожидание $seconds с."
sleep $seconds
echo "Добавление аватарки для репозитория."
picture=$repo
if [ "$type" == "org" ]; then
picture="pomodoro-website"
fi
curl -i -X PUT "https://hub.mos.ru/api/v4/projects/$owner%2F$repo" \
-H "PRIVATE-TOKEN: $token" \
-F "avatar=@../pictures/pictures/$repo.jpg"
-F "avatar=@../pomodoro/pictures/$picture.jpg"
echo
echo "Время создания удалённого репозитория: $(("$(date '+%s%3N')" - "$milliseconds")) мс."

View file

@ -1,32 +1,39 @@
if [ -z "$remote" ] || [ -z "$owner" ] || [ -z "$repo" ]; then
if [ -z "$remote" ] || [ -z "$owner" ] || [ -z "$repo" ] || [ -z "$folder" ]; then
echo "Не указаны обязательные параметры." && exit 2
fi
echo "Создание локального репозитория, подключение к удалённому и передача данных."
seconds=3
milliseconds=$(date '+%s%3N')
rm -rf .git
git init -b master
git remote add "$remote" "git@$remote:$owner/$repo.git"
git add .git*
git commit -m "Инициализация / $repo"
git push -u "$remote" master
git commit -m "Инициализация / $folder"
if [ "$remote" == "hub.mos.ru" ]; then
echo "Второй пуш, потому что лингвист с первого раза не срабатывает."
git push -u "$remote" master
echo "Ожидание $seconds с."
sleep $seconds
fi
git add CONTRIBUTING.md
git add ./*LICENSE*
git add \*LICENSE*
git commit -m "Открытая лицензия РФ"
git add DIRECTORY-TREE.md
git add README*
git add DIRECTORY_TREE.md
git add WIKI.md
git add \*README*
git commit -m "Описание проекта"
git add ./*.sh
git add \*.sh
git commit -m "Скрипты bash"
git add ./*.min.css
git add ./*.min.js
git add ./*.woff
git add \*.min.css
git add \*.min.js
git add \*.woff
git commit -m "Сторонние материалы"
git add ./*.bmp
git add ./*.gif
git add ./*.ico
git add ./*.jpg
git add ./*.png
git add ./*.svg
git add \*.bmp
git add \*.gif
git add \*.ico
git add \*.jpg
git add \*.png
git add \*.svg
git commit -m "Картинки"
find . -type f -not -regex '.*\.\(gem\|zip\|lock\)\|.*/\(\.\|_site\).*' | sort -r | while read -r file; do
echo "Обработка: $file"

7
bash_scripts/repo_update.sh Executable file
View file

@ -0,0 +1,7 @@
#!/bin/bash
echo "Параллельное выполнение скриптов и создание репозиториев для каталогов проектов."
cd ..
milliseconds=$(date '+%s%3N')
find .. -mindepth 1 -maxdepth 1 -type d -printf \
'cd %h/%f && ./.repo_remote.sh >.repo_remote.log && ./.repo_local.sh >.repo_local.log\0' | xargs -L1 -0 -P0 bash -c
echo "Общее время выполнения: $(("$(date '+%s%3N')" - "$milliseconds")) мс."

View file

@ -1,75 +0,0 @@
# Дерево каталогов со ссылками
Напишем скрипт Bash для создания файла [`DIRECTORY-TREE.md`](../DIRECTORY-TREE.md) в корне репозитория со
ссылками на его объекты. Будем использовать полученный файл для навигации по репозиторию в вёб-интерфейсе.
<details>
<summary>
<b>1.</b> Выполняем программу <code>tree</code> и получаем дерево каталогов в текстовом виде, где для
каждогофайла указываем полный префикс пути Linux от корня репозитория. Папки выводим перед файлами и
применяем буквенно-цифровую сортировку. Исключаем файлы и папки, которых не должно быть в репозитории.
Полученное дерево помещаем в блок <code>&lt;pre&gt;</code> и добавляем заголовок.
</summary>
![Дерево каталогов](../pictures/directory-tree1.jpg)
</details>
<details>
<summary>
<b>2.</b> Для красоты, веточки-рамки у дерева box-drawing делаем короче. Для замены подстрок используем
программу <code>sed</code> и регулярные выражения. Пробельные символы заменяем на пробелы. Пошагово
формируем файл <code>DIRECTORY-TREE.md</code>.
</summary>
![Дерево каталогов](../pictures/directory-tree2.jpg)
</details>
<details>
<summary>
<b>3.</b> Далее выполняем программу <code>find</code> и получаем список файлов и каталогов Linux, сортируем
этот список в обратном порядке от самого длинного пути до самого короткого, т. е. вложенные файлы будут перед
их каталогами, чтобы не получилось заменить только часть пути. Затем обходим отсортированный список и заменяем
в полученном дереве относительный путь Linux на относительную ссылку HTTP в теге <code>&lt;a&gt;</code> и именем
файла в представлении ссылки.
</summary>
![Дерево каталогов](../pictures/directory-tree3.jpg)
</details>
<details>
<summary>
<b>4.</b> Получаем файл <code>DIRECTORY-TREE.md</code> для вёб-интерфейса репозитория — Markdown преобразованный в HTML.
</summary>
![Дерево каталогов](../pictures/directory-tree4.jpg)
</details>
---
<details open>
<summary><h3 id="directory-tree.sh">directory-tree.sh</h3></summary>
```bash
#!/bin/bash
echo "Построение дерева каталогов со ссылками."
{
echo "## Дерево каталогов"
echo
echo "<pre>"
tree -nvf --dirsfirst -I "*.gem|*.lock|*.zip|_site*" --noreport
echo "</pre>"
} >DIRECTORY-TREE.md
sed -i -e "s/ / /g" -e "s/ / /g" -e "s/──/─/g" DIRECTORY-TREE.md
find . -mindepth 1 -type f,d -not -regex '.*\.\(gem\|lock\|zip\)\|.*/\(\.\|_site\).*' | sort -r | while read -r file; do
echo "Обработка: \\$file >> ${file#*/} >> ${file##*/}"
sed -i "s|\\$file|<a href='${file#*/}'>${file##*/}<\/a>|g" DIRECTORY-TREE.md
done
```
</details>
---

View file

@ -1,5 +1,4 @@
| Черновик / Код с комментариями | | |
|-----------------------------------------------------------------------|------|------------|
| [Дерево каталогов со ссылками](2023-06-13-directory-tree.md) | Bash | 13.06.2023 |
| [Циклический алгоритм распределения задач](2023-06-05-round-robin.md) | Java | 05.06.2023 |
| Незавершённые публикации | Язык | Обновление |
|:-----------------------------------------------------------|------|------------|
| [Циклический алгоритм распределения задач](round-robin.md) | Java | 2023.06.05 |

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

View file

@ -1,17 +1,17 @@
| Картинки / Аватарки для репозиториев |
|-------------------------------------------------------------------------------------------------------------------------|
| [color-tomato-theme](https://hub.mos.ru/golovin.gg/color-tomato-theme/blob/master/README.md) |
| [![color-tomato-theme](color-tomato-theme.jpg)](https://hub.mos.ru/golovin.gg/color-tomato-theme/blob/master/README.md) |
| [draft](https://hub.mos.ru/golovin.gg/pomodoro/blob/master/draft/README.md) |
| [![draft](draft.jpg)](https://hub.mos.ru/golovin.gg/pomodoro/blob/master/draft/README.md) |
| [maintenance](https://hub.mos.ru/golovin.gg/pomodoro/blob/master/bash_scripts/README.md) |
| [![maintenance](maintenance.jpg)](https://hub.mos.ru/golovin.gg/pomodoro/blob/master/bash_scripts/README.md) |
| [older-tomato-theme](https://hub.mos.ru/golovin.gg/older-tomato-theme/blob/master/README.md) |
| [![older-tomato-theme](older-tomato-theme.jpg)](https://hub.mos.ru/golovin.gg/older-tomato-theme/blob/master/README.md) |
| [pictures](https://hub.mos.ru/golovin.gg/pomodoro/blob/master/pictures/README.md) |
| [![pictures](pictures.jpg)](https://hub.mos.ru/golovin.gg/pomodoro/blob/master/pictures/README.md) |
| [pomodoro](https://hub.mos.ru/golovin.gg/pomodoro/blob/master/README.md) |
| [![pomodoro](pomodoro.jpg)](https://hub.mos.ru/golovin.gg/pomodoro/blob/master/README.md) |
| [pomodoro[1-5]](https://hub.mos.ru/pomodoro) |
| [![pomodoro[1-5]](1.jpg)](https://hub.mos.ru/pomodoro) |
| Аватарки для репозиториев |
|-----------------------------------------------|
| color-tomato-theme |
| ![color-tomato-theme](color-tomato-theme.jpg) |
| older-tomato-theme |
| ![older-tomato-theme](older-tomato-theme.jpg) |
| pomodoro |
| ![pomodoro](pomodoro.jpg) |
| pomodoro-website |
| ![pomodoro-website](pomodoro-website.jpg) |
| bash_scripts |
| ![bash_scripts](bash_scripts.jpg) |
| draft |
| ![draft](draft.jpg) |
| pictures |
| ![pictures](pictures.jpg) |

View file

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

View file

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB