comparison cutils/util/__init__.py @ 278:822cf3a1da22

treesum: FIX: Removal of backslashes in output: do this only where really needed. Otherwise "backslashreplace" error encodings are "corrected" too.
author Franz Glasner <fzglas.hg@dom66.de>
date Fri, 21 Feb 2025 17:27:59 +0100
parents 0f4febf646f5
children 44e62e36cad4
comparison
equal deleted inserted replaced
277:9676ecd32a07 278:822cf3a1da22
268 return get_crc("crc-64-redis") 268 return get_crc("crc-64-redis")
269 else: 269 else:
270 raise ValueError("unknown algorithm: {}".format(s)) 270 raise ValueError("unknown algorithm: {}".format(s))
271 271
272 272
273 def normalize_filename(filename, strip_leading_dot_slash=False): 273 def normalize_filename(filename, strip_dot_slashes=False):
274 if isinstance(filename, bytes): 274 if isinstance(filename, bytes):
275 filename = filename.replace(b"\\", b"/") 275 filename = filename.replace(b"\\", b"/")
276 if strip_leading_dot_slash: 276 if strip_dot_slashes:
277 while filename.startswith(b"./"): 277 while filename.startswith(b"./"):
278 filename = filename[2:] 278 filename = filename[2:]
279 # This also handles adjacent /./ cases
280 while b"/./" in filename:
281 filename = filename.replace(b"/./", b"/", 1)
279 else: 282 else:
280 filename = filename.replace(u"\\", u"/") 283 filename = filename.replace(u"\\", u"/")
281 if strip_leading_dot_slash: 284 if strip_dot_slashes:
282 while filename.startswith(u"./"): 285 while filename.startswith(u"./"):
283 filename = filename[2:] 286 filename = filename[2:]
287 # This also handles adjacent /./ cases
288 while u"/./" in filename:
289 filename = filename.replace(u"/./", u"/", 1)
284 return filename 290 return filename
285 291
286 292
287 def fsencode(what): 293 def fsencode(what):
288 """A somewhat compatibility function for :func:`os.fsencode`. 294 """A somewhat compatibility function for :func:`os.fsencode`.