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

Side by Side Diff: tools/make_links.py

Issue 2340813004: Revert "Use checked-in .package file for building and testing" (Closed)
Patch Set: Fix more test and build failures Created 4 years, 3 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/bots/dart_sdk.py ('k') | tools/testing/dart/test_suite.dart » ('j') | 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 (c) 2012, the Dart project authors. Please see the AUTHORS file 2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
3 # for details. All rights reserved. Use of this source code is governed by a 3 # for details. All rights reserved. Use of this source code is governed by a
4 # BSD-style license that can be found in the LICENSE file. 4 # BSD-style license that can be found in the LICENSE file.
5 5
6 6
7 """Tool for creating symlinks from SOURCES to TARGET. 7 """Tool for creating symlinks from SOURCES to TARGET.
8 8
9 For each SOURCE in SOURCES create a link from SOURCE to TARGET. If a 9 For each SOURCE in SOURCES create a link from SOURCE to TARGET. If a
10 SOURCE ends with .../lib, the lib suffix is ignored when determining 10 SOURCE ends with .../lib, the lib suffix is ignored when determining
11 the name of the target link. 11 the name of the target link.
12 12
13 If a SOURCE contains ":", the left side is the path and the right side is the 13 If a SOURCE contains ":", the left side is the path and the right side is the
14 name of the package symlink. 14 name of the package symlink.
15 15
16 Before creating any links, the old entries of the TARGET directory will be 16 Before creating any links, the old entries of the TARGET directory will be
17 removed. 17 removed.
18 18
19 Usage: 19 Usage:
20 python tools/make_links.py OPTIONS TARGET SOURCES... 20 python tools/make_links.py OPTIONS TARGET SOURCES...
21 21
22 """ 22 """
23 23
24 import optparse 24 import optparse
25 import os 25 import os
26 import shutil 26 import shutil
27 import subprocess 27 import subprocess
28 import sys 28 import sys
29 import urllib
30 import urlparse
29 import utils 31 import utils
30 32
31 # Useful messages when we find orphaned checkouts. 33 # Useful messages when we find orphaned checkouts.
32 old_directories = { 34 old_directories = {
33 'package_config': 'Please remove third_party/pkg/package_config.', 35 'package_config': 'Please remove third_party/pkg/package_config.',
34 'analyzer_cli': 'Please remove third_party/pkg/analyzer_cli.'} 36 'analyzer_cli': 'Please remove third_party/pkg/analyzer_cli.'}
35 37
36 def get_options(): 38 def get_options():
37 result = optparse.OptionParser() 39 result = optparse.OptionParser()
38 result.add_option("--timestamp_file", "", 40 result.add_option("--timestamp_file", "",
39 help='Create a timestamp file when done creating the links.', 41 help='Create a timestamp file when done creating the links.',
40 default='') 42 default='')
41 result.add_option("-q", "--quiet", 43 result.add_option("-q", "--quiet",
42 help="Don't print any messages", 44 help="Don't print any messages",
43 action="store_true", 45 action="store_true",
44 dest="quiet", 46 dest="quiet",
45 default=False) 47 default=False)
48 result.add_option("--create-links",
49 help='Create links to the package lib directories in "packages/".',
50 action='store_false',
51 default=True)
52 result.add_option("--create-package-file",
53 help='Create a ".packages" file pointing to the packages.',
54 action='store_false',
55 default=True)
56
46 return result.parse_args() 57 return result.parse_args()
47 58
48 def make_link(quiet, source, target, orig_source): 59 def make_link(quiet, source, target, orig_source):
49 if os.path.islink(target): 60 if os.path.islink(target):
50 if not quiet: 61 if not quiet:
51 print 'Removing %s' % target 62 print 'Removing %s' % target
52 sys.stdout.flush() 63 sys.stdout.flush()
53 os.unlink(target) 64 os.unlink(target)
54 65
55 if os.path.isdir(target): 66 if os.path.isdir(target):
(...skipping 18 matching lines...) Expand all
74 else: 85 else:
75 return subprocess.call(['ln', '-s', source, target]) 86 return subprocess.call(['ln', '-s', source, target])
76 87
77 def create_timestamp_file(options): 88 def create_timestamp_file(options):
78 if options.timestamp_file != '': 89 if options.timestamp_file != '':
79 dir_name = os.path.dirname(options.timestamp_file) 90 dir_name = os.path.dirname(options.timestamp_file)
80 if not os.path.exists(dir_name): 91 if not os.path.exists(dir_name):
81 os.mkdir(dir_name) 92 os.mkdir(dir_name)
82 open(options.timestamp_file, 'w').close() 93 open(options.timestamp_file, 'w').close()
83 94
84
85 def main(argv): 95 def main(argv):
86 (options, args) = get_options() 96 (options, args) = get_options()
87 target = os.path.relpath(args[0]) 97 target_dir = os.path.relpath(args[0])
98 target = os.path.join(target_dir, 'packages')
88 if os.path.exists(target): 99 if os.path.exists(target):
89 # If the packages directory already exists, delete the current links inside 100 # If the packages directory already exists, delete the current links in
90 # it. This is necessary, otherwise we can end up having links in there 101 # it. This is necessary, otherwise we can end up having links in there
91 # pointing to directories which no longer exist (on incremental builds). 102 # pointing to directories which no longer exist (on incremental builds).
92 for link in os.listdir(target): 103 for link in os.listdir(target):
93 full_link = os.path.join(target, link) 104 full_link = os.path.join(target, link)
94 if os.path.isdir(full_link) and utils.IsWindows(): 105 if os.path.isdir(full_link) and utils.IsWindows():
95 # It seems like python on Windows is treating pseudo symlinks to 106 # It seems like python on Windows is treating pseudo symlinks to
96 # directories as directories. 107 # directories as directories.
97 os.rmdir(full_link) 108 os.rmdir(full_link)
98 else: 109 else:
99 os.remove(full_link) 110 os.remove(full_link)
100 else: 111 else:
101 os.makedirs(target) 112 os.makedirs(target)
113 target = os.path.join(target_dir, '.packages')
114 if os.path.exists(target):
115 os.remove(target)
116
102 linked_names = {}; 117 linked_names = {};
118 package_file_contents = '# .package file created by tools/make_links.py\n'
103 for source in args[1:]: 119 for source in args[1:]:
104 # Assume the source directory is named ".../NAME/lib". 120 # Assume the source directory is named ".../NAME/lib".
105 split = source.split(':') 121 split = source.split(':')
106 name = None 122 name = None
107 if len(split) == 2: (source, name) = split 123 if len(split) == 2: (source, name) = split
108 124
109 (path, lib) = os.path.split(source) 125 (path, lib) = os.path.split(source)
110 if lib != 'lib': 126 if lib != 'lib':
111 path = source 127 path = source
112 # Remove any additional path components preceding NAME, if one wasn't 128 # Remove any additional path components preceding NAME, if one wasn't
113 # specified explicitly. 129 # specified explicitly.
114 if not name: (_, name) = os.path.split(path) 130 if not name: (_, name) = os.path.split(path)
115 # We have an issue with left-behind checkouts in third_party/pkg and 131 # We have an issue with left-behind checkouts in third_party/pkg and
116 # third_party/pkg_tested when we move entries in DEPS. This reports them. 132 # third_party/pkg_tested when we move entries in DEPS. This reports them.
117 if name in linked_names: 133 if name in linked_names:
118 print 'Duplicate directory %s is linked to both %s and %s.' % ( 134 print 'Duplicate directory %s is linked to both %s and %s.' % (
119 name, linked_names[name], path) 135 name, linked_names[name], path)
120 if name in old_directories: 136 if name in old_directories:
121 print old_directories[name] 137 print old_directories[name]
122 return 1 138 return 1
123 linked_names[name] = path 139 linked_names[name] = path
124 orig_source = source 140 orig_source = source
125 if utils.GuessOS() == 'win32': 141 if options.create_links:
126 source = os.path.relpath(source) 142 if utils.GuessOS() == 'win32':
127 else: 143 source = os.path.relpath(source)
128 source = os.path.relpath(source, start=target) 144 else:
129 exit_code = make_link( 145 source = os.path.relpath(source, start=target)
130 options.quiet, source, os.path.join(target, name), orig_source) 146 exit_code = make_link(options.quiet,
131 if exit_code != 0: 147 source, os.path.join(target, name), orig_source)
132 return exit_code 148 if exit_code != 0:
149 return exit_code
150 abs_source = os.path.abspath(orig_source)
151 source_url = urlparse.urljoin('file:', urllib.pathname2url(abs_source))
152 package_file_contents += '%s:%s\n' % (name, source_url)
153 if options.create_package_file:
154 with open(os.path.join(target_dir, '.packages'), 'w') as package_file:
155 package_file.write(package_file_contents)
133 create_timestamp_file(options) 156 create_timestamp_file(options)
134 return 0 157 return 0
135 158
136 159
137 if __name__ == '__main__': 160 if __name__ == '__main__':
138 sys.exit(main(sys.argv)) 161 sys.exit(main(sys.argv))
OLDNEW
« no previous file with comments | « tools/bots/dart_sdk.py ('k') | tools/testing/dart/test_suite.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698