diff --git a/mercurial/chgserver.py b/mercurial/chgserver.py --- a/mercurial/chgserver.py +++ b/mercurial/chgserver.py @@ -528,7 +528,7 @@ class chgcmdserver(commandserver.server) def _setumask(self, data): mask = struct.unpack(b'>I', data)[0] self.ui.log(b'chgserver', b'setumask %r\n', mask) - os.umask(mask) + util.setumask(mask) def runcommand(self): # pager may be attached within the runcommand session, which should diff --git a/mercurial/util.py b/mercurial/util.py --- a/mercurial/util.py +++ b/mercurial/util.py @@ -130,6 +130,16 @@ umask = platform.umask unlink = platform.unlink username = platform.username + +def setumask(val): + ''' updates the umask. used by chg server ''' + if pycompat.iswindows: + return + os.umask(val) + global umask + platform.umask = umask = val & 0o777 + + # small compat layer compengines = compression.compengines SERVERROLE = compression.SERVERROLE