Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(182)

Side by Side Diff: tools/release/update_node.py

Issue 2747123002: Add --commit option and some polish to update_node.py. (Closed)
Patch Set: address comments Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « tools/release/test_update_node.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2017 the V8 project authors. All rights reserved. 2 # Copyright 2017 the V8 project authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 import argparse 6 import argparse
7 import os 7 import os
8 import shutil 8 import shutil
9 import subprocess 9 import subprocess
10 import sys 10 import sys
(...skipping 16 matching lines...) Expand all
27 "/testing/gtest/include/*", 27 "/testing/gtest/include/*",
28 "!/testing/gtest/include/gtest", 28 "!/testing/gtest/include/gtest",
29 "/testing/gtest/include/gtest/*", 29 "/testing/gtest/include/gtest/*",
30 "!/testing/gtest/include/gtest/gtest_prod.h", 30 "!/testing/gtest/include/gtest/gtest_prod.h",
31 "!/third_party/jinja2", 31 "!/third_party/jinja2",
32 "!/third_party/markupsafe" ] 32 "!/third_party/markupsafe" ]
33 33
34 def RunGclient(path): 34 def RunGclient(path):
35 assert os.path.isdir(path) 35 assert os.path.isdir(path)
36 print ">> Running gclient sync" 36 print ">> Running gclient sync"
37 subprocess.check_call("gclient sync --nohooks", cwd=path, shell=True) 37 subprocess.check_call(["gclient", "sync", "--nohooks"], cwd=path)
38 38
39 def UninitGit(path): 39 def UninitGit(path):
40 target = os.path.join(path, ".git") 40 target = os.path.join(path, ".git")
41 if os.path.isdir(target): 41 if os.path.isdir(target):
42 print ">> Cleaning up %s" % path 42 print ">> Cleaning up %s" % path
43 shutil.rmtree(target) 43 shutil.rmtree(target)
44 44
45 def UpdateTarget(repository, options): 45 def UpdateTarget(repository, options):
46 source = os.path.join(options.v8_path, *repository) 46 source = os.path.join(options.v8_path, *repository)
47 target = os.path.join(options.node_path, TARGET_SUBDIR, *repository) 47 target = os.path.join(options.node_path, TARGET_SUBDIR, *repository)
48 print ">> Updating target directory %s" % target 48 print ">> Updating target directory %s" % target
49 print ">> from active branch at %s" % source 49 print ">> from active branch at %s" % source
50 if not os.path.exists(target): 50 if not os.path.exists(target):
51 os.makedirs(target) 51 os.makedirs(target)
52 # Remove possible remnants of previous incomplete runs. 52 # Remove possible remnants of previous incomplete runs.
53 UninitGit(target) 53 UninitGit(target)
54 54
55 git_commands = [ 55 git_commands = [
56 "git init", # initialize target repo 56 ["git", "init"], # initialize target repo
57 "git remote add origin %s" % source, # point to the source repo 57 ["git", "remote", "add", "origin", source], # point to the source repo
58 "git fetch origin HEAD", # sync to the current branch 58 ["git", "fetch", "origin", "HEAD"], # sync to the current branch
59 "git reset --hard FETCH_HEAD", # reset to the current branch 59 ["git", "reset", "--hard", "FETCH_HEAD"], # reset to the current branch
60 "git clean -fd" # delete removed files 60 ["git", "clean", "-fd"], # delete removed files
61 ] 61 ]
62 try: 62 try:
63 for command in git_commands: 63 for command in git_commands:
64 subprocess.check_call(command, cwd=target, shell=True); 64 subprocess.check_call(command, cwd=target)
65 except: 65 except:
66 raise 66 raise
67 finally: 67 finally:
68 UninitGit(target) 68 UninitGit(target)
69 69
70 def UpdateGitIgnore(options): 70 def UpdateGitIgnore(options):
71 file_name = os.path.join(options.node_path, TARGET_SUBDIR, ".gitignore") 71 file_name = os.path.join(options.node_path, TARGET_SUBDIR, ".gitignore")
72 assert os.path.isfile(file_name) 72 assert os.path.isfile(file_name)
73 print ">> Updating .gitignore with lines" 73 print ">> Updating .gitignore with lines"
74 with open(file_name) as gitignore: 74 with open(file_name) as gitignore:
75 content = gitignore.readlines() 75 content = gitignore.readlines()
76 content = [x.strip() for x in content] 76 content = [x.strip() for x in content]
77 for x in DELETE_FROM_GITIGNORE: 77 for x in DELETE_FROM_GITIGNORE:
78 if x in content: 78 if x in content:
79 print "- %s" % x 79 print "- %s" % x
80 content.remove(x) 80 content.remove(x)
81 for x in ADD_TO_GITIGNORE: 81 for x in ADD_TO_GITIGNORE:
82 if x not in content: 82 if x not in content:
83 print "+ %s" % x 83 print "+ %s" % x
84 content.append(x) 84 content.append(x)
85 content.sort(key=lambda x: x[1:] if x.startswith("!") else x) 85 content.sort(key=lambda x: x[1:] if x.startswith("!") else x)
86 with open(file_name, "w") as gitignore: 86 with open(file_name, "w") as gitignore:
87 for x in content: 87 for x in content:
88 gitignore.write("%s\n" % x) 88 gitignore.write("%s\n" % x)
89 89
90 def CreateCommit(options):
91 print ">> Creating commit."
92 # Find git hash from source.
93 githash = subprocess.check_output(["git", "rev-parse", "--short", "HEAD"],
94 cwd=options.v8_path).strip()
95 # Create commit at target.
96 git_commands = [
97 ["git", "checkout", "-b", "update_v8_to_%s" % githash], # new branch
98 ["git", "add", "."], # add files
99 ["git", "commit", "-m", "Update V8 to %s" % githash] # new commit
100 ]
101 for command in git_commands:
102 subprocess.check_call(command, cwd=options.node_path)
103
90 def ParseOptions(args): 104 def ParseOptions(args):
91 parser = argparse.ArgumentParser(description="Update V8 in Node.js") 105 parser = argparse.ArgumentParser(description="Update V8 in Node.js")
92 parser.add_argument("v8_path", help="Path to V8 checkout") 106 parser.add_argument("v8_path", help="Path to V8 checkout")
93 parser.add_argument("node_path", help="Path to Node.js checkout") 107 parser.add_argument("node_path", help="Path to Node.js checkout")
94 parser.add_argument("--gclient", dest="gclient", 108 parser.add_argument("--gclient", action="store_true", help="Run gclient sync")
95 action="store_true", help="Run gclient sync") 109 parser.add_argument("--commit", action="store_true", help="Create commit")
96 options = parser.parse_args(args) 110 options = parser.parse_args(args)
97 assert os.path.isdir(options.v8_path) 111 assert os.path.isdir(options.v8_path)
98 options.v8_path = os.path.abspath(options.v8_path) 112 options.v8_path = os.path.abspath(options.v8_path)
99 assert os.path.isdir(options.node_path) 113 assert os.path.isdir(options.node_path)
100 options.node_path = os.path.abspath(options.node_path) 114 options.node_path = os.path.abspath(options.node_path)
101 return options 115 return options
102 116
103 def Main(args): 117 def Main(args):
104 options = ParseOptions(args) 118 options = ParseOptions(args)
105 if options.gclient: 119 if options.gclient:
106 RunGclient(options.v8_path) 120 RunGclient(options.v8_path)
107 # Update main V8 repository. 121 # Update main V8 repository.
108 UpdateTarget([""], options) 122 UpdateTarget([""], options)
109 # Patch .gitignore before updating sub-repositories. 123 # Patch .gitignore before updating sub-repositories.
110 UpdateGitIgnore(options) 124 UpdateGitIgnore(options)
111 for repo in SUB_REPOSITORIES: 125 for repo in SUB_REPOSITORIES:
112 UpdateTarget(repo, options) 126 UpdateTarget(repo, options)
127 if options.commit:
128 CreateCommit(options)
113 129
114 if __name__ == "__main__": 130 if __name__ == "__main__":
115 Main(sys.argv[1:]) 131 Main(sys.argv[1:])
OLDNEW
« no previous file with comments | « tools/release/test_update_node.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698