diff --git a/SparkleShare/Nautilus/sparkleshare-nautilus-extension.py b/SparkleShare/Nautilus/sparkleshare-nautilus-extension.py index 84e2b5c9..56885fb1 100644 --- a/SparkleShare/Nautilus/sparkleshare-nautilus-extension.py +++ b/SparkleShare/Nautilus/sparkleshare-nautilus-extension.py @@ -12,64 +12,121 @@ # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with this program. If not, see . +import os +import shutil import time + import gio import nautilus -import os -SPARKLESHARE_DIR = os.path.expanduser ('~') + '/SparkleShare' +SPARKLESHARE_PATH = os.path.join (os.path.expanduser ('~'), "SparkleShare") class SparkleShareExtension (nautilus.MenuProvider): + def __init__ (self): - name = "Loaded Nautilus SparkleShareExtension." + debug = "Loaded Nautilus SparkleShare Extension." - def checkout_file (commit) + + def checkout_version (self, menu, file_reference, commit_hash, username, timestamp): + + file_name = file_reference.get_basename ().replace (" ", "\ ").replace ("(", "\(").replace (")", "\)") + file_path = file_reference.get_path ().replace (" ", "\ ").replace ("(", "\(").replace (")", "\)") + tmp_file_path = os.path.join (SPARKLESHARE_PATH, ".tmp", file_reference.get_basename ()) + + # Move the current version to a temporary path + shutil.move (file_reference.get_path (), tmp_file_path) + + # Check out the earlier version + os.chdir (file_reference.get_parent ().get_path ()) + os.popen ("git checkout " + commit_hash + " " + file_name + .replace (" ", "\ ").replace ("(", "\(").replace (")", "\)")) + + new_tmp_file_name = file_name + " (" + username + ", " + new_tmp_file_name += time.strftime ("%H:%M %d %b %Y", timestamp).replace (" 0", " ") + ") " + + # Rename the checked out file + shutil.move (file_name, new_tmp_file_name) + + # Move the original file back + shutil.move (tmp_file_path, file_path) + + return True + + + def compare_versions (self, menu, file_reference): return + def get_file_items (self, window, files): - # Only work when one file is selected + # Only work if one file is selected if len (files) != 1: return file_reference = gio.File (files [0].get_uri ()) - # Only work if we're in a SparkleShare repo - if file_reference.get_path () [:len (SPARKLESHARE_DIR)] != SPARKLESHARE_DIR: + # Only work if we're in a SparkleShare repository folder + if not (file_reference.get_path ().startswith (SPARKLESHARE_PATH)): return - item = nautilus.MenuItem ("Nautilus::OpenOlderVersion", "Get Earlier Version", - "Make a copy of an earlier version in this folder") - - submenu = nautilus.Menu () - item.set_submenu (submenu) - - timestamps = array ([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) + epochs = ["", "", "", "", "", "", "", "", "", ""] + commit_hashes = ["", "", "", "", "", "", "", "", "", ""] os.chdir (file_reference.get_parent ().get_path ()) - time_command = os.popen ("git log -10 --format='%at' " + file_reference.get_path ()) - author_command = os.popen ("git log -10 --format='%an' " + file_reference.get_path ()) + + time_command = os.popen ("git log -10 --format='%at' " + file_reference.get_path () + .replace (" ", "\ ").replace ("(", "\(").replace (")", "\)")) + + author_command = os.popen ("git log -10 --format='%an' " + file_reference.get_path () + .replace (" ", "\ ").replace ("(", "\(").replace (")", "\)")) + + hash_command = os.popen ("git log -10 --format='%H' " + file_reference.get_path () + .replace (" ", "\ ").replace ("(", "\(").replace (")", "\)")) i = 0 for line in time_command.readlines (): - timestamps [i] = line + epochs [i] = line.strip ("\n") i += 1 + if i < 2: + return + + i = 0 + for line in hash_command.readlines (): + commit_hashes [i] = line.strip ("\n") + i += 1 + + earlier_version_menu_item = nautilus.MenuItem ("Nautilus::OpenOlderVersion", "Get Earlier Version", + "Make a copy of an earlier version in this folder") + submenu = nautilus.Menu () + i = 0 for line in author_command.readlines (): - timestamp = time.strftime ("%a, %d %b %Y %H:%M", time.localtime (timestamps [i])) - submenu.append_item (nautilus.MenuItem ("Nautilus::Version" + timestamps [i], timestamp + - " " + line.strip ("\n"), - "Select to get a copy of this version")) + + if i > 0: + + timestamp = time.strftime ("%d %b\t%H:%M", time.localtime (float (epochs [i]))) + username = line.strip ("\n") + + menu_item = nautilus.MenuItem ("Nautilus::Version" + epochs [i], + timestamp + "\t" + username, + "Select to get a copy of this version") + + menu_item.connect ("activate", self.checkout_version, file_reference, commit_hashes [i], + username, time.localtime (float (epochs [i]))) + submenu.append_item (menu_item) + i += 1 - item_open_log = nautilus.MenuItem ("Nautilus::s", "Open Event Log" + file_reference.get_path (), - "Open the event log to see more versions") - - submenu.append_item(item_open_log) + earlier_version_menu_item.set_submenu (submenu) - return item, +# compare_versions_menu_item = nautilus.MenuItem ("Nautilus::CompareVersions", "Compare Versions", +# "Compare two versions of this document at any point in time") + +# compare_versions_menu_item = menu_item.connect ("activate", self.compare_versions, file_reference) + + return earlier_version_menu_item, diff --git a/SparkleShare/SparkleRepo.cs b/SparkleShare/SparkleRepo.cs index d9dac422..8d856d6a 100644 --- a/SparkleShare/SparkleRepo.cs +++ b/SparkleShare/SparkleRepo.cs @@ -257,10 +257,10 @@ namespace SparkleShare { Process.Start (); DateTime DateTime = new DateTime (); - string TimeStamp = DateTime.Now.ToString ("H:mm, d MMM yyyy"); + string TimeStamp = DateTime.Now.ToString ("H:mm d MMM yyyy"); File.Move (ProblemFileName, - ProblemFileName + " (" + UserName + " - " + TimeStamp + ")"); + ProblemFileName + " (" + UserName + ", " + TimeStamp + ")"); Process.StartInfo.Arguments = "checkout --theirs " + ProblemFileName;