comparison mercurial/pathutil.py @ 43077:687b865b95ad

formatting: byteify all mercurial/ and hgext/ string literals Done with python3.7 contrib/byteify-strings.py -i $(hg files 'set:mercurial/**.py - mercurial/thirdparty/** + hgext/**.py - hgext/fsmonitor/pywatchman/** - mercurial/__init__.py') black -l 80 -t py33 -S $(hg files 'set:**.py - mercurial/thirdparty/** - "contrib/python-zstandard/**" - hgext/fsmonitor/pywatchman/**') # skip-blame mass-reformatting only Differential Revision: https://phab.mercurial-scm.org/D6972
author Augie Fackler <augie@google.com>
date Sun, 06 Oct 2019 09:48:39 -0400
parents 2372284d9457
children c21aca51b392
comparison
equal deleted inserted replaced
43076:2372284d9457 43077:687b865b95ad
61 normpath = self.normcase(path) 61 normpath = self.normcase(path)
62 if normpath in self.audited: 62 if normpath in self.audited:
63 return 63 return
64 # AIX ignores "/" at end of path, others raise EISDIR. 64 # AIX ignores "/" at end of path, others raise EISDIR.
65 if util.endswithsep(path): 65 if util.endswithsep(path):
66 raise error.Abort(_("path ends in directory separator: %s") % path) 66 raise error.Abort(_(b"path ends in directory separator: %s") % path)
67 parts = util.splitpath(path) 67 parts = util.splitpath(path)
68 if ( 68 if (
69 os.path.splitdrive(path)[0] 69 os.path.splitdrive(path)[0]
70 or _lowerclean(parts[0]) in ('.hg', '.hg.', '') 70 or _lowerclean(parts[0]) in (b'.hg', b'.hg.', b'')
71 or pycompat.ospardir in parts 71 or pycompat.ospardir in parts
72 ): 72 ):
73 raise error.Abort(_("path contains illegal component: %s") % path) 73 raise error.Abort(_(b"path contains illegal component: %s") % path)
74 # Windows shortname aliases 74 # Windows shortname aliases
75 for p in parts: 75 for p in parts:
76 if "~" in p: 76 if b"~" in p:
77 first, last = p.split("~", 1) 77 first, last = p.split(b"~", 1)
78 if last.isdigit() and first.upper() in ["HG", "HG8B6C"]: 78 if last.isdigit() and first.upper() in [b"HG", b"HG8B6C"]:
79 raise error.Abort( 79 raise error.Abort(
80 _("path contains illegal component: %s") % path 80 _(b"path contains illegal component: %s") % path
81 ) 81 )
82 if '.hg' in _lowerclean(path): 82 if b'.hg' in _lowerclean(path):
83 lparts = [_lowerclean(p.lower()) for p in parts] 83 lparts = [_lowerclean(p.lower()) for p in parts]
84 for p in '.hg', '.hg.': 84 for p in b'.hg', b'.hg.':
85 if p in lparts[1:]: 85 if p in lparts[1:]:
86 pos = lparts.index(p) 86 pos = lparts.index(p)
87 base = os.path.join(*parts[:pos]) 87 base = os.path.join(*parts[:pos])
88 raise error.Abort( 88 raise error.Abort(
89 _("path '%s' is inside nested repo %r") 89 _(b"path '%s' is inside nested repo %r")
90 % (path, pycompat.bytestr(base)) 90 % (path, pycompat.bytestr(base))
91 ) 91 )
92 92
93 normparts = util.splitpath(normpath) 93 normparts = util.splitpath(normpath)
94 assert len(parts) == len(normparts) 94 assert len(parts) == len(normparts)
124 # They must be ignored for patterns can be checked too. 124 # They must be ignored for patterns can be checked too.
125 if err.errno not in (errno.ENOENT, errno.ENOTDIR, errno.EINVAL): 125 if err.errno not in (errno.ENOENT, errno.ENOTDIR, errno.EINVAL):
126 raise 126 raise
127 else: 127 else:
128 if stat.S_ISLNK(st.st_mode): 128 if stat.S_ISLNK(st.st_mode):
129 msg = _('path %r traverses symbolic link %r') % ( 129 msg = _(b'path %r traverses symbolic link %r') % (
130 pycompat.bytestr(path), 130 pycompat.bytestr(path),
131 pycompat.bytestr(prefix), 131 pycompat.bytestr(prefix),
132 ) 132 )
133 raise error.Abort(msg) 133 raise error.Abort(msg)
134 elif stat.S_ISDIR(st.st_mode) and os.path.isdir( 134 elif stat.S_ISDIR(st.st_mode) and os.path.isdir(
135 os.path.join(curpath, '.hg') 135 os.path.join(curpath, b'.hg')
136 ): 136 ):
137 if not self.callback or not self.callback(curpath): 137 if not self.callback or not self.callback(curpath):
138 msg = _("path '%s' is inside nested repo %r") 138 msg = _(b"path '%s' is inside nested repo %r")
139 raise error.Abort(msg % (path, pycompat.bytestr(prefix))) 139 raise error.Abort(msg % (path, pycompat.bytestr(prefix)))
140 140
141 def check(self, path): 141 def check(self, path):
142 try: 142 try:
143 self(path) 143 self(path)
201 if name != rootsep and name.startswith(rootsep): 201 if name != rootsep and name.startswith(rootsep):
202 name = name[len(rootsep) :] 202 name = name[len(rootsep) :]
203 auditor(name) 203 auditor(name)
204 return util.pconvert(name) 204 return util.pconvert(name)
205 elif name == root: 205 elif name == root:
206 return '' 206 return b''
207 else: 207 else:
208 # Determine whether `name' is in the hierarchy at or beneath `root', 208 # Determine whether `name' is in the hierarchy at or beneath `root',
209 # by iterating name=dirname(name) until that causes no change (can't 209 # by iterating name=dirname(name) until that causes no change (can't
210 # check name == '/', because that doesn't work on windows). The list 210 # check name == '/', because that doesn't work on windows). The list
211 # `rel' holds the reversed list of components making up the relative 211 # `rel' holds the reversed list of components making up the relative
217 except OSError: 217 except OSError:
218 s = False 218 s = False
219 if s: 219 if s:
220 if not rel: 220 if not rel:
221 # name was actually the same as root (maybe a symlink) 221 # name was actually the same as root (maybe a symlink)
222 return '' 222 return b''
223 rel.reverse() 223 rel.reverse()
224 name = os.path.join(*rel) 224 name = os.path.join(*rel)
225 auditor(name) 225 auditor(name)
226 return util.pconvert(name) 226 return util.pconvert(name)
227 dirname, basename = util.split(name) 227 dirname, basename = util.split(name)
234 # instead of cwd. Detect that case, and provide a hint to the user. 234 # instead of cwd. Detect that case, and provide a hint to the user.
235 hint = None 235 hint = None
236 try: 236 try:
237 if cwd != root: 237 if cwd != root:
238 canonpath(root, root, myname, auditor) 238 canonpath(root, root, myname, auditor)
239 relpath = util.pathto(root, cwd, '') 239 relpath = util.pathto(root, cwd, b'')
240 if relpath.endswith(pycompat.ossep): 240 if relpath.endswith(pycompat.ossep):
241 relpath = relpath[:-1] 241 relpath = relpath[:-1]
242 hint = _("consider using '--cwd %s'") % relpath 242 hint = _(b"consider using '--cwd %s'") % relpath
243 except error.Abort: 243 except error.Abort:
244 pass 244 pass
245 245
246 raise error.Abort( 246 raise error.Abort(
247 _("%s not under root '%s'") % (myname, root), hint=hint 247 _(b"%s not under root '%s'") % (myname, root), hint=hint
248 ) 248 )
249 249
250 250
251 def normasprefix(path): 251 def normasprefix(path):
252 '''normalize the specified path as path prefix 252 '''normalize the specified path as path prefix