OLD | NEW |
1 // Copyright (c) 2014 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2014 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 "use strict"; | 5 "use strict"; |
6 | 6 |
7 function PatchFile(patchset, name) | 7 function PatchFile(patchset, name) |
8 { | 8 { |
9 this.name = name || ""; | 9 this.name = name || ""; |
| 10 this.prefix = name || ""; |
10 this.extension = ""; | 11 this.extension = ""; |
11 this.prefix = ""; | |
12 this.language = ""; | 12 this.language = ""; |
13 this.containsEmbeddedLanguages = false; | 13 this.containsEmbeddedLanguages = false; |
14 this.status = ""; | 14 this.status = ""; |
15 this.chunks = 0; | 15 this.chunks = 0; |
16 this.missingBaseFile = false; | 16 this.missingBaseFile = false; |
17 this.propertyChanges = ""; | 17 this.propertyChanges = ""; |
18 this.added = 0; | 18 this.added = 0; |
19 this.removed = 0; | 19 this.removed = 0; |
20 this.id = 0; | 20 this.id = 0; |
21 this.patchset = patchset || null; // PatchSet | 21 this.patchset = patchset || null; // PatchSet |
22 this.isBinary = false; | 22 this.isBinary = false; |
23 this.messages = {}; // Map<line number, Array<PatchFileMessage>> | 23 this.messages = {}; // Map<line number, Array<PatchFileMessage>> |
24 this.messageCount = 0; | 24 this.messageCount = 0; |
25 this.drafts = []; // Array<PatchFileMessage> | 25 this.drafts = []; // Array<PatchFileMessage> |
26 this.draftCount = 0; | 26 this.draftCount = 0; |
27 this.diff = null; | 27 this.diff = null; |
28 this.isLayoutTest = this.name.startsWith("LayoutTests/"); | 28 this.isLayoutTest = this.name.startsWith("LayoutTests/"); |
| 29 this.isHeader = false; |
29 Object.preventExtensions(this); | 30 Object.preventExtensions(this); |
30 | 31 |
31 var dotIndex = this.name.lastIndexOf("."); | 32 var dotIndex = this.name.lastIndexOf("."); |
32 if (dotIndex != -1) { | 33 if (dotIndex != -1) { |
33 this.extension = this.name.from(dotIndex + 1); | 34 this.extension = this.name.from(dotIndex + 1); |
| 35 this.isHeader = PatchFile.HEADER_EXTENSIONS[this.extension] || false; |
34 this.prefix = this.name.to(dotIndex); | 36 this.prefix = this.name.to(dotIndex); |
35 this.language = PatchFile.SYNTAX_LANGUAGES[this.extension] || ""; | 37 this.language = PatchFile.SYNTAX_LANGUAGES[this.extension] || ""; |
36 this.containsEmbeddedLanguages = PatchFile.MIXED_LANGUAGES[this.language
]; | 38 this.containsEmbeddedLanguages = PatchFile.MIXED_LANGUAGES[this.language
]; |
37 } | 39 } |
38 } | 40 } |
39 | 41 |
40 PatchFile.DIFF_URL = "/download/issue{1}_{2}_{3}.diff"; | 42 PatchFile.DIFF_URL = "/download/issue{1}_{2}_{3}.diff"; |
41 PatchFile.CONTEXT_URL = "/{1}/diff_skipped_lines/{2}/{3}/{4}/{5}/a/2000"; | 43 PatchFile.CONTEXT_URL = "/{1}/diff_skipped_lines/{2}/{3}/{4}/{5}/a/2000"; |
42 PatchFile.DRAFT_URL = "/api/{1}/{2}/{3}/draft_message"; | 44 PatchFile.DRAFT_URL = "/api/{1}/{2}/{3}/draft_message"; |
43 PatchFile.IMAGE_URL = "/{1}/image/{2}/{3}/{4}"; | 45 PatchFile.IMAGE_URL = "/{1}/image/{2}/{3}/{4}"; |
(...skipping 27 matching lines...) Expand all Loading... |
71 "pl": "perl", | 73 "pl": "perl", |
72 "pm": "perl", | 74 "pm": "perl", |
73 "py": "python", | 75 "py": "python", |
74 "rb": "ruby", | 76 "rb": "ruby", |
75 "sh": "bash", | 77 "sh": "bash", |
76 "svg": "xml", | 78 "svg": "xml", |
77 "xhtml": "html", | 79 "xhtml": "html", |
78 "xml": "xml", | 80 "xml": "xml", |
79 }; | 81 }; |
80 | 82 |
| 83 PatchFile.HEADER_EXTENSIONS = { |
| 84 "h": true, |
| 85 "hxx": true, |
| 86 "hpp": true, |
| 87 }; |
| 88 |
81 PatchFile.compare = function(a, b) | 89 PatchFile.compare = function(a, b) |
82 { | 90 { |
83 if (a.isLayoutTest && b.isLayoutTest) | 91 if (a.isLayoutTest != b.isLayoutTest) |
84 return a.name.localeCompare(b.name); | 92 return b.isLayoutTest ? -1 : 1; |
85 if (a.isLayoutTest) | |
86 return 1; | |
87 if (b.isLayoutTest) | |
88 return -1; | |
89 if (a.prefix != b.prefix) | 93 if (a.prefix != b.prefix) |
90 return a.name.localeCompare(b.name); | 94 return a.prefix.localeCompare(b.prefix); |
91 if (a.extension == "h" && (b.extension == "cpp" || b.extension == "cc")) | 95 if (a.isHeader != b.isHeader) |
92 return -1; | 96 return a.isHeader ? -1 : 1; |
93 if (b.extension == "h" && (a.extension == "cpp" || a.extension == "cc")) | |
94 return 1; | |
95 return a.extension.localeCompare(b.extension); | 97 return a.extension.localeCompare(b.extension); |
96 }; | 98 }; |
97 | 99 |
98 PatchFile.prototype.shouldResetEmbeddedLanguage = function(language, text) | 100 PatchFile.prototype.shouldResetEmbeddedLanguage = function(language, text) |
99 { | 101 { |
100 if (!this.containsEmbeddedLanguages) | 102 if (!this.containsEmbeddedLanguages) |
101 return false; | 103 return false; |
102 if (language == "javascript" && text.startsWith("<\/script")) | 104 if (language == "javascript" && text.startsWith("<\/script")) |
103 return true; | 105 return true; |
104 if (language == "css" && text.startsWith("<\/style")) | 106 if (language == "css" && text.startsWith("<\/style")) |
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
337 while (text[numberStart] == " " && numberStart < text.length) | 339 while (text[numberStart] == " " && numberStart < text.length) |
338 ++numberStart; | 340 ++numberStart; |
339 var numberEnd = numberStart; | 341 var numberEnd = numberStart; |
340 while (text[numberEnd] != " " && numberEnd < text.length) | 342 while (text[numberEnd] != " " && numberEnd < text.length) |
341 ++numberEnd; | 343 ++numberEnd; |
342 return { | 344 return { |
343 lineNumber: parseInt(text.substring(numberStart, numberEnd), 10), | 345 lineNumber: parseInt(text.substring(numberStart, numberEnd), 10), |
344 text: text.from(numberEnd + 1), | 346 text: text.from(numberEnd + 1), |
345 }; | 347 }; |
346 }; | 348 }; |
OLD | NEW |