| /* |
| * Copyright (c) 2020, Google LLC and others |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Distribution License v. 1.0 which is available at |
| * http://www.eclipse.org/org/documents/edl-v10.php. |
| * |
| * SPDX-License-Identifier: BSD-3-Clause |
| */ |
| package org.eclipse.jgit.internal.storage.dfs; |
| |
| import java.io.IOException; |
| import java.io.OutputStream; |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.jgit.internal.storage.pack.CachedPack; |
| import org.eclipse.jgit.lib.ProgressMonitor; |
| import org.eclipse.jgit.transport.BundleWriter; |
| |
| /** Writes {@link DfsRepository} to a Git bundle. */ |
| public class DfsBundleWriter { |
| /** |
| * Writes the entire {@link DfsRepository} to a Git bundle. |
| * <p> |
| * This method try to avoid traversing the pack files as much as possible |
| * and dumps all objects as-is to a Git bundle. |
| * |
| * @param pm |
| * progress monitor |
| * @param os |
| * Git bundle output |
| * @param db |
| * repository |
| * @throws IOException |
| * thrown if the output stream throws one. |
| */ |
| public static void writeEntireRepositoryAsBundle(ProgressMonitor pm, |
| OutputStream os, DfsRepository db) throws IOException { |
| BundleWriter bw = new BundleWriter(db); |
| db.getRefDatabase().getRefs().forEach(bw::include); |
| List<CachedPack> packs = new ArrayList<>(); |
| for (DfsPackFile p : db.getObjectDatabase().getPacks()) { |
| packs.add(new DfsCachedPack(p)); |
| } |
| bw.addObjectsAsIs(packs); |
| bw.writeBundle(pm, os); |
| } |
| |
| private DfsBundleWriter() { |
| } |
| } |