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); } } }