Luigit
repositories / dotfiles

dotfiles

bugabingas dorkfiles

owned by admin

subversion/merge

Raw
#!/usr/bin/java --source 23 -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xms32m -Xmx32m -XX:+AlwaysPreTouch -Xshare:on

import static java.lang.System.* ;
import java.util.*;

class merge {
  public static void main(String[] command_line_arguments) throws Throwable
  {
    if(command_line_arguments.length != 5)
      throw fail("svn diff was supposed to give us 5 arguments. did the interface change? we got %s arguments.", command_line_arguments.length);

    var base_file = command_line_arguments[0];
    var theirs_file = command_line_arguments[1];
    var mine_file = command_line_arguments[2];
    var merged_file = command_line_arguments[3];
    var wcpath_file = command_line_arguments[4];

		//TODO: use neovide
    var code = call("nvim", "-d", wcpath_file, merged_file, theirs_file );
    throw exit(code);
  }

  static int call( String... command) throws Exception
  {
    return new ProcessBuilder()
    .command(command)
    .inheritIO()
    .start()
    .onExit()
    .join()
    .exitValue();
  }

  static Throwable exit(int code) {
    System.exit(code);
    //abuse control flow to make compiler realize `exit` will never return
    return new Throwable();
  }

  static String emphasize_global(String message) {
    return "\033[4m" + message + "\033[0m";
  }

  static String emphasize_local(String message) {
    return "\033[3m" + message + "\033[0m";
  }

  static Throwable fail(String message, Object... arguments) {
    out.printf(message, arguments);
    System.exit(1);
    //abuse control flow to make compiler realize `exit` will never return
    return new Throwable();
  }

  static Throwable fail() {
    System.exit(1);
    //abuse control flow to make compiler realize `exit` will never return
    return new Throwable();
  }
}
// vim:ft=java