OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # | 2 # |
3 # Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 3 # Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
4 # for details. All rights reserved. Use of this source code is governed by a | 4 # for details. All rights reserved. Use of this source code is governed by a |
5 # BSD-style license that can be found in the LICENSE file. | 5 # BSD-style license that can be found in the LICENSE file. |
6 # | 6 # |
7 | 7 |
8 # Script to build a tarball of the Dart source. | 8 # Script to build a tarball of the Dart source. |
9 # | 9 # |
10 # The tarball includes all the source needed to build Dart. This | 10 # The tarball includes all the source needed to build Dart. This |
(...skipping 14 matching lines...) Expand all Loading... |
25 import optparse | 25 import optparse |
26 import sys | 26 import sys |
27 import tarfile | 27 import tarfile |
28 import utils | 28 import utils |
29 | 29 |
30 from os import listdir, makedirs | 30 from os import listdir, makedirs |
31 from os.path import join, exists, split, dirname, abspath | 31 from os.path import join, exists, split, dirname, abspath |
32 | 32 |
33 HOST_OS = utils.GuessOS() | 33 HOST_OS = utils.GuessOS() |
34 DART_DIR = abspath(join(__file__, '..', '..')) | 34 DART_DIR = abspath(join(__file__, '..', '..')) |
35 | |
36 # Flags. | 35 # Flags. |
37 verbose = False | 36 verbose = False |
38 | 37 |
39 # Name of the dart directory when unpacking the tarball. | 38 # Name of the dart directory when unpacking the tarball. |
40 versiondir = '' | 39 versiondir = '' |
41 | 40 |
42 # Ignore Git/SVN files, checked-in binaries, backup files, etc.. | 41 # Ignore Git/SVN files, checked-in binaries, backup files, etc.. |
43 ignoredPaths = ['tools/testing/bin', | 42 ignoredPaths = ['tools/testing/bin', |
44 'third_party/7zip', 'third_party/android_tools', | 43 'third_party/7zip', 'third_party/android_tools', |
45 'third_party/clang', 'third_party/d8', | 44 'third_party/clang', 'third_party/d8', |
46 'third_party/firefox_jsshell'] | 45 'third_party/firefox_jsshell'] |
47 ignoredDirs = ['.svn', '.git'] | 46 ignoredDirs = ['.svn', '.git'] |
48 ignoredEndings = ['.mk', '.pyc', 'Makefile', '~'] | 47 ignoredEndings = ['.mk', '.pyc', 'Makefile', '~'] |
49 | 48 |
50 def BuildOptions(): | 49 def BuildOptions(): |
51 result = optparse.OptionParser() | 50 result = optparse.OptionParser() |
52 result.add_option("-v", "--verbose", | 51 result.add_option("-v", "--verbose", |
53 help='Verbose output.', | 52 help='Verbose output.', |
54 default=False, action="store_true") | 53 default=False, action="store_true") |
| 54 result.add_option("--tar_filename", |
| 55 default=None, |
| 56 help="The output file.") |
| 57 |
55 return result | 58 return result |
56 | 59 |
57 def Filter(tar_info): | 60 def Filter(tar_info): |
58 # Get the name of the file relative to the dart directory. Note the | 61 # Get the name of the file relative to the dart directory. Note the |
59 # name from the TarInfo does not include a leading slash. | 62 # name from the TarInfo does not include a leading slash. |
60 assert tar_info.name.startswith(DART_DIR[1:]) | 63 assert tar_info.name.startswith(DART_DIR[1:]) |
61 original_name = tar_info.name[len(DART_DIR):] | 64 original_name = tar_info.name[len(DART_DIR):] |
62 _, tail = split(original_name) | 65 _, tail = split(original_name) |
63 if tail in ignoredDirs: | 66 if tail in ignoredDirs: |
64 return None | 67 return None |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 f.write(' * Generated file.\n') | 99 f.write(' * Generated file.\n') |
97 f.write('\n') | 100 f.write('\n') |
98 f.write(' -- Dart Team <misc@dartlang.org> %s\n' % | 101 f.write(' -- Dart Team <misc@dartlang.org> %s\n' % |
99 datetime.datetime.utcnow().strftime('%a, %d %b %Y %X +0000')) | 102 datetime.datetime.utcnow().strftime('%a, %d %b %Y %X +0000')) |
100 | 103 |
101 def GenerateSvnRevision(filename, svn_revision): | 104 def GenerateSvnRevision(filename, svn_revision): |
102 with open(filename, 'w') as f: | 105 with open(filename, 'w') as f: |
103 f.write(svn_revision) | 106 f.write(svn_revision) |
104 | 107 |
105 | 108 |
106 def CreateTarball(): | 109 def CreateTarball(tarfilename): |
107 global ignoredPaths # Used for adding the output directory. | 110 global ignoredPaths # Used for adding the output directory. |
108 # Generate the name of the tarfile | 111 # Generate the name of the tarfile |
109 version = utils.GetVersion() | 112 version = utils.GetVersion() |
110 global versiondir | 113 global versiondir |
111 versiondir = 'dart-%s' % version | 114 versiondir = 'dart-%s' % version |
112 tarname = '%s.tar.gz' % versiondir | |
113 debian_dir = 'tools/linux_dist_support/debian' | 115 debian_dir = 'tools/linux_dist_support/debian' |
114 # Create the tar file in the build directory. | |
115 builddir = utils.GetBuildDir(HOST_OS, HOST_OS) | |
116 tardir = join(DART_DIR, builddir) | |
117 # Don't include the build directory in the tarball (ignored paths | 116 # Don't include the build directory in the tarball (ignored paths |
118 # are relative to DART_DIR). | 117 # are relative to DART_DIR). |
| 118 builddir = utils.GetBuildDir(HOST_OS, HOST_OS) |
119 ignoredPaths.append(builddir) | 119 ignoredPaths.append(builddir) |
120 if not exists(tardir): | 120 |
121 makedirs(tardir) | |
122 tarfilename = join(tardir, tarname) | |
123 print 'Creating tarball: %s' % tarfilename | 121 print 'Creating tarball: %s' % tarfilename |
124 with tarfile.open(tarfilename, mode='w:gz') as tar: | 122 with tarfile.open(tarfilename, mode='w:gz') as tar: |
125 for f in listdir(DART_DIR): | 123 for f in listdir(DART_DIR): |
126 tar.add(join(DART_DIR, f), filter=Filter) | 124 tar.add(join(DART_DIR, f), filter=Filter) |
127 for f in listdir(join(DART_DIR, debian_dir)): | 125 for f in listdir(join(DART_DIR, debian_dir)): |
128 tar.add(join(DART_DIR, debian_dir, f), | 126 tar.add(join(DART_DIR, debian_dir, f), |
129 arcname='%s/debian/%s' % (versiondir, f)) | 127 arcname='%s/debian/%s' % (versiondir, f)) |
130 | 128 |
131 with utils.TempDir() as temp_dir: | 129 with utils.TempDir() as temp_dir: |
132 # Generate and add debian/copyright | 130 # Generate and add debian/copyright |
(...skipping 17 matching lines...) Expand all Loading... |
150 print 'Tarball can only be created on linux' | 148 print 'Tarball can only be created on linux' |
151 return -1 | 149 return -1 |
152 | 150 |
153 # Parse the options. | 151 # Parse the options. |
154 parser = BuildOptions() | 152 parser = BuildOptions() |
155 (options, args) = parser.parse_args() | 153 (options, args) = parser.parse_args() |
156 if options.verbose: | 154 if options.verbose: |
157 global verbose | 155 global verbose |
158 verbose = True | 156 verbose = True |
159 | 157 |
160 CreateTarball() | 158 if not options.tar_filename: |
| 159 raise Exception('Please specify an output filename') |
| 160 |
| 161 CreateTarball(options.tar_filename) |
161 | 162 |
162 if __name__ == '__main__': | 163 if __name__ == '__main__': |
163 sys.exit(Main()) | 164 sys.exit(Main()) |
OLD | NEW |