Commit 53aff41e by Jamie Madill Committed by Commit Bot

Use separate json files for each code generator.

This should reduce the number of merge conflicts when multiple people touch different generators. There still will be merge conflicts when two people touch the same code generator. Bug: angleproject:3691 Change-Id: I0b179368a1352331c091972568c00213ab106e46 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1698650Reviewed-by: 's avatarYuly Novikov <ynovikov@chromium.org> Reviewed-by: 's avatarIan Elliott <ianelliott@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent 60e2f11e
...@@ -11,5 +11,5 @@ ...@@ -11,5 +11,5 @@
*.gni eol=lf *.gni eol=lf
# Git conflict markers in the json file break the code generator. # Git conflict markers in the json file break the code generator.
# Using a binary merge strategy forces a conflict without changing the file. # Using a binary merge strategy forces conflicts without changing file contents.
scripts/run_code_generation_hashes.json merge=binary scripts/code_generation_hashes/*.json merge=binary
{
"src/libANGLE/renderer/FormatID_autogen.h":
"083c08bb743bf72a900079890b14184f",
"src/libANGLE/renderer/Format_table_autogen.cpp":
"24a7e010def51eb4342caa5392536ea9",
"src/libANGLE/renderer/angle_format.py":
"7ce0869650454e1eebc93658d4d96844",
"src/libANGLE/renderer/angle_format_data.json":
"288d2f350948f8b1928c249234a44b25",
"src/libANGLE/renderer/angle_format_map.json":
"be9f9bdbdf785dda05920146e8c55dbb",
"src/libANGLE/renderer/gen_angle_format_table.py":
"37f4654bca2bebc7fdec1fc7ca9bc622"
}
\ No newline at end of file
{
"src/libANGLE/renderer/gen_load_functions_table.py":
"e65c50e84fc38ad34d0eb0bebb84aab6",
"src/libANGLE/renderer/load_functions_data.json":
"4b8a2d1b1f7038e04f51b587f0e98231",
"src/libANGLE/renderer/load_functions_table_autogen.cpp":
"5bfde353048f843718b296c5b32faf73"
}
\ No newline at end of file
{
"src/libANGLE/renderer/d3d/d3d11/Blit11Helper_autogen.inc":
"f69cf03a3d868a977fad9e9c0eb0652a",
"src/libANGLE/renderer/d3d/d3d11/d3d11_blit_shaders_autogen.gni":
"329dbafc64b0cb578348819198abcfea",
"src/libANGLE/renderer/d3d/d3d11/gen_blit11helper.py":
"704a82846928d3e21fc0794dff3a08f8"
}
\ No newline at end of file
{
"src/libANGLE/renderer/angle_format.py":
"7ce0869650454e1eebc93658d4d96844",
"src/libANGLE/renderer/d3d/d3d11/gen_texture_format_table.py":
"bf11e3404d4622059b6e9c4e96abf95e",
"src/libANGLE/renderer/d3d/d3d11/texture_format_data.json":
"d7483ece817e819588f4ca157716dc7b",
"src/libANGLE/renderer/d3d/d3d11/texture_format_map.json":
"805d30e2443935e3a3bd68839699e171",
"src/libANGLE/renderer/d3d/d3d11/texture_format_table_autogen.cpp":
"7c42f9e538cb675d13f8b5d2f248ef84"
}
\ No newline at end of file
{
"src/libANGLE/renderer/angle_format.py":
"7ce0869650454e1eebc93658d4d96844",
"src/libANGLE/renderer/angle_format_map.json":
"be9f9bdbdf785dda05920146e8c55dbb",
"src/libANGLE/renderer/d3d/d3d11/dxgi_format_data.json":
"24f525b05dc665fbbc8c6d68fb863719",
"src/libANGLE/renderer/d3d/d3d11/dxgi_format_map_autogen.cpp":
"32b9860e3fd8e87a89ff9a09e848e516",
"src/libANGLE/renderer/d3d/d3d11/gen_dxgi_format_table.py":
"411e6064b916d570fa76949820d34a45"
}
\ No newline at end of file
{
"src/libANGLE/renderer/d3d/d3d11/dxgi_support_data.json":
"09195053f8829fc81efe08229b54a8b5",
"src/libANGLE/renderer/d3d/d3d11/dxgi_support_table_autogen.cpp":
"7ec32ce0ad41450be7493c1db1130e25",
"src/libANGLE/renderer/d3d/d3d11/gen_dxgi_support_tables.py":
"b464f153f15d60df1c6536adbfafb072"
}
\ No newline at end of file
{
"src/compiler/translator/ParseContext_autogen.h":
"58786d2f352ee1a58d529fb7572c86a4",
"src/compiler/translator/SymbolTable_autogen.cpp":
"9a0b524e9254116e1a38e3ef1b57b669",
"src/compiler/translator/SymbolTable_autogen.h":
"bdb3c8eab0d48267a2f264e3af635e1a",
"src/compiler/translator/builtin_function_declarations.txt":
"d0c15cb9f2ef6c0ba5cd6612470db000",
"src/compiler/translator/builtin_symbols_hash_autogen.txt":
"e2fb536afe6669e60e45f6b5d0730631",
"src/compiler/translator/builtin_variables.json":
"04f763459cfbd47831bec22299287e82",
"src/compiler/translator/gen_builtin_symbols.py":
"5d5467e17ca5ed5bf9938df9a3391e6f",
"src/compiler/translator/tree_util/BuiltIn_autogen.h":
"69268b2f3bda048ba8aaabe60c9b9912",
"src/tests/compiler_tests/ImmutableString_test_autogen.cpp":
"e23f23bbd011ab29c4bb37ea69cfb3bd"
}
\ No newline at end of file
{
"src/compiler/translator/emulated_builtin_function_data_hlsl.json":
"002ad46d144c51fe98d73478aa554ba7",
"src/compiler/translator/emulated_builtin_functions_hlsl_autogen.cpp":
"1c759ffdd27a86fd8f2d590b2f3dcb56",
"src/compiler/translator/gen_emulated_builtin_function_tables.py":
"5991de4f43758f59d9d042581ae04eab"
}
\ No newline at end of file
{
"scripts/egl.xml":
"842e24514c4cfe09fba703c17a0fd292",
"scripts/egl_angle_ext.xml":
"fc2e249239fb1365f6d145cdf1a3cfcf",
"scripts/generate_loader.py":
"5a7cd014230fe04664d9613e65399d42",
"scripts/registry_xml.py":
"97cca309a0561f3bf54e0e2c1cf0708b",
"scripts/wgl.xml":
"aa96419c582af2f6673430e2847693f4",
"src/libEGL/egl_loader_autogen.cpp":
"01d20878ff5644bb9ee9e22ec95c3587",
"src/libEGL/egl_loader_autogen.h":
"fcaa495dbf4ad4841c60f669f5fabfb8",
"util/egl_loader_autogen.cpp":
"b9a444da4142a12a9fe6b7a9d33a4ea8",
"util/egl_loader_autogen.h":
"bc2c62ff42604977ac2240591ee8ba6a",
"util/gles_loader_autogen.cpp":
"335463406e64c6dc9bf00502cb25d53c",
"util/gles_loader_autogen.h":
"d5217a3555be800443bd673e479d8443",
"util/windows/wgl_loader_autogen.cpp":
"12ffb44e5e743c826e4d84ac65cdba82",
"util/windows/wgl_loader_autogen.h":
"e18f6c134b709c5a69ed3b4ff38642d0"
}
\ No newline at end of file
{
"scripts/egl.xml":
"842e24514c4cfe09fba703c17a0fd292",
"scripts/egl_angle_ext.xml":
"fc2e249239fb1365f6d145cdf1a3cfcf",
"scripts/entry_point_packed_gl_enums.json":
"08665ca9ebf22fa759c1ce0e965a200d",
"scripts/generate_entry_points.py":
"9d9b4797c1da3644923e83396a040b97",
"scripts/gl.xml":
"b470cb06b06cbbe7adb2c8129ec85708",
"scripts/gl_angle_ext.xml":
"bed6b56a38621721e689ebc19601a556",
"scripts/registry_xml.py":
"97cca309a0561f3bf54e0e2c1cf0708b",
"scripts/wgl.xml":
"aa96419c582af2f6673430e2847693f4",
"src/libANGLE/Context_gl_1_0_autogen.h":
"57231b5bc958327034059eb7e5cd6636",
"src/libANGLE/Context_gl_1_1_autogen.h":
"4a6f7633d3b234a98c33fef4a6a1c89e",
"src/libANGLE/Context_gl_1_2_autogen.h":
"e648c6c4ff40b7d2d709ef7635262226",
"src/libANGLE/Context_gl_1_3_autogen.h":
"a7bb49f5075a44aaee7a9531372b8731",
"src/libANGLE/Context_gl_1_4_autogen.h":
"07a56e633a2ef0467e97ae327c832324",
"src/libANGLE/Context_gl_1_5_autogen.h":
"96bf69258d08cef55abcfe08527ac1f3",
"src/libANGLE/Context_gl_2_0_autogen.h":
"fc3dc3bca5024a4c97878b064365efe8",
"src/libANGLE/Context_gl_2_1_autogen.h":
"0538549cfb385ab7866a2978fe0a3f65",
"src/libANGLE/Context_gl_3_0_autogen.h":
"46a55343d5ff3d79ac63b8887dc90ce3",
"src/libANGLE/Context_gl_3_1_autogen.h":
"391170a24ea544e6de99051e4d8d4aa1",
"src/libANGLE/Context_gles_1_0_autogen.h":
"f30ed90e4ec23f886bda9344d82dd529",
"src/libANGLE/Context_gles_2_0_autogen.h":
"d8c5ef3d4a9d98e6f57cb926a67537f0",
"src/libANGLE/Context_gles_3_0_autogen.h":
"0727abfe5305f87e09e76ca46b804ee3",
"src/libANGLE/Context_gles_3_1_autogen.h":
"5ccae982f020320b1e29cf8eecd8c303",
"src/libANGLE/Context_gles_ext_autogen.h":
"a4159480e94e629b7ad5820464eab6ff",
"src/libANGLE/capture_gles_1_0_autogen.cpp":
"4eed3706b615e2778f6d7840af8b9a15",
"src/libANGLE/capture_gles_1_0_autogen.h":
"06471d4526e8d0b824f5afc8bc8766fa",
"src/libANGLE/capture_gles_2_0_autogen.cpp":
"6cb02a611b7528f2184a44d1d5c75838",
"src/libANGLE/capture_gles_2_0_autogen.h":
"1ea9fbd64218b6e256e10723eb81e0c6",
"src/libANGLE/capture_gles_3_0_autogen.cpp":
"c97230a331a8d47499ba16a8daaa4caf",
"src/libANGLE/capture_gles_3_0_autogen.h":
"ffe4ed9b7e642258b9deb1452875f23b",
"src/libANGLE/capture_gles_3_1_autogen.cpp":
"913f953f661b4e4701ed27c5c89f8f23",
"src/libANGLE/capture_gles_3_1_autogen.h":
"1be96fed22157c3f591ab362d717de0b",
"src/libANGLE/capture_gles_ext_autogen.cpp":
"26d5ccfe479071119b6ae1fc1382faa0",
"src/libANGLE/capture_gles_ext_autogen.h":
"2c282627320d2ca594e176ff0d84c8f1",
"src/libANGLE/entry_points_enum_autogen.h":
"0679308533029fdbc9f9844a5760586b",
"src/libANGLE/frame_capture_utils_autogen.cpp":
"05f98f9b62ec70a24341b772cd87c584",
"src/libANGLE/frame_capture_utils_autogen.h":
"08df1391bcb6e95af913481f1b8fd5fb",
"src/libANGLE/validationES1_autogen.h":
"8d3131d2bf2e6f521f46b44e64a6bff9",
"src/libANGLE/validationES2_autogen.h":
"edf0d7d2afdfd6c090f83d40312394ad",
"src/libANGLE/validationES31_autogen.h":
"22ef241ea5b79a6abe6589f1afcc80a2",
"src/libANGLE/validationES3_autogen.h":
"4617942e5bf67fa5e35675daf66afc5c",
"src/libANGLE/validationESEXT_autogen.h":
"e467045ae1b9f8671ced8aef794f06e0",
"src/libANGLE/validationGL11_autogen.h":
"c5ac1ca523a39df2621d11e92c9c821a",
"src/libANGLE/validationGL12_autogen.h":
"d00e743582693425eb8e5221bdfadc7c",
"src/libANGLE/validationGL13_autogen.h":
"3cc3a79b3f39f7e7267ac4ff5b51a198",
"src/libANGLE/validationGL14_autogen.h":
"d58f8aa392b34a15cd5ddfea3142bca4",
"src/libANGLE/validationGL15_autogen.h":
"803c78e151ba6e71be81ed38decacf1d",
"src/libANGLE/validationGL1_autogen.h":
"9f6aca8bc4d4f8f74d0a74a781eec5b4",
"src/libANGLE/validationGL21_autogen.h":
"0db791d425850e654aa36b6241891525",
"src/libANGLE/validationGL2_autogen.h":
"bbbdee2a2aaed049bfe243197a633b1b",
"src/libANGLE/validationGL31_autogen.h":
"8eb20c13d38138483d42f898400ef176",
"src/libANGLE/validationGL3_autogen.h":
"1bd2846baa868d579bc4f619dc59a93c",
"src/libGL/entry_points_gl_1_0_autogen.cpp":
"65efdf7fcf3d7b12f936db5c6c7f1c32",
"src/libGL/entry_points_gl_1_0_autogen.h":
"ba9a7d0ce72bca6f11d12b3a8a3e95c1",
"src/libGL/entry_points_gl_1_1_autogen.cpp":
"7b3230b667a6ff00933f58223d958f89",
"src/libGL/entry_points_gl_1_1_autogen.h":
"1b675cfae8fa5e5d79032d480b9d098f",
"src/libGL/entry_points_gl_1_2_autogen.cpp":
"247f0973fb17a46cf02d97fe3647ff86",
"src/libGL/entry_points_gl_1_2_autogen.h":
"55ae51cd45fb87f44479abe7918ccc45",
"src/libGL/entry_points_gl_1_3_autogen.cpp":
"fdbffcd6b9bc4e6765cfa027c0645564",
"src/libGL/entry_points_gl_1_3_autogen.h":
"5cd2206947c56f33948eab34a85b9d18",
"src/libGL/entry_points_gl_1_4_autogen.cpp":
"8a4db0a0dd18a3d43bff54d77aa5d56e",
"src/libGL/entry_points_gl_1_4_autogen.h":
"3a2922db3bd9637a067b61f3099989d2",
"src/libGL/entry_points_gl_1_5_autogen.cpp":
"d5964ecec41afd6a0da980e1aedf9abd",
"src/libGL/entry_points_gl_1_5_autogen.h":
"ba307366eed3707a79e682aba990c2ba",
"src/libGL/entry_points_gl_2_0_autogen.cpp":
"73a6c7a872080b6c0b056159e9bcfcc0",
"src/libGL/entry_points_gl_2_0_autogen.h":
"1e9622afa89718fc65d2801848780691",
"src/libGL/entry_points_gl_2_1_autogen.cpp":
"c1e596d66b764e76cccbd4f726312d9b",
"src/libGL/entry_points_gl_2_1_autogen.h":
"4a368fe42f9b690ccec8a0492e9d0f2d",
"src/libGL/entry_points_gl_3_0_autogen.cpp":
"891bb91af9a61dddb10602a8d59392fc",
"src/libGL/entry_points_gl_3_0_autogen.h":
"a04b4fe60f275cbb405858498cc3a411",
"src/libGL/entry_points_gl_3_1_autogen.cpp":
"3c8d595677596847aa1e8e625d5f0fe2",
"src/libGL/entry_points_gl_3_1_autogen.h":
"0bd4aaf736f40589f668fdd381b87788",
"src/libGL/libGL_autogen.cpp":
"2ee47347a7d1f3f85944c772398c7ef8",
"src/libGL/libGL_autogen.def":
"8ff022ce11382a0b4adbd05b559ad59c",
"src/libGLESv2/entry_points_gles_1_0_autogen.cpp":
"d9882eb5eb7002955c0e6969288dc595",
"src/libGLESv2/entry_points_gles_1_0_autogen.h":
"77fa8d307ebf839838f8812786cddc1a",
"src/libGLESv2/entry_points_gles_2_0_autogen.cpp":
"415b20fee85f910e6b078a7a958db4c4",
"src/libGLESv2/entry_points_gles_2_0_autogen.h":
"3bbaf1cf42fba5d675e5b54cd1d14df7",
"src/libGLESv2/entry_points_gles_3_0_autogen.cpp":
"df307b2effb0125626e1b7fe41a5f2aa",
"src/libGLESv2/entry_points_gles_3_0_autogen.h":
"395f6978219abd5182bbe80cc367e40c",
"src/libGLESv2/entry_points_gles_3_1_autogen.cpp":
"c3dda1a78563a5a9f1a1d448f1158668",
"src/libGLESv2/entry_points_gles_3_1_autogen.h":
"043d09a964c740067bf4279e0b544aed",
"src/libGLESv2/entry_points_gles_ext_autogen.cpp":
"ce86338a0a9de820d189c4cfd48b465e",
"src/libGLESv2/entry_points_gles_ext_autogen.h":
"294cc52579b3439e99914c11bb7cd9f6",
"src/libGLESv2/libGLESv2_autogen.cpp":
"229577015686414a6d094533c2210cea",
"src/libGLESv2/libGLESv2_autogen.def":
"52ef9529c516e83d6a0d9e1a9ec0a493",
"src/libGLESv2/libGLESv2_with_capture_autogen.def":
"25b108d7f235173041f7c92ffab9fb44"
}
\ No newline at end of file
{
"src/libANGLE/es3_copy_conversion_formats.json":
"54608f6f7d9aa7c59a8458ccf3ab9935",
"src/libANGLE/es3_copy_conversion_table_autogen.cpp":
"b20d198cf5e292c43170d4873b381b34",
"src/libANGLE/gen_copy_conversion_table.py":
"827a4a27cea1e11bef18fed9dce6dceb"
}
\ No newline at end of file
{
"src/libANGLE/es3_format_type_combinations.json":
"a232823cd6430f14e28793ccabb968ee",
"src/libANGLE/format_map_autogen.cpp":
"1e1b1c2af35a8a75c4395430d2370758",
"src/libANGLE/format_map_data.json":
"779798d4879e5f73a5a108e3e3fd3095",
"src/libANGLE/gen_format_map.py":
"dbc855d50826670a9e1a4ff2747e7583"
}
\ No newline at end of file
{
"scripts/gl.xml":
"b470cb06b06cbbe7adb2c8129ec85708",
"src/libANGLE/renderer/angle_format.py":
"7ce0869650454e1eebc93658d4d96844",
"src/libANGLE/renderer/gl/DispatchTableGL_autogen.cpp":
"96d06b3acf7826aee1ec813a8fa3a867",
"src/libANGLE/renderer/gl/DispatchTableGL_autogen.h":
"ea5eded625b5db7d7b2b7f689c72f14b",
"src/libANGLE/renderer/gl/generate_gl_dispatch_table.py":
"f21314d401e650b4182c4b7d66ac5c9c",
"src/libANGLE/renderer/gl/gl_bindings_data.json":
"1afca09d29ed7788c76cbc9bcfb4de0a",
"src/libANGLE/renderer/gl/null_functions.cpp":
"5470d6b1d7057d797e15b986a31e196e",
"src/libANGLE/renderer/gl/null_functions.h":
"7906751710cab691f9e7365e59b7beed"
}
\ No newline at end of file
{
"src/libANGLE/renderer/angle_format.py":
"7ce0869650454e1eebc93658d4d96844",
"src/libANGLE/renderer/angle_format_map.json":
"be9f9bdbdf785dda05920146e8c55dbb",
"src/libANGLE/renderer/vulkan/gen_vk_format_table.py":
"09340e3ba114b4acef6460ac8b242040",
"src/libANGLE/renderer/vulkan/vk_format_map.json":
"9e0a57bee62f7b0603c7431c815d1be2",
"src/libANGLE/renderer/vulkan/vk_format_table_autogen.cpp":
"8d7f42c646e4b05017552e5af1b3bc84"
}
\ No newline at end of file
{
"src/libANGLE/renderer/angle_format.py":
"7ce0869650454e1eebc93658d4d96844",
"src/libANGLE/renderer/vulkan/gen_vk_mandatory_format_support_table.py":
"dab4614bbee0c3fbc5b3ccaaa11ba9d3",
"src/libANGLE/renderer/vulkan/vk_mandatory_format_support_data.json":
"fa2bd54c1bb0ab2cf1d386061a4bc5c5",
"src/libANGLE/renderer/vulkan/vk_mandatory_format_support_table_autogen.cpp":
"d20e549634ef32d6ad4e9f0b28e52acf",
"third_party/vulkan-headers/src/registry/vk.xml":
"8af0f992bd45c2d9500eb5ed60c256d6"
}
\ No newline at end of file
{
"src/common/PackedEGLEnums_autogen.cpp":
"51fe45095a4c15fb0cdc3b2dc13ad437",
"src/common/PackedEGLEnums_autogen.h":
"96a117fc4265af386798a5553a719ff2",
"src/common/PackedGLEnums_autogen.cpp":
"2a00295fec7437c7e1e6e3166482ae81",
"src/common/PackedGLEnums_autogen.h":
"bf4b4a3c61a67df0e7e2fc0820ee7e79",
"src/common/gen_packed_gl_enums.py":
"b3e96ea44f52ec23ee893bd843dfd2cb",
"src/common/packed_egl_enums.json":
"5f591d220ee53b6e54a27d1523a3ab79",
"src/common/packed_gl_enums.json":
"b60dd9e7a25717f5b15015f6edc8b058"
}
\ No newline at end of file
{
"scripts/egl.xml":
"842e24514c4cfe09fba703c17a0fd292",
"scripts/egl_angle_ext.xml":
"fc2e249239fb1365f6d145cdf1a3cfcf",
"scripts/gen_proc_table.py":
"3c988387fd8d368ea3a660b869867660",
"scripts/gl.xml":
"b470cb06b06cbbe7adb2c8129ec85708",
"scripts/gl_angle_ext.xml":
"bed6b56a38621721e689ebc19601a556",
"scripts/registry_xml.py":
"97cca309a0561f3bf54e0e2c1cf0708b",
"scripts/wgl.xml":
"aa96419c582af2f6673430e2847693f4",
"src/libGL/proc_table_wgl_autogen.cpp":
"62d8f224776d738d5ee259a5f84528e1",
"src/libGLESv2/proc_table_egl_autogen.cpp":
"73e54da783ff8d5058e9dadcc6e90322"
}
\ No newline at end of file
{
"src/common/gen_uniform_type_table.py":
"a741cc301b1617ab0e4d29b35f1d3b96",
"src/common/uniform_type_info_autogen.cpp":
"d1cea53e456de010445790b8de94a50e"
}
\ No newline at end of file
...@@ -16,6 +16,8 @@ import sys ...@@ -16,6 +16,8 @@ import sys
script_dir = sys.path[0] script_dir = sys.path[0]
root_dir = os.path.abspath(os.path.join(script_dir, '..')) root_dir = os.path.abspath(os.path.join(script_dir, '..'))
hash_dir = 'code_generation_hashes'
# auto_script is a standard way for scripts to return their inputs and outputs. # auto_script is a standard way for scripts to return their inputs and outputs.
...@@ -55,8 +57,6 @@ def auto_script(script): ...@@ -55,8 +57,6 @@ def auto_script(script):
return info return info
hash_fname = "run_code_generation_hashes.json"
generators = { generators = {
'ANGLE format': 'ANGLE format':
'src/libANGLE/renderer/gen_angle_format_table.py', 'src/libANGLE/renderer/gen_angle_format_table.py',
...@@ -107,27 +107,36 @@ def md5(fname): ...@@ -107,27 +107,36 @@ def md5(fname):
return hash_md5.hexdigest() return hash_md5.hexdigest()
def get_hash_file_name(name):
return name.replace(' ', '_').replace('/', '_') + '.json'
def any_hash_dirty(name, filenames, new_hashes, old_hashes): def any_hash_dirty(name, filenames, new_hashes, old_hashes):
found_dirty_hash = False found_dirty_hash = False
for filename in filenames:
key = name + ":" + filename for fname in filenames:
if not os.path.isfile(filename): if not os.path.isfile(fname):
print('Could not find %s for %s' % (filename, name)) print('File not found: "%s". Code gen dirty for %s' % (fname, name))
found_dirty_hash = True found_dirty_hash = True
else: else:
new_hashes[key] = md5(filename) new_hashes[fname] = md5(fname)
if (not key in old_hashes) or (old_hashes[key] != new_hashes[key]): if (not fname in old_hashes) or (old_hashes[fname] != new_hashes[fname]):
print('Hash for "%s" dirty for %s generator.' % (fname, name))
found_dirty_hash = True found_dirty_hash = True
return found_dirty_hash return found_dirty_hash
def any_old_hash_missing(new_hashes, old_hashes): def any_old_hash_missing(all_new_hashes, all_old_hashes):
result = False result = False
for name, _ in old_hashes.iteritems(): for file, old_hashes in all_old_hashes.iteritems():
if name not in new_hashes: if file not in all_new_hashes:
script, file = name.split(':') print('"%s" does not exist. Code gen dirty.' % file)
print('%s missing from generated hashes for %s.' % (file, script))
result = True result = True
else:
for name, _ in old_hashes.iteritems():
if name not in all_new_hashes[file]:
print('Hash for %s is missing from "%s". Code gen is dirty.' % (name, file))
result = True
return result return result
...@@ -136,15 +145,23 @@ def update_output_hashes(script, outputs, new_hashes): ...@@ -136,15 +145,23 @@ def update_output_hashes(script, outputs, new_hashes):
if not os.path.isfile(output): if not os.path.isfile(output):
print('Output is missing from %s: %s' % (script, output)) print('Output is missing from %s: %s' % (script, output))
sys.exit(1) sys.exit(1)
key = script + ":" + output new_hashes[output] = md5(output)
new_hashes[key] = md5(output)
def load_hashes():
hashes = {}
for file in os.listdir(hash_dir):
hash_fname = os.path.join(hash_dir, file)
with open(hash_fname) as hash_file:
hashes[file] = json.load(open(hash_fname))
return hashes
def main(): def main():
os.chdir(script_dir) os.chdir(script_dir)
old_hashes = json.load(open(hash_fname)) all_old_hashes = load_hashes()
new_hashes = {} all_new_hashes = {}
any_dirty = False any_dirty = False
verify_only = False verify_only = False
...@@ -153,8 +170,12 @@ def main(): ...@@ -153,8 +170,12 @@ def main():
for name, script in sorted(generators.iteritems()): for name, script in sorted(generators.iteritems()):
info = auto_script(script) info = auto_script(script)
fname = get_hash_file_name(name)
filenames = info['inputs'] + info['outputs'] + [script] filenames = info['inputs'] + info['outputs'] + [script]
if any_hash_dirty(name, filenames, new_hashes, old_hashes): new_hashes = {}
if fname not in all_old_hashes:
all_old_hashes[fname] = {}
if any_hash_dirty(name, filenames, new_hashes, all_old_hashes[fname]):
any_dirty = True any_dirty = True
if not verify_only: if not verify_only:
...@@ -165,18 +186,17 @@ def main(): ...@@ -165,18 +186,17 @@ def main():
if subprocess.call(['python', os.path.basename(script)]) != 0: if subprocess.call(['python', os.path.basename(script)]) != 0:
sys.exit(1) sys.exit(1)
if any_old_hash_missing(new_hashes, old_hashes): # Update the hash dictionary.
all_new_hashes[fname] = new_hashes
if any_old_hash_missing(all_new_hashes, all_old_hashes):
any_dirty = True any_dirty = True
if verify_only: if verify_only:
sys.exit(any_dirty) sys.exit(any_dirty)
if any_dirty: if any_dirty:
args = [] args = ['git.bat'] if os.name == 'nt' else ['git']
if os.name == 'nt':
args += ['git.bat']
else:
args += ['git']
# The diff can be so large the arguments to clang-format can break the Windows command # The diff can be so large the arguments to clang-format can break the Windows command
# line length limits. Work around this by calling git cl format with --full. # line length limits. Work around this by calling git cl format with --full.
args += ['cl', 'format', '--full'] args += ['cl', 'format', '--full']
...@@ -186,15 +206,19 @@ def main(): ...@@ -186,15 +206,19 @@ def main():
# Update the output hashes again since they can be formatted. # Update the output hashes again since they can be formatted.
for name, script in sorted(generators.iteritems()): for name, script in sorted(generators.iteritems()):
info = auto_script(script) info = auto_script(script)
update_output_hashes(name, info['outputs'], new_hashes) fname = get_hash_file_name(name)
update_output_hashes(name, info['outputs'], all_new_hashes[fname])
os.chdir(script_dir) os.chdir(script_dir)
json.dump(
new_hashes, for fname, new_hashes in all_new_hashes.iteritems():
open(hash_fname, "w"), hash_fname = os.path.join(hash_dir, fname)
indent=2, json.dump(
sort_keys=True, new_hashes,
separators=(',', ':\n ')) open(hash_fname, "w"),
indent=2,
sort_keys=True,
separators=(',', ':\n '))
if __name__ == '__main__': if __name__ == '__main__':
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment