Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "tools/gn/filesystem_utils.h" | 5 #include "tools/gn/filesystem_utils.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/files/file_util.h" | 9 #include "base/files/file_util.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 669 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 680 std::string GetOutputSubdirName(const Label& toolchain_label, bool is_default) { | 680 std::string GetOutputSubdirName(const Label& toolchain_label, bool is_default) { |
| 681 // The default toolchain has no subdir. | 681 // The default toolchain has no subdir. |
| 682 if (is_default) | 682 if (is_default) |
| 683 return std::string(); | 683 return std::string(); |
| 684 | 684 |
| 685 // For now just assume the toolchain name is always a valid dir name. We may | 685 // For now just assume the toolchain name is always a valid dir name. We may |
| 686 // want to clean up the in the future. | 686 // want to clean up the in the future. |
| 687 return toolchain_label.name() + "/"; | 687 return toolchain_label.name() + "/"; |
| 688 } | 688 } |
| 689 | 689 |
| 690 bool ContentsEqual(const base::FilePath& file_path, std::stringstream* data) { | |
|
brettw
2016/02/02 20:50:23
I'm thinking it might be better if this took a std
Tomasz Moniuszko
2016/02/03 10:20:30
Done.
| |
| 691 // Compare file and stream sizes first. Quick and will save us some time if | |
| 692 // they are different sizes. | |
| 693 int64_t data_size = data->tellp(); | |
| 694 | |
| 695 int64_t file_size; | |
| 696 if (!base::GetFileSize(file_path, &file_size) || file_size != data_size) | |
| 697 return false; | |
| 698 | |
| 699 std::string file_data; | |
| 700 file_data.resize(file_size); | |
| 701 if (!base::ReadFileToString(file_path, &file_data)) | |
| 702 return false; | |
| 703 | |
| 704 return file_data == data->str(); | |
| 705 } | |
| 706 | |
| 707 bool WriteFileIfChanged(const base::FilePath& file_path, | |
| 708 std::stringstream* data) { | |
| 709 if (ContentsEqual(file_path, data)) | |
| 710 return true; | |
| 711 | |
| 712 std::string data_str = data->str(); | |
| 713 int size = static_cast<int>(data_str.size()); | |
| 714 return base::WriteFile(file_path, data_str.c_str(), size) == size; | |
| 715 } | |
| 716 | |
| 690 SourceDir GetToolchainOutputDir(const Settings* settings) { | 717 SourceDir GetToolchainOutputDir(const Settings* settings) { |
| 691 return settings->toolchain_output_subdir().AsSourceDir( | 718 return settings->toolchain_output_subdir().AsSourceDir( |
| 692 settings->build_settings()); | 719 settings->build_settings()); |
| 693 } | 720 } |
| 694 | 721 |
| 695 SourceDir GetToolchainOutputDir(const BuildSettings* build_settings, | 722 SourceDir GetToolchainOutputDir(const BuildSettings* build_settings, |
| 696 const Label& toolchain_label, bool is_default) { | 723 const Label& toolchain_label, bool is_default) { |
| 697 std::string result = build_settings->build_dir().value(); | 724 std::string result = build_settings->build_dir().value(); |
| 698 result.append(GetOutputSubdirName(toolchain_label, is_default)); | 725 result.append(GetOutputSubdirName(toolchain_label, is_default)); |
| 699 return SourceDir(SourceDir::SWAP_IN, &result); | 726 return SourceDir(SourceDir::SWAP_IN, &result); |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 835 | 862 |
| 836 SourceDir GetCurrentOutputDir(const Scope* scope) { | 863 SourceDir GetCurrentOutputDir(const Scope* scope) { |
| 837 return GetOutputDirForSourceDirAsOutputFile( | 864 return GetOutputDirForSourceDirAsOutputFile( |
| 838 scope->settings(), scope->GetSourceDir()).AsSourceDir( | 865 scope->settings(), scope->GetSourceDir()).AsSourceDir( |
| 839 scope->settings()->build_settings()); | 866 scope->settings()->build_settings()); |
| 840 } | 867 } |
| 841 | 868 |
| 842 SourceDir GetCurrentGenDir(const Scope* scope) { | 869 SourceDir GetCurrentGenDir(const Scope* scope) { |
| 843 return GetGenDirForSourceDir(scope->settings(), scope->GetSourceDir()); | 870 return GetGenDirForSourceDir(scope->settings(), scope->GetSourceDir()); |
| 844 } | 871 } |
| OLD | NEW |