Kodomo

Пользователь

Сообщения от 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.