Mercurial > hg > mercurial
view mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ModificationDataFactory.java @ 719:59a3b5ef91a9
drop legacy
author | eugene.petrenko@jetbrains.com |
---|---|
date | Mon, 13 Jan 2014 19:42:22 +0100 |
parents | d4ef6a366768 |
children | 31a1aca3305c |
line wrap: on
line source
package jetbrains.buildServer.buildTriggers.vcs.mercurial; import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.ChangeSet; import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.ChangeSetRevision; import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.FileStatus; import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.Status; import jetbrains.buildServer.log.Loggers; import jetbrains.buildServer.vcs.*; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; import static java.util.Collections.emptyList; /** * Created 19.12.13 19:05 * * @author Eugene Petrenko (eugene.petrenko@jetbrains.com) */ public class ModificationDataFactory { @NotNull public static ModificationData createModificationData(@NotNull final OperationContext ctx, @NotNull final ChangeSet cset, @NotNull final VcsRoot root, @NotNull final CheckoutRules checkoutRules) throws VcsException { final List<ChangeSetRevision> parents = cset.getParents(); if (parents.isEmpty()) throw new IllegalStateException("Commit " + cset.getId() + " has no parents"); final String version = ctx.getStringFromPool(cset.getId()); final List<VcsChange> files = toVcsChanges(ctx, cset.getModifiedFiles(), ctx.getStringFromPool(parents.get(0).getId()), version, checkoutRules); final ModificationData result = new ModificationData(cset.getTimestamp(), files, cset.getDescription(), ctx.getStringFromPool(cset.getUser()), root, version, version); for (ChangeSetRevision parent : parents) { result.addParentRevision(ctx.getStringFromPool(parent.getId())); } setCanBeIgnored(result, cset); return result; } private static void setCanBeIgnored(@NotNull final ModificationData md, @NotNull final ChangeSet cset) { if (md.getParentRevisions().size() > 1) { //don't ignore merge commits md.setCanBeIgnored(false); } else if (cset.getModifiedFiles().isEmpty()) { //don't ignore empty commits md.setCanBeIgnored(false); } } @NotNull public static List<VcsChange> toVcsChanges(@NotNull OperationContext ctx, @NotNull List<FileStatus> modifiedFiles, @NotNull String prevVer, @NotNull String curVer, @NotNull CheckoutRules rules) { final List<VcsChange> files = new ArrayList<VcsChange>(0); for (FileStatus mf : modifiedFiles) { if (rules.map(mf.getPath()) == null) continue; final String normalizedPath = PathUtil.normalizeSeparator(mf.getPath()); final String path = ctx.getStringFromPool(normalizedPath); files.add(new VcsChange(getChangeType(mf.getStatus()), mf.getStatus().getName(), path, path, prevVer, curVer)); } if (files.isEmpty()) return emptyList(); return files; } @NotNull private static VcsChangeInfo.Type getChangeType(final Status status) { switch (status) { case ADDED: return VcsChangeInfo.Type.ADDED; case MODIFIED: return VcsChangeInfo.Type.CHANGED; case REMOVED: return VcsChangeInfo.Type.REMOVED; default: Loggers.VCS.warn("Unable to convert status: " + status + " to VCS change type"); return VcsChangeInfo.Type.NOT_CHANGED; } } }