comparison mercurial/posix.py @ 25658:e93036747902

global: mass rewrite to use modern octal syntax Python 2.6 introduced a new octal syntax: "0oXXX", replacing "0XXX". The old syntax is not recognized in Python 3 and will result in a parse error. Mass rewrite all instances of the old octal syntax to the new syntax. This patch was generated by `2to3 -f numliterals -w -n .` and the diff was selectively recorded to exclude changes to "<N>l" syntax conversion, which will be handled separately.
author Gregory Szorc <gregory.szorc@gmail.com>
date Tue, 23 Jun 2015 22:30:33 -0700
parents c2ec81891502
children 328739ea70c3
comparison
equal deleted inserted replaced
25657:dcc56e10c23b 25658:e93036747902
69 args = user and ("%s@%s" % (user, host)) or host 69 args = user and ("%s@%s" % (user, host)) or host
70 return port and ("%s -p %s" % (args, port)) or args 70 return port and ("%s -p %s" % (args, port)) or args
71 71
72 def isexec(f): 72 def isexec(f):
73 """check whether a file is executable""" 73 """check whether a file is executable"""
74 return (os.lstat(f).st_mode & 0100 != 0) 74 return (os.lstat(f).st_mode & 0o100 != 0)
75 75
76 def setflags(f, l, x): 76 def setflags(f, l, x):
77 s = os.lstat(f).st_mode 77 s = os.lstat(f).st_mode
78 if l: 78 if l:
79 if not stat.S_ISLNK(s): 79 if not stat.S_ISLNK(s):
96 data = os.readlink(f) 96 data = os.readlink(f)
97 os.unlink(f) 97 os.unlink(f)
98 fp = open(f, "w") 98 fp = open(f, "w")
99 fp.write(data) 99 fp.write(data)
100 fp.close() 100 fp.close()
101 s = 0666 & ~umask # avoid restatting for chmod 101 s = 0o666 & ~umask # avoid restatting for chmod
102 102
103 sx = s & 0100 103 sx = s & 0o100
104 if x and not sx: 104 if x and not sx:
105 # Turn on +x for every +r bit when making a file executable 105 # Turn on +x for every +r bit when making a file executable
106 # and obey umask. 106 # and obey umask.
107 os.chmod(f, s | (s & 0444) >> 2 & ~umask) 107 os.chmod(f, s | (s & 0o444) >> 2 & ~umask)
108 elif not x and sx: 108 elif not x and sx:
109 # Turn off all +x bits 109 # Turn off all +x bits
110 os.chmod(f, s & 0666) 110 os.chmod(f, s & 0o666)
111 111
112 def copymode(src, dst, mode=None): 112 def copymode(src, dst, mode=None):
113 '''Copy the file mode from the file at path src to dst. 113 '''Copy the file mode from the file at path src to dst.
114 If src doesn't exist, we're using mode instead. If mode is None, we're 114 If src doesn't exist, we're using mode instead. If mode is None, we're
115 using umask.''' 115 using umask.'''
116 try: 116 try:
117 st_mode = os.lstat(src).st_mode & 0777 117 st_mode = os.lstat(src).st_mode & 0o777
118 except OSError, inst: 118 except OSError, inst:
119 if inst.errno != errno.ENOENT: 119 if inst.errno != errno.ENOENT:
120 raise 120 raise
121 st_mode = mode 121 st_mode = mode
122 if st_mode is None: 122 if st_mode is None:
123 st_mode = ~umask 123 st_mode = ~umask
124 st_mode &= 0666 124 st_mode &= 0o666
125 os.chmod(dst, st_mode) 125 os.chmod(dst, st_mode)
126 126
127 def checkexec(path): 127 def checkexec(path):
128 """ 128 """
129 Check whether the given path is on a filesystem with UNIX-like exec flags 129 Check whether the given path is on a filesystem with UNIX-like exec flags
138 try: 138 try:
139 EXECFLAGS = stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH 139 EXECFLAGS = stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH
140 fh, fn = tempfile.mkstemp(dir=path, prefix='hg-checkexec-') 140 fh, fn = tempfile.mkstemp(dir=path, prefix='hg-checkexec-')
141 try: 141 try:
142 os.close(fh) 142 os.close(fh)
143 m = os.stat(fn).st_mode & 0777 143 m = os.stat(fn).st_mode & 0o777
144 new_file_has_exec = m & EXECFLAGS 144 new_file_has_exec = m & EXECFLAGS
145 os.chmod(fn, m ^ EXECFLAGS) 145 os.chmod(fn, m ^ EXECFLAGS)
146 exec_flags_cannot_flip = ((os.stat(fn).st_mode & 0777) == m) 146 exec_flags_cannot_flip = ((os.stat(fn).st_mode & 0o777) == m)
147 finally: 147 finally:
148 os.unlink(fn) 148 os.unlink(fn)
149 except (IOError, OSError): 149 except (IOError, OSError):
150 # we don't care, the user probably won't be able to commit anyway 150 # we don't care, the user probably won't be able to commit anyway
151 return False 151 return False
591 '''check whether a stat result is a symlink''' 591 '''check whether a stat result is a symlink'''
592 return st and stat.S_ISLNK(st.st_mode) 592 return st and stat.S_ISLNK(st.st_mode)
593 593
594 def statisexec(st): 594 def statisexec(st):
595 '''check whether a stat result is an executable file''' 595 '''check whether a stat result is an executable file'''
596 return st and (st.st_mode & 0100 != 0) 596 return st and (st.st_mode & 0o100 != 0)
597 597
598 def poll(fds): 598 def poll(fds):
599 """block until something happens on any file descriptor 599 """block until something happens on any file descriptor
600 600
601 This is a generic helper that will check for any activity 601 This is a generic helper that will check for any activity