diff --git a/plugins/git4idea/src/git4idea/changes/GitChangeUtils.java b/plugins/git4idea/src/git4idea/changes/GitChangeUtils.java index 6ca09c1f5d13..760b77f096c3 100644 --- a/plugins/git4idea/src/git4idea/changes/GitChangeUtils.java +++ b/plugins/git4idea/src/git4idea/changes/GitChangeUtils.java @@ -181,19 +181,13 @@ public class GitChangeUtils { } /** - * Load actual revision number with timestamp basing on revision number expression - * - * @param project a project - * @param vcsRoot a repository root - * @param revisionNumber a revision number expression - * @return a resolved revision - * @throws VcsException if there is a problem with running git + * Load actual revision number with timestamp basing on a reference: name of a branch or tag, or revision number expression. */ @NotNull - public static GitRevisionNumber loadRevision(@NotNull Project project, @NotNull VirtualFile vcsRoot, @NonNls final String revisionNumber) - throws VcsException { + public static GitRevisionNumber resolveReference(@NotNull Project project, @NotNull VirtualFile vcsRoot, + @NotNull String reference) throws VcsException { GitSimpleHandler handler = new GitSimpleHandler(project, vcsRoot, GitCommand.REV_LIST); - handler.addParameters("--timestamp", "--max-count=1", revisionNumber); + handler.addParameters("--timestamp", "--max-count=1", reference); handler.endOptions(); handler.setNoSSH(true); handler.setSilent(true); @@ -207,7 +201,7 @@ public class GitChangeUtils { String out = dh.run(); LOG.info("Diagnostic output from 'git log -1 HEAD': [" + out + "]"); throw new VcsException(String.format("The string '%s' does not represent a revision number. Output: [%s]\n Root: %s", - revisionNumber, output, vcsRoot)); + reference, output, vcsRoot)); } Date timestamp = GitUtil.parseTimestampWithNFEReport(stk.nextToken(), handler, output); return new GitRevisionNumber(stk.nextToken(), timestamp); @@ -382,7 +376,7 @@ public class GitChangeUtils { GitRevisionNumber thisRevision = new GitRevisionNumber(revisionNumber, commitDate); if (skipDiffsForMerge || (parents.length <= 1)) { - final GitRevisionNumber parentRevision = parents.length > 0 ? loadRevision(project, root, parents[0]) : null; + final GitRevisionNumber parentRevision = parents.length > 0 ? resolveReference(project, root, parents[0]) : null; // This is the first or normal commit with the single parent. // Just parse changes in this commit as returned by the show command. parseChanges(project, root, thisRevision, local ? null : parentRevision, s, changes, null); @@ -393,7 +387,7 @@ public class GitChangeUtils { // If no changes are found (why to merge then?). Empty changelist is reported. for (String parent : parents) { - final GitRevisionNumber parentRevision = loadRevision(project, root, parent); + final GitRevisionNumber parentRevision = resolveReference(project, root, parent); GitSimpleHandler diffHandler = new GitSimpleHandler(project, root, GitCommand.DIFF); diffHandler.setNoSSH(true); diffHandler.setSilent(true); @@ -424,18 +418,18 @@ public class GitChangeUtils { GitRevisionNumber oldRev; if (newRevision == null) { // current revision at the right range = oldRevision + ".."; - oldRev = loadRevision(project, root, oldRevision); + oldRev = resolveReference(project, root, oldRevision); newRev = null; } else if (oldRevision == null) { // current revision at the left range = ".." + newRevision; oldRev = null; - newRev = loadRevision(project, root, newRevision); + newRev = resolveReference(project, root, newRevision); } else { range = oldRevision + ".." + newRevision; - oldRev = loadRevision(project, root, oldRevision); - newRev = loadRevision(project, root, newRevision); + oldRev = resolveReference(project, root, oldRevision); + newRev = resolveReference(project, root, newRevision); } String output = getDiffOutput(project, root, range, dirtyPaths); diff --git a/plugins/git4idea/src/git4idea/status/GitChangeProvider.java b/plugins/git4idea/src/git4idea/status/GitChangeProvider.java index b62994ca3a43..06585d96644b 100644 --- a/plugins/git4idea/src/git4idea/status/GitChangeProvider.java +++ b/plugins/git4idea/src/git4idea/status/GitChangeProvider.java @@ -212,7 +212,7 @@ public class GitChangeProvider implements ChangeProvider { if ((myAddGate.getStatus(vf) == null) && myFileDocumentManager.isFileModified(vf)) { final VirtualFile root = myVcsManager.getVcsRootFor(vf); if (root != null) { - final GitRevisionNumber beforeRevisionNumber = GitChangeUtils.loadRevision(myProject, root, "HEAD"); + final GitRevisionNumber beforeRevisionNumber = GitChangeUtils.resolveReference(myProject, root, "HEAD"); builder.processChange(new Change(GitContentRevision.createRevision(vf, beforeRevisionNumber, myProject), GitContentRevision.createRevision(vf, null, myProject), FileStatus.MODIFIED), gitKey); } diff --git a/plugins/git4idea/src/git4idea/status/GitNewChangesCollector.java b/plugins/git4idea/src/git4idea/status/GitNewChangesCollector.java index 63d15c835ec9..b231ec1c14f2 100644 --- a/plugins/git4idea/src/git4idea/status/GitNewChangesCollector.java +++ b/plugins/git4idea/src/git4idea/status/GitNewChangesCollector.java @@ -285,7 +285,7 @@ class GitNewChangesCollector extends GitChangesCollector { private VcsRevisionNumber getHeadFromGit() throws VcsException { VcsRevisionNumber nativeHead = VcsRevisionNumber.NULL; try { - nativeHead = GitChangeUtils.loadRevision(myProject, myVcsRoot, "HEAD"); + nativeHead = GitChangeUtils.resolveReference(myProject, myVcsRoot, "HEAD"); } catch (VcsException e) { if (!GitChangeUtils.isHeadMissing(e)) { // fresh repository diff --git a/plugins/git4idea/src/git4idea/status/GitOldChangesCollector.java b/plugins/git4idea/src/git4idea/status/GitOldChangesCollector.java index 8fbf943bb111..9e9354e60399 100644 --- a/plugins/git4idea/src/git4idea/status/GitOldChangesCollector.java +++ b/plugins/git4idea/src/git4idea/status/GitOldChangesCollector.java @@ -152,7 +152,7 @@ class GitOldChangesCollector extends GitChangesCollector { } try { String output = GitChangeUtils.getDiffOutput(myProject, myVcsRoot, "HEAD", dirtyPaths); - GitChangeUtils.parseChanges(myProject, myVcsRoot, null, GitChangeUtils.loadRevision(myProject, myVcsRoot, "HEAD"), output, myChanges, + GitChangeUtils.parseChanges(myProject, myVcsRoot, null, GitChangeUtils.resolveReference(myProject, myVcsRoot, "HEAD"), output, myChanges, myUnmergedNames); } catch (VcsException ex) {