Скрипт
Update-FarPackage.ps1 обновлен. Реализовано автоматическое обновление всех установленных пакетов в Фаре и изменен принцип их удаления, в частности, можно удалять и без наличия исходного файла nupkg.
Как это работает. При обновлении пакета в FarHome кроме файлов пакета генерируется дополнительный файл "Update.<Id>.info", например, для Фарнет это будет "Update.FarNet.info". Там хранится все, что нужно для авто-обновления или удаления. Лучше файлы эти не трогать, но для любознательных: там построчно хранятся: Source, Version, которые нужны для обновления, и список установленных файлов, которые нужны для авто-чистки.
При авто-обновлении проверяются все файлы "Update.<Id>.info", откуда берутся Id, Version, Source. С этой инфой запрашивается новейшая версия для Id из Source. Если она такая же как и Version, то ничего не делается. Если она другая, то выкачивается (если не в кеше) и распаковывается новая версия. Если это успешно удалось, то старые файлы пакета удаляются (относительные пути берутся из "Update.<Id>.info") и новые файлы копируются. Таким образом, после обновления никакого мусора не остается, если в пакетах что-то удаляется или переименовывается.
Для уже установленных пакетов это работать не будет, потому что у них еще нет файлов "Update.*.info". Чтобы их получить, просто обновите пакеты еще раз новым скриптом (по идее, ничего качаться не должно, все уже и так есть в кеше, где лучше хранить пару последних версий "для отката"). Как только файлы "Update.*.info" созданы, установленные пакеты готовы для автоматических обновлений, будущих, конечно.
Автоматическое обновление запускается простой командой:
Почему не используется %FARHOME%? Потому что желательно это делать при закрытом Фаре из отдельной консоли PowerShell. Иначе обновление может остановиться где-то в середине процесса (файлы залочены), что нежелательно. Повторный запуск при закрытом Фаре, скорей всего, все исправит, но лучше не рисковать. Иными словами, в таком сценарии %FARHOME% может и не быть, а потому и не используется.
Вот теперь скрипт обновления похож на окончательный по дизайну. Авто-обновление с авто-чисткой всех пакетов, индивидуальное обновление или удаление отдельных пакетов, кэширование скачанных пакетов - все есть и вроде работает. Что еще может быть полезно - предлагайте.
----
На заметку модуле- и плагно- писателей. Скрипт работает с любыми NuGet пакетами, а не только Фарнет. Можно использовать для других модулей. Можно использовать даже для обычных плагинов. Все, что нужно, это:
- пакет, выложенный на NuGet (поддерживаются разные источники, теоретически мог бы быть специальный сервер для Фара)
- извлекаемые из пакета файлы должны быть в корневой папке пакета "tools"
- подпапка "tools\FarHomе.x86|x64", если есть, выбирается в зависимости от битности Фара и копируется в FarHome с сохранением структуры
- подпапка "tools\FarHomе", если есть, копируется в FarHome с сохранением структуры
Остальное делается скриптом, от пакетов больше ничего не требуется.