package com.beijunyi.parallelgit.filesystem.merge;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Nonnull;
import org.eclipse.jgit.diff.Sequence;
import org.eclipse.jgit.merge.MergeFormatter;
import org.eclipse.jgit.merge.MergeResult;
import org.eclipse.jgit.merge.ResolveMerger;
import static com.beijunyi.parallelgit.filesystem.utils.GfsPathUtils.toAbsolutePath;
import static java.util.Collections.unmodifiableMap;
import static org.eclipse.jgit.lib.Constants.CHARSET;
public class MergeConflict {
private final MergeResult<? extends Sequence> result;
private final String[] names;
private MergeConflict(MergeResult<? extends Sequence> result, String[] names) {
this.result = result;
this.names = names;
}
@Nonnull
public static Map<String, MergeConflict> readConflicts(ResolveMerger merger) {
Map<String, MergeConflict> ret = new HashMap<>();
for(Map.Entry<String, MergeResult<? extends Sequence>> conflict : merger.getMergeResults().entrySet())
ret.put(toAbsolutePath(conflict.getKey()), new MergeConflict(conflict.getValue(), merger.getCommitNames()));
return unmodifiableMap(ret);
}
@Nonnull
public byte[] format(MergeFormatter formatter) {
try(ByteArrayOutputStream stream = new ByteArrayOutputStream()) {
formatter.formatMerge(stream, result, names[0], names[1], names[2], CHARSET.name());
return stream.toByteArray();
} catch(IOException e) {
throw new IllegalStateException(e);
}
}
}