Решаем ошибку WordOps DuplicateOptionError

При wo update WordOps иногда падает с traceback Python. Одна из частых причин – файл /root/.gitconfig, который читает configparser, а в секции [safe] ключ directory указан дважды:

configparser.DuplicateOptionError: While reading from '/root/.gitconfig' [line 6]: option 'directory' in section 'safe' already exists

Для самого Git несколько safe.directory – нормальная практика. Для стандартного configparser в Python повтор одного и того же option name в секции – ошибка. WordOps (или его зависимости) спотыкается об этот файл, и обновление обрывается.

Что сломано

DuplicateOptionError значит: при разборе INI-подобного конфига встретился дубликат опции. В сообщении прямо указаны файл, секция и имя ключа – /root/.gitconfig, [safe], directory. Пока парсер не сможет прочитать файл, команда, которая его трогает, не пойдёт дальше.

Исправление

1. Откройте .gitconfig

nano /root/.gitconfig

2. Найдите дубликаты directory

Типичный фрагмент:

[safe]
    directory = /some/path
    directory = /another/path

Именно второй (и последующие) directory = ... в одной секции ломают configparser.

3. Оставьте совместимый вариант

Минимальный фикс – одна строка directory (та, которая реально нужна root-у):

[safe]
    directory = /some/path

Сохранение в nano: Ctrl+O, Enter, выход – Ctrl+X.

Если безопасных каталогов много, для Git их можно вести иначе (отдельные include-файлы, или не класть multi-value в тот .gitconfig, который читает Python). Главное для wo update: файл, который парсит configparser, не должен содержать повторяющихся имён опций в одной секции.

4. Повторите обновление

wo update

Если traceback исчез – причина была в .gitconfig. Если ошибка другая, смотрите уже следующий кадр стека (сеть, pip, права, lock).

Запасной путь: временно убрать конфиг

Если править лень и в .gitconfig нет критичных настроек (user, credential, url.*), можно отложить файл в сторону:

mv /root/.gitconfig /root/.gitconfig.bak

После успешного wo update верните нужные директивы из бэкапа без дубликатов option names. Не удаляйте файл вслепую на машине, где root-git ходит в private repos по token/ssh из этого конфига.

Как не словить снова

  • не копировать куски [safe] с несколькими directory в .gitconfig, если этот файл читают скрипты на configparser;
  • перед массовыми правками конфигов – копия (cp .gitconfig .gitconfig.bak);
  • после ручных правок git-конфигов прогонять wo/wo update на staging или хотя бы сразу после изменения, пока контекст свежий.

Кратко

DuplicateOptionError при обновлении WordOps почти всегда = дубликат ключа в INI, который читает Python. В кейсе из traceback – directory в [safe] внутри /root/.gitconfig. Убрать повторы (или временно отложить файл), снова wo update.

Источники и ссылки


Комментарии загружаются…