Schedule/parse from commit instead of ref To be able to requeue SCC creation from a patchset ref we need to save the commit and not the ref, to later parse it in the EventParser. Solves: Jira GER-1715 Change-Id: Ibd974347e5211c68279e17948d9b9647c2cf37eb
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParser.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParser.java index 771816c..34ac69e 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParser.java +++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParser.java
@@ -119,19 +119,30 @@ } /** - * Creates SCC events from a ref. ref can be a branch or a patch-set ref. + * Creates SCC events for all commits reachable from branch. I.e. create SCCs for already merged + * commit that are missing SCCs. * - * @param repoName - * @param ref - schedule event creation for commits reachable from this ref. + * @param repoName - the repository containing the commits to create events from. * @param targetBranch - used to populate data.gitIdentifier.branch. */ - public void createAndScheduleSccFromRef(String repoName, String ref, String targetBranch) { - ObjectId tip = getTipOf(repoName, ref); + public void createAndScheduleSccFromBranch(String repoName, String targetBranch) { + ObjectId tip = getTipOf(repoName, targetBranch); if (tip == null) { return; } + createAndScheduleSccFromCommit(repoName, targetBranch, tip.getName()); + } - SourceChangeEventKey scc = SourceChangeEventKey.sccKey(repoName, targetBranch, tip.getName()); + /** + * Creates SCC events for all commits reachable from commit. + * + * @param repoName - the repository containing the commits to create events from. + * @param targetBranch - used to populate data.gitIdentifier.branch. + * @param commit - create events from commits reachable from commit. + */ + public void createAndScheduleSccFromCommit(String repoName, String targetBranch, String commit) { + + SourceChangeEventKey scc = SourceChangeEventKey.sccKey(repoName, targetBranch, commit); try { createAndScheduleMissingSccs(scc); } catch (IOException
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParsingQueue.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParsingQueue.java index 3c7b422..e477baa 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParsingQueue.java +++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParsingQueue.java
@@ -69,35 +69,45 @@ } /** - * Schedule SCC creation from a branch ref. This is the special case where the ref that the - * commits, that the events that are supposed to be created from, are reachable from is the same - * as the target Branch. + * Schedules SCC creation for all commits reachable from branchRef. * - * @param repoName - * @param branch + * @param repoName - the repository containing the commits to create events from. + * @param branchRef - create events for commits reachable from tip of branchRef. */ - public void scheduleSccCreation(String repoName, String branch) { - scheduleSccCreation(repoName, branch, branch); - } - - /** - * Schedule SCC creation from a ref. ref can be a branch or a patch-set ref. - * - * @param repoName - * @param ref - schedule event creation for commits reachable from this ref. - * @param targetBranch - used to populate data.gitIdentifier.branch. - */ - public void scheduleSccCreation(String repoName, String ref, String targetBranch) { + public void scheduleSccCreation(String repoName, String branchRef) { schedule( - new EventParsingWorker(SCC, repoName, targetBranch, null) { + new EventParsingWorker(SCC, repoName, branchRef, null) { @Override public void doRun() { try { - eventParser.createAndScheduleSccFromRef(repoName, ref, targetBranch); + eventParser.createAndScheduleSccFromBranch(repoName, branchRef); } catch (Exception e) { logger.atSevere().withCause(e).log( - "Failed to create SCC for %s:%s:%s.", repoName, ref, targetBranch); + "Failed to create SCC for %s:%s.", repoName, branchRef); + } + } + }); + } + + /** + * Schedule SCC creation for all commits reachable from commit. + * + * @param repoName - the repository containing the commits to create events from. + * @param branchRef - used to populate data.gitIdentifier.branch. + * @param commit - create events from commits reachable from commit. + */ + public void scheduleSccCreation(String repoName, String branchRef, String commit) { + schedule( + new EventParsingWorker(SCC, repoName, branchRef, commit) { + + @Override + public void doRun() { + try { + eventParser.createAndScheduleSccFromCommit(repoName, branchRef, commit); + } catch (Exception e) { + logger.atSevere().withCause(e).log( + "Failed to create SCC for %s:%s.", repoName, branchRef); } } }); @@ -126,17 +136,17 @@ }); } - public void scheduleScsCreation(String repoName, String branch) { + public void scheduleScsCreation(String repoName, String branchRef) { schedule( - new EventParsingWorker(SCS, repoName, branch, null) { + new EventParsingWorker(SCS, repoName, branchRef, null) { @Override public void doRun() { try { - eventParser.createAndScheduleMissingScssFromBranch(repoName, branch); + eventParser.createAndScheduleMissingScssFromBranch(repoName, branchRef); } catch (Exception e) { logger.atSevere().withCause(e).log( - "Failed to create SCS for %s:%s", repoName, branch); + "Failed to create SCS for %s:%s", repoName, branchRef); } } });
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/rest/CreateSccs.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/rest/CreateSccs.java index 1f5deb6..1f4416e 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/rest/CreateSccs.java +++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/rest/CreateSccs.java
@@ -60,7 +60,7 @@ .findFirst() .map(c -> c.change().getDest().branch()); if (targetBranch.isPresent()) { - queue.scheduleSccCreation(resource.getName(), resource.getRef(), targetBranch.get()); + queue.scheduleSccCreation(resource.getName(), targetBranch.get(), resource.getRevision()); return EventCreationResponse.scc(resource, targetBranch.get()); } throw new BadRequestException(