# HG changeset patch # User eugene.petrenko@gmail.com # Date 1387476600 -3600 # Node ID d4ef6a3667687cf3509372b39a74caa4eba94812 # Parent e6d203e5c6e39a4be3982f23ad039340d0e2a4e5 extract code to utility diff -r e6d203e5c6e3 -r d4ef6a366768 mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialCollectChangesPolicy.java --- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialCollectChangesPolicy.java Wed Dec 18 13:45:08 2013 +0100 +++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialCollectChangesPolicy.java Thu Dec 19 19:10:00 2013 +0100 @@ -204,72 +204,15 @@ } } - - private ModificationData createModificationData(@NotNull OperationContext ctx, + private ModificationData createModificationData(@NotNull final OperationContext ctx, @NotNull final ChangeSet cset, @NotNull final VcsRoot root, @NotNull final CheckoutRules checkoutRules) throws VcsException { - List parents = cset.getParents(); - if (parents.isEmpty()) - throw new IllegalStateException("Commit " + cset.getId() + " has no parents"); - String version = ctx.getStringFromPool(cset.getId()); - List 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); + final ModificationData result = ModificationDataFactory.createModificationData(ctx, cset, root, checkoutRules); result.setAttributes(getAttributes(ctx, root, result)); return result; } - - private void setCanBeIgnored(@NotNull ModificationData md, @NotNull 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); - } - } - - - private List toVcsChanges(@NotNull OperationContext ctx, - @NotNull List modifiedFiles, - @NotNull String prevVer, - @NotNull String curVer, - @NotNull CheckoutRules rules) { - List files = new ArrayList(0); - for (FileStatus mf: modifiedFiles) { - if (rules.map(mf.getPath()) == null) - continue; - String normalizedPath = PathUtil.normalizeSeparator(mf.getPath()); - VcsChangeInfo.Type changeType = getChangeType(mf.getStatus()); - if (changeType == null) { - Loggers.VCS.warn("Unable to convert status: " + mf.getStatus() + " to VCS change type"); - changeType = VcsChangeInfo.Type.NOT_CHANGED; - } - String path = ctx.getStringFromPool(normalizedPath); - files.add(new VcsChange(changeType, mf.getStatus().getName(), path, path, prevVer, curVer)); - } - if (files.isEmpty()) - return emptyList(); - return files; - } - - - private 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; - } - return null; - } - - @NotNull private List getSubrepoChanges(@NotNull OperationContext ctx, @NotNull VcsRoot root, @NotNull List changes) throws VcsException { if (changes.isEmpty()) diff -r e6d203e5c6e3 -r d4ef6a366768 mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ModificationDataFactory.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ModificationDataFactory.java Thu Dec 19 19:10:00 2013 +0100 @@ -0,0 +1,86 @@ +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 parents = cset.getParents(); + if (parents.isEmpty()) throw new IllegalStateException("Commit " + cset.getId() + " has no parents"); + + final String version = ctx.getStringFromPool(cset.getId()); + final List 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 toVcsChanges(@NotNull OperationContext ctx, + @NotNull List modifiedFiles, + @NotNull String prevVer, + @NotNull String curVer, + @NotNull CheckoutRules rules) { + final List files = new ArrayList(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; + } + } +}