' +
- '';
+ if (!file_index)
+ {
+ file_index++;
+ return;
+ }
+
+ if (callbacks["newfile"])
+ callbacks["newfile"](startname, endname, "file_index_" + (file_index - 1));
+
+ var title = startname;
+ var binaryname = endname;
+ if (endname == "/dev/null") {
+ binaryname = startname;
+ title = startname;
+ }
+ else if (startname == "/dev/null")
+ title = endname;
+ else if (startname != endname)
+ title = startname + " renamed to " + endname;
+
+ finalContent += '
' +
+ '';
+
if (!binary) {
finalContent += '
' +
'
' + line1 + "
" +
@@ -44,47 +66,69 @@ var highlightDiff = function(diff, element, callbacks) {
}
else {
if (callbacks["binaryFile"])
- finalContent += callbacks["binaryFile"](filename);
+ finalContent += callbacks["binaryFile"](binaryname);
else
finalContent += "
Binary file differs
";
}
finalContent += '
';
+
line1 = "";
line2 = "";
diffContent = "";
+ file_index++;
+ startname = "";
+ endname = "";
}
for (var lineno = 0; lineno < lines.length; lineno++) {
var l = lines[lineno];
var firstChar = l.charAt(0);
- // Matches "diff --git ...."
+ if (firstChar == "d" && l.charAt(1) == "i") { // "diff", i.e. new file, we have to reset everything
+ header = true; // diff always starts with a header
- if (firstChar == "d") { // New file, we have to reset everything
- header = true;
-
- if (file_index++) // Finish last file
- finishContent();
-
- binary = false;
-
- if(match = l.match(/diff --git a\/(\S*)/)) {
- filename = match[1];
- if (callbacks["newfile"])
- callbacks["newfile"](filename, "file_index_" + (file_index - 1));
- }
+ finishContent(); // Finish last file
+ binary = false;
continue;
}
if (header) {
- if (firstChar == "+" || firstChar == "-")
+ if (firstChar == "-") {
+ if (match = l.match(/^--- (a\/)?(.*)$/))
+ startname = match[2];
continue;
- if (firstChar == "B") // "Binary files"
+ }
+ if (firstChar == "+") {
+ if (match = l.match(/^\+\+\+ (b\/)?(.*)$/))
+ endname = match[2];
+ continue;
+ }
+ // If it is a complete rename, we don't know the name yet
+ // We can figure this out from the 'rename from.. rename to.. thing
+ if (firstChar == 'r')
+ {
+ if (match = l.match(/^rename (from|to) (.*)$/))
+ {
+ if (match[1] == "from")
+ startname = match[2];
+ else
+ endname = match[2];
+ }
+ continue;
+ }
+ if (firstChar == "B") // "Binary files .. and .. differ"
{
binary = true;
- Controller.log_("Binary file");
+ // We might not have a diff from the binary file if it's new.
+ // So, we use a regex to figure that out
+
+ if (match = l.match(/^Binary files (a\/)?(.*) and (b\/)(.*) differ$/))
+ {
+ startname = match[2];
+ endname = match[4];
+ }
}
// Finish the header
@@ -126,7 +170,6 @@ var highlightDiff = function(diff, element, callbacks) {
}
}
- file_index++;
finishContent();
// This takes about 7ms
@@ -135,4 +178,4 @@ var highlightDiff = function(diff, element, callbacks) {
// TODO: Replace this with a performance pref call
if (false)
Controller.log_("Total time:" + (new Date().getTime() - start));
-}
\ No newline at end of file
+}
diff --git a/html/views/history/history.css b/html/views/history/history.css
index 0fe68d0..07c281b 100644
--- a/html/views/history/history.css
+++ b/html/views/history/history.css
@@ -68,14 +68,15 @@ a.servicebutton{
#files {
margin-top: 1em;
- font-family: Monaco;
- font-size: 10px;
}
#files a {
color: #666666;
}
+#files p {
+ margin: 4px;
+}
#files a:hover {
color: #4444ff;
}
@@ -135,4 +136,47 @@ a.showdiff {
.refs.currentBranch {
font-weight: bold;
-}
\ No newline at end of file
+}
+
+div.button
+{
+ color: #666666;
+
+ font-size: 60%;
+ text-align: center;
+
+ width: 50px;
+
+ margin-right: 10px;
+
+ padding: 2px;
+
+ float: left;
+ clear: both;
+
+ border: 1px solid;
+ -webkit-border-radius: 3px;
+}
+
+div.created
+{
+ background-color: #ccffcc;
+ border-color: #66ff66;
+}
+
+div.changed
+{
+ background-color: #ffcc99;
+ border-color: #ff9933;
+}
+
+div.deleted
+{
+ background-color: #ffcccc;
+ border-color: #ff6666;
+}
+
+div.renamed
+{
+ /*No colour needed right now.*/
+}
diff --git a/html/views/history/history.js b/html/views/history/history.js
index 36d40f7..d11358d 100644
--- a/html/views/history/history.js
+++ b/html/views/history/history.js
@@ -173,8 +173,15 @@ var loadCommit = function(commitObject, currentRef) {
}
var showDiff = function() {
- var newfile = function(name, id) {
- $("files").innerHTML += "
" + name + "";
+ var newfile = function(name1, name2, id) {
+ if (name1 == name2)
+ $("files").innerHTML += "
changed
" + name1 + "
";
+ else if (name1 == "/dev/null")
+ $("files").innerHTML += "
created
" + name2 + "
";
+ else if (name2 == "/dev/null")
+ $("files").innerHTML += "
deleted
" + name1 + "
";
+ else
+ $("files").innerHTML += "
renamed
" + name1 + " → " + name2 + "
";
}
var binaryDiff = function(filename) {
@@ -184,7 +191,7 @@ var showDiff = function() {
return "Binary file differs";
}
- highlightDiff(commit.diff, $("diff"), { "newfile" : newfile, "binaryFile" : binaryDiff });
+ highlightDiff(commit.diff, $("diff"), { "newfile" : newfile, "binaryFile" : binaryDiff});
}
var showImage = function(element, filename)
@@ -225,4 +232,4 @@ var loadExtendedCommit = function(commit)
hideNotification();
enableFeatures();
-}
\ No newline at end of file
+}