| OLD | NEW |
| 1 # Copyright (c) 2014 The Native Client Authors. All rights reserved. | 1 # Copyright (c) 2014 The Native Client Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import os | 5 import os |
| 6 import posixpath | 6 import posixpath |
| 7 import shutil | 7 import shutil |
| 8 import tarfile | 8 import tarfile |
| 9 | 9 |
| 10 from naclports import configuration, package, util, error | 10 from naclports import configuration, package, util, error |
| 11 | 11 |
| 12 PAYLOAD_DIR = 'payload' | 12 PAYLOAD_DIR = 'payload' |
| 13 | 13 |
| 14 | 14 |
| 15 def InstallFile(filename, old_root, new_root): | 15 def InstallFile(filename, old_root, new_root): |
| 16 """Install a single file by moving it into a new location. | 16 """Install a single file by moving it into a new location. |
| 17 | 17 |
| 18 Args: | 18 Args: |
| 19 filename: Relative name of file to install. | 19 filename: Relative name of file to install. |
| 20 old_root: The current location of the file. | 20 old_root: The current location of the file. |
| 21 new_root: The new desired root for the file. | 21 new_root: The new desired root for the file. |
| 22 """ | 22 """ |
| 23 oldname = os.path.join(old_root, filename) | 23 oldname = os.path.join(old_root, filename) |
| 24 | 24 |
| 25 util.Trace('install: %s' % filename) | 25 util.LogVerbose('install: %s' % filename) |
| 26 | 26 |
| 27 newname = os.path.join(new_root, filename) | 27 newname = os.path.join(new_root, filename) |
| 28 dirname = os.path.dirname(newname) | 28 dirname = os.path.dirname(newname) |
| 29 if not os.path.isdir(dirname): | 29 if not os.path.isdir(dirname): |
| 30 util.Makedirs(dirname) | 30 util.Makedirs(dirname) |
| 31 os.rename(oldname, newname) | 31 os.rename(oldname, newname) |
| 32 | 32 |
| 33 | 33 |
| 34 def RelocateFile(filename, dest): | 34 def RelocateFile(filename, dest): |
| 35 """Perform in-place mutations on file contents to handle new location. | 35 """Perform in-place mutations on file contents to handle new location. |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 132 def _Install(self): | 132 def _Install(self): |
| 133 dest = util.GetInstallRoot(self.config) | 133 dest = util.GetInstallRoot(self.config) |
| 134 dest_tmp = os.path.join(dest, 'install_tmp') | 134 dest_tmp = os.path.join(dest, 'install_tmp') |
| 135 if os.path.exists(dest_tmp): | 135 if os.path.exists(dest_tmp): |
| 136 shutil.rmtree(dest_tmp) | 136 shutil.rmtree(dest_tmp) |
| 137 | 137 |
| 138 if self.IsAnyVersionInstalled(): | 138 if self.IsAnyVersionInstalled(): |
| 139 raise error.Error('package already installed: %s' % self.InfoString()) | 139 raise error.Error('package already installed: %s' % self.InfoString()) |
| 140 | 140 |
| 141 self.LogStatus('Installing') | 141 self.LogStatus('Installing') |
| 142 util.LogVerbose('installing from: %s' % self.filename) |
| 142 util.Makedirs(dest_tmp) | 143 util.Makedirs(dest_tmp) |
| 143 | 144 |
| 144 names = [] | 145 names = [] |
| 145 try: | 146 try: |
| 146 with tarfile.open(self.filename) as tar: | 147 with tarfile.open(self.filename) as tar: |
| 147 for info in tar: | 148 for info in tar: |
| 148 if info.isdir(): | 149 if info.isdir(): |
| 149 continue | 150 continue |
| 150 name = posixpath.normpath(info.name) | 151 name = posixpath.normpath(info.name) |
| 151 if name == 'pkg_info': | 152 if name == 'pkg_info': |
| (...skipping 17 matching lines...) Expand all Loading... |
| 169 shutil.rmtree(dest_tmp) | 170 shutil.rmtree(dest_tmp) |
| 170 | 171 |
| 171 for name in names: | 172 for name in names: |
| 172 RelocateFile(name, dest) | 173 RelocateFile(name, dest) |
| 173 self.WriteFileList(names) | 174 self.WriteFileList(names) |
| 174 self.WriteStamp() | 175 self.WriteStamp() |
| 175 | 176 |
| 176 def WriteStamp(self): | 177 def WriteStamp(self): |
| 177 """Write stamp file containing pkg_info.""" | 178 """Write stamp file containing pkg_info.""" |
| 178 filename = util.GetInstallStamp(self.NAME, self.config) | 179 filename = util.GetInstallStamp(self.NAME, self.config) |
| 179 util.Trace('stamp: %s' % filename) | 180 util.LogVerbose('stamp: %s' % filename) |
| 180 pkg_info = self.GetPkgInfo() | 181 pkg_info = self.GetPkgInfo() |
| 181 with open(filename, 'w') as f: | 182 with open(filename, 'w') as f: |
| 182 f.write(pkg_info) | 183 f.write(pkg_info) |
| 183 | 184 |
| 184 def WriteFileList(self, file_names): | 185 def WriteFileList(self, file_names): |
| 185 """Write the file list for this package.""" | 186 """Write the file list for this package.""" |
| 186 filename = self.GetListFile() | 187 filename = self.GetListFile() |
| 187 dirname = os.path.dirname(filename) | 188 dirname = os.path.dirname(filename) |
| 188 if not os.path.isdir(dirname): | 189 if not os.path.isdir(dirname): |
| 189 util.Makedirs(dirname) | 190 util.Makedirs(dirname) |
| 190 with open(filename, 'w') as f: | 191 with open(filename, 'w') as f: |
| 191 for name in file_names: | 192 for name in file_names: |
| 192 f.write(name + '\n') | 193 f.write(name + '\n') |
| OLD | NEW |