2 # Copyright 2014 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
6 '''Tool to roll Mojo into Chromium. See:
7 https://github.com/domokit/mojo/wiki/Rolling-code-between-chromium-and-mojo#mojo---chromium-updates-sdk--edk
12 from utils
import commit
13 from utils
import chromium_root_dir
14 from utils
import system
16 sdk_prefix_in_chromium
= 'third_party/mojo/src'
23 sdk_dirs_to_not_clone
= [
24 'mojo/public/cpp/application',
25 'mojo/public/interfaces/application',
26 'mojo/public/interfaces/network',
27 'mojo/public/java/application',
30 # Individual files to preserve within the target repository during roll. These
31 # are relative to |sdk_prefix_in_chromium| but are not maintained in the mojo
33 preserved_chromium_files
= [
36 'mojo/public/c/gpu/DEPS',
37 'mojo/public/platform/nacl/DEPS',
41 # A dictionary mapping dirs to clone to their destination locations in Chromium.
44 for sdk_dir
in sdk_dirs_to_clone
:
45 sdk_dir_in_chromium
= os
.path
.join(sdk_prefix_in_chromium
, sdk_dir
)
46 dirs_to_clone
[sdk_dir
] = sdk_dir_in_chromium
48 def rev(source_dir
, chromium_dir
, mojo_revision
):
49 src_commit
= system(['git', 'rev-parse', mojo_revision
],
50 cwd
=source_dir
).strip()
52 for input_dir
, dest_dir
in dirs_to_clone
.iteritems():
53 if os
.path
.exists(os
.path
.join(chromium_dir
, dest_dir
)):
54 print 'removing directory %s' % dest_dir
55 system(['git', 'rm', '-r', dest_dir
], cwd
=chromium_dir
)
56 print 'cloning directory %s into %s' % (input_dir
, dest_dir
)
57 files
= system(['git', 'ls-files', input_dir
], cwd
=source_dir
)
58 for f
in files
.splitlines():
59 # Don't copy presubmit files over since the code is read-only on the
61 if os
.path
.basename(f
) == 'PRESUBMIT.py':
65 for excluded
in sdk_dirs_to_not_clone
:
66 if f
.startswith(excluded
):
72 # Clone |f| into Chromium under |dest_dir| at its location relative to
74 f_relpath
= os
.path
.relpath(f
, input_dir
)
75 dest_path
= os
.path
.join(chromium_dir
, dest_dir
, f_relpath
)
76 system(['mkdir', '-p', os
.path
.dirname(dest_path
)])
77 system(['cp', os
.path
.join(source_dir
, f
), dest_path
])
78 os
.chdir(chromium_dir
)
79 system(['git', 'add', dest_dir
], cwd
=chromium_dir
)
81 mojo_public_dest_dir
= os
.path
.join(sdk_prefix_in_chromium
, 'mojo/public')
82 version_filename
= os
.path
.join(mojo_public_dest_dir
, 'VERSION')
83 with
open(version_filename
, 'w') as version_file
:
84 version_file
.write(src_commit
)
85 system(['git', 'add', version_filename
], cwd
=chromium_dir
)
87 # Reset preserved files that were blown away.
88 for rel_path
in preserved_chromium_files
:
89 preserved_path
= os
.path
.join(sdk_prefix_in_chromium
, rel_path
)
90 system(['git', 'reset', '--', preserved_path
])
91 system(['git', 'checkout', preserved_path
])
93 commit('Update mojo sdk to rev ' + src_commit
, cwd
=chromium_dir
)
96 print 'usage: rev_sdk.py <mojo source dir> [<mojo revision>]'
99 # Allow override of the roll revision.
100 revision
= sys
.argv
[2] if len(sys
.argv
) == 3 else 'origin/HEAD'
101 rev(sys
.argv
[1], chromium_root_dir
, revision
)