static string GetErrorMessage (LibSvnClient.svn_error_t error) { if (error.message != null) return error.message; else { byte[] buf = new byte [300]; Svn.strerror (error.apr_err, buf, buf.Length); return Encoding.UTF8.GetString (buf); } }
internal static bool CheckInstalled () { // libsvn_client may be linked to libapr-0 or libapr-1, and we need to bind the LibApr class // to the same library. The following code detects the required libapr version and loads it. int aprver = GetLoadAprLib (-1); svn = LibSvnClient.GetLib (); if (svn == null) { LoggingService.LogWarning ("Subversion addin could not load libsvn_client, so it will be disabled."); return false; } aprver = GetLoadAprLib (aprver); if (aprver != -1) LoggingService.LogDebug ("Subversion addin detected libapr-" + aprver); apr = LibApr.GetLib (aprver); if (apr == null) { svn = null; LoggingService.LogInfo ("Subversion addin could not load libapr, so it will be disabled."); return false; } return true; }
static IntPtr OnAuthSslServerTrustPrompt (ref IntPtr cred, IntPtr baton, string realm, UInt32 failures, ref LibSvnClient.svn_auth_ssl_server_cert_info_t cert_info, bool may_save, IntPtr pool) { var data = new LibSvnClient.svn_auth_cred_ssl_server_trust_t (); var ci = new CertficateInfo { AsciiCert = cert_info.ascii_cert, Fingerprint = cert_info.fingerprint, HostName = cert_info.hostname, IssuerName = cert_info.issuer_dname, ValidFrom = cert_info.valid_from, ValidUntil = cert_info.valid_until, }; SslFailure accepted_failures; bool ms; if (SslServerTrustAuthenticationPrompt (realm, (SslFailure) failures, may_save, ci, out accepted_failures, out ms) && accepted_failures != SslFailure.None) { data.may_save = ms ; data.accepted_failures = (uint) accepted_failures; cred = apr.pcalloc (pool, data); return IntPtr.Zero; } else { data.accepted_failures = 0; data.may_save = false; cred = apr.pcalloc (pool, data); return GetCancelError (); } }
void svn_wc_notify_func_t_impl (IntPtr baton, ref LibSvnClient.svn_wc_notify_t data, IntPtr pool) { string actiondesc; string file = Marshal.PtrToStringAnsi (data.path); bool notifyChange = false; bool skipEol = false; // System.Console.WriteLine(data.action); switch (data.action) { case LibSvnClient.NotifyAction.Skip: if (data.content_state == LibSvnClient.NotifyState.Missing) { actiondesc = string.Format (GettextCatalog.GetString ("Skipped missing target: '{0}'"), file); } else { actiondesc = string.Format (GettextCatalog.GetString ("Skipped '{0}'"), file); } break; case LibSvnClient.NotifyAction.UpdateDelete: actiondesc = string.Format (GettextCatalog.GetString ("Deleted '{0}'"), file); break; // case LibSvnClient.NotifyAction.UpdateReplace: // actiondesc = string.Format (GettextCatalog.GetString ("Replaced '{0}'"), file); // break; case LibSvnClient.NotifyAction.UpdateAdd: if (data.content_state == LibSvnClient.NotifyState.Conflicted) { actiondesc = string.Format (GettextCatalog.GetString ("Conflict {0}"), file); } else { actiondesc = string.Format (GettextCatalog.GetString ("Added {0}"), file); } break; // case LibSvnClient.NotifyAction.Exists: // // original is untranslated, we'll make it a bit shorter // actiondesc = data.content_state == LibSvnClient.NotifyState.Conflicted ? "C" : "E"; // if (data.prop_state == LibSvnClient.NotifyState.Conflicted) { // actiondesc += "C"; // } else if (data.prop_state == LibSvnClient.NotifyState.Merged) { // actiondesc += "G"; // } // actiondesc += " {0}"; // actiondesc = string.Format (actiondesc, file); // actiondesc = string.Format (GettextCatalog.GetString ("Exists {0}"), file); // break; case LibSvnClient.NotifyAction.Restore: actiondesc = string.Format (GettextCatalog.GetString ("Restored '{0}'"), file); break; case LibSvnClient.NotifyAction.Revert: actiondesc = string.Format (GettextCatalog.GetString ("Reverted '{0}'"), file); break; case LibSvnClient.NotifyAction.FailedRevert: actiondesc = string.Format (GettextCatalog.GetString ("Failed to revert '{0}' -- try updating instead."), file); break; case LibSvnClient.NotifyAction.Resolved: actiondesc = string.Format (GettextCatalog.GetString ("Resolved conflict state of '{0}'"), file); break; case LibSvnClient.NotifyAction.Add: if (MimeTypeIsBinary (Marshal.PtrToStringAuto (data.mime_type))) { actiondesc = string.Format (GettextCatalog.GetString ("Add (bin) '{0}'"), file); } else { actiondesc = string.Format (GettextCatalog.GetString ("Add '{0}'"), file); } break; case LibSvnClient.NotifyAction.Delete: actiondesc = string.Format (GettextCatalog.GetString ("Delete '{0}'"), file); break; case LibSvnClient.NotifyAction.UpdateUpdate: // original is untranslated, we'll make it a bit shorter /* actiondesc = ""; if (data.content_state == LibSvnClient.NotifyState.Conflicted) { actiondesc += "C"; } else if (data.content_state == LibSvnClient.NotifyState.Merged) { actiondesc += "G"; } else if (data.content_state == LibSvnClient.NotifyState.Changed) { actiondesc += "U"; } if (data.prop_state == LibSvnClient.NotifyState.Conflicted) { actiondesc += "C"; } else if (data.prop_state == LibSvnClient.NotifyState.Merged) { actiondesc += "G"; } else if (data.prop_state == LibSvnClient.NotifyState.Changed) { actiondesc += "U"; } if (data.lock_state == LibSvnClient.NotifyLockState.Unlocked) actiondesc += "B"; actiondesc += " '{0}'"; actiondesc = string.Format (actiondesc, file); */ actiondesc = string.Format (GettextCatalog.GetString ("Update '{0}'"), file); notifyChange = true; break; case LibSvnClient.NotifyAction.UpdateExternal: actiondesc = string.Format (GettextCatalog.GetString ("Fetching external item into '{0}'"), file); break; case LibSvnClient.NotifyAction.UpdateCompleted: // TODO actiondesc = GettextCatalog.GetString ("Finished"); break; case LibSvnClient.NotifyAction.StatusExternal: actiondesc = string.Format (GettextCatalog.GetString ("Performing status on external item at '{0}'"), file); break; case LibSvnClient.NotifyAction.StatusCompleted: actiondesc = string.Format (GettextCatalog.GetString ("Status against revision: '{0}'"), data.revision); break; case LibSvnClient.NotifyAction.CommitDeleted: actiondesc = string.Format (GettextCatalog.GetString ("Deleting {0}"), file); break; case LibSvnClient.NotifyAction.CommitModified: actiondesc = string.Format (GettextCatalog.GetString ("Sending {0}"), file); notifyChange = true; break; case LibSvnClient.NotifyAction.CommitAdded: if (MimeTypeIsBinary (Marshal.PtrToStringAuto (data.mime_type))) { actiondesc = string.Format (GettextCatalog.GetString ("Adding (bin) '{0}'"), file); } else { actiondesc = string.Format (GettextCatalog.GetString ("Adding '{0}'"), file); } break; case LibSvnClient.NotifyAction.CommitReplaced: actiondesc = string.Format (GettextCatalog.GetString ("Replacing {0}"), file); notifyChange = true; break; case LibSvnClient.NotifyAction.CommitPostfixTxDelta: if (!nb.sent_first_txdelta) { actiondesc = GettextCatalog.GetString ("Transmitting file data"); nb.sent_first_txdelta = true; } else { actiondesc = "."; skipEol = true; } break; case LibSvnClient.NotifyAction.Locked: LibSvnClient.svn_lock_t repoLock = (LibSvnClient.svn_lock_t) Marshal.PtrToStructure (data.repo_lock, typeof (LibSvnClient.svn_lock_t)); actiondesc = string.Format (GettextCatalog.GetString ("'{0}' locked by user '{1}'."), file, repoLock.owner); break; case LibSvnClient.NotifyAction.Unlocked: actiondesc = string.Format (GettextCatalog.GetString ("'{0}' unlocked."), file); break; case LibSvnClient.NotifyAction.BlameRevision: actiondesc = string.Format (GettextCatalog.GetString ("Get annotations {0}"), file); break; // case LibSvnClient.NotifyAction.ChangeListSet: // actiondesc = string.Format (GettextCatalog.GetString ("Path '{0}' is now a member of changelist '{1}'."), file, Marshal.PtrToStringAuto (data.changelist_name)); // break; // case LibSvnClient.NotifyAction.ChangeListClear: // actiondesc = string.Format (GettextCatalog.GetString ("Path '{0}' is no longer a member of a changelist."), file); // break; default: LoggingService.LogDebug ("untranslated action:" + data.action); actiondesc = data.action.ToString () + " " + file; break; /* StatusCompleted, StatusExternal, BlameRevision*/ } if (updatemonitor != null && !string.IsNullOrEmpty (actiondesc)) { Runtime.RunInMainThread (() => { if (skipEol) { updatemonitor.Log.Write (actiondesc); } else { updatemonitor.Log.WriteLine (actiondesc); } }); } if (updateFileList != null && notifyChange && File.Exists (file)) updateFileList.Add (file); if (lockFileList != null && data.lock_state == requiredLockState) lockFileList.Add (file); }
static VersionStatus ConvertStatus (LibSvnClient.NodeSchedule schedule, LibSvnClient.svn_wc_status_kind status) { switch (schedule) { case LibSvnClient.NodeSchedule.Add: return VersionStatus.Versioned | VersionStatus.ScheduledAdd; case LibSvnClient.NodeSchedule.Delete: return VersionStatus.Versioned | VersionStatus.ScheduledDelete; case LibSvnClient.NodeSchedule.Replace: return VersionStatus.Versioned | VersionStatus.ScheduledReplace; } switch (status) { case LibSvnClient.svn_wc_status_kind.None: return VersionStatus.Versioned; case LibSvnClient.svn_wc_status_kind.Normal: return VersionStatus.Versioned; case LibSvnClient.svn_wc_status_kind.Unversioned: return VersionStatus.Unversioned; case LibSvnClient.svn_wc_status_kind.Modified: return VersionStatus.Versioned | VersionStatus.Modified; case LibSvnClient.svn_wc_status_kind.Merged: return VersionStatus.Versioned | VersionStatus.Modified; case LibSvnClient.svn_wc_status_kind.Conflicted: return VersionStatus.Versioned | VersionStatus.Conflicted; case LibSvnClient.svn_wc_status_kind.Ignored: return VersionStatus.Unversioned | VersionStatus.Ignored; case LibSvnClient.svn_wc_status_kind.Obstructed: return VersionStatus.Versioned; case LibSvnClient.svn_wc_status_kind.Added: return VersionStatus.Versioned | VersionStatus.ScheduledAdd; case LibSvnClient.svn_wc_status_kind.Deleted: return VersionStatus.Versioned | VersionStatus.ScheduledDelete; case LibSvnClient.svn_wc_status_kind.Replaced: return VersionStatus.Versioned | VersionStatus.ScheduledReplace; } return VersionStatus.Unversioned; }
static VersionInfo CreateNode (LibSvnClient.StatusEnt ent, Repository repo) { VersionStatus rs = VersionStatus.Unversioned; Revision rr = null; if (ent.RemoteTextStatus != LibSvnClient.svn_wc_status_kind.EMPTY) { rs = ConvertStatus (LibSvnClient.NodeSchedule.Normal, ent.RemoteTextStatus); rr = new SvnRevision (repo, ent.LastCommitRevision, ent.LastCommitDate, ent.LastCommitAuthor, GettextCatalog.GetString ("(unavailable)"), null); } VersionStatus status = ConvertStatus (ent.Schedule, ent.TextStatus); bool readOnly = File.Exists (ent.LocalFilePath) && (File.GetAttributes (ent.LocalFilePath) & FileAttributes.ReadOnly) != 0; if (ent.RepoLocked) { status |= VersionStatus.LockRequired; if (ent.LockOwned) status |= VersionStatus.LockOwned; else status |= VersionStatus.Locked; } else if (readOnly) status |= VersionStatus.LockRequired; VersionInfo ret = new VersionInfo (ent.LocalFilePath, ent.Url, ent.IsDirectory, status, new SvnRevision (repo, ent.Revision), rs, rr); return ret; }
private void Merge (string path, LibSvnClient.Rev revision1, LibSvnClient.Rev revision2) { IntPtr localpool = IntPtr.Zero; try { localpool = TryStartOperation (null); path = NormalizePath (path, localpool); LibSvnClient.Rev working = LibSvnClient.Rev.Working; CheckError (svn.client_merge_peg2 (path, ref revision1, ref revision2, ref working, path, false, false, false, false, IntPtr.Zero, //default options is NULL ctx, localpool)); } finally { TryEndOperation (localpool); } }
private void Merge (string path, LibSvnClient.Rev revision1, LibSvnClient.Rev revision2) { IntPtr localpool = newpool (pool); try { path = NormalizePath (path, localpool); LibSvnClient.Rev working = LibSvnClient.Rev.Working; CheckError (svn.client_merge_peg2 (path, ref revision1, ref revision2, ref working, path, false, false, false, false, IntPtr.Zero, //default options is NULL ctx, localpool)); } finally { apr.pool_destroy (localpool); } return; }
static IntPtr OnAuthSslServerTrustPrompt (ref IntPtr cred, IntPtr baton, [MarshalAs (UnmanagedType.LPStr)] string realm, uint failures, ref LibSvnClient.svn_auth_ssl_server_cert_info_t cert_info, [MarshalAs (UnmanagedType.SysInt)] int may_save, IntPtr pool) { LibSvnClient.svn_auth_cred_ssl_server_trust_t data = new LibSvnClient.svn_auth_cred_ssl_server_trust_t (); CertficateInfo ci = new CertficateInfo (); ci.AsciiCert = cert_info.ascii_cert; ci.Fingerprint = cert_info.fingerprint; ci.HostName = cert_info.hostname; ci.IssuerName = cert_info.issuer_dname; ci.ValidFrom = cert_info.valid_from; ci.ValidUntil = cert_info.valid_until; SslFailure accepted_failures; bool ms; if (SslServerTrustAuthenticationPrompt (realm, (SslFailure) failures, may_save != 0, ci, out accepted_failures, out ms) && accepted_failures != SslFailure.None) { data.may_save = ms ? 1 : 0; data.accepted_failures = (uint) accepted_failures; cred = apr.pcalloc (pool, data); return IntPtr.Zero; } else { data.accepted_failures = 0; data.may_save = 0; cred = apr.pcalloc (pool, data); return GetCancelError (); } }
public void Func (IntPtr baton, IntPtr path, ref LibSvnClient.svn_wc_status_t status) { string pathstr = Marshal.PtrToStringAnsi (path); /*if (status.to_svn_wc_entry_t == IntPtr.Zero) return; */ statuses.Add (new LibSvnClient.StatusEnt (status, pathstr)); }
private void Merge (string path, LibSvnClient.Rev revision1, LibSvnClient.Rev revision2) { IntPtr localpool = newpool (pool); LibSvnClient.Rev working = LibSvnClient.Rev.Working; CheckError (svn.client_merge_peg2 (path, ref revision1, ref revision2, ref working, path, false, false, false, false, IntPtr.Zero, //default options is NULL ctx, localpool)); return; }