Zbyszek Jędrzejewski-Szmek <zbys...@in.waw.pl> added the comment:

> I can see the need for generalized 'drive' support that sets an arbitrary 
> path prefix as the 'drive'. For example, if "/var/tmp/instroot" is a 'drive', 
> then joining it to "/some/path" returns "/var/tmp/instroot/some/path". 
> However, subsequently joining that result to "/suffix" would return 
> "/var/tmp/instroot/suffix".

I think that the "drive concept" only makes sense on Windows. With POSIX paths, 
the expectation is that you can concatenate paths recursively, and consistency 
is much more useful than the drive concept.

One special case where you might concat multiple levels of paths is when the 
paths are generated through some configuration mechanism, and an occasional 
absolute path might sneak in, but we still want to use the same "relative" 
concatenation.

For example:
def path_to_some_binary_in_container(container, usr_merge_was_done=True):
  """Construct a path with support for systems with /usr/bin and legacy systems
     with /bin (https://fedoraproject.org/wiki/Features/UsrMove).
  """
  path_to_containers = '/var/lib/machines'
  prefix = 'usr/' if usr_merge_was_done else '/'
  suffix = 'bin/some-binary'
  return path_to_containers / container / prefix / suffix

path_to_some_binary('cont1') returns 
PosixPath('/var/lib/machines/cont1/usr/bin/some-binary'), but 
path_to_some_binary('cont1', False) returns PosixPath('/bin/some-binary'). The 
"bug" is that '/' was used instead of ''. This is exactly the
pitfall that I want to avoid:
  return path_to_containers // container // prefix // suffix
will do the expected thing.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue44452>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to