From 563ae7015be37e751387260cd641566de28d738f Mon Sep 17 00:00:00 2001 From: Dylan Sale Date: Mon, 19 Aug 2013 14:47:28 +0930 Subject: [PATCH 1/3] changed the build notes appended from change log to include all the logs from failed builds since the last successful one --- .../java/testflight/TestflightRecorder.java | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/main/java/testflight/TestflightRecorder.java b/src/main/java/testflight/TestflightRecorder.java index 90f1b91..c71adc7 100644 --- a/src/main/java/testflight/TestflightRecorder.java +++ b/src/main/java/testflight/TestflightRecorder.java @@ -257,7 +257,8 @@ private TestflightUploader.UploadRequest createPartialUploadRequest(TestflightTe ur.filePaths = vars.expand(StringUtils.trim(team.getFilePath())); ur.dsymPath = vars.expand(StringUtils.trim(team.getDsymPath())); ur.apiToken = vars.expand(Secret.toString(tokenPair.getApiToken())); - ur.buildNotes = createBuildNotes(vars.expand(buildNotes), build.getChangeSet()); + List entries = getChangeSetEntriesSinceLastSuccess(build); + ur.buildNotes = createBuildNotes(vars.expand(buildNotes), entries); ur.lists = vars.expand(lists); ur.notifyTeam = notifyTeam; ProxyConfiguration proxy = getProxy(); @@ -271,6 +272,20 @@ private TestflightUploader.UploadRequest createPartialUploadRequest(TestflightTe return ur; } + private List getChangeSetEntriesSinceLastSuccess(AbstractBuild build) { + ArrayList entries = new ArrayList(); + + do { + ChangeLogSet changeSet = build.getChangeSet(); + + for (Entry entry : changeSet) { + entries.add(entry); + } + build = build.getPreviousBuild(); + } while (build != null && build.getResult().isWorseThan(Result.SUCCESS)); + return entries; + } + private ProxyConfiguration getProxy() { ProxyConfiguration proxy; if (Hudson.getInstance() != null && Hudson.getInstance().proxy != null) { @@ -285,7 +300,7 @@ private ProxyConfiguration getProxy() { } // Append the changelog if we should and can - private String createBuildNotes(String buildNotes, final ChangeLogSet changeSet) { + private String createBuildNotes(String buildNotes, final List changeSet) { if (appendChangelog) { StringBuilder stringBuilder = new StringBuilder(); @@ -294,7 +309,7 @@ private String createBuildNotes(String buildNotes, final ChangeLogSet changeS // Then append the changelog stringBuilder.append("\n\n") - .append(changeSet.isEmptySet() ? Messages.TestflightRecorder_EmptyChangeSet() : Messages.TestflightRecorder_Changelog()) + .append(changeSet.isEmpty() ? Messages.TestflightRecorder_EmptyChangeSet() : Messages.TestflightRecorder_Changelog()) .append("\n"); int entryNumber = 1; From 7722372706e2534f4345caf465a4e95e21d44f0e Mon Sep 17 00:00:00 2001 From: Dylan Sale Date: Mon, 19 Aug 2013 20:40:37 +0930 Subject: [PATCH 2/3] refactored the accumulation to use provided apis and to traverse the builds in the correct order so the change logs are the correct order --- .../java/testflight/TestflightRecorder.java | 43 +++++++++++++++---- .../TestflightRecorder/config.jelly | 3 ++ 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/src/main/java/testflight/TestflightRecorder.java b/src/main/java/testflight/TestflightRecorder.java index c71adc7..a7c0478 100644 --- a/src/main/java/testflight/TestflightRecorder.java +++ b/src/main/java/testflight/TestflightRecorder.java @@ -62,6 +62,12 @@ public boolean getAppendChangelog() { return this.appendChangelog; } + private boolean combineChangelogSinceLastSuccess; + + public boolean getCombineChangelogSinceLastSuccess() { + return this.combineChangelogSinceLastSuccess; + } + /** * Comma- or space-separated list of patterns of files/directories to be archived. * The variable hasn't been renamed yet for compatibility reasons @@ -131,13 +137,14 @@ public Boolean getDebug() { } @DataBoundConstructor - public TestflightRecorder(String tokenPairName, Secret apiToken, Secret teamToken, Boolean notifyTeam, String buildNotes, Boolean appendChangelog, String filePath, String dsymPath, String lists, Boolean replace, String proxyHost, String proxyUser, String proxyPass, int proxyPort, Boolean debug, TestflightTeam [] additionalTeams) { + public TestflightRecorder(String tokenPairName, Secret apiToken, Secret teamToken, Boolean notifyTeam, String buildNotes, Boolean appendChangelog, Boolean combineChangelogSinceLastSuccess, String filePath, String dsymPath, String lists, Boolean replace, String proxyHost, String proxyUser, String proxyPass, int proxyPort, Boolean debug, TestflightTeam [] additionalTeams) { this.tokenPairName = tokenPairName; this.apiToken = apiToken; this.teamToken = teamToken; this.notifyTeam = notifyTeam; this.buildNotes = buildNotes; this.appendChangelog = appendChangelog; + this.combineChangelogSinceLastSuccess = combineChangelogSinceLastSuccess; this.filePath = filePath; this.dsymPath = dsymPath; this.replace = replace; @@ -257,7 +264,8 @@ private TestflightUploader.UploadRequest createPartialUploadRequest(TestflightTe ur.filePaths = vars.expand(StringUtils.trim(team.getFilePath())); ur.dsymPath = vars.expand(StringUtils.trim(team.getDsymPath())); ur.apiToken = vars.expand(Secret.toString(tokenPair.getApiToken())); - List entries = getChangeSetEntriesSinceLastSuccess(build); + + List entries = combineChangelogSinceLastSuccess ? getChangeSetEntriesSinceLastSuccess(build) : getChangeSetEntries(build); ur.buildNotes = createBuildNotes(vars.expand(buildNotes), entries); ur.lists = vars.expand(lists); ur.notifyTeam = notifyTeam; @@ -272,17 +280,34 @@ private TestflightUploader.UploadRequest createPartialUploadRequest(TestflightTe return ur; } - private List getChangeSetEntriesSinceLastSuccess(AbstractBuild build) { + private List getChangeSetEntries(AbstractBuild build) { ArrayList entries = new ArrayList(); + ChangeLogSet changeSet = build.getChangeSet(); + for (Entry entry : changeSet) { + entries.add(entry); + } + return entries; + } - do { - ChangeLogSet changeSet = build.getChangeSet(); + private List getChangeSetEntriesSinceLastSuccess(AbstractBuild build) { + ArrayList entries = new ArrayList(); - for (Entry entry : changeSet) { - entries.add(entry); + //The next build after the last successful one should either be a failure, or the current build. + //It could be in progress I guess, but we should probably just append the changelog anyway. + AbstractBuild lastBuild = build.getPreviousSuccessfulBuild().getNextBuild(); + while(lastBuild != null) { + if(lastBuild.hasChangeSetComputed()) { + ChangeLogSet changeSet = lastBuild.getChangeSet(); + for (Entry entry : changeSet) { + entries.add(entry); + } } - build = build.getPreviousBuild(); - } while (build != null && build.getResult().isWorseThan(Result.SUCCESS)); + lastBuild = lastBuild.getNextBuild(); + + if(lastBuild.equals(build)) + break; + } + return entries; } diff --git a/src/main/resources/testflight/TestflightRecorder/config.jelly b/src/main/resources/testflight/TestflightRecorder/config.jelly index 64130e1..2f89749 100644 --- a/src/main/resources/testflight/TestflightRecorder/config.jelly +++ b/src/main/resources/testflight/TestflightRecorder/config.jelly @@ -54,6 +54,9 @@ + + + From f2208638c3b76df3f35f0446e27dfff6bbd2b5a7 Mon Sep 17 00:00:00 2001 From: Dylan Sale Date: Mon, 19 Aug 2013 23:03:42 +0930 Subject: [PATCH 3/3] fixed edge case bugs where the current changes were not being sent --- .../java/testflight/TestflightRecorder.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main/java/testflight/TestflightRecorder.java b/src/main/java/testflight/TestflightRecorder.java index a7c0478..dfa5f6d 100644 --- a/src/main/java/testflight/TestflightRecorder.java +++ b/src/main/java/testflight/TestflightRecorder.java @@ -294,18 +294,27 @@ private List getChangeSetEntriesSinceLastSuccess(AbstractBuild buil //The next build after the last successful one should either be a failure, or the current build. //It could be in progress I guess, but we should probably just append the changelog anyway. - AbstractBuild lastBuild = build.getPreviousSuccessfulBuild().getNextBuild(); + AbstractBuild lastBuild = build.getPreviousSuccessfulBuild(); + if(lastBuild != null) { + lastBuild = lastBuild.getNextBuild(); + } + else { + return getChangeSetEntries(build); + } + while(lastBuild != null) { - if(lastBuild.hasChangeSetComputed()) { - ChangeLogSet changeSet = lastBuild.getChangeSet(); + + ChangeLogSet changeSet = lastBuild.getChangeSet(); + if(changeSet != null) { for (Entry entry : changeSet) { entries.add(entry); } } - lastBuild = lastBuild.getNextBuild(); if(lastBuild.equals(build)) break; + + lastBuild = lastBuild.getNextBuild(); } return entries;