Обновление проекта, расширяющего класс, удаленный в проекте зависимостей

Представь, что у тебя есть посылка MyPackage и это зависит от другого проекта под названием Library, MyPackage имеет методы расширения в классе LibraryClass который находится в Library проект.

В какой-то момент Library изменен и LibraryClass переименован в NewLibraryClass или полностью удален Вы вносите изменения в свой проект, например, перемещаете методы расширения в NewLibraryClass или решить это по-другому, это не имеет большого значения.

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

Как это можно решить? Потому что, в конце концов, ваш код в порядке, но пользователь, который обновляет ваш проект, столкнется со странными вопросами слияния.

1 ответ

У меня есть взлом, который не должен квалифицироваться как полное решение, но помогает преодолеть проблему.

В конфигурации вашего проекта добавьте do- pre-load doit (раздел 1.10 " Управление проектами с помощью Metacello") и вызовите этот метод:

cleanUpLibrary

  | myPackage |

  myPackage := (#MyPackage asPackageIfAbsent: [ ^ self ]).

  LibraryClass asClassIfPresent: [ :class |
    class protocols
      select: [ :prot | prot asLowercase beginsWith: myPackage methodCategoryPrefix ]
      thenDo: [ :prot | class removeProtocol: prot ] ].

  myPackage mcWorkingCopy modified: false

Это удалит все протоколы расширения MyPackage от LibraryClass и отметьте MyPackage как не модифицированный (чистый, не грязный…). Тогда, когда Library будет загружать и удалит LibraryClass, MyPackage не будет помечен как грязный, потому что в этот момент LibraryClass не будет иметь никаких методов расширения MyPackage

Другие вопросы по тегам