com.beijunyi.parallelgit.filesystem.merge.GfsMergeCheckout Maven / Gradle / Ivy
package com.beijunyi.parallelgit.filesystem.merge;
import java.io.IOException;
import java.util.Map;
import javax.annotation.Nonnull;
import com.beijunyi.parallelgit.filesystem.GitFileSystem;
import com.beijunyi.parallelgit.filesystem.io.GfsDefaultCheckout;
import org.eclipse.jgit.merge.MergeFormatter;
import static org.eclipse.jgit.lib.FileMode.REGULAR_FILE;
public class GfsMergeCheckout extends GfsDefaultCheckout {
private final Map conflicts;
private MergeFormatter formatter;
private GfsMergeCheckout(GitFileSystem gfs, Map conflicts) {
super(gfs);
this.conflicts = conflicts;
}
public static GfsMergeCheckout handleConflicts(GitFileSystem gfs, Map conflicts) {
return new GfsMergeCheckout(gfs, conflicts);
}
@Nonnull
public GfsMergeCheckout withFormatter(MergeFormatter formatter) {
this.formatter = formatter;
return this;
}
@Override
protected boolean skips(String path) {
return super.skips(path) || (conflicts != null && conflicts.containsKey(path));
}
@Override
protected void applyChanges() throws IOException {
addFormattedConflicts();
super.applyChanges();
}
private void addFormattedConflicts() throws IOException {
if(conflicts != null) {
for(Map.Entry conflict : conflicts.entrySet()) {
String path = conflict.getKey();
byte[] formatted = conflict.getValue().format(formatter);
changes.addChange(path, formatted, REGULAR_FILE);
}
}
}
}