Package org.vafer.jdeb

Source Code of org.vafer.jdeb.ChangesFileBuilder

/*
* Copyright 2014 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.vafer.jdeb;

import java.io.File;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Date;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.output.NullOutputStream;
import org.vafer.jdeb.changes.ChangesProvider;
import org.vafer.jdeb.debian.BinaryPackageControlFile;
import org.vafer.jdeb.debian.ChangesFile;
import org.vafer.jdeb.utils.InformationOutputStream;

/**
* Builds the Debian changes file.
*/
class ChangesFileBuilder {

    public ChangesFile createChanges(BinaryPackageControlFile packageControlFile, File binaryPackage, ChangesProvider changesProvider) throws IOException, PackagingException {

        ChangesFile changesFile = new ChangesFile();
        changesFile.setChanges(changesProvider.getChangesSets());
        changesFile.initialize(packageControlFile);

        changesFile.set("Date", ChangesFile.formatDate(new Date()));
       
        try {
            // compute the checksums of the binary package
            InformationOutputStream md5output = new InformationOutputStream(new NullOutputStream(), MessageDigest.getInstance("MD5"));
            InformationOutputStream sha1output = new InformationOutputStream(md5output, MessageDigest.getInstance("SHA1"));
            InformationOutputStream sha256output = new InformationOutputStream(sha1output, MessageDigest.getInstance("SHA-256"));
           
            FileUtils.copyFile(binaryPackage, sha256output);
           
            // Checksums-Sha1:
            //  56ef4c6249dc3567fd2967f809c42d1f9b61adf7 45964 jdeb.deb
            changesFile.set("Checksums-Sha1", sha1output.getHexDigest() + " " + binaryPackage.length() + " " + binaryPackage.getName());
           
            // Checksums-Sha256:
            //  38c6fa274eb9299a69b739bcbdbd05c7ffd1d8d6472f4245ed732a25c0e5d616 45964 jdeb.deb
            changesFile.set("Checksums-Sha256", sha256output.getHexDigest() + " " + binaryPackage.length() + " " + binaryPackage.getName());
           
            StringBuilder files = new StringBuilder(md5output.getHexDigest());
            files.append(' ').append(binaryPackage.length());
            files.append(' ').append(packageControlFile.get("Section"));
            files.append(' ').append(packageControlFile.get("Priority"));
            files.append(' ').append(binaryPackage.getName());
            changesFile.set("Files", files.toString());
           
        } catch (NoSuchAlgorithmException e) {
            throw new PackagingException("Unable to compute the checksums for " + binaryPackage, e);
        }
       
        if (!changesFile.isValid()) {
            throw new PackagingException("Changes file fields are invalid " + changesFile.invalidFields() +
                ". The following fields are mandatory: " + changesFile.getMandatoryFields() +
                ". Please check your pom.xml/build.xml and your control file.");
        }
       
        return changesFile;
    }
}
TOP

Related Classes of org.vafer.jdeb.ChangesFileBuilder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.