У меня возникла проблема с тем, что пользователь не смог подтолкнуть свои коммиты к хранилищу Mercurial и недоумевал, почему он не работает для него. Я пробовал несколько вещей, чтобы понять, что, Googling не помогает мне ничего полезного... так что я здесь.
Сначала конфигурация. У нас есть Windows XP SP2 x64 машина в нашей сети, действующая как наш официальный сервер репозитория. Это содержит несколько репозиториев. Мы клонируем/нажимаем/тянем, используя папку на этом диске, который является общим. Разрешения предоставляются каждому для доступа к чтению. Пользователи, которые могут нажать (включая пользователя с проблемами), получают полный контроль. Пользовательский компьютер основан на Win XP. Моя машина (используемая для устранения неполадок) также основана на Win XP.
Во-вторых, симптомы. Пользователь использует TortoiseHg 2.1.1 для выполнения своей работы. Он может клонировать только штраф, совершает свои локальные репо, а-о-к и т.д. Однако, когда он пытается нажать, TortoiseHg возвращает код "abort, ret 255". Не очень полезно. Итак, мы перешли в командную строку и выпустили "hg push -v -debug". Здесь он возвращает "abort: Access denied". Этот же пользователь не может писать в общую папку сервера без проблем - он может создавать файлы, каталоги и удалять их одинаково. Таким образом, чтение/запись доступа к диску/папке не является проблемой.
В-третьих, наши результаты экспериментов. Вот некоторые странные результаты тестирования. Пользователь создал новое локальное тестовое репо. Я вошел в серверную машину и создал тестовое репо для него. Пользователь проверил файл, а затем перетащил его на тестовое репо на серверной машине. Это отлично работает. Нет прерываний. Жизнь была хорошей. Он смог сделать еще несколько нажатий, и он продолжал работать, как ожидалось. Затем я клонировал репо на свою машину, обновил файл и вытолкнул его обратно. После того, как пользователь потянул мои изменения и попытался вернуться на сервер, он снова столкнулся с ужасным сообщением "Отказано в доступе". Между тем, я все еще могу обновить проект без проблем.
В качестве другого эксперимента мы вышли из системы, а другой пользователь зашел в систему. Они сделали это и смогли нажать на серверную репо без проблем. Исходный пользователь регистрируется снова, вносит некоторые изменения и т.д. И снова попадает на кирпичную стену "Доступ запрещен".
Насколько мы можем судить, проблема не связана с учетными данными Windows. В противном случае мы ожидаем, что создание произвольных файлов в общей папке сервера не будет работать. Кроме того, до тех пор, пока я не сделаю обновление тестового репо, созданного пользователем, он мог бы просто нажать на это конкретное репо.
Любые идеи? Какие дополнительные проверки учетных данных являются Mercurial, что может вызвать это?
UPDATE:
После подсказки от Wim я начал смотреть на разрешения на различные объекты репо, используя 'cacls'. Это инструмент Windows, который "отображает или изменяет списки управления доступом к файлам". У меня был пользователь, создавший новое репо, а затем сделал снимок разрешений. Затем я проверил файл в том же репо и сделал еще один снимок изменений.
Оказывается, есть несколько разрешений файлов репо, которые обновляются в результате: undo.bookmarks, undo.branch, undo.desc, undo.dirstate, ветки, 00changelog.i, 00manifest.i, undo, и единственный файл репозитория. Все эти файлы имели разрешения, похожие на следующие:
C:\Projects\Mercurial\hgtest4\.hg\store\undo BUILTIN\Administrators:F
NT AUTHORITY\SYSTEM:F
DOMAINxxxx\USERIDxxxx:F
BUILTIN\Users:R
(фактические значения DOMAINxxxx и USERIDxxxx изменены). До моей регистрации DOMAINxxxx и USERIDxxxx отображали домен пользователя и идентификатор пользователя. После моей регистрации они обновились до моего (мы находимся в том же домене, но идентификатор пользователя явно отличается.) Я смог проверить все, даже если мой идентификатор пользователя не был указан, потому что я член группы BUILTIN\Administrators. У пользователя с проблемой нет. Итак, я предполагаю, что после того, как я проверил ситуацию, система больше не считала его авторизированным пользователем с доступом для записи (BUILTIN\User: R указывает доступ только для чтения) и, следовательно, вызвал отказ в доступе.
У меня есть жуткое исправление Q & D прямо сейчас (теперь пользователь входит в группу Admin...). Реальное решение будет заключаться в том, чтобы вернуть репо из Windows Sharing и на правильном конфигурации сервера.