/** * This file is part of git-as-svn. It is subject to the license terms * in the LICENSE file found in the top-level directory of this distribution * and at http://www.gnu.org/licenses/gpl-2.0.html. No part of git-as-svn, * including this file, may be copied, modified, propagated, or distributed * except according to the terms contained in the LICENSE file. */ package svnserver.repository.git; import org.eclipse.jgit.lib.ObjectChecker; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.ObjectInserter; import org.eclipse.jgit.lib.TreeFormatter; import org.jetbrains.annotations.NotNull; import org.tmatesoft.svn.core.SVNException; import java.io.IOException; import java.util.*; /** * Git tree updater. * * @author Artem V. Navrotskiy <bozaro@users.noreply.github.com> */ public class GitTreeUpdate { @NotNull private final String name; @NotNull private final Map<String, GitTreeEntry> entries; public GitTreeUpdate(@NotNull String name, @NotNull Iterable<GitTreeEntry> entries) { this.name = name; this.entries = new HashMap<>(); for (GitTreeEntry entry : entries) { this.entries.put(entry.getFileName(), entry); } } @NotNull public String getName() { return name; } @NotNull public Map<String, GitTreeEntry> getEntries() { return entries; } @NotNull public ObjectId buildTree(@NotNull ObjectInserter inserter) throws IOException, SVNException { final TreeFormatter treeBuilder = new TreeFormatter(); final List<GitTreeEntry> sortedEntries = new ArrayList<>(entries.values()); Collections.sort(sortedEntries); for (GitTreeEntry entry : sortedEntries) { treeBuilder.append(entry.getFileName(), entry.getFileMode(), entry.getObjectId().getObject()); } new ObjectChecker().checkTree(treeBuilder.toByteArray()); return inserter.insert(treeBuilder); } }