Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support case sensitive folders on Windows #200

Closed
c-herff opened this issue Jun 20, 2019 · 13 comments
Closed

Support case sensitive folders on Windows #200

c-herff opened this issue Jun 20, 2019 · 13 comments
Assignees
Labels
enhancement New feature or request

Comments

@c-herff
Copy link

c-herff commented Jun 20, 2019

This bug has been reported and apparently been solved before, but since the latest update I'm experiencing the problem, again.

In CamelCased Filenames, the debugger tries to open a new all-lowercase file which does not exist.

Environment data

  • VS Code version: 1.35.1
  • Extension version (available under the Extensions sidebar): 2019.5.18875
  • OS and version: XXX
  • Python version (& distribution if applicable, e.g. Anaconda): Anaconda 3.6.6
  • Type of virtual environment used (N/A | venv | virtualenv | conda | ...): conda

Steps to reproduce:

  1. Set Breakpoint in CamelCase file name alignData.py

Logs

pydev debugger: warning: trying to add breakpoint to file that does not exist: c:\workspace\pilot-data-structure\aligndata.py (will have no effect)

@DonJayamanne DonJayamanne transferred this issue from microsoft/vscode-python Jun 20, 2019
@karthiknadig
Copy link
Member

@c-herff Can you provide debugger logs? you can generate them by setting "PTVSD_LOG_DIR" environment variable to point to a log dir. Please remove any personal info from that file and share it with us.

{
    "name": "Terminal",
    "type": "python",
    "request": "launch",
    "program": "${file}",
    "console": "integratedTerminal",
    "env":{
        "PTVSD_LOG_DIR": "<path to log dir>"
    }
}

@karthiknadig karthiknadig self-assigned this Jun 20, 2019
@c-herff
Copy link
Author

c-herff commented Jun 21, 2019

Thanks for your response @karthiknadig

Here is the output of the debug log

`I00000.016: Windows-10-10.0.17763-SP0 AMD64
CPython 3.6.6 (64-bit)
ptvsd 4.2.10

I00000.016: main(['c:\Users\USER\.vscode\extensions\ms-python.python-2019.5.18875\pythonFiles\ptvsd_launcher.py', '--client', '--host', 'localhost', '--port', '59875', 'c:\workspace\pilot-data-structure\newTest.py'])

I00000.016: sys.argv after parsing: ['c:\Users\\USER\.vscode\extensions\ms-python.python-2019.5.18875\pythonFiles\ptvsd_launcher.py']

D00000.016: sys.prefix: ('C:\ProgramData\Miniconda3\envs\p3',)

D00000.016: sys.base_prefix: C:\ProgramData\Miniconda3\envs\p3

D00000.032: site.getusersitepackages(): C:\Users\USER\AppData\Roaming\Python\Python36\site-packages

D00000.032: site.getsitepackages(): ['C:\ProgramData\Miniconda3\envs\p3', 'C:\ProgramData\Miniconda3\envs\p3\lib\site-packages']

D00000.032: Folder with "site-packages" in sys.path: C:\ProgramData\Miniconda3\envs\p3\lib\site-packages

D00000.032: sysconfig stdlib: C:\ProgramData\Miniconda3\envs\p3\Lib

D00000.032: sysconfig platstdlib: C:\ProgramData\Miniconda3\envs\p3\Lib

D00000.032: sysconfig platlib: C:\ProgramData\Miniconda3\envs\p3\Lib\site-packages

D00000.032: sysconfig purelib: C:\ProgramData\Miniconda3\envs\p3\Lib\site-packages

D00000.032: os dir: C:\ProgramData\Miniconda3\envs\p3\lib

D00000.032: threading dir: C:\ProgramData\Miniconda3\envs\p3\lib

D00000.032: sys.argv after patching: ['c:\workspace\pilot-data-structure\newTest.py']

D00000.032: Installing pydevd hooks.

D00000.032: Monkey-patching multiprocess functions.

D00000.032: pydevd.settrace()

D00000.032: Starting client daemon on ('localhost', 59875).

D00000.032: IDE <-- {
"type": "event",
"seq": 0,
"event": "output",
"body": {
"category": "telemetry",
"output": "ptvsd",
"data": {
"version": "4.2.10"
}
}
}

D00000.032: IDE --> {
"command": "launch",
"arguments": {
"name": "Python: Aktuelle Datei",
"type": "python",
"request": "launch",
"program": "c:\workspace\pilot-data-structure\newTest.py",
"console": "integratedTerminal",
"env": {
"PTVSD_LOG_DIR": "C:/debug/"
},
"pythonPath": "C:\ProgramData\Miniconda3\envs\p3\python.exe",
"cwd": "c:\workspace\pilot-data-structure",
"envFile": "c:\workspace\pilot-data-structure/.env",
"stopOnEntry": false,
"showReturnValue": true,
"internalConsoleOptions": "neverOpen",
"debugOptions": [
"ShowReturnValue",
"RedirectOutput",
"FixFilePathCase"
],
"justMyCode": true,
"workspaceFolder": "c:\workspace\pilot-data-structure",
"__sessionId": "01c0c042-e5b3-4b30-91fd-2caf25147c63"
},
"type": "request",
"seq": 2
}

D00000.047: (while handling {'command': 'launch', 'type': 'request', 'seq': 2})
PYD <-- CMD_SET_PROTOCOL 1000000000 json

D00000.047: (while handling {'command': 'launch', 'type': 'request', 'seq': 2})
PYD <-- {
"command": "setDebuggerProperty",
"arguments": {
"dontTraceStartPatterns": [
"c:\users\\user\.vscode\extensions\ms-python.python-2019.5.18875\pythonfiles\lib\python\ptvsd\"
],
"dontTraceEndPatterns": [
"ptvsd_launcher.py"
],
"skipSuspendOnBreakpointException": [
"BaseException"
],
"skipPrintBreakpointException": [
"NameError"
],
"multiThreadsSingleNotification": true,
"ideOS": "WINDOWS"
},
"type": "request",
"seq": 1000000001
}

D00000.047: (requested while handling {'command': 'launch', 'type': 'request', 'seq': 2})
PYD --> CMD_SET_PROTOCOL 1000000000

D00000.047: (while handling {'command': 'launch', 'type': 'request', 'seq': 2})
IDE <-- {
"type": "response",
"seq": 1,
"request_seq": 2,
"success": true,
"command": "launch",
"message": "",
"body": {}
}

D00000.047: (requested while handling {'command': 'launch', 'type': 'request', 'seq': 2})
PYD --> {
"type": "response",
"request_seq": 1000000001,
"success": true,
"command": "setDebuggerProperty",
"seq": 2,
"body": {},
"pydevd_cmd_id": 502
}

D00000.047: IDE --> {
"command": "initialize",
"arguments": {
"clientID": "vscode",
"clientName": "Visual Studio Code",
"adapterID": "python",
"pathFormat": "path",
"linesStartAt1": true,
"columnsStartAt1": true,
"supportsVariableType": true,
"supportsVariablePaging": true,
"supportsRunInTerminalRequest": true,
"locale": "de"
},
"type": "request",
"seq": 1
}

D00000.047: (while handling {'command': 'launch', 'type': 'request', 'seq': 2})
PYD <-- {
"command": "launch",
"arguments": {
"name": "Python: Aktuelle Datei",
"type": "python",
"request": "launch",
"program": "c:\workspace\pilot-data-structure\newTest.py",
"console": "integratedTerminal",
"env": {
"PTVSD_LOG_DIR": "C:/debug/"
},
"pythonPath": "C:\ProgramData\Miniconda3\envs\p3\python.exe",
"cwd": "c:\workspace\pilot-data-structure",
"envFile": "c:\workspace\pilot-data-structure/.env",
"stopOnEntry": false,
"showReturnValue": true,
"internalConsoleOptions": "neverOpen",
"debugOptions": [
"ShowReturnValue",
"RedirectOutput",
"FixFilePathCase"
],
"justMyCode": true,
"workspaceFolder": "c:\workspace\pilot-data-structure",
"__sessionId": "01c0c042-e5b3-4b30-91fd-2caf25147c63"
},
"type": "request",
"seq": 1000000002
}

D00000.047: (while handling {'command': 'initialize', 'type': 'request', 'seq': 1})
IDE <-- {
"type": "response",
"seq": 2,
"request_seq": 1,
"success": true,
"command": "initialize",
"message": "",
"body": {
"supportsCompletionsRequest": true,
"supportsConditionalBreakpoints": true,
"supportsConfigurationDoneRequest": true,
"supportsDebuggerProperties": true,
"supportsDelayedStackTraceLoading": true,
"supportsEvaluateForHovers": true,
"supportsExceptionInfoRequest": true,
"supportsExceptionOptions": true,
"supportsHitConditionalBreakpoints": true,
"supportsLogPoints": true,
"supportsModulesRequest": true,
"supportsSetExpression": true,
"supportsSetVariable": true,
"supportsValueFormattingOptions": true,
"supportTerminateDebuggee": true,
"supportsGotoTargetsRequest": true,
"exceptionBreakpointFilters": [
{
"filter": "raised",
"label": "Raised Exceptions",
"default": false
},
{
"filter": "uncaught",
"label": "Uncaught Exceptions",
"default": true
}
]
}
}

D00000.047: (while handling {'command': 'initialize', 'type': 'request', 'seq': 1})
IDE <-- {
"type": "event",
"seq": 3,
"event": "initialized",
"body": {}
}

D00000.047: PYD --> {
"type": "event",
"event": "process",
"body": {
"name": "c:\workspace\pilot-data-structure\newTest.py",
"systemProcessId": 60440,
"isLocalProcess": true,
"startMethod": "launch"
},
"seq": 4,
"pydevd_cmd_id": 204
}

D00000.047: (while handling ('CMD_PROCESS_EVENT', 4))
IDE <-- {
"type": "event",
"seq": 4,
"event": "process",
"body": {
"name": "c:\workspace\pilot-data-structure\newTest.py",
"systemProcessId": 60440,
"isLocalProcess": true,
"startMethod": "launch"
}
}

D00000.047: (requested while handling {'command': 'launch', 'type': 'request', 'seq': 2})
PYD --> {
"type": "response",
"request_seq": 1000000002,
"success": true,
"command": "launch",
"seq": 6,
"pydevd_cmd_id": 502
}

D00000.204: IDE --> {
"command": "setBreakpoints",
"arguments": {
"source": {
"name": "newTest.py",
"path": "c:\workspace\pilot-data-structure\newTest.py"
},
"lines": [
2
],
"breakpoints": [
{
"line": 2
}
],
"sourceModified": false
},
"type": "request",
"seq": 6
}

D00000.204: (requested while handling {'command': 'setBreakpoints', 'type': 'request', 'seq': 5})
PYD --> {
"type": "response",
"request_seq": 1000000004,
"success": true,
"command": "setBreakpoints",
"body": {
"breakpoints": []
},
"seq": 10,
"pydevd_cmd_id": 502
}

D00000.204: (while handling {'command': 'setBreakpoints', 'type': 'request', 'seq': 5})
IDE <-- {
"type": "response",
"seq": 6,
"request_seq": 5,
"success": true,
"command": "setBreakpoints",
"message": "",
"body": {
"breakpoints": []
}
}

D00000.204: (while handling {'command': 'setBreakpoints', 'type': 'request', 'seq': 6})
PYD <-- {
"command": "setBreakpoints",
"arguments": {
"source": {
"name": "newTest.py",
"path": "c:\workspace\pilot-data-structure\newTest.py"
},
"lines": [
2
],
"breakpoints": [
{
"line": 2
}
],
"sourceModified": false
},
"type": "request",
"seq": 1000000005
}

D00000.219: (requested while handling {'command': 'setBreakpoints', 'type': 'request', 'seq': 6})
PYD --> {
"type": "response",
"request_seq": 1000000005,
"success": true,
"command": "setBreakpoints",
"body": {
"breakpoints": [
{
"id": 0,
"verified": true,
"line": 2
}
]
},
"seq": 12,
"pydevd_cmd_id": 502
}

D00000.219: (while handling {'command': 'setBreakpoints', 'type': 'request', 'seq': 6})
IDE <-- {
"type": "response",
"seq": 7,
"request_seq": 6,
"success": true,
"command": "setBreakpoints",
"message": "",
"body": {
"breakpoints": [
{
"id": 0,
"verified": true,
"line": 2
}
]
}
}

D00000.219: (requested while handling {'command': 'setBreakpoints', 'type': 'request', 'seq': 7})
PYD --> {
"type": "response",
"request_seq": 1000000006,
"success": true,
"command": "setBreakpoints",
"body": {
"breakpoints": []
},
"seq": 14,
"pydevd_cmd_id": 502
}

D00000.219: (while handling {'command': 'setBreakpoints', 'type': 'request', 'seq': 7})
IDE <-- {
"type": "response",
"seq": 8,
"request_seq": 7,
"success": true,
"command": "setBreakpoints",
"message": "",
"body": {
"breakpoints": []
}
}

D00000.235: IDE --> {
"command": "setExceptionBreakpoints",
"arguments": {
"filters": [
"uncaught"
]
},
"type": "request",
"seq": 8
}

D00000.235: (while handling {'command': 'setExceptionBreakpoints', 'type': 'request', 'seq': 8})
PYD <-- {
"command": "setExceptionBreakpoints",
"arguments": {
"filters": [
"uncaught"
]
},
"type": "request",
"seq": 1000000007
}

D00000.235: (requested while handling {'command': 'setExceptionBreakpoints', 'type': 'request', 'seq': 8})
PYD --> {
"type": "response",
"request_seq": 1000000007,
"success": true,
"command": "setExceptionBreakpoints",
"seq": 16,
"pydevd_cmd_id": 502
}

D00000.235: (while handling {'command': 'setExceptionBreakpoints', 'type': 'request', 'seq': 8})
IDE <-- {
"type": "response",
"seq": 9,
"request_seq": 8,
"success": true,
"command": "setExceptionBreakpoints",
"message": "",
"body": {}
}

D00000.250: IDE --> {
"command": "configurationDone",
"type": "request",
"seq": 9
}

D00000.250: (while handling {'command': 'configurationDone', 'type': 'request', 'seq': 9})
PYD <-- {
"command": "configurationDone",
"type": "request",
"seq": 1000000008
}

D00000.250: (while handling {'command': 'configurationDone', 'type': 'request', 'seq': 9})
Ready to debug

D00000.250: (while handling {'command': 'configurationDone', 'type': 'request', 'seq': 9})
IDE <-- {
"type": "response",
"seq": 10,
"request_seq": 9,
"success": true,
"command": "configurationDone",
"message": "",
"body": {}
}

D00000.250: (requested while handling {'command': 'configurationDone', 'type': 'request', 'seq': 9})
PYD --> {
"type": "response",
"request_seq": 1000000008,
"success": true,
"command": "configurationDone",
"seq": 18,
"pydevd_cmd_id": 502
}

D00000.250: IDE --> {
"command": "threads",
"type": "request",
"seq": 10
}

D00000.250: (while handling {'command': 'threads', 'type': 'request', 'seq': 10})
PYD <-- {
"command": "threads",
"type": "request",
"seq": 1000000009
}

D00000.250: PYD --> {
"type": "event",
"event": "thread",
"body": {
"reason": "started",
"threadId": 1
},
"seq": 20,
"pydevd_cmd_id": 103
}

D00000.250: (while handling ('CMD_THREAD_CREATE', 20))
IDE <-- {
"type": "event",
"seq": 11,
"event": "thread",
"body": {
"reason": "started",
"threadId": 1
}
}

D00000.250: (requested while handling {'command': 'threads', 'type': 'request', 'seq': 10})
PYD --> {
"type": "response",
"request_seq": 1000000009,
"success": true,
"command": "threads",
"body": {
"threads": [
{
"id": 1,
"name": "MainThread"
}
]
},
"seq": 22,
"pydevd_cmd_id": 502
}

D00000.250: (while handling {'command': 'threads', 'type': 'request', 'seq': 10})
IDE <-- {
"type": "response",
"seq": 12,
"request_seq": 10,
"success": true,
"command": "threads",
"message": "",
"body": {
"threads": [
{
"id": 1,
"name": "MainThread"
}
]
}
}

I00000.344: Running file c:\workspace\pilot-data-structure\newTest.py

D00000.344: Adding c:\workspace\pilot-data-structure to sys.path.

D00000.344: PYD --> {
"type": "event",
"event": "output",
"body": {
"output": "A",
"category": "stdout",
"source": {}
},
"seq": 24,
"pydevd_cmd_id": 116
}

D00000.344: (while handling ('CMD_WRITE_TO_CONSOLE', 24))
IDE <-- {
"type": "event",
"seq": 13,
"event": "output",
"body": {
"output": "A",
"category": "stdout",
"source": {}
}
}

D00000.344: PYD --> {
"type": "event",
"event": "output",
"body": {
"output": "\n",
"category": "stdout",
"source": {}
},
"seq": 26,
"pydevd_cmd_id": 116
}

D00000.344: (while handling ('CMD_WRITE_TO_CONSOLE', 26))
IDE <-- {
"type": "event",
"seq": 14,
"event": "output",
"body": {
"output": "\n",
"category": "stdout",
"source": {}
}
}

D00000.344: PYD --> {
"type": "event",
"event": "output",
"body": {
"output": "B",
"category": "stdout",
"source": {}
},
"seq": 28,
"pydevd_cmd_id": 116
}

D00000.344: (while handling ('CMD_WRITE_TO_CONSOLE', 28))
IDE <-- {
"type": "event",
"seq": 15,
"event": "output",
"body": {
"output": "B",
"category": "stdout",
"source": {}
}
}

D00000.360: PYD --> {
"type": "event",
"event": "output",
"body": {
"output": "\n",
"category": "stdout",
"source": {}
},
"seq": 30,
"pydevd_cmd_id": 116
}

D00000.360: (while handling ('CMD_WRITE_TO_CONSOLE', 30))
IDE <-- {
"type": "event",
"seq": 16,
"event": "output",
"body": {
"output": "\n",
"category": "stdout",
"source": {}
}
}

D00000.360: PYD --> {
"type": "event",
"event": "thread",
"body": {
"reason": "exited",
"threadId": 1
},
"seq": 32,
"pydevd_cmd_id": 104
}

D00000.360: (while handling ('CMD_THREAD_KILL', 32))
IDE <-- {
"type": "event",
"seq": 17,
"event": "thread",
"body": {
"reason": "exited",
"threadId": 1
}
}

D00000.360: IDE --> {
"command": "threads",
"type": "request",
"seq": 11
}

D00000.360: (while handling {'command': 'threads', 'type': 'request', 'seq': 11})
PYD <-- {
"command": "threads",
"type": "request",
"seq": 1000000010
}

D00000.360: (requested while handling {'command': 'threads', 'type': 'request', 'seq': 11})
PYD --> {
"type": "response",
"request_seq": 1000000010,
"success": true,
"command": "threads",
"body": {
"threads": []
},
"seq": 34,
"pydevd_cmd_id": 502
}

D00000.360: (while handling {'command': 'threads', 'type': 'request', 'seq': 11})
IDE <-- {
"type": "response",
"seq": 18,
"request_seq": 11,
"success": true,
"command": "threads",
"message": "",
"body": {
"threads": []
}
}

D00000.641: Stopping daemon.

D00000.641: Message processor is stopping.

D00000.641: Closing daemon after single session

D00000.641: Stopping daemon.

D00000.954: Handling atexit

D00000.954: IDE <-- {
"type": "event",
"seq": 19,
"event": "exited",
"body": {
"exitCode": 0
}
}

D00000.954: IDE <-- {
"type": "event",
"seq": 20,
"event": "terminated",
"body": {}
}

D00000.954: Stopping daemon.

D00000.954: IDE --> {
"command": "disconnect",
"arguments": {
"restart": false
},
"type": "request",
"seq": 12
}

D00000.954: (while handling {'command': 'disconnect', 'type': 'request', 'seq': 12})
Killing remaining subprocesses: PID=[]

D00000.954: (while handling {'command': 'disconnect', 'type': 'request', 'seq': 12})
Disconnecting.

D00000.954: (while handling {'command': 'disconnect', 'type': 'request', 'seq': 12})
Handling disconnecting session

D00000.954: (while handling {'command': 'disconnect', 'type': 'request', 'seq': 12})
IDE <-- {
"type": "response",
"seq": 21,
"request_seq": 12,
"success": true,
"command": "disconnect",
"message": "",
"body": {}
}

`

@karthiknadig
Copy link
Member

@c-herff The log does not show this particular issue. Can you share a log when this particular issue is reproduced? I have tried reproducing this locally, and I have not been able to.

@c-herff
Copy link
Author

c-herff commented Jun 24, 2019

I can't see it in the log files either, but when I fire up the debugger I get the following error in the Terminal:
pydev debugger: warning: trying to add breakpoint to file that does not exist: c:\workspace\pilot-data-structure\newtest.py (will have no effect)

Where it should be newTest.py.

image

@fabioz
Copy link
Collaborator

fabioz commented Jun 24, 2019

@c-herff in windows checking if a file exists should be case insensitive, so, it's weird that it says that the file does not exist... can you change the file to have the contents below, run it and post the output?

import os
print(__file__)
print(os.path.exists(__file__))
print(__file__.lower())
print(os.path.exists(__file__.lower()))
print(r"c:\workspace\pilot-data-structure\newtest.py")
print(os.path.exists(r"c:\workspace\pilot-data-structure\newtest.py"))
print(r"c:\workspace\pilot-data-structure\newTest.py")
print(os.path.exists(r"c:\workspace\pilot-data-structure\newTest.py"))

@c-herff
Copy link
Author

c-herff commented Jun 24, 2019

Dear @fabioz, thanks for your help. The output reads:

pydev debugger: warning: trying to add breakpoint to file that does not exist: c:\workspace\pilot-data-structure\newtest.py (will have no effect)

c:\workspace\pilot-data-structure\newTest.py
True
c:\workspace\pilot-data-structure\newtest.py
False
c:\workspace\pilot-data-structure\newtest.py
False
c:\workspace\pilot-data-structure\newTest.py
True
A
B

@fabioz
Copy link
Collaborator

fabioz commented Jun 24, 2019

Humm, I was doing some research and it seems that this is a new feature that can be enabled selectively in folders (i.e.: https://www.howtogeek.com/354220/how-to-enable-case-sensitive-folders-on-windows-10/)

So, in this case it seems that the given folder is case-sensitive... it seems that this may happen if you either specifically enable the option for the directory or if you created it through some linux tool.

Can you check if you can run (from cmd or powershell) the command below and rerun that python script to check if it works for you?

fsutil.exe file setCaseSensitiveInfo "c:\workspace\pilot-data-structure" disable

@karthiknadig @int19h it seems that we need to do some changes to the debugger structure to accommodate this new windows feature... (we can't normalize the paths as is done now in this case -- this needs some research on the best way to handle it).

@c-herff
Copy link
Author

c-herff commented Jun 24, 2019

Dear @fabioz
this was exactly the problem. I created this folders through WSL and use git on WSL. Thanks so much for your help!

@c-herff c-herff closed this as completed Jun 24, 2019
@fabioz fabioz reopened this Jun 24, 2019
@fabioz fabioz changed the title Debugging opens new all-lowercase file, again Support case sensitive folders on Windows Jun 24, 2019
@fabioz
Copy link
Collaborator

fabioz commented Jun 24, 2019

I'm renaming this issue to describe the actual cause and I'll leave it open so that we can address this in the future in the debugger...

@int19h int19h transferred this issue from microsoft/ptvsd May 4, 2020
@karthiknadig karthiknadig removed their assignment May 28, 2020
@int19h int19h added the enhancement New feature or request label Jun 19, 2020
@fabioz fabioz self-assigned this Aug 25, 2020
@fabioz
Copy link
Collaborator

fabioz commented Aug 25, 2020

Since it seems we seem to be having more reports due to this, I think we should address this in the short-term.

@fabioz
Copy link
Collaborator

fabioz commented Aug 25, 2020

Note for anyone with this issue: there's a workaround changing the code of the debugger itself so that it doesn't do the case normalization at:

#361 (comment)

@fabioz
Copy link
Collaborator

fabioz commented Aug 28, 2020

Note: I'm currently investigating this.

@fabioz
Copy link
Collaborator

fabioz commented Sep 4, 2020

Note: I'm still working on this.

The approach I'm taking is that the internal version we work with (which has the real-normalized filename) should not be used for doing the check, while the parameter passed will be checked in os.exists (the only case where it wouldn't work is if the user has 2 files with exactly the same path but with different cases as a breakpoint added would be actually address both files at the same time -- as this should be really rare, this should be ok).

Internally many things were already structured this way, but I'm taking a bit more time to review the existing code and make sure that each path uses what's needed on each place -- i.e.: some places need the absolute normalized version, other places need the canonical version and other places need the original version with the proper case (so, reviewing the code for consistency in that is taking a while -- I hope to finish this next week).

fabioz added a commit to fabioz/debugpy that referenced this issue Sep 11, 2020
fabioz added a commit to fabioz/debugpy that referenced this issue Sep 17, 2020
fabioz added a commit to fabioz/debugpy that referenced this issue Sep 17, 2020
fabioz added a commit to fabioz/debugpy that referenced this issue Sep 23, 2020
fabioz added a commit to fabioz/debugpy that referenced this issue Sep 23, 2020
@fabioz fabioz closed this as completed in 18c0c28 Sep 23, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

4 participants