9

Сортировщик .CKAN файла

Использую CKAN для управления модами. Также активно использую GIT для отслеживания истории изменения состава модов. После каждого добавления/удаления мода делаю экспорт модпака. Да я в курсе, что CKAN держит историю в папке с игрой, но лично мне удобней отслеживать историю каким-либо GUI Git-клиентом.

Проблема в том, что CKAN помещает моды в пак в каком-то произвольном порядке, скорее всего хронологическом, порядке удаления добавления, что дает полную кашу при сравнении файлов, когда хочется выяснить что же поставил в последний/предпоследний и т.д. раз.

Решение - сортировать моды в алфавитном порядке, тогда сразу будет четко видно, что добавлено, и что удалено.

Простейший сортировщик написан на Powershell и составляет всего 12 строк:

Ему передается имя файла через параметр -FileName, скрипт этот файл сортирует и записывает туда же.

У меня настроен мониторинг папки специальной утилитой, как только файл изменяется - запускается скрипт.

[CmdletBinding()]

Param (

[Parameter (Mandatory=$true)]

[string]$FileName

)

$a = (Get-Content $FileName | ConvertFrom-Json)

$dep = ($a.depends|sort -Property Name)

$a.depends = $dep

$text = $a| ConvertTo-Json

$text| Out-File -Encoding utf8 "$FileName"

Kerbal Space Program

277 постов1.5K подписчиков

Правила сообщества

- выкладывая свои крафты оставляйте модлист. Если включили такие моды как RO или RP-0, то требуемые для них модификации можно не писать.

- выполняйте правила Пикабу.

- опытные игроки, будьте готовы к тому что в сообществе могут быть новички. Не проявляйте агрессию, даже если что-то вам покажется "нубским".

- у нас не матерятся.

0
Автор поста оценил этот комментарий

Хм, толково! У меня куча модов, при этом элементы рассортированы по пользовательским категориям которыми я пользуюсь на постоянке, сл-но каждый раз как при обновлении мода добавляют новые деталюшки их приходится изыскивать и добавлять в пользовательские категории. При этом ориентироваться приходится на ченжлог мода что напряжно. А тут можно отследить добавление деталек и, что важнее - изменение механики их работы?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Для этого можно попробовать использовать гит в папке Gamedata. Но надо понимать, что это средство работы с текстовыми файлами. То есть разницу в файлах .cfg, .xml покажет. Но логика часто реализована в виде .dll, а тут уже никак
0
DELETED
Автор поста оценил этот комментарий

Ну, вы просто написали "12 строчек", а ведь даже если не говорить про чистописание и вот это все, можно еще сократить %)


Тогда понятно, спасибо.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

— Добро пожаловать в Общество зануд! Возьмите себе стул.

— Вообще-то, у этого, как вы выразились, стула, нет спинки, так что технически это табуретка.

— Похоже, у нас новый председатель!

:))))

0
DELETED
Автор поста оценил этот комментарий

А зачем вам лишняя переменная, да и если на то пошло, и скобочки? %)


$a.depends = $a.depends|sort -Property Name


*Вообще, чет мне не кажется это очень правильной схемой работы. В смысле, лазить в конфигурацию и перезаписывать ее, ориентируюясь по времени изменения файла. Сдается мне, когда-нибудь павершелл запишет в этот файл что-нибудь не то и весь конфиг поедет.


Я бы на вашем месте наверное ковырял бы этот файл и решал конкретную задачу. Если интересуют изменения зависимостей от времени, то можно с каждым изменением конфига сравнивать этот самый $a.depends  с предыдущим $a.depends, и писать результаты куда-нибудь отдельно.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Я вас умоляю, это практически черновой набросок, лишняя переменная использовалась при отладке, скобочки... ну есть и есть, не мешают же :))


*Вообще, чет мне не кажется это очень правильной схемой работы. В смысле, лазить в конфигурацию и перезаписывать ее, ориентируюясь по времени изменения файла.

Это не конфигурация как таковая, это ее копия, если хотите. Она сама по себе ни на что не влияет. Что за касается ручного (скриптового) сравнения, зачем, если у меня git? он это делает лучше :) Я не претендую на шедевральность подхода, _для меня_ этот вариант относительно удобен, хоть и не идеален.


Я бы на вашем месте наверное ковырял бы этот файл и решал конкретную задачу. Если интересуют изменения зависимостей от времени, то можно с каждым изменением конфига сравнивать этот самый $a.depends с предыдущим $a.depends, и писать результаты куда-нибудь отдельно.

Именно этим и занимается гит. Я делаю коммит, комментируя зачем сделаны изменения, а он следит за историей. Опять же я могу в любой момент откатиться на какой-то из предыдущих коммитов и восстановить комплект модов на тот момент.


Через "удалить все" в CKAN и потом "intall from CKAN file".

Да могут слететь настройки модов, но это уже другая история :)

показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества