use of com.google.copybara.feedback.FinishHookContext in project copybara by google.
the class WorkflowRunHelper method migrate.
/**
* Performs a full migration, including checking out files from the origin, deleting excluded
* files, transforming the code, and writing to the destination. This writes to the destination
* exactly once.
*
* @param rev revision to the version which will be written to the destination
* @param lastRev last revision that was migrated
* @param processConsole console to use to print progress messages
* @param metadata metadata of the change to be migrated
* @param changes changes included in this migration
* @param destinationBaseline it not null, use this baseline in the destination
* @param changeIdentityRevision the revision to be used for computing the change identity
*/
ImmutableList<DestinationEffect> migrate(O rev, @Nullable O lastRev, Console processConsole, Metadata metadata, Changes changes, @Nullable String destinationBaseline, @Nullable O changeIdentityRevision) throws IOException, RepoException, ValidationException {
ImmutableList<DestinationEffect> effects = ImmutableList.of();
boolean callPerMigrationHook = true;
try {
eventMonitor().onChangeMigrationStarted(new ChangeMigrationStartedEvent());
effects = doMigrate(rev, lastRev, processConsole, metadata, changes, destinationBaseline, changeIdentityRevision);
return effects;
} catch (EmptyChangeException empty) {
effects = ImmutableList.of(new DestinationEffect(Type.NOOP, empty.getMessage(), changes.getCurrent(), /*destinationRef=*/
null, ImmutableList.of()));
throw empty;
} catch (ValidationException | IOException | RepoException | RuntimeException e) {
effects = ImmutableList.of(new DestinationEffect(Type.ERROR, "Errors happened during the migration", changes.getCurrent(), /*destinationRef=*/
null, ImmutableList.of(e.getMessage() != null ? e.getMessage() : e.toString())));
callPerMigrationHook = e instanceof ValidationException;
throw e;
} finally {
eventMonitor().onChangeMigrationFinished(new ChangeMigrationFinishedEvent(effects));
if (callPerMigrationHook) {
FinishHookContext finishHookContext = new FinishHookContext(getOriginReader().getFeedbackEndPoint(), getDestinationWriter().getFeedbackEndPoint(), effects, resolvedRef, new SkylarkConsole(getConsole()));
try (ProfilerTask ignored = profiler().start("finish_hooks")) {
for (Action action : workflow.getAfterMigrationActions()) {
try (ProfilerTask ignored2 = profiler().start(action.getName())) {
logger.log(Level.INFO, "Running after migration hook: " + action.getName());
action.run(finishHookContext);
}
}
}
}
}
}
use of com.google.copybara.feedback.FinishHookContext in project copybara by google.
the class Workflow method runHooks.
ImmutableList<DestinationEffect> runHooks(ImmutableList<DestinationEffect> effects, ImmutableList<Action> actions, LazyResourceLoader<Endpoint> originEndpoint, LazyResourceLoader<Endpoint> destinationEndpoint, Revision resolvedRef) throws ValidationException, RepoException {
SkylarkConsole console = new SkylarkConsole(getConsole());
List<DestinationEffect> hookDestinationEffects = new ArrayList<>();
for (Action action : actions) {
try (ProfilerTask ignored2 = profiler().start(action.getName())) {
logger.log(Level.INFO, "Running after migration hook: " + action.getName());
FinishHookContext context = new FinishHookContext(action, originEndpoint, destinationEndpoint, ImmutableList.copyOf(effects), generalOptions.labels, resolvedRef, console);
action.run(context);
hookDestinationEffects.addAll(context.getNewDestinationEffects());
}
}
return ImmutableList.<DestinationEffect>builder().addAll(effects).addAll(hookDestinationEffects).build();
}
Aggregations