eventlog: sort changes by timestamp, not type
This commit is contained in:
parent
d4315e4b4e
commit
0280f7481e
|
@ -557,11 +557,9 @@ namespace SparkleLib.Git {
|
|||
|
||||
List <SparkleChangeSet> change_sets = new List <SparkleChangeSet> ();
|
||||
|
||||
// Console.InputEncoding = System.Text.Encoding.Unicode;
|
||||
// Console.OutputEncoding = System.Text.Encoding.Unicode;
|
||||
|
||||
SparkleGit git_log = new SparkleGit (LocalPath,
|
||||
"log -" + count + " --raw -M --date=iso --format=medium --no-color");
|
||||
"log -" + count + " --raw -M --date=iso --format=medium --no-color --no-merges");
|
||||
|
||||
git_log.Start ();
|
||||
|
||||
// Reading the standard output HAS to go before
|
||||
|
@ -660,13 +658,31 @@ namespace SparkleLib.Git {
|
|||
continue;
|
||||
|
||||
if (change_type.Equals ("A")) {
|
||||
change_set.Added.Add (file_path);
|
||||
change_set.Changes.Add (
|
||||
new SparkleChange () {
|
||||
Path = file_path,
|
||||
Timestamp = change_set.Timestamp,
|
||||
Type = SparkleChangeType.Added
|
||||
}
|
||||
);
|
||||
|
||||
} else if (change_type.Equals ("M")) {
|
||||
change_set.Edited.Add (file_path);
|
||||
change_set.Changes.Add (
|
||||
new SparkleChange () {
|
||||
Path = file_path,
|
||||
Timestamp = change_set.Timestamp,
|
||||
Type = SparkleChangeType.Edited
|
||||
}
|
||||
);
|
||||
|
||||
} else if (change_type.Equals ("D")) {
|
||||
change_set.Deleted.Add (file_path);
|
||||
change_set.Changes.Add (
|
||||
new SparkleChange () {
|
||||
Path = file_path,
|
||||
Timestamp = change_set.Timestamp,
|
||||
Type = SparkleChangeType.Deleted
|
||||
}
|
||||
);
|
||||
|
||||
} else if (change_type.Equals ("R")) {
|
||||
int tab_pos = entry_line.LastIndexOf ("\t");
|
||||
|
@ -681,19 +697,45 @@ namespace SparkleLib.Git {
|
|||
to_file_path = to_file_path.Substring (0,
|
||||
to_file_path.Length - ".empty".Length);
|
||||
|
||||
change_set.MovedFrom.Add (file_path);
|
||||
change_set.MovedTo.Add (to_file_path);
|
||||
change_set.Changes.Add (
|
||||
new SparkleChange () {
|
||||
Path = file_path,
|
||||
MovedPath = to_file_path,
|
||||
Timestamp = change_set.Timestamp,
|
||||
Type = SparkleChangeType.Moved
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ((change_set.Added.Count +
|
||||
change_set.Edited.Count +
|
||||
change_set.Deleted.Count +
|
||||
change_set.MovedFrom.Count) > 0) {
|
||||
if (change_set.Changes.Count > 0) {
|
||||
if (change_sets.Count > 0) {
|
||||
SparkleChangeSet last_change_set = change_sets [change_sets.Count - 1];
|
||||
|
||||
change_sets.Add (change_set);
|
||||
if (change_set.Timestamp.Year == last_change_set.Timestamp.Year &&
|
||||
change_set.Timestamp.Month == last_change_set.Timestamp.Month &&
|
||||
change_set.Timestamp.Day == last_change_set.Timestamp.Day) {
|
||||
|
||||
last_change_set.Changes.AddRange (change_set.Changes);
|
||||
|
||||
if (DateTime.Compare (last_change_set.Timestamp, change_set.Timestamp) < 1) {
|
||||
last_change_set.FirstTimestamp = last_change_set.Timestamp;
|
||||
last_change_set.Timestamp = change_set.Timestamp;
|
||||
last_change_set.Revision = change_set.Revision;
|
||||
|
||||
} else {
|
||||
last_change_set.FirstTimestamp = change_set.Timestamp;
|
||||
}
|
||||
|
||||
} else {
|
||||
change_sets.Add (change_set);
|
||||
}
|
||||
|
||||
} else {
|
||||
change_sets.Add (change_set);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace SparkleLib {
|
||||
|
||||
|
@ -32,11 +33,7 @@ namespace SparkleLib {
|
|||
public bool IsMagical = false;
|
||||
public Uri RemoteUrl;
|
||||
|
||||
public List<string> Added = new List<string> ();
|
||||
public List<string> Deleted = new List<string> ();
|
||||
public List<string> Edited = new List<string> ();
|
||||
public List<string> MovedFrom = new List<string> ();
|
||||
public List<string> MovedTo = new List<string> ();
|
||||
public List<SparkleChange> Changes = new List<SparkleChange> ();
|
||||
|
||||
|
||||
public string RelativeTimestamp {
|
||||
|
@ -74,6 +71,23 @@ namespace SparkleLib {
|
|||
}
|
||||
|
||||
|
||||
public class SparkleChange {
|
||||
|
||||
public SparkleChangeType Type;
|
||||
public string Path;
|
||||
public string MovedPath;
|
||||
public DateTime Timestamp;
|
||||
}
|
||||
|
||||
|
||||
public enum SparkleChangeType {
|
||||
Added,
|
||||
Edited,
|
||||
Deleted,
|
||||
Moved
|
||||
}
|
||||
|
||||
|
||||
// TODO: Move to its own file (and update all .csproj files)
|
||||
public class SparkleFolder {
|
||||
|
||||
|
|
|
@ -359,10 +359,14 @@ namespace SparkleLib {
|
|||
|
||||
if (!pre_sync_revision.Equals (CurrentRevision)) {
|
||||
if (ChangeSets != null &&
|
||||
ChangeSets.Count > 0 &&
|
||||
!ChangeSets [0].Added.Contains (".sparkleshare")) {
|
||||
ChangeSets.Count > 0) {
|
||||
|
||||
bool emit_change_event = true;
|
||||
foreach (SparkleChange change in ChangeSets [0].Changes)
|
||||
if (change.Path.EndsWith (".sparkleshare"))
|
||||
emit_change_event = false;
|
||||
|
||||
if (NewChangeSet != null)
|
||||
if (NewChangeSet != null && emit_change_event)
|
||||
NewChangeSet (ChangeSets [0]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -54,40 +54,26 @@ namespace SparkleShare {
|
|||
|
||||
private string FormatMessage (SparkleChangeSet change_set)
|
||||
{
|
||||
string file_name = "";
|
||||
string message = "";
|
||||
string message = "";
|
||||
|
||||
if (change_set.Added.Count > 0) {
|
||||
file_name = change_set.Added [0];
|
||||
message = String.Format ("added ‘{0}’", file_name);
|
||||
}
|
||||
if (change_set.Changes [0].Type == SparkleChangeType.Deleted)
|
||||
message = string.Format ("moved ‘{0}’", change_set.Changes [0].Path);
|
||||
|
||||
if (change_set.MovedFrom.Count > 0) {
|
||||
file_name = change_set.MovedFrom [0];
|
||||
message = String.Format ("moved ‘{0}’", file_name);
|
||||
}
|
||||
if (change_set.Changes [0].Type == SparkleChangeType.Moved)
|
||||
message = string.Format ("moved ‘{0}’", change_set.Changes [0].Path);
|
||||
|
||||
if (change_set.Edited.Count > 0) {
|
||||
file_name = change_set.Edited [0];
|
||||
message = String.Format ("edited ‘{0}’", file_name);
|
||||
}
|
||||
if (change_set.Changes [0].Type == SparkleChangeType.Added)
|
||||
message = string.Format ("added ‘{0}’", change_set.Changes [0].Path);
|
||||
|
||||
if (change_set.Deleted.Count > 0) {
|
||||
file_name = change_set.Deleted [0];
|
||||
message = String.Format ("deleted ‘{0}’", file_name);
|
||||
}
|
||||
if (change_set.Changes [0].Type == SparkleChangeType.Edited)
|
||||
message = string.Format ("moved ‘{0}’", change_set.Changes [0].Path);
|
||||
|
||||
int changes_count = (change_set.Added.Count +
|
||||
change_set.Edited.Count +
|
||||
change_set.Deleted.Count +
|
||||
change_set.MovedFrom.Count) - 1;
|
||||
if (change_set.Changes.Count > 0) {
|
||||
string msg = string.Format ("and {0} more", change_set.Changes.Count);
|
||||
message = message + " " + string.Format (msg, change_set.Changes.Count);
|
||||
|
||||
if (changes_count > 0) {
|
||||
string msg = string.Format ("and {0} more", changes_count);
|
||||
message += " " + String.Format (msg, changes_count);
|
||||
|
||||
} else if (changes_count < 0) {
|
||||
message += "did something magical";
|
||||
} else {
|
||||
message = "did something magical";
|
||||
}
|
||||
|
||||
return message;
|
||||
|
|
|
@ -368,37 +368,7 @@ namespace SparkleShare {
|
|||
stored_activity_day.Date.Month == change_set.Timestamp.Month &&
|
||||
stored_activity_day.Date.Day == change_set.Timestamp.Day) {
|
||||
|
||||
bool squash = false;
|
||||
foreach (SparkleChangeSet existing_set in stored_activity_day) {
|
||||
if (change_set.User.Name.Equals (existing_set.User.Name) &&
|
||||
change_set.User.Email.Equals (existing_set.User.Email) &&
|
||||
change_set.Folder.FullPath.Equals (existing_set.Folder.FullPath)) {
|
||||
|
||||
existing_set.Added.AddRange (change_set.Added);
|
||||
existing_set.Edited.AddRange (change_set.Edited);
|
||||
existing_set.Deleted.AddRange (change_set.Deleted);
|
||||
existing_set.MovedFrom.AddRange (change_set.MovedFrom);
|
||||
existing_set.MovedTo.AddRange (change_set.MovedTo);
|
||||
|
||||
existing_set.Added = existing_set.Added.Distinct ().ToList ();
|
||||
existing_set.Edited = existing_set.Edited.Distinct ().ToList ();
|
||||
existing_set.Deleted = existing_set.Deleted.Distinct ().ToList ();
|
||||
|
||||
if (DateTime.Compare (existing_set.Timestamp, change_set.Timestamp) < 1) {
|
||||
existing_set.FirstTimestamp = existing_set.Timestamp;
|
||||
existing_set.Timestamp = change_set.Timestamp;
|
||||
existing_set.Revision = change_set.Revision;
|
||||
|
||||
} else {
|
||||
existing_set.FirstTimestamp = change_set.Timestamp;
|
||||
}
|
||||
|
||||
squash = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!squash)
|
||||
stored_activity_day.Add (change_set);
|
||||
stored_activity_day.Add (change_set);
|
||||
|
||||
change_set_inserted = true;
|
||||
break;
|
||||
|
@ -434,41 +404,21 @@ namespace SparkleShare {
|
|||
event_entry += "<dd>Did something magical</dd>";
|
||||
|
||||
} else {
|
||||
if (change_set.Added.Count > 0) {
|
||||
foreach (string file_path in change_set.Added) {
|
||||
event_entry += "<dd class='document added'>";
|
||||
event_entry += FormatBreadCrumbs (change_set.Folder.FullPath, file_path);
|
||||
event_entry += "</dd>";
|
||||
}
|
||||
}
|
||||
|
||||
if (change_set.Edited.Count > 0) {
|
||||
foreach (string file_path in change_set.Edited) {
|
||||
event_entry += "<dd class='document edited'>";
|
||||
event_entry += FormatBreadCrumbs (change_set.Folder.FullPath, file_path);
|
||||
event_entry += "</dd>";
|
||||
}
|
||||
}
|
||||
|
||||
if (change_set.Deleted.Count > 0) {
|
||||
foreach (string file_path in change_set.Deleted) {
|
||||
event_entry += "<dd class='document deleted'>";
|
||||
event_entry += FormatBreadCrumbs (change_set.Folder.FullPath, file_path);
|
||||
event_entry += "</dd>";
|
||||
}
|
||||
}
|
||||
foreach (SparkleChange change in change_set.Changes) {
|
||||
if (change.Type != SparkleChangeType.Moved) {
|
||||
|
||||
if (change_set.MovedFrom.Count > 0) {
|
||||
int i = 0;
|
||||
foreach (string file_path in change_set.MovedFrom) {
|
||||
string to_file_path = change_set.MovedTo [i];
|
||||
event_entry += "<dd class='document moved'>";
|
||||
event_entry += FormatBreadCrumbs (change_set.Folder.FullPath, file_path);
|
||||
event_entry += "<dd class='document " + change.Type.ToString ().ToLower () + "'>";
|
||||
event_entry += FormatBreadCrumbs (change_set.Folder.FullPath, change.Path);
|
||||
event_entry += "</dd>";
|
||||
|
||||
} else {
|
||||
|
||||
event_entry += "<dd class='document moved'>";
|
||||
event_entry += FormatBreadCrumbs (change_set.Folder.FullPath, change.Path);
|
||||
event_entry += "<br>";
|
||||
event_entry += FormatBreadCrumbs (change_set.Folder.FullPath, to_file_path);
|
||||
event_entry += FormatBreadCrumbs (change_set.Folder.FullPath, change.MovedPath);
|
||||
event_entry += "</dd>";
|
||||
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue