// Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROMEOS_PLATFORM_UPDATE_ENGINE_METADATA_H_
#define CHROMEOS_PLATFORM_UPDATE_ENGINE_METADATA_H_

#include "update_engine/delta_diff_generator.h"
#include "update_engine/graph_types.h"

namespace chromeos_update_engine {

class Metadata {
 public:
  // Reads metadata from old image and new image and determines
  // the smallest way to encode the metadata for the diff.
  // If there's no change in the metadata, it creates a MOVE
  // operation. If there is a change, the smallest of REPLACE, REPLACE_BZ,
  // or BSDIFF wins. It writes the diff to data_fd and updates data_file_size
  // accordingly. It also adds the required operation to the graph and adds the
  // metadata extents to blocks.
  // Returns true on success.
  static bool DeltaReadMetadata(Graph* graph,
                                std::vector<DeltaDiffGenerator::Block>* blocks,
                                const std::string& old_image,
                                const std::string& new_image,
                                int data_fd,
                                off_t* data_file_size);

 private:
  // This should never be constructed.
  DISALLOW_IMPLICIT_CONSTRUCTORS(Metadata);
};

};  // namespace chromeos_update_engine

#endif  // CHROMEOS_PLATFORM_UPDATE_ENGINE_METADATA_H_
