BradenM/micropy-cli

Detection of Windows NTFS junction fails if path is a WindowsPath with a lower case drive letter

開放

#208 建立於 2021年1月6日

 (0 則留言) (0 個反應) (0 位負責人)Python (29 個分叉)auto 404
bughelp wanted

倉庫指標

星標
 (335 顆星)
PR 合併指標
 (PR 指標待抓取)

描述

In the file helpers.py, function is_dir_link:

When running on Windows, if the path passed in is a WindowsPath with a lower case drive letter then the function will always return True regardless of the existence of the directory or its status as a regular directory or a junction.

This is because:

  1. WindowsPath.resolve() changes the drive letter to upper case while WindowsPath.absolute() doesn't.
  2. The results of path.resolve() and path.absolute() are converted to strings and then compared which fails due to drive letter case being different.

There are two solutions I can think of off the top of my head:

  1. Don't convert the path into two strings, just compare directly as in: if not (path.absolute() == path.resolve())
  2. The strings resulting from path.resolve() and path.absolute() could both be converted to all upper case or all lower case before the comparison is made (NTFS isn't a case sensitive file system so it doesn't matter).

貢獻者指南