1*1fa4b3daSHector Dearman#!/usr/bin/env python2 2*1fa4b3daSHector Dearman 3*1fa4b3daSHector Dearmanimport optparse 4*1fa4b3daSHector Dearmanimport os 5*1fa4b3daSHector Dearmanimport shutil 6*1fa4b3daSHector Dearmanimport subprocess 7*1fa4b3daSHector Dearmanimport sys 8*1fa4b3daSHector Dearman 9*1fa4b3daSHector Dearmanupstream_git = 'https://github.com/catapult-project/catapult.git' 10*1fa4b3daSHector DearmanPACKAGE_DIRS = [ 11*1fa4b3daSHector Dearman 'common', 12*1fa4b3daSHector Dearman 'dependency_manager', 13*1fa4b3daSHector Dearman 'devil', 14*1fa4b3daSHector Dearman 'systrace', 15*1fa4b3daSHector Dearman 'third_party/pyserial', 16*1fa4b3daSHector Dearman 'third_party/polymer', 17*1fa4b3daSHector Dearman 'tracing/tracing/trace_data', 18*1fa4b3daSHector Dearman] 19*1fa4b3daSHector DearmanPACKAGE_FILES = [ 20*1fa4b3daSHector Dearman 'tracing/tracing/__init__.py', 21*1fa4b3daSHector Dearman 'tracing/tracing_project.py', 22*1fa4b3daSHector Dearman] 23*1fa4b3daSHector DearmanIGNORE_PATTERNS = ['OWNERS'] # doesn't make sense to sync owners files 24*1fa4b3daSHector Dearman 25*1fa4b3daSHector Dearmanscript_dir = os.path.dirname(os.path.abspath(sys.argv[0])) 26*1fa4b3daSHector Dearmancatapult_src_dir = os.path.join(script_dir, 'catapult-upstream') 27*1fa4b3daSHector Dearmancatapult_dst_dir = os.path.join(script_dir, 'catapult') 28*1fa4b3daSHector Dearman 29*1fa4b3daSHector Dearmanparser = optparse.OptionParser() 30*1fa4b3daSHector Dearmanparser.add_option('--local', dest='local_dir', metavar='DIR', 31*1fa4b3daSHector Dearman help='use a local catapult') 32*1fa4b3daSHector Dearmanparser.add_option('--no-min', dest='no_min', default=False, action='store_true', 33*1fa4b3daSHector Dearman help='skip minification') 34*1fa4b3daSHector Dearmanoptions, args = parser.parse_args() 35*1fa4b3daSHector Dearman 36*1fa4b3daSHector Dearman## Update the source if needed. 37*1fa4b3daSHector Dearmanif options.local_dir is None: 38*1fa4b3daSHector Dearman # Remove the old source tree. 39*1fa4b3daSHector Dearman shutil.rmtree(catapult_src_dir, True) 40*1fa4b3daSHector Dearman 41*1fa4b3daSHector Dearman # Pull the latest source from the upstream git. 42*1fa4b3daSHector Dearman git_args = ['git', 'clone', upstream_git, catapult_src_dir] 43*1fa4b3daSHector Dearman p = subprocess.Popen(git_args, stdout=subprocess.PIPE, cwd=script_dir) 44*1fa4b3daSHector Dearman p.communicate() 45*1fa4b3daSHector Dearman if p.wait() != 0: 46*1fa4b3daSHector Dearman print 'Failed to checkout source from upstream git.' 47*1fa4b3daSHector Dearman sys.exit(1) 48*1fa4b3daSHector Dearman 49*1fa4b3daSHector Dearman catapult_git_dir = os.path.join(catapult_src_dir, '.git') 50*1fa4b3daSHector Dearman # Update the UPSTREAM_REVISION file 51*1fa4b3daSHector Dearman git_args = ['git', 'rev-parse', 'HEAD'] 52*1fa4b3daSHector Dearman p = subprocess.Popen(git_args, 53*1fa4b3daSHector Dearman stdout=subprocess.PIPE, 54*1fa4b3daSHector Dearman cwd=catapult_src_dir, 55*1fa4b3daSHector Dearman env={"GIT_DIR":catapult_git_dir}) 56*1fa4b3daSHector Dearman out, err = p.communicate() 57*1fa4b3daSHector Dearman if p.wait() != 0: 58*1fa4b3daSHector Dearman print 'Failed to get revision.' 59*1fa4b3daSHector Dearman sys.exit(1) 60*1fa4b3daSHector Dearman 61*1fa4b3daSHector Dearman shutil.rmtree(catapult_git_dir, True) 62*1fa4b3daSHector Dearman 63*1fa4b3daSHector Dearman rev = out.strip() 64*1fa4b3daSHector Dearman with open('UPSTREAM_REVISION', 'wt') as f: 65*1fa4b3daSHector Dearman f.write(rev + '\n') 66*1fa4b3daSHector Dearmanelse: 67*1fa4b3daSHector Dearman catapult_src_dir = options.local_dir 68*1fa4b3daSHector Dearman 69*1fa4b3daSHector Dearman 70*1fa4b3daSHector Dearman## Update systrace_trace_viewer.html 71*1fa4b3daSHector Dearmansystrace_dir = os.path.join(catapult_src_dir, 'systrace', 'systrace') 72*1fa4b3daSHector Dearmansys.path.append(systrace_dir) 73*1fa4b3daSHector Dearmanimport update_systrace_trace_viewer 74*1fa4b3daSHector Dearmanupdate_systrace_trace_viewer.update(no_auto_update=True, no_min=options.no_min) 75*1fa4b3daSHector Dearman 76*1fa4b3daSHector Dearman## Package the result 77*1fa4b3daSHector Dearmanshutil.rmtree(catapult_dst_dir) 78*1fa4b3daSHector Dearman 79*1fa4b3daSHector Dearmanfor d in PACKAGE_DIRS: 80*1fa4b3daSHector Dearman src = os.path.join(catapult_src_dir, d) 81*1fa4b3daSHector Dearman dst = os.path.join(catapult_dst_dir, d) 82*1fa4b3daSHector Dearman 83*1fa4b3daSHector Dearman # make parent dir by creating dst + ancestors, and deleting dst 84*1fa4b3daSHector Dearman if not os.path.isdir(dst): 85*1fa4b3daSHector Dearman os.makedirs(dst) 86*1fa4b3daSHector Dearman shutil.rmtree(dst) 87*1fa4b3daSHector Dearman 88*1fa4b3daSHector Dearman # copy tree 89*1fa4b3daSHector Dearman shutil.copytree(src, dst, ignore=shutil.ignore_patterns(*IGNORE_PATTERNS)) 90*1fa4b3daSHector Dearman 91*1fa4b3daSHector Dearmanfor f in PACKAGE_FILES: 92*1fa4b3daSHector Dearman src = os.path.join(catapult_src_dir, f) 93*1fa4b3daSHector Dearman dst = os.path.join(catapult_dst_dir, f) 94*1fa4b3daSHector Dearman shutil.copy(src, dst) 95