2013-06-25 13 views
5

Contex

Próbuję wykryć możliwą zmianę nazwy pliku, która wystąpiła po ostatnim zatwierdzeniu, w kopii roboczej. Na moim przykładzie mam czystą kopię roboczą i to zrobić:JGit wykryje zmianę nazwy kopii roboczej

git mv old.txt new.txt 

Running $ git status przedstawia oczekiwany wynik:

# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
#  renamed: old.txt -> new.txt 

próbowałem

Korzystanie z StatusCommand widzę old.txt na usuniętej liście i new.txt z dodanej listy. Ale nie mogę znaleźć sposobu na połączenie ich ze sobą.

Jestem świadomy istnienia RenameDetector, ale działa za pomocą DiffEntry, a ja nie wiem jak dostać DiffEntries między HEAD i Working Copy.

Odpowiedz

7

Nieważne, znalazłeś odpowiedź. JGit API jest bardzo skomplikowane ..

TreeWalk tw = new TreeWalk(repository); 
tw.setRecursive(true); 
tw.addTree(CommitUtils.getHead(repository).getTree()); 
tw.addTree(new FileTreeIterator(repository)); 

RenameDetector rd = new RenameDetector(repository); 
rd.addAll(DiffEntry.scan(tw)); 

List<DiffEntry> lde = rd.compute(tw.getObjectReader(), null); 
for (DiffEntry de : lde) { 
    if (de.getScore() >= rd.getRenameScore()) { 
     System.out.println("file: " + de.getOldPath() + " copied/moved to: " + de.getNewPath()); 
    } 
} 

(Ten fragment również użyć biblioteki Gitective)

Powiązane problemy