diff options
Diffstat (limited to 'install_action.h')
-rw-r--r-- | install_action.h | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/install_action.h b/install_action.h new file mode 100644 index 00000000..8bed6322 --- /dev/null +++ b/install_action.h @@ -0,0 +1,86 @@ +// Copyright (c) 2009 The Chromium 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_INSTALL_ACTION_H__ +#define CHROMEOS_PLATFORM_UPDATE_ENGINE_INSTALL_ACTION_H__ + +#include "base/scoped_ptr.h" +#include "update_engine/action.h" +#include "update_engine/delta_diff_parser.h" +#include "update_engine/install_plan.h" +#include "update_engine/update_metadata.pb.h" + +// The Install Action is responsible for ensuring the update that's been +// downloaded has been installed. This may be a no-op in the case of a full +// update, since those will be downloaded directly into the destination +// partition. However, for a delta update some work is required. + +// An InstallPlan struct must be passed to this action before PerformAction() +// is called so that this action knows if it's a delta update, and if so, +// what the paths are. + +// TODO(adlr): At the moment, InstallAction is synchronous. It should be +// updated to be asynchronous at some point. + +namespace chromeos_update_engine { + +class InstallAction; +class NoneType; + +template<> +class ActionTraits<InstallAction> { + public: + // Takes the InstallPlan for input + typedef InstallPlan InputObjectType; + // On success, puts the output device path on output + typedef std::string OutputObjectType; +}; + +class InstallAction : public Action<InstallAction> { + public: + InstallAction() {} + typedef ActionTraits<InstallAction>::InputObjectType InputObjectType; + typedef ActionTraits<InstallAction>::OutputObjectType OutputObjectType; + void PerformAction(); + + // This action is synchronous for now. + void TerminateProcessing() { CHECK(false); } + + // Debugging/logging + static std::string StaticType() { return "InstallAction"; } + std::string Type() const { return StaticType(); } + + private: + // Installs 'file' into mountpoint. 'path' is the path that 'file' + // should have when we reboot and mountpoint is root. + bool InstallFile(const std::string& mountpoint, + const DeltaArchiveManifest_File& file, + const std::string& path, + const DeltaDiffParser& parser) const; + // These are helpers for InstallFile. They focus on specific file types: + // Regular data files: + bool InstallFileRegularFile(const std::string& mountpoint, + const DeltaArchiveManifest_File& file, + const std::string& path, + const DeltaDiffParser& parser, + const bool exists) const; + // char/block devices, fifos, and sockets: + bool InstallFileSpecialFile(const std::string& mountpoint, + const DeltaArchiveManifest_File& file, + const std::string& path, + const DeltaDiffParser& parser, + const bool exists) const; + // symlinks: + bool InstallFileSymlink(const std::string& mountpoint, + const DeltaArchiveManifest_File& file, + const std::string& path, + const DeltaDiffParser& parser, + const bool exists) const; + + DISALLOW_COPY_AND_ASSIGN(InstallAction); +}; + +} // namespace chromeos_update_engine + +#endif // CHROMEOS_PLATFORM_UPDATE_ENGINE_INSTALL_ACTION_H__ |