diff --git a/src/main/java/ru/ulstu/extractor/GitRepositoryService.java b/src/main/java/ru/ulstu/extractor/GitRepositoryService.java index d8ec67f..f948bb2 100644 --- a/src/main/java/ru/ulstu/extractor/GitRepositoryService.java +++ b/src/main/java/ru/ulstu/extractor/GitRepositoryService.java @@ -105,13 +105,35 @@ public class GitRepositoryService { private Changes parseOutputDiff(String output) { Changes changes = new Changes(); String[] strings = output.split("\n"); - for (String string : strings) { - Optional maybeFileName = getFileName(string); - if (maybeFileName.isPresent()) { - FileChange fileChange = new FileChange(); - fileChange.setFile(maybeFileName.get()); - /// вытащить другие изменения из коммита - changes.getFileChanges().add(fileChange); + FileChange fileChange = new FileChange(); + int stringsLength = strings.length; + for (int i = 0; i < strings.length; i++) { + while (i < stringsLength) { + Optional maybeFileName = getFileName(strings[i]); + if (maybeFileName.isPresent()) { + fileChange = new FileChange(); + fileChange.setFile(maybeFileName.get()); + /// вытащить другие изменения из коммита + changes.getFileChanges().add(fileChange); + } + LineChange lineChange = new LineChange(); + if (strings[i].startsWith("-")) { + while ((i < stringsLength) && strings[i].startsWith("-")) { + lineChange.setLineFrom(lineChange.getLineFrom() + "\n" + strings[i]); + i++; + } + } + if (strings[i].startsWith("+")) { + while ((i < stringsLength) && strings[i].startsWith("+")) { + lineChange.setLineTo(lineChange.getLineTo() + "\n" + strings[i]); + i++; + } + } + if ((lineChange.getLineTo() != null && lineChange.getLineTo().isEmpty()) + || (lineChange.getLineFrom() != null && lineChange.getLineFrom().isEmpty())) { + fileChange.getLineChanges().add(lineChange); + } + i++; } } return changes; @@ -120,9 +142,37 @@ public class GitRepositoryService { private Optional getFileName(String commitString) { String startString = "diff --git a/"; if (commitString.startsWith(startString)) { - String name = commitString.substring(commitString.indexOf(startString) + startString.length(), commitString.indexOf("b/")); + String name = commitString.substring(commitString.indexOf(startString) + startString.length(), commitString.indexOf(" b/")); return Optional.of(name); } return Optional.empty(); } + + private Optional getLineTo(String commitString) { + String startString = "+"; + String startPlus = "+++"; + if (commitString.startsWith(startString)) { + String lineTo = commitString.substring(commitString.indexOf(startString) + startString.length()); + if (commitString.startsWith(startPlus)) { + return Optional.empty(); + } else { + return Optional.of(lineTo); + } + } + return Optional.empty(); + } + + private Optional getLineFrom(String commitString) { + String startString = "-"; + String startMinus = "---"; + if (commitString.startsWith(startString)) { + String lineFrom = commitString.substring(commitString.indexOf(startString) + startString.length()); + if (commitString.startsWith(startMinus)) { + return Optional.empty(); + } else { + return Optional.of(lineFrom); + } + } + return Optional.empty(); + } } diff --git a/src/main/java/ru/ulstu/extractor/LineChange.java b/src/main/java/ru/ulstu/extractor/LineChange.java index 4adc8ca..2d3311a 100644 --- a/src/main/java/ru/ulstu/extractor/LineChange.java +++ b/src/main/java/ru/ulstu/extractor/LineChange.java @@ -3,16 +3,29 @@ package ru.ulstu.extractor; public class LineChange { private boolean added; private boolean removed; - private int lineFrom; - private int lineTo; + private String lineFrom; + private String lineTo; - public LineChange(boolean added, boolean removed, int lineFrom, int lineTo) { + public LineChange() { + + } + + public LineChange(boolean added, boolean removed, String lineFrom, String lineTo) { this.added = added; this.removed = removed; this.lineFrom = lineFrom; this.lineTo = lineTo; } + public void setLineTo(String lineTo) { + this.lineTo = lineTo; + } + + public void setLineFrom(String lineFrom) { + this.lineFrom = lineFrom; + } + + public boolean getAdd() { return added; } @@ -21,11 +34,11 @@ public class LineChange { return removed; } - public int getLineFrom() { + public String getLineFrom() { return lineFrom; } - public int getLineTo() { + public String getLineTo() { return lineTo; } diff --git a/src/main/java/ru/ulstu/extractor/NewClass.java b/src/main/java/ru/ulstu/extractor/NewClass.java index d777668..ecacb3a 100644 --- a/src/main/java/ru/ulstu/extractor/NewClass.java +++ b/src/main/java/ru/ulstu/extractor/NewClass.java @@ -45,3 +45,46 @@ public class NewClass { return Collections.emptyList(); } } + + +// Optional lineFrom = Optional.empty(); +// Optional lineTo = Optional.empty(); +// for (String string: strings) { +// Optional maybeFileName = getFileName(string); +// if (maybeFileName.isPresent()) { +// fileChange = new FileChange(); +// fileChange.setFile(maybeFileName.get()); +// /// вытащить другие изменения из коммита +// changes.getFileChanges().add(fileChange); +// } +// +// Optional maybeLineFrom = getLineFrom(string); +// LineChange lineChange = new LineChange(); +// if (maybeLineFrom.isPresent()) { +// lineChange.setLineFrom(maybeLineFrom.get()); +// if (lineFrom.isPresent()){ +// lineChange.setLineFrom(lineChange.getLineFrom() + "\n" + lineFrom); +// fileChange.getLineChanges().add(lineChange); +// lineFrom = maybeLineFrom; +// } +// else { +// fileChange.getLineChanges().add(lineChange); +// lineFrom = maybeLineFrom; +// } +// } +// Optional maybeLineTo = getLineTo(string); +// if (maybeLineTo.isPresent()) { +// lineChange.setLineTo(maybeLineTo.get()); +// if(lineTo.isPresent()){ +// lineChange.setLineTo(lineChange.getLineTo() + "\n" + lineTo); +// fileChange.getLineChanges().add(lineChange); +// lineTo = maybeLineTo; +// } +// else { +// fileChange.getLineChanges().add(lineChange); +// lineTo = maybeLineFrom; +// } +// } +// } +// return changes; +// } \ No newline at end of file