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

A ferramenta faz múltiplas operações de I/O desnecessárias #29

Closed
jvcoutinho opened this issue Jun 28, 2019 · 10 comments · Fixed by #35
Closed

A ferramenta faz múltiplas operações de I/O desnecessárias #29

jvcoutinho opened this issue Jun 28, 2019 · 10 comments · Fixed by #35
Assignees

Comments

@jvcoutinho
Copy link
Collaborator

jvcoutinho commented Jun 28, 2019

Sempre que o programa executa copyFile, ele faz uma operação de I/O (escrita no arquivo) para cada linha da saída do comando git cat-file, que retorna o conteúdo de um arquivo em um commit. Isso torna o processo bem lento.

public static File copyFile(Project project, String path, String SHA) {
Process gitCatFile = ProcessRunner.runProcess(project.getPath(), 'git', 'cat-file', '-p', "${SHA}:${path}")
File target = new File("${SHA}.java")
gitCatFile.getInputStream().eachLine {
target << "${it}\n"
}
return target
}

Eu proponho colocar toda a saída na memória (em uma string, por exemplo), e só realizar a escrita no arquivo no fim do processo.

@jvcoutinho jvcoutinho self-assigned this Jun 28, 2019
@jvcoutinho
Copy link
Collaborator Author

Isso possivelmente acontece em outros comandos executados pelo ProcessRunner.

@pauloborba
Copy link
Member

não temos na API de Java algum método que já faça essa cópia de forma mais eficiente? e uma forma de pegar o arquivo em um commit, ao invés de dar cat nele?

@pauloborba
Copy link
Member

@rafaelmotaalves

@rafaelmotaalves
Copy link
Collaborator

Vou investigar essas otimizações.

@rafaelmotaalves
Copy link
Collaborator

rafaelmotaalves commented Jul 3, 2019

Sobre isso, eu percebi que um dos casos que são feitas muitas operações de IO, são quando são escritas a linhas da resposta. Vocês acham que seriam um boa abordagem adicionar um tipo genérico ou uma classe abstrata pra representar um estrutura de dados que poderia ser montada durante a análise?

@rafaelmotaalves
Copy link
Collaborator

Um vantagem dessa abordagem, seria que deixaria mais fácil utilizar o framework através de código, podendo ser útil pra análises futuras, além de diminuir a quantidade de operações de IO, que poderiam ser reduzidas a um escrita no fim da análise.

@rafaelmotaalves
Copy link
Collaborator

@pauloborba @jvcoutinho

@pauloborba
Copy link
Member

pauloborba commented Jul 3, 2019 via email

@rafaelmotaalves
Copy link
Collaborator

Talvez, mas não daria a possibilidade de criar estruturas de dados mais complexas, como uma árvore por exemplo, que poderia ser lida por código. Mas o problema de IO resolveria sim

@pauloborba
Copy link
Member

melhor então, por enquanto, só atacar o problema de IO.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants