/**
  * Gets type of git object.
  *
  * @param gitObject revision object e.g. commit, tree, blob, tag.
  * @return type of git object
  */
 private String getRevisionType(String gitObject) throws GitException {
   EmptyGitCommand command =
       nativeGit
           .createEmptyGitCommand()
           .setNextParameter("cat-file")
           .setNextParameter("-t")
           .setNextParameter(gitObject);
   command.execute();
   return command.getText();
 }
  /**
   * Gets branch ref by branch name.
   *
   * @param branchName existing git branch name
   * @return ref to the branch
   * @throws GitException when it is not possible to get branchName ref
   */
  private String getBranchRef(String branchName) throws GitException {
    EmptyGitCommand command = nativeGit.createEmptyGitCommand();
    command.setNextParameter("show-ref").setNextParameter(branchName).execute();
    final String output = command.getText();

    if (output.isEmpty()) {
      throw new GitException("Error getting reference of branch.");
    }

    return output.split(" ")[1];
  }
 /**
  * Ensure existence repository root directory inside working directory and in our virtual file
  * system
  *
  * @throws GitException if git root folder is not in working directory
  */
 void ensureExistenceRepoRootInWorkingDirectory() throws GitException {
   if (isInsideWorkTree()) {
     final EmptyGitCommand emptyGitCommand = nativeGit.createEmptyGitCommand();
     emptyGitCommand.setNextParameter("rev-parse").setNextParameter("--git-dir").execute();
     final String gitDir = emptyGitCommand.getText();
     // here we check that git repo inside our file system mount point
     if (!gitDir.startsWith(mountRoot.getAbsolutePath()) && !gitDir.equals(".git")) {
       throw new GitException("Project is not a git repository.");
     }
   } else {
     throw new GitException("Project is not a git repository.");
   }
 }
  /**
   * Ensure existence repository root directory inside working directory
   *
   * @throws GitException if git root folder is not in working directory
   */
  boolean isInsideWorkTree() throws GitException {
    final EmptyGitCommand emptyGitCommand = nativeGit.createEmptyGitCommand();
    // command "rev-parse --is-inside-work-tree" returns true/false
    try {
      emptyGitCommand
          .setNextParameter("rev-parse")
          .setNextParameter("--is-inside-work-tree")
          .execute();

      final String output = emptyGitCommand.getText();
      return Boolean.valueOf(output);
    } catch (GitException ge) {
      String msg = ge.getMessage();
      if (msg != null && notInGitRepoErrorPattern.matcher(msg).matches()) {
        return false;
      }
      throw ge;
    }
  }