You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
2.6 KiB
97 lines
2.6 KiB
# -*- coding: utf-8 -*-
|
|
# Copyright 2019 The ChromiumOS Authors
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
"""Utilities for operations on files."""
|
|
|
|
|
|
import errno
|
|
import os
|
|
import shutil
|
|
|
|
from cros_utils import command_executer
|
|
|
|
|
|
class FileUtils(object):
|
|
"""Utilities for operations on files."""
|
|
|
|
_instance = None
|
|
DRY_RUN = False
|
|
|
|
@classmethod
|
|
def Configure(cls, dry_run):
|
|
cls.DRY_RUN = dry_run
|
|
|
|
def __new__(cls, *args, **kwargs):
|
|
if not cls._instance:
|
|
if cls.DRY_RUN:
|
|
cls._instance = super(FileUtils, cls).__new__(
|
|
MockFileUtils, *args, **kwargs
|
|
)
|
|
else:
|
|
cls._instance = super(FileUtils, cls).__new__(
|
|
cls, *args, **kwargs
|
|
)
|
|
return cls._instance
|
|
|
|
def Md5File(self, filename, log_level="verbose", _block_size=2 ** 10):
|
|
command = "md5sum %s" % filename
|
|
ce = command_executer.GetCommandExecuter(log_level=log_level)
|
|
ret, out, _ = ce.RunCommandWOutput(command)
|
|
if ret:
|
|
raise RuntimeError("Could not run md5sum on: %s" % filename)
|
|
|
|
return out.strip().split()[0]
|
|
|
|
def CanonicalizeChromeOSRoot(self, chromeos_root):
|
|
chromeos_root = os.path.expanduser(chromeos_root)
|
|
if os.path.isdir(os.path.join(chromeos_root, "chromite")):
|
|
return chromeos_root
|
|
else:
|
|
return None
|
|
|
|
def ChromeOSRootFromImage(self, chromeos_image):
|
|
chromeos_root = os.path.join(
|
|
os.path.dirname(chromeos_image), "../../../../.."
|
|
)
|
|
return self.CanonicalizeChromeOSRoot(chromeos_root)
|
|
|
|
def MkDirP(self, path):
|
|
try:
|
|
os.makedirs(path)
|
|
except OSError as exc:
|
|
if exc.errno == errno.EEXIST:
|
|
pass
|
|
else:
|
|
raise
|
|
|
|
def RmDir(self, path):
|
|
shutil.rmtree(path, ignore_errors=True)
|
|
|
|
def WriteFile(self, path, contents):
|
|
with open(path, "w", encoding="utf-8") as f:
|
|
f.write(contents)
|
|
|
|
|
|
class MockFileUtils(FileUtils):
|
|
"""Mock class for file utilities."""
|
|
|
|
def Md5File(self, filename, log_level="verbose", _block_size=2 ** 10):
|
|
return "d41d8cd98f00b204e9800998ecf8427e"
|
|
|
|
def CanonicalizeChromeOSRoot(self, chromeos_root):
|
|
return "/tmp/chromeos_root"
|
|
|
|
def ChromeOSRootFromImage(self, chromeos_image):
|
|
return "/tmp/chromeos_root"
|
|
|
|
def RmDir(self, path):
|
|
pass
|
|
|
|
def MkDirP(self, path):
|
|
pass
|
|
|
|
def WriteFile(self, path, contents):
|
|
pass
|