Index: grit/tool/build.py |
=================================================================== |
--- grit/tool/build.py (revision 182) |
+++ grit/tool/build.py (working copy) |
@@ -109,6 +109,12 @@ |
output_all_resource_defines attribute of the root <grit> |
element of the input .grd file. |
+ --write-only-new Write output files to a temporary file first, and copy |
newt (away)
2014/12/04 22:09:42
Does this also need to be added to grit_info.py as
Nico
2014/12/04 22:33:07
I think policy_templates only passes the same defi
|
+ it to the real output only if the new file is different |
+ from the old file. This allows some build systems to |
+ realize that dependent build steps might be unnecessary, |
+ at the cost of comparing the output data at grit time. |
+ |
Conditional inclusion of resources only affects the output of files which |
control which resources get linked into a binary, e.g. it affects .rc files |
meant for compilation but it does not affect resource header files (that define |
@@ -129,10 +135,12 @@ |
depdir = None |
rc_header_format = None |
output_all_resource_defines = None |
+ write_only_new = False |
(own_opts, args) = getopt.getopt(args, 'a:o:D:E:f:w:t:h:', |
('depdir=','depfile=','assert-file-list=', |
'output-all-resource-defines', |
- 'no-output-all-resource-defines',)) |
+ 'no-output-all-resource-defines', |
+ 'write-only-new')) |
for (key, val) in own_opts: |
if key == '-a': |
assert_output_files.append(val) |
@@ -166,6 +174,8 @@ |
depdir = val |
elif key == '--depfile': |
depfile = val |
+ elif key == '--write-only-new': |
+ write_only_new = True |
if len(args): |
print 'This tool takes no tool-specific arguments.' |
@@ -185,6 +195,8 @@ |
whitelist_contents = util.ReadFile(whitelist_filename, util.RAW_TEXT) |
self.whitelist_names.update(whitelist_contents.strip().split('\n')) |
+ self.write_only_new = write_only_new |
+ |
self.res = grd_reader.Parse(opts.input, |
debug=opts.extra_verbose, |
first_ids_file=first_ids_file, |
@@ -236,6 +248,9 @@ |
# output. |
self.whitelist_names = None |
+ # Whether to compare outputs to their old contents before writing. |
+ self.write_only_new = False |
+ |
@staticmethod |
def AddWhitelistTags(start_node, whitelist_names): |
# Walk the tree of nodes added attributes for the nodes that shouldn't |
@@ -341,13 +356,17 @@ |
else: |
# CHROMIUM SPECIFIC CHANGE. |
# This clashes with gyp + vstudio, which expect the output timestamp |
newt (away)
2014/12/04 22:09:42
If this is still an issue when using visual studio
Nico
2014/12/04 22:33:07
We don't support visual studio anymore, but maybe
|
- # to change on a rebuild, even if nothing has changed. |
- #files_match = filecmp.cmp(output.GetOutputFilename(), |
- # output.GetOutputFilename() + '.tmp') |
- #if (output.GetType() != 'rc_header' or not files_match |
- # or sys.platform != 'win32'): |
- shutil.copy2(output.GetOutputFilename() + '.tmp', |
- output.GetOutputFilename()) |
+ # to change on a rebuild, even if nothing has changed, so only do |
+ # it when opted in. |
+ if not self.write_only_new: |
+ write_file = True |
+ else: |
+ files_match = filecmp.cmp(output.GetOutputFilename(), |
+ output.GetOutputFilename() + '.tmp') |
+ write_file = not files_match |
+ if write_file: |
+ shutil.copy2(output.GetOutputFilename() + '.tmp', |
newt (away)
2014/12/04 22:09:42
Seems like it would be quicker to delete output.h,
Nico
2014/12/04 22:33:07
That's the usual way of doing things so that if yo
|
+ output.GetOutputFilename()) |
os.remove(output.GetOutputFilename() + '.tmp') |
self.VerboseOut(' done.\n') |