notes: stop using git-notes, use files instead

This commit is contained in:
Hylke Bons 2011-07-16 23:15:56 +01:00
parent 4ec894bc67
commit f496a3b854
4 changed files with 75 additions and 104 deletions

View file

@ -19,8 +19,6 @@ using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Xml;
@ -122,8 +120,6 @@ namespace SparkleLib {
return true;
} else {
SparkleHelpers.DebugInfo ("Git", "[" + Name + "] Fetching notes");
SyncDown ();
return false;
}
}
@ -386,7 +382,7 @@ namespace SparkleLib {
List <SparkleChangeSet> change_sets = new List <SparkleChangeSet> ();
SparkleGit git_log = new SparkleGit (LocalPath, "log -" + count + " --raw -M --date=iso --show-notes=*");
SparkleGit git_log = new SparkleGit (LocalPath, "log -" + count + " --raw -M --date=iso");
Console.OutputEncoding = System.Text.Encoding.Unicode;
git_log.Start ();
@ -488,29 +484,10 @@ namespace SparkleLib {
change_set.MovedFrom.Add (file_path);
change_set.MovedTo.Add (to_file_path);
}
} else if (entry_line.StartsWith (" <note>")) {
Regex regex_notes = new Regex (@"<name>(.+)</name>.*" +
"<email>(.+)</email>.*" +
"<timestamp>([0-9]+)</timestamp>.*" +
"<body>(.+)</body>", RegexOptions.Compiled);
Match match_notes = regex_notes.Match (entry_line);
if (match_notes.Success) {
SparkleNote note = new SparkleNote () {
UserName = match_notes.Groups [1].Value,
UserEmail = match_notes.Groups [2].Value,
Timestamp = new DateTime (1970, 1, 1).AddSeconds (int.Parse (match_notes.Groups [3].Value)),
Body = match_notes.Groups [4].Value
};
change_set.Notes.Add (note);
}
}
}
change_set.Notes.AddRange (GetNotes (change_set.Revision));
change_sets.Add (change_set);
}
}
@ -587,59 +564,6 @@ namespace SparkleLib {
}
public override void AddNote (string revision, string note)
{
string url = SparkleConfig.DefaultConfig.GetUrlForFolder (Name);
if (url.StartsWith ("git") || url.StartsWith ("http"))
return;
int timestamp = (int) (DateTime.UtcNow - new DateTime (1970, 1, 1)).TotalSeconds;
// Create the note in one line for easier merging
note = "<note>" +
" <user>" +
" <name>" + SparkleConfig.DefaultConfig.UserName + "</name>" +
" <email>" + SparkleConfig.DefaultConfig.UserEmail + "</email>" +
" </user>" +
" <timestamp>" + timestamp + "</timestamp>" +
" <body>" + note + "</body>" +
"</note>";
string note_namespace = SHA1 (timestamp.ToString () + note);
SparkleGit git_notes = new SparkleGit (LocalPath,
"notes --ref=" + note_namespace + " append -m \"" + note + "\" " + revision);
git_notes.Start ();
git_notes.WaitForExit ();
SparkleHelpers.DebugInfo ("Git", "[" + Name + "] Added note to " + revision);
SyncUpNotes ();
}
public override void SyncUpNotes ()
{
while (Status != SyncStatus.Idle) {
System.Threading.Thread.Sleep (5 * 20);
}
SparkleGit git_push = new SparkleGit (LocalPath, "push origin refs/notes/*");
git_push.Start ();
git_push.WaitForExit ();
if (git_push.ExitCode == 0) {
SparkleHelpers.DebugInfo ("Git", "[" + Name + "] Notes pushed");
} else {
HasUnsyncedChanges = true;
SparkleHelpers.DebugInfo ("Git", "[" + Name + "] Pushing notes failed, trying again later");
}
SparkleAnnouncement announcement = new SparkleAnnouncement (Identifier, SHA1 (DateTime.Now.ToString ()));
base.listener.Announce (announcement);
}
public override bool UsesNotificationCenter
{
get {
@ -654,15 +578,5 @@ namespace SparkleLib {
base.CreateInitialChangeSet ();
SyncUp ();
}
// Creates a SHA-1 hash of input
private string SHA1 (string s)
{
SHA1 sha1 = new SHA1CryptoServiceProvider ();
Byte[] bytes = ASCIIEncoding.Default.GetBytes (s);
Byte[] encoded_bytes = sha1.ComputeHash (bytes);
return BitConverter.ToString (encoded_bytes).ToLower ().Replace ("-", "");
}
}
}

View file

@ -18,6 +18,8 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Timers;
using System.Xml;
@ -109,10 +111,8 @@ namespace SparkleLib {
// In the unlikely case that we haven't synced up our
// changes or the server was down, sync up again
if (HasUnsyncedChanges) {
if (HasUnsyncedChanges)
SyncUpBase ();
SyncUpNotes ();
}
};
// Sync up everything that changed
@ -239,10 +239,8 @@ namespace SparkleLib {
SyncDownBase ();
// Push changes that were made since the last disconnect
if (HasUnsyncedChanges) {
if (HasUnsyncedChanges)
SyncUpBase ();
SyncUpNotes ();
}
};
// Start polling when the connection to the irc channel is lost
@ -337,6 +335,42 @@ namespace SparkleLib {
}
public List<SparkleNote> GetNotes (string revision) {
List<SparkleNote> notes = new List<SparkleNote> ();
string notes_path = Path.Combine (LocalPath, ".notes");
if (!Directory.Exists (notes_path))
Directory.CreateDirectory (notes_path);
Regex regex_notes = new Regex (@"<name>(.+)</name>.*" +
"<email>(.+)</email>.*" +
"<timestamp>([0-9]+)</timestamp>.*" +
"<body>(.+)</body>", RegexOptions.Compiled);
foreach (string file_name in Directory.GetFiles (notes_path)) {
if (file_name.StartsWith (revision)) {
string note_xml = String.Join ("", File.ReadAllLines (file_name));
Match match_notes = regex_notes.Match (note_xml);
if (match_notes.Success) {
SparkleNote note = new SparkleNote () {
UserName = match_notes.Groups [1].Value,
UserEmail = match_notes.Groups [2].Value,
Timestamp = new DateTime (1970, 1, 1).AddSeconds (int.Parse (match_notes.Groups [3].Value)),
Body = match_notes.Groups [4].Value
};
notes.Add (note);
}
}
}
return notes;
}
private void SyncUpBase ()
{
try {
@ -452,15 +486,34 @@ namespace SparkleLib {
}
public virtual void AddNote (string revision, string note)
public void AddNote (string revision, string note)
{
string notes_path = Path.Combine (LocalPath, ".notes");
}
if (!Directory.Exists (notes_path))
Directory.CreateDirectory (notes_path);
// Add a timestamp in seconds since unix epoch
int timestamp = (int) (DateTime.UtcNow - new DateTime (1970, 1, 1)).TotalSeconds;
public virtual void SyncUpNotes ()
{
string n = Environment.NewLine;
note = "<note>" + n +
" <user>" + n +
" <name>" + SparkleConfig.DefaultConfig.UserName + "</name>" + n +
" <email>" + SparkleConfig.DefaultConfig.UserEmail + "</email>" + n +
" </user>" + n +
" <timestamp>" + timestamp + "</timestamp>" + n +
" <body>" + note + "</body>" + n +
"</note>" + n;
string note_name = revision + SHA1 (timestamp.ToString () + note);
string note_path = Path.Combine (notes_path, note_name);
StreamWriter writer = new StreamWriter (note_path);
writer.Write (note);
writer.Close ();
SparkleHelpers.DebugInfo ("Note", "Added note to " + revision);
}
@ -489,5 +542,15 @@ namespace SparkleLib {
return size;
}
// Creates a SHA-1 hash of input
private string SHA1 (string s)
{
SHA1 sha1 = new SHA1CryptoServiceProvider ();
Byte[] bytes = ASCIIEncoding.Default.GetBytes (s);
Byte[] encoded_bytes = sha1.ComputeHash (bytes);
return BitConverter.ToString (encoded_bytes).ToLower ().Replace ("-", "");
}
}
}

View file

@ -460,10 +460,6 @@ namespace SparkleShare {
string html = event_log_html.Replace ("<!-- $event-log-content -->", event_log)
.Replace ("<!-- $username -->", UserName);
System.IO.StreamWriter file = new System.IO.StreamWriter (Path.Combine (SparklePaths.SparkleConfigPath, "log-debug.html"));
file.WriteLine (html);
file.Close ();
return html;
}

View file

@ -3,8 +3,6 @@ SUBDIRS = \
html
dist_pixmaps_DATA = \
sparkleshare-gnome.svg \
sparkleshare-mist.svg \
side-splash.png \
about.png