public override bool Fetch()
        {
            SparkleRsync rsync = new SparkleRsync (SparkleConfig.DefaultConfig.TmpPath,
                "-e \"ssh -p " + this.rsync.port + "\" " + "-azviP \"" + this.rsync.rsync_remote_url + "\" " + "\"" + base.target_folder + "\"");

            rsync.Start ();
            rsync.WaitForExit ();

            SparkleHelpers.DebugInfo ("Rsync", "Exit code " + rsync.ExitCode.ToString ());

            if (rsync.ExitCode != 0) {
                return false;
            } else {
                InstallConfiguration ();
                InstallExcludeRules ();
                return true;
            }
        }
        private string RemoteChanges()
        {
            // TODO: Check if there is an equivalent for --itemize which has been
            // removed because of not being detected
            SparkleRsync rsync = new SparkleRsync (LocalPath,
                "--archive --compress --dry-run --partial --delete --exclude-from=.sparkleshare \"" + Url + "\" " + ".");

            rsync.Start ();
            rsync.WaitForExit ();

            string remote_revision = rsync.StandardOutput.ReadToEnd ().TrimEnd ();

            return remote_revision ;
        }
        private void ResolveConflict()
        {
            //some conflict resolution code in python: http://sujitpal.blogspot.com/2009/12/unison-replacement-with-rsync.htm

            //local changes
            // TODO: Check if there is an equivalent for --itemize which has been
            // removed because of not being detected
            SparkleRsync rsync = new SparkleRsync (LocalPath,
                "--archive --compress --dry-run --partial --delete --exclude-from=.sparkleshare " + "\"" + Url + "\"");

            rsync.Start ();
            rsync.WaitForExit ();

            string local_changes = rsync.StandardOutput.ReadToEnd ().TrimEnd ();

            //remote changes
            // TODO: Check if there is an equivalent for --itemize which has been
            // removed because of not being detected
            rsync = new SparkleRsync (LocalPath,
                "--archive --compress --dry-run --partial --delete --exclude-from=.sparkleshare \"" + Url + "\" " + ".");

            rsync.Start ();
            rsync.WaitForExit ();

            string remote_changes = rsync.StandardOutput.ReadToEnd ().TrimEnd ();

            //need to compare local_changes with remote_changes to check for overlapping files
            //look at each overlap and see if they are both modified or:
            //it the local version has been modified, but the server version was removed
            //and the opposite, where the local version was deleted and the server version was modified
            //for simple conflicts where the local and server version were both modified
            //(need to look at timestamps and rsync log since rsync doesn't have a record of modifications)
            //just apply a suffix (usernames + timestamps) and keep both files

            //**DELETED FILES**
            //there is a complexity that arrises when a file is locally modified by one person after being deleted on the server by someone else
            //since there is no record of if the file was actually locally modified other than the timestamp
            //might need to compare the modification-timestamp of the local files to the time of last sync (from the log)
            //for files that are deleted on the server, then if they were modified copy them to the server with a suffix
            //otherwise delete them locally...

            //the rsync dry run will report which files are scheduled for deletion in the upcoming sync

            //the output from the rsync command can inform if the file was deleted
            //see: http://samba.anu.edu.au/ftp/rsync/rsync.html section on itemize changes

            // Append a timestamp to local version
            string timestamp = DateTime.Now.ToString ("HH:mm MMM d");
        }
        //the option --inplace is good if your server uses block level snapshots (ex. ZFS) but it increases network throughput
        //maybe make a config file option?
        //Windows<->Solaris will want to use -A to preserve ACLs
        //--delete will delete files on the server that were deleted locally (need to make sure that the server copy wasnt modified...)
        public override bool SyncUp()
        {
            //delete can cause problems -- see comments in the conflict code
            // TODO: Check if there is an equivalent for --itemize which has been
            // removed because of not being detected
            SparkleRsync rsync = new SparkleRsync (LocalPath,
                "--archive --compress --partial --delete --delete-during --exclude-from=.sparkleshare --log-file=.rsynclog . " + "\"" + Url + "\"");

            rsync.Start ();
            rsync.WaitForExit ();

            if (rsync.ExitCode == 0)
                return true;
            else
                return false;
        }