Mercurial > hg > mercurial
changeset 691:d4ef6a366768
extract code to utility
author | eugene.petrenko@gmail.com |
---|---|
date | Thu, 19 Dec 2013 19:10:00 +0100 |
parents | e6d203e5c6e3 |
children | dd11376b5f4a |
files | mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialCollectChangesPolicy.java mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ModificationDataFactory.java |
diffstat | 2 files changed, 88 insertions(+), 59 deletions(-) [+] |
line wrap: on
line diff
--- 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<ChangeSetRevision> parents = cset.getParents(); - if (parents.isEmpty()) - throw new IllegalStateException("Commit " + cset.getId() + " has no parents"); - String version = ctx.getStringFromPool(cset.getId()); - 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); + 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<VcsChange> toVcsChanges(@NotNull OperationContext ctx, - @NotNull List<FileStatus> modifiedFiles, - @NotNull String prevVer, - @NotNull String curVer, - @NotNull CheckoutRules rules) { - List<VcsChange> files = new ArrayList<VcsChange>(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<ModificationData> getSubrepoChanges(@NotNull OperationContext ctx, @NotNull VcsRoot root, @NotNull List<ModificationData> changes) throws VcsException { if (changes.isEmpty())
--- /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<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; + } + } +}