Mercurial отслеживает только разрешение на выполнение для файлов, а не для пользователя / группы / другим способом, просто как один бит, поэтому в зависимости от того, что вы пытаетесь подавить, возможно, вам действительно нужно просто настроить umask
пользователь, запускающий hg update
'
Если вас получает бит выполнения, то я думаю, что единственный вариант - использовать хук предварительной фиксации, например:
[hooks]
pre-commit = find $(hg root) -type f -print0 | xargs -0 chmod a-x
, что,удаляет выполнение из всех файлов перед фиксацией.
Чтобы сделать то же самое только с версионными файлами, используйте hg locate
, как указано в Ish's комментарий:
[hooks]
pre-commit = hg locate --print0 | xargs -0 chmod a-x
ПримечаниеТем не менее, это может не получиться при определенных обстоятельствахНапример, во время переименования (hg rename
) файл до переименования и после переименования будет записан как версионный с использованием hg locate
.Следовательно, ловушка не сможет chmod
старое имя файла и фиксация завершится неудачей в целом.Это можно исправить, временно отключив перехват или вызвав /bin/true
в конце перехвата.