| OLD | NEW |
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 # Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2006-2009 The Chromium 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 """Wrapper script around Rietveld's upload.py that groups files into | 6 """Wrapper script around Rietveld's upload.py that groups files into |
| 7 changelists.""" | 7 changelists.""" |
| 8 | 8 |
| 9 import getpass | 9 import getpass |
| 10 import os | 10 import os |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 if filename not in FILES_CACHE: | 107 if filename not in FILES_CACHE: |
| 108 # Don't try to look up twice. | 108 # Don't try to look up twice. |
| 109 FILES_CACHE[filename] = None | 109 FILES_CACHE[filename] = None |
| 110 # First we check if we have a cached version. | 110 # First we check if we have a cached version. |
| 111 try: | 111 try: |
| 112 cached_file = os.path.join(GetCacheDir(), filename) | 112 cached_file = os.path.join(GetCacheDir(), filename) |
| 113 except gclient_utils.Error: | 113 except gclient_utils.Error: |
| 114 return None | 114 return None |
| 115 if (not os.path.exists(cached_file) or | 115 if (not os.path.exists(cached_file) or |
| 116 os.stat(cached_file).st_mtime > max_age): | 116 os.stat(cached_file).st_mtime > max_age): |
| 117 local_dir = os.path.dirname(os.path.abspath(filename)) | |
| 118 local_base = os.path.basename(filename) | |
| 119 dir_info = SVN.CaptureInfo(".") | 117 dir_info = SVN.CaptureInfo(".") |
| 120 repo_root = dir_info["Repository Root"] | 118 repo_root = dir_info["Repository Root"] |
| 121 if use_root: | 119 if use_root: |
| 122 url_path = repo_root | 120 url_path = repo_root |
| 123 else: | 121 else: |
| 124 url_path = dir_info["URL"] | 122 url_path = dir_info["URL"] |
| 125 content = "" | 123 content = "" |
| 126 while True: | 124 while True: |
| 127 # First, look for a locally modified version of the file if we can. | 125 # Look in the repository at the current level for the file. |
| 128 r = "" | 126 svn_path = url_path + "/" + filename |
| 129 if not use_root: | 127 content, rc = RunShellWithReturnCode(["svn", "cat", svn_path]) |
| 130 local_path = os.path.join(local_dir, local_base) | |
| 131 r = SVN.CaptureStatus((local_path,)) | |
| 132 rc = -1 | |
| 133 if r: | |
| 134 status = r[0][0] | |
| 135 rc = 0 | |
| 136 if not rc and status[0] in ('A','M'): | |
| 137 content = ReadFile(local_path) | |
| 138 rc = 0 | |
| 139 else: | |
| 140 # Look in the repository if we didn't find something local. | |
| 141 svn_path = url_path + "/" + filename | |
| 142 content, rc = RunShellWithReturnCode(["svn", "cat", svn_path]) | |
| 143 | |
| 144 if not rc: | 128 if not rc: |
| 145 # Exit the loop if the file was found. Override content. | 129 # Exit the loop if the file was found. Override content. |
| 146 break | 130 break |
| 147 # Make sure to mark settings as empty if not found. | 131 # Make sure to mark settings as empty if not found. |
| 148 content = "" | 132 content = "" |
| 149 if url_path == repo_root: | 133 if url_path == repo_root: |
| 150 # Reached the root. Abandoning search. | 134 # Reached the root. Abandoning search. |
| 151 break | 135 break |
| 152 # Go up one level to try again. | 136 # Go up one level to try again. |
| 153 url_path = os.path.dirname(url_path) | 137 url_path = os.path.dirname(url_path) |
| 154 local_dir = os.path.dirname(local_dir) | |
| 155 # Write a cached version even if there isn't a file, so we don't try to | 138 # Write a cached version even if there isn't a file, so we don't try to |
| 156 # fetch it each time. | 139 # fetch it each time. |
| 157 WriteFile(cached_file, content) | 140 WriteFile(cached_file, content) |
| 158 else: | 141 else: |
| 159 content = ReadFile(cached_file) | 142 content = ReadFile(cached_file) |
| 160 # Keep the content cached in memory. | 143 # Keep the content cached in memory. |
| 161 FILES_CACHE[filename] = content | 144 FILES_CACHE[filename] = content |
| 162 return FILES_CACHE[filename] | 145 return FILES_CACHE[filename] |
| 163 | 146 |
| 164 | 147 |
| (...skipping 1118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1283 return 0 | 1266 return 0 |
| 1284 args =["svn", command] | 1267 args =["svn", command] |
| 1285 root = GetRepositoryRoot() | 1268 root = GetRepositoryRoot() |
| 1286 args.extend([os.path.join(root, x) for x in change_info.GetFileNames()]) | 1269 args.extend([os.path.join(root, x) for x in change_info.GetFileNames()]) |
| 1287 RunShell(args, True) | 1270 RunShell(args, True) |
| 1288 return 0 | 1271 return 0 |
| 1289 | 1272 |
| 1290 | 1273 |
| 1291 if __name__ == "__main__": | 1274 if __name__ == "__main__": |
| 1292 sys.exit(main()) | 1275 sys.exit(main()) |
| OLD | NEW |