lib git: treat merge commits like any other commit

This commit is contained in:
Hylke Bons 2012-06-19 10:54:46 +01:00
parent 142e0b46a1
commit 090a34a3c7
3 changed files with 28 additions and 49 deletions

View file

@ -584,30 +584,14 @@ namespace SparkleLib.Git {
entries.Add (last_entry);
Regex merge_regex = new Regex (@"commit ([a-z0-9]{40})\n" +
"Merge: .+ .+\n" +
"Author: (.+) <(.+)>\n" +
"Date: ([0-9]{4})-([0-9]{2})-([0-9]{2}) " +
"([0-9]{2}):([0-9]{2}):([0-9]{2}) .([0-9]{4})\n" +
"*", RegexOptions.Compiled);
Regex non_merge_regex = new Regex (@"commit ([a-z0-9]{40})\n" +
"Author: (.+) <(.+)>\n" +
"Date: ([0-9]{4})-([0-9]{2})-([0-9]{2}) " +
"([0-9]{2}):([0-9]{2}):([0-9]{2}) (.[0-9]{4})\n" +
"*", RegexOptions.Compiled);
Regex regex = new Regex (@"commit ([a-z0-9]{40})\n" +
"Author: (.+) <(.+)>\n" +
"*" +
"Date: ([0-9]{4})-([0-9]{2})-([0-9]{2}) " +
"([0-9]{2}):([0-9]{2}):([0-9]{2}) (.[0-9]{4})\n" +
"*", RegexOptions.Compiled);
foreach (string log_entry in entries) {
Regex regex;
bool is_merge_commit = false;
if (log_entry.Contains ("\nMerge: ")) {
regex = merge_regex;
is_merge_commit = true;
} else {
regex = non_merge_regex;
}
Match match = regex.Match (log_entry);
if (match.Success) {
@ -616,8 +600,7 @@ namespace SparkleLib.Git {
change_set.Folder = new SparkleFolder (Name);
change_set.Revision = match.Groups [1].Value;
change_set.User = new SparkleUser (match.Groups [2].Value, match.Groups [3].Value);
change_set.IsMagical = is_merge_commit;
change_set.RemoteUrl = RemoteUrl;
change_set.RemoteUrl = RemoteUrl;
change_set.Timestamp = new DateTime (int.Parse (match.Groups [4].Value),
int.Parse (match.Groups [5].Value), int.Parse (match.Groups [6].Value),
@ -687,10 +670,10 @@ namespace SparkleLib.Git {
change_set.Changes.Add (
new SparkleChange () {
Path = file_path,
MovedPath = to_file_path,
Timestamp = change_set.Timestamp,
Type = SparkleChangeType.Moved
Path = file_path,
MovedToPath = to_file_path,
Timestamp = change_set.Timestamp,
Type = SparkleChangeType.Moved
}
);
}

View file

@ -32,12 +32,13 @@ namespace SparkleLib {
public class SparkleChangeSet {
public SparkleUser User = new SparkleUser ("Unknown", "Unknown");
public SparkleFolder Folder;
public Uri RemoteUrl;
public string Revision;
public DateTime Timestamp;
public DateTime FirstTimestamp;
public bool IsMagical;
public Uri RemoteUrl;
public List<SparkleChange> Changes = new List<SparkleChange> ();
}
@ -46,7 +47,7 @@ namespace SparkleLib {
public SparkleChangeType Type;
public string Path;
public string MovedPath;
public string MovedToPath;
public DateTime Timestamp;
}

View file

@ -393,28 +393,23 @@ namespace SparkleShare {
foreach (SparkleChangeSet change_set in activity_day) {
string event_entry = "<dl>";
if (change_set.IsMagical) {
event_entry += "<dd>Did something magical</dd>";
foreach (SparkleChange change in change_set.Changes) {
if (change.Type != SparkleChangeType.Moved) {
} else {
foreach (SparkleChange change in change_set.Changes) {
if (change.Type != SparkleChangeType.Moved) {
event_entry += "<dd class='document " + change.Type.ToString ().ToLower () + "'>";
event_entry += "<small>" + change.Timestamp.ToString ("HH:mm") +"</small> &nbsp;";
event_entry += FormatBreadCrumbs (change_set.Folder.FullPath, change.Path);
event_entry += "</dd>";
event_entry += "<dd class='document " + change.Type.ToString ().ToLower () + "'>";
event_entry += "<small>" + change.Timestamp.ToString ("HH:mm") +"</small> &nbsp;";
event_entry += FormatBreadCrumbs (change_set.Folder.FullPath, change.Path);
event_entry += "</dd>";
} else {
} else {
event_entry += "<dd class='document moved'>";
event_entry += FormatBreadCrumbs (change_set.Folder.FullPath, change.Path);
event_entry += "<br>";
event_entry += "<small>" + change.Timestamp.ToString ("HH:mm") +"</small> &nbsp;";
event_entry += FormatBreadCrumbs (change_set.Folder.FullPath, change.MovedToPath);
event_entry += "</dd>";
event_entry += "<dd class='document moved'>";
event_entry += FormatBreadCrumbs (change_set.Folder.FullPath, change.Path);
event_entry += "<br>";
event_entry += "<small>" + change.Timestamp.ToString ("HH:mm") +"</small> &nbsp;";
event_entry += FormatBreadCrumbs (change_set.Folder.FullPath, change.MovedPath);
event_entry += "</dd>";
}
}
}