OLD | NEW |
1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 The Chromium 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 from fnmatch import fnmatch | 5 from fnmatch import fnmatch |
6 import logging | 6 import logging |
7 | 7 |
8 from appengine_url_fetcher import AppEngineUrlFetcher | |
9 from caching_rietveld_patcher import CachingRietveldPatcher | 8 from caching_rietveld_patcher import CachingRietveldPatcher |
10 from chained_compiled_file_system import ChainedCompiledFileSystem | 9 from chained_compiled_file_system import ChainedCompiledFileSystem |
11 from environment import IsDevServer | 10 from environment import IsDevServer |
| 11 from environment_wrappers import CreateUrlFetcher |
12 from extensions_paths import CONTENT_PROVIDERS | 12 from extensions_paths import CONTENT_PROVIDERS |
13 from instance_servlet import InstanceServlet | 13 from instance_servlet import InstanceServlet |
14 from render_servlet import RenderServlet | 14 from render_servlet import RenderServlet |
15 from rietveld_patcher import RietveldPatcher, RietveldPatcherError | 15 from rietveld_patcher import RietveldPatcher, RietveldPatcherError |
16 from object_store_creator import ObjectStoreCreator | 16 from object_store_creator import ObjectStoreCreator |
17 from patched_file_system import PatchedFileSystem | 17 from patched_file_system import PatchedFileSystem |
18 from server_instance import ServerInstance | 18 from server_instance import ServerInstance |
19 from servlet import Request, Response, Servlet | 19 from servlet import Request, Response, Servlet |
20 import url_constants | 20 import url_constants |
21 from gcs_file_system_provider import CloudStorageFileSystemProvider | 21 from gcs_file_system_provider import CloudStorageFileSystemProvider |
22 | 22 |
23 | 23 |
24 class _PatchServletDelegate(RenderServlet.Delegate): | 24 class _PatchServletDelegate(RenderServlet.Delegate): |
25 def __init__(self, issue, delegate): | 25 def __init__(self, issue, delegate): |
26 self._issue = issue | 26 self._issue = issue |
27 self._delegate = delegate | 27 self._delegate = delegate |
28 | 28 |
29 def CreateServerInstance(self): | 29 def CreateServerInstance(self): |
30 # start_empty=False because a patch can rely on files that are already in | 30 # start_empty=False because a patch can rely on files that are already in |
31 # the Git repository but not yet pulled into data store by cron jobs (a | 31 # the Git repository but not yet pulled into data store by cron jobs (a |
32 # typical example is to add documentation for an existing API). | 32 # typical example is to add documentation for an existing API). |
33 object_store_creator = ObjectStoreCreator(start_empty=False) | 33 object_store_creator = ObjectStoreCreator(start_empty=False) |
34 | 34 |
35 unpatched_file_system = self._delegate.CreateHostFileSystemProvider( | 35 unpatched_file_system = self._delegate.CreateHostFileSystemProvider( |
36 object_store_creator).GetMaster() | 36 object_store_creator).GetMaster() |
37 | 37 |
38 rietveld_patcher = CachingRietveldPatcher( | 38 rietveld_patcher = CachingRietveldPatcher( |
39 RietveldPatcher(self._issue, | 39 RietveldPatcher(self._issue, |
40 AppEngineUrlFetcher(url_constants.CODEREVIEW_SERVER)), | 40 CreateUrlFetcher(url_constants.CODEREVIEW_SERVER)), |
41 object_store_creator) | 41 object_store_creator) |
42 | 42 |
43 patched_file_system = PatchedFileSystem(unpatched_file_system, | 43 patched_file_system = PatchedFileSystem(unpatched_file_system, |
44 rietveld_patcher) | 44 rietveld_patcher) |
45 | 45 |
46 patched_host_file_system_provider = ( | 46 patched_host_file_system_provider = ( |
47 self._delegate.CreateHostFileSystemProvider( | 47 self._delegate.CreateHostFileSystemProvider( |
48 object_store_creator, | 48 object_store_creator, |
49 # The patched file system needs to be online otherwise it'd be | 49 # The patched file system needs to be online otherwise it'd be |
50 # impossible to add files in the patches. | 50 # impossible to add files in the patches. |
51 offline=False, | 51 offline=False, |
52 # The master file system for this creator should be the patched one. | 52 # The master file system for this creator should be the patched one. |
53 default_master_instance=patched_file_system)) | 53 default_master_instance=patched_file_system)) |
54 | 54 |
55 combined_compiled_fs_factory = ChainedCompiledFileSystem.Factory( | 55 combined_compiled_fs_factory = ChainedCompiledFileSystem.Factory( |
56 [unpatched_file_system], object_store_creator) | 56 [unpatched_file_system], object_store_creator) |
57 | 57 |
58 branch_utility = self._delegate.CreateBranchUtility(object_store_creator) | 58 branch_utility = self._delegate.CreateBranchUtility(object_store_creator) |
59 | 59 |
60 server_instance = ServerInstance( | 60 server_instance = ServerInstance( |
61 object_store_creator, | 61 object_store_creator, |
62 combined_compiled_fs_factory, | 62 combined_compiled_fs_factory, |
63 branch_utility, | 63 branch_utility, |
64 patched_host_file_system_provider, | 64 patched_host_file_system_provider, |
65 self._delegate.CreateGithubFileSystemProvider(object_store_creator), | |
66 CloudStorageFileSystemProvider(object_store_creator), | 65 CloudStorageFileSystemProvider(object_store_creator), |
67 base_path='/_patch/%s/' % self._issue) | 66 base_path='/_patch/%s/' % self._issue) |
68 | 67 |
69 # HACK: if content_providers.json changes in this patch then the cron needs | 68 # HACK: if content_providers.json changes in this patch then the cron needs |
70 # to be re-run to pull in the new configuration. | 69 # to be re-run to pull in the new configuration. |
71 _, _, modified = rietveld_patcher.GetPatchedFiles() | 70 _, _, modified = rietveld_patcher.GetPatchedFiles() |
72 if CONTENT_PROVIDERS in modified: | 71 if CONTENT_PROVIDERS in modified: |
73 server_instance.content_providers.Refresh().Get() | 72 server_instance.content_providers.Refresh().Get() |
74 | 73 |
75 return server_instance | 74 return server_instance |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
108 # Disable cache for patched content. | 107 # Disable cache for patched content. |
109 response.headers.pop('cache-control', None) | 108 response.headers.pop('cache-control', None) |
110 except RietveldPatcherError as e: | 109 except RietveldPatcherError as e: |
111 response = Response.NotFound(e.message, {'Content-Type': 'text/plain'}) | 110 response = Response.NotFound(e.message, {'Content-Type': 'text/plain'}) |
112 | 111 |
113 redirect_url, permanent = response.GetRedirect() | 112 redirect_url, permanent = response.GetRedirect() |
114 if redirect_url is not None: | 113 if redirect_url is not None: |
115 response = Response.Redirect('/_patch/%s%s' % (issue, redirect_url), | 114 response = Response.Redirect('/_patch/%s%s' % (issue, redirect_url), |
116 permanent) | 115 permanent) |
117 return response | 116 return response |
OLD | NEW |