private static GitCommit createCommit( Project project, SymbolicRefsI refs, VirtualFile root, GitLogRecord record) throws VcsException { GitCommit gitCommit; final Collection<String> currentRefs = record.getRefs(); List<String> locals = new ArrayList<String>(); List<String> remotes = new ArrayList<String>(); List<String> tags = new ArrayList<String>(); final String s = parseRefs(refs, currentRefs, locals, remotes, tags); gitCommit = new GitCommit( root, AbstractHash.create(record.getShortHash()), new SHAHash(record.getHash()), record.getAuthorName(), record.getCommitterName(), record.getDate(), record.getSubject(), record.getFullMessage(), new HashSet<String>(Arrays.asList(record.getParentsShortHashes())), record.getFilePaths(root), record.getAuthorEmail(), record.getCommitterEmail(), tags, locals, remotes, record.parseChanges(project, root), record.getAuthorTimeStamp() * 1000); gitCommit.setCurrentBranch(s); /*final String current = refs.getCurrent().getName(); gitCommit.setOnLocal((current != null) && (! current.startsWith(GitBranch.REFS_REMOTES_PREFIX)) && (! current.startsWith("remotes/")) && branches.contains(current)); String remoteName = refs.getTrackedRemoteName(); if (".".equals(remoteName)) { gitCommit.setOnTracked(gitCommit.isOnLocal()); } else { remoteName = remoteName.startsWith("refs/") ? remoteName.substring("refs/".length()) : remoteName; gitCommit.setOnTracked(remoteName != null && branches.contains(remoteName)); }*/ return gitCommit; }
@Nullable public static VcsRevisionDescription getCurrentRevisionDescription( final Project project, FilePath filePath, @Nullable String branch) throws VcsException { filePath = getLastCommitName(project, filePath); GitSimpleHandler h = new GitSimpleHandler(project, GitUtil.getGitRoot(filePath), GitCommand.LOG); GitLogParser parser = new GitLogParser( project, HASH, COMMIT_TIME, AUTHOR_NAME, COMMITTER_NAME, SUBJECT, BODY, RAW_BODY); h.setNoSSH(true); h.setSilent(true); h.addParameters("-n1", parser.getPretty()); if (branch != null && !branch.isEmpty()) { h.addParameters(branch); } else { h.addParameters("--all"); } h.endOptions(); h.addRelativePaths(filePath); String result = h.run(); if (result.length() == 0) { return null; } final GitLogRecord record = parser.parseOneRecord(result); if (record == null) { return null; } record.setUsedHandler(h); final String author = Comparing.equal(record.getAuthorName(), record.getCommitterName()) ? record.getAuthorName() : record.getAuthorName() + " (" + record.getCommitterName() + ")"; return new VcsRevisionDescriptionImpl( new GitRevisionNumber(record.getHash(), record.getDate()), record.getDate(), author, record.getFullMessage()); }