Сообщения от darcs
- ... Permission denied ...
Это сообщение обозначает, что кто-то напутал с правами или вы действительно пытаетесь добраться куда-то туда, куда не положено. Вопрос ко мне (— Д.А.) обычно спасает.
- ... lock ...
Это сообщение обозначает, что кто-то другой пользуется тем же репозиторием (центральным или вашим). Если в сообщении написано про центральный репозиторий, подождите и повторите попытку. Если в сообщении написано про ваш репозиторий, вероятно это значит, что вы поназапускали несколько darcs одновременно (например, полагая, что Ctrl-Z прерывает darcs, чего он на самом деле не делает) – их нужно отыскать (в случае с Ctrl-Z, скажите UNIX'у fg – но учтите, устраивать ликбез про состояния процессов в UNIX и работу с фоновыми программами в bash я вам не буду, поэтому просто воздерживайтесь от кнопкосочетания Ctrl-Z).
- ... Refusing to apply patches leading to conflicts ... There are conflicts in the following files ...
Это сообщение обозначает, что в том репозитории, куда вы пытаетесь отправить изменения, кто-то редактирует файлы (случился конфликт между тем, что вы отправляете и текущим состоянием рабочей директории по ту сторону от darcs push). В нашем случае это значит, что какая-то редиска не прочитала достаточно внимательно условия задания, и редактирует прямо по живому /P/SpecialCourses/Python/task2/README.txt – и от этого у всех всё не работает. Лечится это просто, но лучше всякий раз это буду делать я лично — Алексеевский Д.А.
- ... Refusing to apply patches leading to conflicts ...
Если нет слов про "There are conflicts in the following files", это значит, что случился конфликт между тем, что вы записали в свой репозиторий и тем, что уже записано в центральный репозиторий. Если бы вы говорили: darcs pull; darcs rec; darcs push и записывали бы довольно быстро, этой ошибки не случилось бы. Что делать: может быть, вас спасёт darcs pull, и тогда вы будете действовать, как обычно с конфликтами, а если нет, см. ниже про откаты.
- ... Irrefutible pattern ...
- Это сообщение обозначает, что darcs стало очень плохо, и он сам не знает, отчего (точнее сказать, авторы не догадались, что и такая ситуация бывает). См. ниже про откаты (и прочие махинации).
Откаты
Ваш репозиторий и центральный репозиторий ни за что не хотят дружить. Что делать?
Рассуждаем. Изначально в центральном репозитории была записана некая последовательность изменений. Давайте назовём их (не важно, сколько их): A B C. Потом вы сказали darcs get или darcs pull. Какая бы ситуация сейчас ни была, мы всегда можем сказать, что где-то в её корнях лежат именно эти два события.
Всё, что случилось потом, опять-таки, можно воспринипать как два простых события: в центральный репозиторий кто-то другой отправил изменение D (может быть, несколько, но одного хватит), а вы отправили в свой репозиторий изменение E (аналогично). Притом они обладают таким противным свойством, что находиться одновременно в одном репозитории они не могут. (Например, если D состоит в том, чтобы в строке 13 файла README написать "hello, world", E состоит в том, чтобы в строке 13 файла README написать "goodbye, world". – Если бы два человека одновременно дали бы вам такое поручение, как бы вы его выполнили? Впрочем, если ситуация именно такая, то с этим darcs справится. Если вы читаете этот текст, вероятно, ситуация оказалась какая-то более запутанная. Но это не важно).
Хотелось бы свести эту ситуацию к случаю, с которым мы точно умеем работать: в локальном репозитории есть какие-то незаписанные изменения, а в центральный репозитории появились какие-то новые записанные изменения.
И сведём: darcs unrecord. Делает ровно обратное к darcs record – из истории изменения записи исчезают, и возвращаются в незаписанное состояние в виде свежих изменений в вашем репозитории. Важное замечание: darcs unrecord можно применять а) только к своим изменениям б) только к тем изменениям, которые ещё не попали в центральный репозиторий. На всякий случай сделайте попытку сказать darcs push и посмотрите список изменений, которые он пытается отправить.
После darcs unrecord делаем darcs pull, получаем аккуратный и понятный конфликт, разрешаем его, и как обычно, отправляем изменения: darcs pull; darcs rec; darcs push.