Search in sources :

Example 1 with VcsUser

use of com.intellij.vcs.log.VcsUser in project intellij-community by JetBrains.

the class GitAnnotationProvider method parseAnnotations.

@NotNull
private GitFileAnnotation parseAnnotations(@Nullable VcsRevisionNumber revision, @NotNull VirtualFile file, @NotNull VirtualFile root, @NotNull String output) throws VcsException {
    Interner<FilePath> pathInterner = new Interner<>();
    try {
        List<LineInfo> lines = new ArrayList<>();
        HashMap<String, LineInfo> commits = new HashMap<>();
        for (StringScanner s = new StringScanner(output); s.hasMoreData(); ) {
            // parse header line
            String commitHash = s.spaceToken();
            if (commitHash.equals(GitRevisionNumber.NOT_COMMITTED_HASH)) {
                commitHash = null;
            }
            // skip revision line number
            s.spaceToken();
            String s1 = s.spaceToken();
            int lineNum = Integer.parseInt(s1);
            s.nextLine();
            // parse commit information
            LineInfo commit = commits.get(commitHash);
            if (commit != null || commitHash == null) {
                while (s.hasMoreData() && !s.startsWith('\t')) {
                    s.nextLine();
                }
            } else {
                Date committerDate = null;
                FilePath filePath = null;
                String subject = null;
                String authorName = null;
                String authorEmail = null;
                String previousRevision = null;
                FilePath previousFilePath = null;
                while (s.hasMoreData() && !s.startsWith('\t')) {
                    String key = s.spaceToken();
                    String value = s.line();
                    if (SUBJECT_KEY.equals(key)) {
                        subject = value;
                    } else if (AUTHOR_KEY.equals(key)) {
                        authorName = value;
                    } else if (COMMITTER_TIME_KEY.equals(key)) {
                        committerDate = GitUtil.parseTimestamp(value);
                    } else if (FILENAME_KEY.equals(key)) {
                        filePath = VcsUtil.getFilePath(root, value);
                    } else if (AUTHOR_EMAIL_KEY.equals(key)) {
                        authorEmail = value;
                        if (authorEmail.startsWith("<") && authorEmail.endsWith(">")) {
                            authorEmail = authorEmail.substring(1, authorEmail.length() - 1);
                        }
                    } else if (PREVIOUS_KEY.equals(key)) {
                        int index = value.indexOf(' ');
                        if (index != -1) {
                            previousRevision = value.substring(0, index);
                            previousFilePath = VcsUtil.getFilePath(root, value.substring(index + 1, value.length()));
                        }
                    }
                }
                if (committerDate == null || filePath == null || authorName == null || authorEmail == null || subject == null) {
                    throw new VcsException("Output for line " + lineNum + " lacks necessary data");
                }
                GitRevisionNumber revisionNumber = new GitRevisionNumber(commitHash, committerDate);
                VcsUser author = myUserRegistry.createUser(authorName, authorEmail);
                GitRevisionNumber previousRevisionNumber = previousRevision != null ? new GitRevisionNumber(previousRevision) : null;
                filePath = pathInterner.intern(filePath);
                if (previousFilePath != null)
                    previousFilePath = pathInterner.intern(previousFilePath);
                commit = new LineInfo(myProject, revisionNumber, filePath, committerDate, author, subject, previousRevisionNumber, previousFilePath);
                commits.put(commitHash, commit);
            }
            s.nextLine();
            int expectedLineNum = lines.size() + 1;
            if (lineNum != expectedLineNum) {
                throw new VcsException("Adding for info for line " + lineNum + " but we are expecting it to be for " + expectedLineNum);
            }
            lines.add(commit);
        }
        return new GitFileAnnotation(myProject, file, revision, lines);
    } catch (Exception e) {
        LOG.error("Couldn't parse annotation: " + e, new Attachment("output.txt", output));
        throw new VcsException(e);
    }
}
Also used : FilePath(com.intellij.openapi.vcs.FilePath) Interner(com.intellij.util.containers.Interner) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Attachment(com.intellij.openapi.diagnostic.Attachment) LineInfo(git4idea.annotate.GitFileAnnotation.LineInfo) Date(java.util.Date) VcsException(com.intellij.openapi.vcs.VcsException) GitRevisionNumber(git4idea.GitRevisionNumber) VcsUser(com.intellij.vcs.log.VcsUser) VcsException(com.intellij.openapi.vcs.VcsException) StringScanner(git4idea.util.StringScanner) NotNull(org.jetbrains.annotations.NotNull)

Example 2 with VcsUser

use of com.intellij.vcs.log.VcsUser in project intellij-community by JetBrains.

the class VcsLogUserFilterImpl method getUsers.

@NotNull
private Set<VcsUser> getUsers(@NotNull VirtualFile root, @NotNull String name) {
    Set<VcsUser> users = ContainerUtil.newHashSet();
    if (ME.equals(name)) {
        VcsUser vcsUser = myData.get(root);
        if (vcsUser != null) {
            // do not just add vcsUser, also add synonyms
            users.addAll(getUsers(vcsUser.getName()));
            String emailNamePart = VcsUserUtil.getNameFromEmail(vcsUser.getEmail());
            if (emailNamePart != null) {
                users.addAll(getUsers(emailNamePart));
            }
        }
    } else {
        users.addAll(getUsers(name));
    }
    return users;
}
Also used : VcsUser(com.intellij.vcs.log.VcsUser) NotNull(org.jetbrains.annotations.NotNull)

Example 3 with VcsUser

use of com.intellij.vcs.log.VcsUser in project intellij-community by JetBrains.

the class GitUserFilterTest method setUp.

@Override
protected void setUp() throws Exception {
    super.setUp();
    myVcsLogUserFilterTest = new VcsLogUserFilterTest(GitTestUtil.findGitLogProvider(myProject), myProject) {

        @NotNull
        protected String commit(@NotNull VcsUser user) throws IOException {
            GitTestUtil.setupUsername(user.getName(), user.getEmail());
            String commit = modify("file.txt");
            GitTestUtil.setupDefaultUsername();
            return commit;
        }
    };
}
Also used : VcsUser(com.intellij.vcs.log.VcsUser) IOException(java.io.IOException) NotNull(org.jetbrains.annotations.NotNull) VcsLogUserFilterTest(com.intellij.vcs.log.VcsLogUserFilterTest)

Example 4 with VcsUser

use of com.intellij.vcs.log.VcsUser in project intellij-community by JetBrains.

the class HgUserFilterTest method setUp.

@Override
public void setUp() throws Exception {
    super.setUp();
    cd(myProject.getBaseDir());
    myVcsLogUserFilterTest = new VcsLogUserFilterTest(findLogProvider(myProject), myProject) {

        @NotNull
        protected String commit(@NotNull VcsUser user) throws IOException {
            String file = "file.txt";
            overwrite(file, "content" + Math.random());
            myProject.getBaseDir().refresh(false, true);
            hg("add " + file);
            hg("commit -m ' Commit by " + user.getName() + "' --user '" + VcsUserUtil.toExactString(user) + "'");
            return new HgWorkingCopyRevisionsCommand(myProject).tip(myProject.getBaseDir()).getChangeset();
        }
    };
}
Also used : VcsUser(com.intellij.vcs.log.VcsUser) IOException(java.io.IOException) HgWorkingCopyRevisionsCommand(org.zmlx.hg4idea.command.HgWorkingCopyRevisionsCommand) NotNull(org.jetbrains.annotations.NotNull) VcsLogUserFilterTest(com.intellij.vcs.log.VcsLogUserFilterTest)

Aggregations

VcsUser (com.intellij.vcs.log.VcsUser)4 NotNull (org.jetbrains.annotations.NotNull)4 VcsLogUserFilterTest (com.intellij.vcs.log.VcsLogUserFilterTest)2 IOException (java.io.IOException)2 Attachment (com.intellij.openapi.diagnostic.Attachment)1 FilePath (com.intellij.openapi.vcs.FilePath)1 VcsException (com.intellij.openapi.vcs.VcsException)1 Interner (com.intellij.util.containers.Interner)1 GitRevisionNumber (git4idea.GitRevisionNumber)1 LineInfo (git4idea.annotate.GitFileAnnotation.LineInfo)1 StringScanner (git4idea.util.StringScanner)1 ArrayList (java.util.ArrayList)1 Date (java.util.Date)1 HashMap (java.util.HashMap)1 HgWorkingCopyRevisionsCommand (org.zmlx.hg4idea.command.HgWorkingCopyRevisionsCommand)1