Incorrectly decoded strings in Repository.path and Repository.workdir when using Python 3 on Windows
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 1.7k
- Fork
- 408
- Merge medio
- 2g 57m
- PR unite (30g)
- 7
Descrizione
Example:
>import pygit2
>import sys
>r = pygit2.init_repository(r"C:\repösitory")
>r.path
'C:/repösitory/.git/' # this is a wrongly decoded path
>r.path.encode(sys.getfilesystemencoding()).decode("utf-8") # workaround
'C:/repösitory/.git/' # this looks right
Reproduced with "pygit2-0.28.2-cp35-cp35m-win32.whl".
The problem seems to be in "repository.c", function "Repository_path__get__":
return to_path(git_repository_path(self->repo));
The "to_path" function assumes that libgit2 returns a byte string with file system encoding:
#define to_path(x) to_unicode(x, Py_FileSystemDefaultEncoding, "strict")
But libgit2 actually returns a byte string encoded in UTF-8.
Maybe the behaviour of libgit2 has changed at some point?
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Riproduci l'esempio Python 3 su Windows con un percorso del repository contenente caratteri non ASCII, quindi esamina repository.c, in particolare Repository_path__get__ e la definizione di to_path. Controlla sia Repository.path sia Repository.workdir e verifica che i percorsi restituiti conservino i caratteri originali senza la soluzione alternativa documentata.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- git, python
- Ambito
- backend
- Tipo di issue
- Bug
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100