--- a/mercurial/util.py
+++ b/mercurial/util.py
@@ -1095,7 +1095,7 @@ else:
def set_exec(f, mode):
s = os.lstat(f).st_mode
- if (s & 0100 != 0) == mode:
+ if stat.S_ISLNK(s) or (s & 0100 != 0) == mode:
return
if mode:
# Turn on +x for every +r bit when making a file executable