/ / Capturando a saída do git log no Windows XP com Python - python, windows, git, windows-xp

Capturando a saída do git log no Windows XP com Python - python, windows, git, windows-xp

Este trecho de código funciona na maioria dos Unix aos quais eu tenho acesso (Linux, Solaris, AIX), bem como no Windows 7 / Server 2008 R2 e superior que eu usei para obter a saída do git log:

from subprocess import Popen, PIPE
import platform

cmd = ["git", "--no-pager"]
if platform.system() == "Windows":
cmd.append("--work-tree=/path/to/working/copy")
cmd.extend(["log", "--pretty=format:"%cd %h"", "--date=short", "--", "/path/to/working/copy/filename/to/check"])

proc = Popen(cmd, stdout=PIPE, stderr=PIPE)
proc.wait()
f = proc.stdout
some_stuff = f.read()
f.close()

No entanto, no Windows XP usando msysgit eu não estou recebendo qualquer valor para a variável some_stuff, o que é estranho desde que executar o comando gerado funciona na linha de comando no Windows.

Alguma dica sobre o que devo fazer aqui?

Respostas:

0 para resposta № 1

Depois de fazer algumas pesquisas, aqui está o que eu encontrei:

  1. No Windows, o msysgit recomenda o uso do script wrapper git.cmd em vez de especificar diretamente git.exe.
  2. msysgit é especialmente sensível a nomes de arquivos de caminhos normalizados, em particular a letra da unidade deve estar em letras maiúsculas e que o caso dos nomes de arquivos deve GetLongPathName seria a saída.
  3. Usando barras, bem como barras invertidas, parece que os separadores de caminho ainda funcionam.

Ao testar o acima mencionado, parece que:

  • Não há realmente necessidade de especificar o --work-tree opção mais
  • "Normalizando" nomes de caminhos passando-os para os.path.normpath() não funcionará, pois ele assumirá a falta de maiúsculas e minúsculas e alterará a letra da unidade para minúscula.
  • Usando o caminho curto (a saída de GetShortPathName) não funciona.