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);
}
}
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;
}
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;
}
};
}
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();
}
};
}
Aggregations