diff --git a/scm-core/src/main/java/sonia/scm/repository/Added.java b/scm-core/src/main/java/sonia/scm/repository/Added.java new file mode 100644 index 0000000000..a5ccf848b4 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/repository/Added.java @@ -0,0 +1,43 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.repository; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.stream.Stream; + +import static java.util.stream.Stream.of; + +@Getter +@AllArgsConstructor +public class Added extends Modification { + private final String path; + + @Override + Stream getEffectedPaths() { + return of(path); + } +} diff --git a/scm-core/src/main/java/sonia/scm/repository/Copied.java b/scm-core/src/main/java/sonia/scm/repository/Copied.java new file mode 100644 index 0000000000..841136a035 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/repository/Copied.java @@ -0,0 +1,44 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.repository; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.stream.Stream; + +import static java.util.stream.Stream.of; + +@Getter +@AllArgsConstructor +public class Copied extends Modification { + private final String sourcePath; + private final String targetPath; + + @Override + Stream getEffectedPaths() { + return of(targetPath); + } +} diff --git a/scm-core/src/main/java/sonia/scm/repository/EffectedPath.java b/scm-core/src/main/java/sonia/scm/repository/EffectedPath.java new file mode 100644 index 0000000000..e591a47ac5 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/repository/EffectedPath.java @@ -0,0 +1,31 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.repository; + +import java.util.stream.Stream; + +abstract class EffectedPath { + abstract Stream getEffectedPaths(); +} diff --git a/scm-core/src/main/java/sonia/scm/repository/Modification.java b/scm-core/src/main/java/sonia/scm/repository/Modification.java index 2b675230fa..7bb41e0573 100644 --- a/scm-core/src/main/java/sonia/scm/repository/Modification.java +++ b/scm-core/src/main/java/sonia/scm/repository/Modification.java @@ -24,74 +24,7 @@ package sonia.scm.repository; -import lombok.AllArgsConstructor; -import lombok.Getter; - import java.io.Serializable; -import java.util.stream.Stream; -import static java.util.stream.Stream.of; - -public interface Modification extends EffectedPath, Serializable { - - @Getter - @AllArgsConstructor - class Added implements Modification { - private final String path; - - @Override - public Stream getEffectedPaths() { - return of(path); - } - } - - @Getter - @AllArgsConstructor - class Removed implements Modification { - private final String path; - - @Override - public Stream getEffectedPaths() { - return of(path); - } - } - - @Getter - @AllArgsConstructor - class Modified implements Modification { - private final String path; - - @Override - public Stream getEffectedPaths() { - return of(path); - } - } - - @Getter - @AllArgsConstructor - class Renamed implements Modification { - private final String oldPath; - private final String newPath; - - @Override - public Stream getEffectedPaths() { - return of(oldPath, newPath); - } - } - - @Getter - @AllArgsConstructor - class Copied implements Modification { - private final String sourcePath; - private final String targetPath; - - @Override - public Stream getEffectedPaths() { - return of(targetPath); - } - } -} - -interface EffectedPath { - Stream getEffectedPaths(); +public abstract class Modification extends EffectedPath implements Serializable { } diff --git a/scm-core/src/main/java/sonia/scm/repository/Modifications.java b/scm-core/src/main/java/sonia/scm/repository/Modifications.java index 891bf50216..42f1d85aef 100644 --- a/scm-core/src/main/java/sonia/scm/repository/Modifications.java +++ b/scm-core/src/main/java/sonia/scm/repository/Modifications.java @@ -64,38 +64,38 @@ public class Modifications implements Serializable { return modifications.stream().flatMap(Modification::getEffectedPaths); } - public List getAdded() { + public List getAdded() { return modifications.stream() - .filter(m -> m instanceof Modification.Added) - .map(m -> (Modification.Added) m) + .filter(m -> m instanceof Added) + .map(m -> (Added) m) .collect(toList()); } - public List getRemoved() { + public List getRemoved() { return modifications.stream() - .filter(m -> m instanceof Modification.Removed) - .map(m -> (Modification.Removed) m) + .filter(m -> m instanceof Removed) + .map(m -> (Removed) m) .collect(toList()); } - public List getModified() { + public List getModified() { return modifications.stream() - .filter(m -> m instanceof Modification.Modified) - .map(m -> (Modification.Modified) m) + .filter(m -> m instanceof Modified) + .map(m -> (Modified) m) .collect(toList()); } - public List getRenamed() { + public List getRenamed() { return modifications.stream() - .filter(m -> m instanceof Modification.Renamed) - .map(m -> (Modification.Renamed) m) + .filter(m -> m instanceof Renamed) + .map(m -> (Renamed) m) .collect(toList()); } - public List getCopied() { + public List getCopied() { return modifications.stream() - .filter(m -> m instanceof Modification.Copied) - .map(m -> (Modification.Copied) m) + .filter(m -> m instanceof Copied) + .map(m -> (Copied) m) .collect(toList()); } } diff --git a/scm-core/src/main/java/sonia/scm/repository/Modified.java b/scm-core/src/main/java/sonia/scm/repository/Modified.java new file mode 100644 index 0000000000..6c0d7150a7 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/repository/Modified.java @@ -0,0 +1,43 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.repository; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.stream.Stream; + +import static java.util.stream.Stream.of; + +@Getter +@AllArgsConstructor +public class Modified extends Modification { + private final String path; + + @Override + Stream getEffectedPaths() { + return of(path); + } +} diff --git a/scm-core/src/main/java/sonia/scm/repository/Removed.java b/scm-core/src/main/java/sonia/scm/repository/Removed.java new file mode 100644 index 0000000000..7b8e23021f --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/repository/Removed.java @@ -0,0 +1,43 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.repository; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.stream.Stream; + +import static java.util.stream.Stream.of; + +@Getter +@AllArgsConstructor +public class Removed extends Modification { + private final String path; + + @Override + Stream getEffectedPaths() { + return of(path); + } +} diff --git a/scm-core/src/main/java/sonia/scm/repository/Renamed.java b/scm-core/src/main/java/sonia/scm/repository/Renamed.java new file mode 100644 index 0000000000..d00c01c6b6 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/repository/Renamed.java @@ -0,0 +1,44 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.repository; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.stream.Stream; + +import static java.util.stream.Stream.of; + +@Getter +@AllArgsConstructor +public class Renamed extends Modification { + private final String oldPath; + private final String newPath; + + @Override + Stream getEffectedPaths() { + return of(oldPath, newPath); + } +} diff --git a/scm-core/src/test/java/sonia/scm/repository/ModificationsTest.java b/scm-core/src/test/java/sonia/scm/repository/ModificationsTest.java index 2832d8f5ef..f6023248e4 100644 --- a/scm-core/src/test/java/sonia/scm/repository/ModificationsTest.java +++ b/scm-core/src/test/java/sonia/scm/repository/ModificationsTest.java @@ -24,20 +24,18 @@ package sonia.scm.repository; -import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.*; class ModificationsTest { public static final Modifications MODIFICATIONS = new Modifications("123", - new Modification.Added("added"), - new Modification.Removed("removed"), - new Modification.Modified("modified"), - new Modification.Renamed("rename from", "rename to"), - new Modification.Copied("copy from", "copy to") + new Added("added"), + new Removed("removed"), + new Modified("modified"), + new Renamed("rename from", "rename to"), + new Copied("copy from", "copy to") ); @Test diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitModificationsCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitModificationsCommand.java index d04e8293ca..918d276148 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitModificationsCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitModificationsCommand.java @@ -32,10 +32,14 @@ import org.eclipse.jgit.revwalk.RevTree; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.treewalk.EmptyTreeIterator; import org.eclipse.jgit.treewalk.TreeWalk; +import sonia.scm.repository.Added; import sonia.scm.repository.GitUtil; import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.Modification; import sonia.scm.repository.Modifications; +import sonia.scm.repository.Modified; +import sonia.scm.repository.Removed; +import sonia.scm.repository.Renamed; import java.io.IOException; import java.text.MessageFormat; @@ -117,13 +121,13 @@ public class GitModificationsCommand extends AbstractGitCommand implements Modif DiffEntry.ChangeType type = entry.getChangeType(); switch (type) { case ADD: - return new Modification.Added(entry.getNewPath()); + return new Added(entry.getNewPath()); case MODIFY: - return new Modification.Modified(entry.getNewPath()); + return new Modified(entry.getNewPath()); case DELETE: - return new Modification.Removed(entry.getOldPath()); + return new Removed(entry.getOldPath()); case RENAME: - return new Modification.Renamed(entry.getOldPath(), entry.getNewPath()); + return new Renamed(entry.getOldPath(), entry.getNewPath()); default: throw new UnsupportedModificationTypeException(entity(repository), MessageFormat.format("The modification type: {0} is not supported.", type)); } diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommandTest.java index f8e7be6fd4..ed21f683fb 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommandTest.java @@ -39,8 +39,8 @@ import org.junit.Test; import org.junit.jupiter.api.Assertions; import sonia.scm.NoChangesMadeException; import sonia.scm.NotFoundException; +import sonia.scm.repository.Added; import sonia.scm.repository.GitWorkdirFactory; -import sonia.scm.repository.Modification; import sonia.scm.repository.Person; import sonia.scm.repository.api.MergeCommandResult; import sonia.scm.repository.api.MergeStrategy; @@ -319,7 +319,7 @@ public class GitMergeCommandTest extends AbstractGitCommandTestBase { assertThat(message).isEqualTo("squash three commits"); GitModificationsCommand modificationsCommand = new GitModificationsCommand(createContext()); - List changes = modificationsCommand.getModifications("master").getAdded(); + List changes = modificationsCommand.getModifications("master").getAdded(); assertThat(changes.size()).isEqualTo(3); } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/AbstractChangesetCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/AbstractChangesetCommand.java index be2172f2fd..18ba2c8390 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/AbstractChangesetCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/AbstractChangesetCommand.java @@ -34,11 +34,14 @@ import com.aragost.javahg.internals.RuntimeIOException; import com.aragost.javahg.internals.Utils; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; +import sonia.scm.repository.Added; import sonia.scm.repository.Changeset; import sonia.scm.repository.HgConfig; import sonia.scm.repository.Modification; import sonia.scm.repository.Modifications; +import sonia.scm.repository.Modified; import sonia.scm.repository.Person; +import sonia.scm.repository.Removed; import java.io.IOException; import java.util.ArrayList; @@ -273,11 +276,11 @@ public abstract class AbstractChangesetCommand extends AbstractCommand String line = in.textUpTo('\n'); while (line.length() > 0) { if (line.startsWith("a ")) { - modifications.add(new Modification.Added(line.substring(2))); + modifications.add(new Added(line.substring(2))); } else if (line.startsWith("m ")) { - modifications.add(new Modification.Modified(line.substring(2))); + modifications.add(new Modified(line.substring(2))); } else if (line.startsWith("d ")) { - modifications.add(new Modification.Removed(line.substring(2))); + modifications.add(new Removed(line.substring(2))); } line = in.textUpTo('\n'); } diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnUtil.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnUtil.java index 40a5ee5a69..26a851d1e2 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnUtil.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnUtil.java @@ -145,14 +145,14 @@ public final class SvnUtil switch (type) { case SVNLogEntryPath.TYPE_ADDED : - return Optional.of(new Modification.Added(path)); + return Optional.of(new Added(path)); case SVNLogEntryPath.TYPE_DELETED : - return Optional.of(new Modification.Removed(path)); + return Optional.of(new Removed(path)); case TYPE_UPDATED : case SVNLogEntryPath.TYPE_MODIFIED : - return Optional.of(new Modification.Modified(path)); + return Optional.of(new Modified(path)); default : logger.debug("unknown modification type {}", type); diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ModificationsToDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ModificationsToDtoMapper.java index 0e9f169f53..ec545402b7 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ModificationsToDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ModificationsToDtoMapper.java @@ -30,8 +30,11 @@ import org.mapstruct.Context; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.MappingTarget; -import sonia.scm.repository.Modification; +import sonia.scm.repository.Added; import sonia.scm.repository.Modifications; +import sonia.scm.repository.Modified; +import sonia.scm.repository.Removed; +import sonia.scm.repository.Renamed; import sonia.scm.repository.Repository; import javax.inject.Inject; @@ -54,17 +57,17 @@ public abstract class ModificationsToDtoMapper { target.add(linksBuilder.build()); } - String map(Modification.Added added) { + String map(Added added) { return added.getPath(); } - String map(Modification.Removed removed) { + String map(Removed removed) { return removed.getPath(); } - String map(Modification.Modified modified) { + String map(Modified modified) { return modified.getPath(); } - abstract ModificationsDto.RenamedDto map(Modification.Renamed renamed); + abstract ModificationsDto.RenamedDto map(Renamed renamed); } diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ModificationsResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ModificationsResourceTest.java index 3697330587..9c6a3b984c 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ModificationsResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ModificationsResourceTest.java @@ -39,12 +39,12 @@ import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import sonia.scm.repository.Added; import sonia.scm.repository.InternalRepositoryException; -import sonia.scm.repository.Modification.Added; -import sonia.scm.repository.Modification.Modified; -import sonia.scm.repository.Modification.Removed; import sonia.scm.repository.Modifications; import sonia.scm.repository.NamespaceAndName; +import sonia.scm.repository.Removed; +import sonia.scm.repository.Modified; import sonia.scm.repository.Repository; import sonia.scm.repository.api.ModificationsCommandBuilder; import sonia.scm.repository.api.RepositoryService;