Search in sources :

Example 1 with Config

use of com.google.copybara.config.Config in project copybara by google.

the class Copybara method run.

/**
 * Runs the migration specified by {@code migrationName}.
 */
public void run(Options options, ConfigLoader<?> configLoader, String migrationName, Path workdir, @Nullable String sourceRef) throws RepoException, ValidationException, IOException {
    Config config = loadConfig(options, configLoader, migrationName);
    Migration migration = config.getMigration(migrationName);
    if (configLoaderProvider == null) {
        this.migrationRanConsumer.accept(migration);
        migration.run(workdir, sourceRef);
        return;
    }
    // A safeguard, mirror workflows are not supported in the service anyway
    if (!(migration instanceof Workflow)) {
        throw new ValidationException("Flag --read-config-from-change is not supported for non-workflow migrations: %s", migrationName);
    }
    migrationRanConsumer.accept(migration);
    @SuppressWarnings("unchecked") Workflow<? extends Revision, ? extends Revision> workflow = (Workflow<? extends Revision, ? extends Revision>) migration;
    new ReadConfigFromChangeWorkflow<>(workflow, options, configLoaderProvider, configValidator).run(workdir, sourceRef);
}
Also used : ValidationException(com.google.copybara.exception.ValidationException) Config(com.google.copybara.config.Config) Migration(com.google.copybara.config.Migration)

Example 2 with Config

use of com.google.copybara.config.Config in project copybara by google.

the class MigrateCmd method loadConfig.

private Config loadConfig(Options options, ConfigLoader configLoader, String migrationName) throws IOException, ValidationException {
    GeneralOptions generalOptions = options.get(GeneralOptions.class);
    Console console = generalOptions.console();
    Config config = configLoader.load(console);
    console.progress("Validating configuration");
    ValidationResult result = configValidator.validate(config, migrationName);
    if (!result.hasErrors()) {
        return config;
    }
    result.getErrors().forEach(console::error);
    console.error("Configuration is invalid.");
    throw new ValidationException("Error validating configuration: Configuration is invalid.");
}
Also used : ValidationException(com.google.copybara.exception.ValidationException) Config(com.google.copybara.config.Config) Console(com.google.copybara.util.console.Console) ValidationResult(com.google.copybara.config.ValidationResult)

Example 3 with Config

use of com.google.copybara.config.Config in project copybara by google.

the class ValidateCmd method validate.

/**
 * Validates that the configuration is correct and that there is a valid migration specified by
 * {@code migrationName}.
 *
 * <p>Note that, besides validating the specific migration, all the configuration will be
 * validated syntactically.
 *
 * Returns true iff this configuration is valid.
 */
private ValidationResult validate(Options options, ConfigLoader configLoader, String migrationName) throws IOException {
    Console console = options.get(GeneralOptions.class).console();
    ValidationResult.Builder resultBuilder = new ValidationResult.Builder();
    try {
        Config config = configLoader.load(console);
        resultBuilder.append(configValidator.validate(config, migrationName));
    } catch (ValidationException e) {
        // The validate subcommand should not throw Validation exceptions but log a result
        StringBuilder error = new StringBuilder(e.getMessage()).append("\n");
        Throwable cause = e.getCause();
        while (cause != null) {
            error.append("  CAUSED BY: ").append(cause.getMessage()).append("\n");
            cause = cause.getCause();
        }
        resultBuilder.error(error.toString());
    }
    return resultBuilder.build();
}
Also used : ValidationException(com.google.copybara.exception.ValidationException) Config(com.google.copybara.config.Config) Console(com.google.copybara.util.console.Console) ValidationResult(com.google.copybara.config.ValidationResult)

Example 4 with Config

use of com.google.copybara.config.Config in project copybara by google.

the class InfoTest method setUp.

@Before
public void setUp() throws IOException {
    dummyOriginDescription = ImmutableMultimap.of("origin", "foo");
    dummyDestinationDescription = ImmutableMultimap.of("dest", "bar");
    console = new TestingConsole();
    temp = Files.createTempDirectory("temp");
    optionsBuilder = new OptionsBuilder();
    optionsBuilder.setConsole(console);
    optionsBuilder.setWorkdirToRealTempDir();
    skylark = new SkylarkTestExecutor(optionsBuilder);
    eventMonitor = new TestingEventMonitor();
    optionsBuilder.general.enableEventMonitor("just testing", eventMonitor);
    optionsBuilder.general.starlarkMode = StarlarkMode.STRICT.name();
    migration = mock(Migration.class);
    config = new Config(ImmutableMap.of("workflow", migration), temp.resolve("copy.bara.sky").toString(), ImmutableMap.of());
    configWithDeps = mock(ConfigWithDependencies.class);
    when(configWithDeps.getConfig()).thenAnswer(i -> config);
    configInfo = "" + "core.workflow(" + "    name = 'workflow'," + "    origin = git.origin(url = 'https://example.com/orig', ref = 'master')," + "    destination = git.destination(url = 'https://example.com/dest')," + "    authoring = authoring.overwrite('Foo <foo@example.com>')" + ")\n\n" + "";
    info = new InfoCmd((configPath, sourceRef) -> new ConfigLoader(skylark.createModuleSet(), skylark.createConfigFile("copy.bara.sky", configInfo), optionsBuilder.general.getStarlarkMode()) {

        @Override
        protected Config doLoadForRevision(Console console, Revision revision) throws ValidationException {
            try {
                return skylark.loadConfig(configPath);
            } catch (IOException e) {
                throw new AssertionError("Should not fail", e);
            }
        }
    }, getFakeContextProvider());
}
Also used : MigrationReference(com.google.copybara.Info.MigrationReference) DummyRevision(com.google.copybara.testing.DummyRevision) ZonedDateTime(java.time.ZonedDateTime) RunWith(org.junit.runner.RunWith) OptionsBuilder(com.google.copybara.testing.OptionsBuilder) MessageType(com.google.copybara.util.console.Message.MessageType) ImmutableList(com.google.common.collect.ImmutableList) Author(com.google.copybara.authoring.Author) ExitCode(com.google.copybara.util.ExitCode) Config(com.google.copybara.config.Config) ImmutableMultimap(com.google.common.collect.ImmutableMultimap) Path(java.nio.file.Path) Before(org.junit.Before) SkylarkTestExecutor(com.google.copybara.testing.SkylarkTestExecutor) ImmutableMap(com.google.common.collect.ImmutableMap) TestingConsole(com.google.copybara.util.console.testing.TestingConsole) Files(java.nio.file.Files) Migration(com.google.copybara.config.Migration) ValidationException(com.google.copybara.exception.ValidationException) ConfigWithDependencies(com.google.copybara.config.SkylarkParser.ConfigWithDependencies) Console(com.google.copybara.util.console.Console) IOException(java.io.IOException) Test(org.junit.Test) Mockito.when(org.mockito.Mockito.when) JUnit4(org.junit.runners.JUnit4) Truth.assertThat(com.google.common.truth.Truth.assertThat) Instant(java.time.Instant) ZoneId(java.time.ZoneId) Mockito(org.mockito.Mockito) TestingEventMonitor(com.google.copybara.testing.TestingEventMonitor) StarlarkMode(com.google.copybara.util.console.StarlarkMode) ImmutableListMultimap(com.google.common.collect.ImmutableListMultimap) SUCCESS(com.google.copybara.util.ExitCode.SUCCESS) Mockito.mock(org.mockito.Mockito.mock) Migration(com.google.copybara.config.Migration) Config(com.google.copybara.config.Config) IOException(java.io.IOException) OptionsBuilder(com.google.copybara.testing.OptionsBuilder) SkylarkTestExecutor(com.google.copybara.testing.SkylarkTestExecutor) TestingEventMonitor(com.google.copybara.testing.TestingEventMonitor) TestingConsole(com.google.copybara.util.console.testing.TestingConsole) DummyRevision(com.google.copybara.testing.DummyRevision) TestingConsole(com.google.copybara.util.console.testing.TestingConsole) Console(com.google.copybara.util.console.Console) ConfigWithDependencies(com.google.copybara.config.SkylarkParser.ConfigWithDependencies) Before(org.junit.Before)

Example 5 with Config

use of com.google.copybara.config.Config in project copybara by google.

the class ReadConfigFromChangeWorkflowTest method testWriterStateMaintained.

/**
 * A test that check that we can mutate the glob in iterative mode
 */
@SuppressWarnings("unchecked")
@Test
public void testWriterStateMaintained() throws Exception {
    options.workflowOptions.lastRevision = "0";
    String configCode = mutatingWorkflow("*");
    Config cfg = skylark.loadConfig(configCode);
    ConfigLoader constantConfigLoader = new ConfigLoader(skylark.createModuleSet(), skylark.createConfigFile("copy.bara.sky", configCode), options.general.getStarlarkMode()) {

        @Override
        protected Config doLoadForRevision(Console console, Revision revision) throws ValidationException {
            try {
                return skylark.loadConfig(mutatingWorkflow(revision.asString()));
            } catch (IOException e) {
                throw new AssertionError("Should not fail", e);
            }
        }
    };
    ReadConfigFromChangeWorkflow<?, ?> wf = new ReadConfigFromChangeWorkflow<>((Workflow) cfg.getMigration("default"), options.build(), constantConfigLoader, new ConfigValidator() {

        @Override
        public ValidationResult validate(Config config, String migrationName) {
            return ValidationResult.EMPTY;
        }
    });
    origin.singleFileChange(0, "base", "fileB", "b");
    origin.singleFileChange(1, "one", "file1", "b");
    origin.singleFileChange(2, "two", "file2", "b");
    origin.singleFileChange(3, "three", "file3", "b");
    wf.run(Files.createTempDirectory("workdir"), ImmutableList.of("3"));
    assertThat(destination.processed).hasSize(3);
    assertThat(destination.processed.get(0).getDestinationFiles().toString()).contains("file1");
    assertThat(destination.processed.get(0).getWorkdir()).containsExactly("file1", "b");
    assertThat(destination.processed.get(1).getDestinationFiles().toString()).contains("file2");
    assertThat(destination.processed.get(1).getWorkdir()).containsExactly("file2", "b");
    assertThat(destination.processed.get(2).getDestinationFiles().toString()).contains("file3");
    assertThat(destination.processed.get(2).getWorkdir()).containsExactly("file3", "b");
}
Also used : ConfigValidator(com.google.copybara.config.ConfigValidator) Config(com.google.copybara.config.Config) Console(com.google.copybara.util.console.Console) IOException(java.io.IOException) ValidationResult(com.google.copybara.config.ValidationResult) Test(org.junit.Test)

Aggregations

Config (com.google.copybara.config.Config)17 ValidationException (com.google.copybara.exception.ValidationException)8 Console (com.google.copybara.util.console.Console)8 Test (org.junit.Test)8 Migration (com.google.copybara.config.Migration)7 IOException (java.io.IOException)5 ImmutableList (com.google.common.collect.ImmutableList)4 MigrationReference (com.google.copybara.Info.MigrationReference)4 Author (com.google.copybara.authoring.Author)4 DummyRevision (com.google.copybara.testing.DummyRevision)4 OptionsBuilder (com.google.copybara.testing.OptionsBuilder)4 TestingEventMonitor (com.google.copybara.testing.TestingEventMonitor)4 MessageType (com.google.copybara.util.console.Message.MessageType)4 TestingConsole (com.google.copybara.util.console.testing.TestingConsole)4 Path (java.nio.file.Path)4 Before (org.junit.Before)4 ImmutableListMultimap (com.google.common.collect.ImmutableListMultimap)3 ImmutableMap (com.google.common.collect.ImmutableMap)3 ImmutableMultimap (com.google.common.collect.ImmutableMultimap)3 Truth.assertThat (com.google.common.truth.Truth.assertThat)3