public BlameResult call() throws GitAPIException {checkCallable();try (BlameGenerator gen = new BlameGenerator(repo, path)) {if (diffAlgorithm != null)gen.setDiffAlgorithm(diffAlgorithm);if (textComparator != null)gen.setTextComparator(textComparator);if (followFileRenames != null)gen.setFollowFileRenames(followFileRenames.booleanValue());if (reverseEndCommits != null)gen.reverse(startCommit, reverseEndCommits);else if (startCommit != null)gen.push(null, startCommit);else {gen.prepareHead();}return gen.computeBlameResult();} catch (IOException e) {throw new JGitInternalException(e.getMessage(), e);}}

public override BlameResult Call(){CheckCallable();BlameGenerator gen = new BlameGenerator(repo, path);try{if (diffAlgorithm != null){gen.SetDiffAlgorithm(diffAlgorithm);}if (textComparator != null){gen.SetTextComparator(textComparator);}if (followFileRenames != null){gen.SetFollowFileRenames(followFileRenames);}if (reverseEndCommits != null){gen.Reverse(startCommit, reverseEndCommits);}else{if (startCommit != null){gen.Push(null, startCommit);}else{gen.Push(null, repo.Resolve(Constants.HEAD));if (!repo.IsBare){DirCache dc = repo.ReadDirCache();int entry = dc.FindEntry(path);if (0 <= entry){gen.Push(null, dc.GetEntry(entry).GetObjectId());}FilePath inTree = new FilePath(repo.WorkTree, path);if (inTree.IsFile()){gen.Push(null, new RawText(inTree));}}}}return gen.ComputeBlameResult();}catch (IOException e){throw new JGitInternalException(e.Message, e);}finally{gen.Release();}}
