|
64 | 64 | var values; |
65 | 65 |
|
66 | 66 | if (values = /^@@ -(\d+),\d+ \+(\d+),\d+ @@.*/.exec(line)) { |
67 | | - currentFile.isTripleDiff = false; |
| 67 | + currentFile.isCombined = false; |
68 | 68 | } else if (values = /^@@@ -(\d+),\d+ -\d+,\d+ \+(\d+),\d+ @@@.*/.exec(line)) { |
69 | | - currentFile.isTripleDiff = true; |
| 69 | + currentFile.isCombined = true; |
70 | 70 | } else { |
71 | 71 | values = [0, 0]; |
72 | | - currentFile.isTripleDiff = false; |
| 72 | + currentFile.isCombined = false; |
73 | 73 | } |
74 | 74 |
|
75 | 75 | oldLine = values[1]; |
|
120 | 120 | // Unmerged paths, and possibly other non-diffable files |
121 | 121 | // https://github.com/scottgonzalez/pretty-diff/issues/11 |
122 | 122 | // Also, remove some useless lines |
123 | | - if (!line || utils.startsWith(line, "*") || |
124 | | - utils.startsWith(line, "new") || utils.startsWith(line, "index")) { |
| 123 | + if (!line || utils.startsWith(line, "*")) { |
| 124 | + //|| utils.startsWith(line, "new") || utils.startsWith(line, "index") |
125 | 125 | return; |
126 | 126 | } |
127 | 127 |
|
| 128 | + /* Diff */ |
| 129 | + var oldMode = /old mode (\d{6})/; |
| 130 | + var newMode = /new mode (\d{6})/; |
| 131 | + var deletedFileMode = /deleted file mode (\d{6})/; |
| 132 | + var newFileMode = /new file mode (\d{6})/; |
| 133 | + |
| 134 | + var copyFrom = /copy from (.+)/; |
| 135 | + var copyTo = /copy to (.+)/; |
| 136 | + |
| 137 | + var renameFrom = /rename from (.+)/; |
| 138 | + var renameTo = /rename to (.+)/; |
| 139 | + |
| 140 | + var similarityIndex = /similarity index (\d+)%/; |
| 141 | + var dissimilarityIndex = /dissimilarity index (\d+)%/; |
| 142 | + var index = /index ([0-9a-z]+)..([0-9a-z]+) (\d{6})?/; |
| 143 | + |
| 144 | + /* Combined Diff */ |
| 145 | + var combinedIndex = /index ([0-9a-z]+),([0-9a-z]+)..([0-9a-z]+)/; |
| 146 | + var combinedMode = /mode (\d{6}),(\d{6})..(\d{6})/; |
| 147 | + var combinedNewFile = /new file mode (\d{6})/; |
| 148 | + var combinedDeletedFile = /deleted file mode (\d{6}),(\d{6})/; |
| 149 | + |
128 | 150 | var values = []; |
129 | 151 | if (utils.startsWith(line, "diff")) { |
130 | 152 | startFile(); |
131 | 153 | } else if (currentFile && !currentFile.oldName && (values = /^--- a\/(\S+).*$/.exec(line))) { |
132 | 154 | currentFile.oldName = values[1]; |
| 155 | + currentFile.language = getExtension(currentFile.oldName, currentFile.language); |
133 | 156 | } else if (currentFile && !currentFile.newName && (values = /^\+\+\+ [b]?\/(\S+).*$/.exec(line))) { |
134 | 157 | currentFile.newName = values[1]; |
135 | | - |
136 | | - var fileSplit = currentFile.newName.split("."); |
137 | | - currentFile.language = fileSplit[fileSplit.length - 1]; |
| 158 | + currentFile.language = getExtension(currentFile.newName, currentFile.language); |
138 | 159 | } else if (currentFile && utils.startsWith(line, "@@")) { |
139 | 160 | startBlock(line); |
| 161 | + } else if ((values = oldMode.exec(line))) { |
| 162 | + currentFile.oldMode = values[1]; |
| 163 | + } else if ((values = newMode.exec(line))) { |
| 164 | + currentFile.newMode = values[1]; |
| 165 | + } else if ((values = deletedFileMode.exec(line))) { |
| 166 | + currentFile.deletedFileMode = values[1]; |
| 167 | + } else if ((values = newFileMode.exec(line))) { |
| 168 | + currentFile.newFileMode = values[1]; |
| 169 | + } else if ((values = copyFrom.exec(line))) { |
| 170 | + currentFile.oldName = values[1]; |
| 171 | + currentFile.isCopy = true; |
| 172 | + } else if ((values = copyTo.exec(line))) { |
| 173 | + currentFile.newName = values[1]; |
| 174 | + currentFile.isCopy = true; |
| 175 | + } else if ((values = renameFrom.exec(line))) { |
| 176 | + currentFile.oldName = values[1]; |
| 177 | + currentFile.isRename = true; |
| 178 | + } else if ((values = renameTo.exec(line))) { |
| 179 | + currentFile.newName = values[1]; |
| 180 | + currentFile.isRename = true; |
| 181 | + } else if ((values = similarityIndex.exec(line))) { |
| 182 | + currentFile.unchangedPercentage = values[1]; |
| 183 | + } else if ((values = dissimilarityIndex.exec(line))) { |
| 184 | + currentFile.changedPercentage = values[1]; |
| 185 | + } else if ((values = index.exec(line))) { |
| 186 | + currentFile.checksumBefore = values[1]; |
| 187 | + currentFile.checksumAfter = values[2]; |
| 188 | + values[2] && (currentFile.mode = values[3]); |
| 189 | + } else if ((values = combinedIndex.exec(line))) { |
| 190 | + currentFile.checksumBefore = [values[2], values[3]]; |
| 191 | + currentFile.checksumAfter = values[1]; |
| 192 | + } else if ((values = combinedMode.exec(line))) { |
| 193 | + currentFile.oldMode = [values[2], values[3]]; |
| 194 | + currentFile.newMode = values[1]; |
| 195 | + } else if ((values = combinedNewFile.exec(line))) { |
| 196 | + currentFile.newFileMode = values[1]; |
| 197 | + } else if ((values = combinedDeletedFile.exec(line))) { |
| 198 | + currentFile.deletedFileMode = values[1]; |
140 | 199 | } else if (currentBlock) { |
141 | 200 | createLine(line); |
142 | 201 | } |
|
148 | 207 | return files; |
149 | 208 | }; |
150 | 209 |
|
| 210 | + function getExtension(filename, language) { |
| 211 | + var nameSplit = filename.split("."); |
| 212 | + if (nameSplit.length > 1) return nameSplit[nameSplit.length - 1]; |
| 213 | + else return language; |
| 214 | + } |
| 215 | + |
151 | 216 | if (typeof module !== 'undefined' && module.exports) { |
152 | 217 | module.exports.DiffParser = new DiffParser(); |
153 | 218 | } else if (typeof global.DiffParser === 'undefined') { |
|
0 commit comments