diff --git a/src/AddIns/Misc/SubversionAddIn/Project/Resources/ClientCertDialog.xfrm b/src/AddIns/Misc/SubversionAddIn/Project/Resources/ClientCertDialog.xfrm deleted file mode 100644 index 39bbea233c..0000000000 --- a/src/AddIns/Misc/SubversionAddIn/Project/Resources/ClientCertDialog.xfrm +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/AddIns/Misc/SubversionAddIn/Project/Resources/ClientCertPassphraseDialog.xfrm b/src/AddIns/Misc/SubversionAddIn/Project/Resources/ClientCertPassphraseDialog.xfrm deleted file mode 100644 index f542a001c6..0000000000 --- a/src/AddIns/Misc/SubversionAddIn/Project/Resources/ClientCertPassphraseDialog.xfrm +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/AddIns/Misc/SubversionAddIn/Project/Resources/LoginDialog.xfrm b/src/AddIns/Misc/SubversionAddIn/Project/Resources/LoginDialog.xfrm deleted file mode 100644 index 725b607914..0000000000 --- a/src/AddIns/Misc/SubversionAddIn/Project/Resources/LoginDialog.xfrm +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/AddIns/Misc/SubversionAddIn/Project/Resources/SslServerTrustDialog.xfrm b/src/AddIns/Misc/SubversionAddIn/Project/Resources/SslServerTrustDialog.xfrm deleted file mode 100644 index 3dc9cfe51c..0000000000 --- a/src/AddIns/Misc/SubversionAddIn/Project/Resources/SslServerTrustDialog.xfrm +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/AddIns/Misc/SubversionAddIn/Project/Src/Commands/AutostartCommands.cs b/src/AddIns/Misc/SubversionAddIn/Project/Src/Commands/AutostartCommands.cs index 9fa295a2d6..23d976109e 100644 --- a/src/AddIns/Misc/SubversionAddIn/Project/Src/Commands/AutostartCommands.cs +++ b/src/AddIns/Misc/SubversionAddIn/Project/Src/Commands/AutostartCommands.cs @@ -22,9 +22,6 @@ namespace ICSharpCode.Svn.Commands /// public sealed class RegisterEventsCommand : AbstractCommand { - const int CannotDeleteFileWithLocalModifications = 195006; - const int CannotDeleteFileNotUnderVersionControl = 200005; - public override void Run() { FileService.FileRemoving += FileRemoving; @@ -231,11 +228,11 @@ namespace ICSharpCode.Svn.Commands try { client.Delete(new string[] { fullName }, false); } catch (SvnClientException ex) { - LoggingService.Warn("SVN Error code " + ex.ErrorCode); + LoggingService.Warn("SVN Error" + ex); LoggingService.Warn(ex); - if (ex.ErrorCode == CannotDeleteFileWithLocalModifications - || ex.ErrorCode == CannotDeleteFileNotUnderVersionControl) + if (ex.IsKnownError(KnownError.CannotDeleteFileWithLocalModifications) + || ex.IsKnownError(KnownError.CannotDeleteFileNotUnderVersionControl)) { if (MessageService.ShowCustomDialog("${res:AddIns.Subversion.DeleteDirectory}", StringParser.Parse("${res:AddIns.Subversion.ErrorDelete}:\n", new string[,] { { "File", fullName } }) + @@ -339,7 +336,6 @@ namespace ICSharpCode.Svn.Commands } e.OperationAlreadyDone = true; client.Copy(fullSource, - Revision.Working, Path.GetFullPath(e.TargetFile) ); } diff --git a/src/AddIns/Misc/SubversionAddIn/Project/Src/Gui/AuthentificationDialogs/ClientCertDialog.cs b/src/AddIns/Misc/SubversionAddIn/Project/Src/Gui/AuthentificationDialogs/ClientCertDialog.cs deleted file mode 100644 index 2ea7d81f4c..0000000000 --- a/src/AddIns/Misc/SubversionAddIn/Project/Src/Gui/AuthentificationDialogs/ClientCertDialog.cs +++ /dev/null @@ -1,65 +0,0 @@ -// -// -// -// -// $Revision$ -// - -using System; -using System.Reflection; -using System.Windows.Forms; - -using ICSharpCode.SharpDevelop.Gui.XmlForms; -using PumaCode.SvnDotNet.AprSharp; -using PumaCode.SvnDotNet.SubversionSharp; - -namespace ICSharpCode.Svn.Gui -{ - /// - /// Description of LoginDialog. - /// - public class ClientCertDialog : BaseSharpDevelopForm - { - public string Realm { - get { - return ControlDictionary["realmLabel"].Text; - } - set { - ControlDictionary["realmLabel"].Text = value; - } - } - - public string FileName { - get { - return ControlDictionary["pathTextBox"].Text; - } - set { - ControlDictionary["pathTextBox"].Text = value; - } - } - - public bool MaySave { - get { - return ((CheckBox)ControlDictionary["saveCredentialsCheckBox"]).Checked; - } - set { - ((CheckBox)ControlDictionary["saveCredentialsCheckBox"]).Checked = value; - } - } - - public SvnAuthCredSslClientCert CreateCredential(AprPool pool) - { - SvnAuthCredSslClientCert cred = SvnAuthCredSslClientCert.Alloc(pool); - cred.CertFile = new SvnPath(FileName, pool); - cred.MaySave = MaySave; - return cred; - } - - public ClientCertDialog(string realm, bool maySave) - { - SetupFromXmlStream(Assembly.GetExecutingAssembly().GetManifestResourceStream("ICSharpCode.Svn.Resources.ClientCertDialog.xfrm")); - this.Realm = realm; - this.MaySave = maySave; - } - } -} diff --git a/src/AddIns/Misc/SubversionAddIn/Project/Src/Gui/AuthentificationDialogs/ClientCertPassphraseDialog.cs b/src/AddIns/Misc/SubversionAddIn/Project/Src/Gui/AuthentificationDialogs/ClientCertPassphraseDialog.cs deleted file mode 100644 index b435ad3380..0000000000 --- a/src/AddIns/Misc/SubversionAddIn/Project/Src/Gui/AuthentificationDialogs/ClientCertPassphraseDialog.cs +++ /dev/null @@ -1,65 +0,0 @@ -// -// -// -// -// $Revision$ -// - -using System; -using System.Reflection; -using System.Windows.Forms; - -using ICSharpCode.SharpDevelop.Gui.XmlForms; -using PumaCode.SvnDotNet.AprSharp; -using PumaCode.SvnDotNet.SubversionSharp; - -namespace ICSharpCode.Svn.Gui -{ - /// - /// Description of LoginDialog. - /// - public class ClientCertPassphraseDialog : BaseSharpDevelopForm - { - public string Realm { - get { - return ControlDictionary["realmLabel"].Text; - } - set { - ControlDictionary["realmLabel"].Text = value; - } - } - - public string Passphrase { - get { - return ControlDictionary["passPhraseTextBox"].Text; - } - set { - ControlDictionary["passPhraseTextBox"].Text = value; - } - } - - public bool MaySave { - get { - return ((CheckBox)ControlDictionary["saveCredentialsCheckBox"]).Checked; - } - set { - ((CheckBox)ControlDictionary["saveCredentialsCheckBox"]).Checked = value; - } - } - - public SvnAuthCredSslClientCertPw CreateCredential(AprPool pool) - { - SvnAuthCredSslClientCertPw cred = SvnAuthCredSslClientCertPw.Alloc(pool); - cred.CertFile = new SvnPath(Passphrase, pool); // this should be cred.Password, the property is named incorrectly in Svn.Net - cred.MaySave = MaySave; - return cred; - } - - public ClientCertPassphraseDialog(string realm, bool maySave) - { - SetupFromXmlStream(Assembly.GetExecutingAssembly().GetManifestResourceStream("ICSharpCode.Svn.Resources.ClientCertPassphraseDialog.xfrm")); - this.Realm = realm; - this.MaySave = maySave; - } - } -} diff --git a/src/AddIns/Misc/SubversionAddIn/Project/Src/Gui/AuthentificationDialogs/LoginDialog.cs b/src/AddIns/Misc/SubversionAddIn/Project/Src/Gui/AuthentificationDialogs/LoginDialog.cs deleted file mode 100644 index 01c76a0493..0000000000 --- a/src/AddIns/Misc/SubversionAddIn/Project/Src/Gui/AuthentificationDialogs/LoginDialog.cs +++ /dev/null @@ -1,124 +0,0 @@ -// -// -// -// -// $Revision$ -// - -using System; -using System.Reflection; -using System.Windows.Forms; - -using ICSharpCode.SharpDevelop.Gui.XmlForms; -using PumaCode.SvnDotNet.AprSharp; -using PumaCode.SvnDotNet.SubversionSharp; - -namespace ICSharpCode.Svn.Gui -{ - /// - /// Description of LoginDialog. - /// - public class LoginDialog : BaseSharpDevelopForm - { - public bool MaySave { - get { - return ((CheckBox)ControlDictionary["saveCredentialsCheckBox"]).Checked; - } - set { - ((CheckBox)ControlDictionary["saveCredentialsCheckBox"]).Checked = value; - } - } - - public string Realm { - get { - return ControlDictionary["realmLabel"].Text; - } - set { - ControlDictionary["realmLabel"].Text = value; - } - } - - public string UserName { - get { - return ControlDictionary["userNameTextBox"].Text; - } - set { - ControlDictionary["userNameTextBox"].Text = value; - } - } - - public SvnAuthCredSimple CreateCredential(AprPool pool) - { - SvnAuthCredSimple cred = SvnAuthCredSimple.Alloc(pool); - cred.Username = new AprString(UserName, pool); - cred.Password = new AprString(Password, pool); - cred.MaySave = MaySave; - return cred; - } - - string Password { - get { - return ControlDictionary["pwd1TextBox"].Text; - } - } - - string ReTypedPassword { - get { - return ControlDictionary["pwd2TextBox"].Text; - } - } - - bool ShowPasswords { - get { - return ((CheckBox)ControlDictionary["showPasswordCheckBox"]).Checked; - } - } - - public LoginDialog(string realm, string userName, bool maySave) - { - SetupFromXmlStream(Assembly.GetExecutingAssembly().GetManifestResourceStream("ICSharpCode.Svn.Resources.LoginDialog.xfrm")); - this.UserName = userName; - this.Realm = realm; - this.MaySave = maySave; - ((CheckBox)ControlDictionary["showPasswordCheckBox"]).CheckedChanged += new EventHandler(ShowPasswordCheckBoxCheckedChanged); - ((TextBox)ControlDictionary["pwd1TextBox"]).PasswordChar = '*'; - ((TextBox)ControlDictionary["pwd2TextBox"]).PasswordChar = '*'; - - ((TextBox)ControlDictionary["pwd1TextBox"]).TextChanged += new EventHandler(PasswordTextChanged); - ((TextBox)ControlDictionary["pwd2TextBox"]).TextChanged += new EventHandler(PasswordTextChanged); - - ControlDictionary["okButton"].Click += new EventHandler(OkButtonClicked); - } - - void ShowPasswordCheckBoxCheckedChanged(object sender, EventArgs e) - { - if (ShowPasswords) { - ((TextBox)ControlDictionary["pwd1TextBox"]).PasswordChar = '\0'; - ((TextBox)ControlDictionary["pwd2TextBox"]).Enabled = false; - } else { - ((TextBox)ControlDictionary["pwd1TextBox"]).PasswordChar = '*'; - ((TextBox)ControlDictionary["pwd2TextBox"]).Enabled = true; - } - } - - void PasswordTextChanged(object sender, EventArgs e) - { - ControlDictionary["okButton"].Enabled = ShowPasswords || Password == ReTypedPassword; - } - - void OkButtonClicked(object sender, EventArgs e) - { - bool done = false; - if (ShowPasswords) { - done = UserName.Length > 0 && Password.Length > 0; - } else { - done = Password == ReTypedPassword; - } - - if (done) { - DialogResult = DialogResult.OK; - } - } - - } -} diff --git a/src/AddIns/Misc/SubversionAddIn/Project/Src/Gui/AuthentificationDialogs/SslServerTrustDialog.cs b/src/AddIns/Misc/SubversionAddIn/Project/Src/Gui/AuthentificationDialogs/SslServerTrustDialog.cs deleted file mode 100644 index f767216724..0000000000 --- a/src/AddIns/Misc/SubversionAddIn/Project/Src/Gui/AuthentificationDialogs/SslServerTrustDialog.cs +++ /dev/null @@ -1,124 +0,0 @@ -// -// -// -// -// $Revision$ -// - -using System; -using System.Drawing; -using System.Reflection; -using System.Windows.Forms; - -using ICSharpCode.SharpDevelop.Gui.XmlForms; -using PumaCode.SvnDotNet.AprSharp; -using PumaCode.SvnDotNet.SubversionSharp; - -namespace ICSharpCode.Svn.Gui -{ - /// - /// Description of LoginDialog. - /// - public class SslServerTrustDialog : BaseSharpDevelopForm - { - SvnAuthSslServerCertInfo certificateInfo; - SvnAuthCredSslServerTrust.CertFailures failures; - - public SvnAuthSslServerCertInfo CertificateInfo { - get { - return certificateInfo; - } - set { - certificateInfo = value; - UpdateCertificateInfo(); - } - } - - public SvnAuthCredSslServerTrust.CertFailures Failures { - get { - return failures; - } - set { - failures = value; - UpdateFailures(); - } - } - - public bool MaySave { - get { - return ((CheckBox)ControlDictionary["saveCredentialsCheckBox"]).Checked; - } - set { - ((CheckBox)ControlDictionary["saveCredentialsCheckBox"]).Checked = value; - } - } - - public SvnAuthCredSslServerTrust CreateCredential(AprPool pool) - { - SvnAuthCredSslServerTrust cred = SvnAuthCredSslServerTrust.Alloc(pool); - cred.AcceptedFailures = failures; - cred.MaySave = MaySave; - return cred; - } - - public SslServerTrustDialog(SvnAuthSslServerCertInfo certificateInfo, SvnAuthCredSslServerTrust.CertFailures failures, bool maySave) - { - SetupFromXmlStream(Assembly.GetExecutingAssembly().GetManifestResourceStream("ICSharpCode.Svn.Resources.SslServerTrustDialog.xfrm")); - this.CertificateInfo = certificateInfo; - this.Failures = failures; - this.MaySave = maySave; - } - - void UpdateCertificateInfo() - { - if (!certificateInfo.IsNull) { - ControlDictionary["hostNameLabel"].Text = certificateInfo.Hostname.Value; - ControlDictionary["fingerPrintlabel"].Text = certificateInfo.Fingerprint.Value; - ControlDictionary["validLabel"].Text = "From " + certificateInfo.ValidFrom + " to " + certificateInfo.ValidUntil; - ControlDictionary["issuerLabel"].Text = certificateInfo.IssuerDName.Value; - ControlDictionary["certificateTextBox"].Text = certificateInfo.AsciiCert.Value; - } else { - ControlDictionary["hostNameLabel"].Text = String.Empty; - ControlDictionary["fingerPrintlabel"].Text = String.Empty; - ControlDictionary["validLabel"].Text = String.Empty; - ControlDictionary["issuerLabel"].Text = String.Empty; - ControlDictionary["certificateTextBox"].Text = String.Empty; - } - } - - bool HasFailures(SvnAuthCredSslServerTrust.CertFailures testFailures) - { - return (failures & testFailures) == testFailures; - } - - void UpdateFailures() - { - if (HasFailures(SvnAuthCredSslServerTrust.CertFailures.UnknownCA)) { - ControlDictionary["certificateAuthorityStatusLabel"].Text = "The issuing certificate authority(CA) is not trusted."; - ControlDictionary["certificateAuthorityStatusLabel"].ForeColor = Color.Red; - } else { - ControlDictionary["certificateAuthorityStatusLabel"].Text = "The issuing certificate authority(CA) is known and trusted."; - ControlDictionary["certificateAuthorityStatusLabel"].ForeColor = Color.Green; - } - - if (HasFailures(SvnAuthCredSslServerTrust.CertFailures.CNMismatch)) { - ControlDictionary["certificateNameStatusLabel"].Text = "The certificate's hostname does not match the hostname of the server."; - ControlDictionary["certificateNameStatusLabel"].ForeColor = Color.Red; - } else { - ControlDictionary["certificateNameStatusLabel"].Text = "The certificate's hostname matches the hostname of the server."; - ControlDictionary["certificateNameStatusLabel"].ForeColor = Color.Green; - } - - if (HasFailures(SvnAuthCredSslServerTrust.CertFailures.Expired)) { - ControlDictionary["certificateDateStatusLabel"].Text = "The server certificate has expired."; - ControlDictionary["certificateDateStatusLabel"].ForeColor = Color.Red; - } else if (HasFailures(SvnAuthCredSslServerTrust.CertFailures.NotYetValid)) { - ControlDictionary["certificateDateStatusLabel"].Text = "The server certificate is not yet valid."; - ControlDictionary["certificateDateStatusLabel"].ForeColor = Color.Red; - } else { - ControlDictionary["certificateDateStatusLabel"].Text = "The server certificate date is valid."; - ControlDictionary["certificateDateStatusLabel"].ForeColor = Color.Green; - } - } - } -} diff --git a/src/AddIns/Misc/SubversionAddIn/Project/Src/Gui/HistoryViewDisplayBinding/HistoryViewPanel.cs b/src/AddIns/Misc/SubversionAddIn/Project/Src/Gui/HistoryViewDisplayBinding/HistoryViewPanel.cs index 9bb828fa07..cc271800da 100644 --- a/src/AddIns/Misc/SubversionAddIn/Project/Src/Gui/HistoryViewDisplayBinding/HistoryViewPanel.cs +++ b/src/AddIns/Misc/SubversionAddIn/Project/Src/Gui/HistoryViewDisplayBinding/HistoryViewPanel.cs @@ -88,7 +88,7 @@ namespace ICSharpCode.Svn LoggingService.Info("SVN: Get log of " + fileName); if (File.Exists(fileName)) { using (SvnClientWrapper client = new SvnClientWrapper()) { - client.AllowInteractiveAuthorization = true; + client.AllowInteractiveAuthorization(); client.Log(new string[] { fileName }, Revision.Head, // Revision start Revision.FromNumber(1), // Revision end diff --git a/src/AddIns/Misc/SubversionAddIn/Project/Src/Gui/HistoryViewDisplayBinding/InfoPanel.cs b/src/AddIns/Misc/SubversionAddIn/Project/Src/Gui/HistoryViewDisplayBinding/InfoPanel.cs index 712f61f1d3..689e00001b 100644 --- a/src/AddIns/Misc/SubversionAddIn/Project/Src/Gui/HistoryViewDisplayBinding/InfoPanel.cs +++ b/src/AddIns/Misc/SubversionAddIn/Project/Src/Gui/HistoryViewDisplayBinding/InfoPanel.cs @@ -54,7 +54,7 @@ namespace ICSharpCode.Svn revisionListView.Controls.Add(txt); } - int lastRevision = -1; + long lastRevision = -1; public void AddLogMessage(LogMessage logMessage) { @@ -131,7 +131,7 @@ namespace ICSharpCode.Svn LogMessage logMessage = (LogMessage)loadChangedPathsItem.Tag; string fileName = System.IO.Path.GetFullPath(viewContent.PrimaryFileName); using (SvnClientWrapper client = new SvnClientWrapper()) { - client.AllowInteractiveAuthorization = true; + client.AllowInteractiveAuthorization(); try { client.Log(new string[] { fileName }, Revision.FromNumber(logMessage.Revision), // Revision start @@ -141,7 +141,7 @@ namespace ICSharpCode.Svn false, // bool strictNodeHistory ReceiveChangedPaths); } catch (SvnClientException ex) { - if (ex.ErrorCode == 160013) { + if (ex.IsKnownError(KnownError.FileNotFound)) { // This can happen when the file was renamed/moved so it cannot be found // directly in the old revision. In that case, we do a full download of // all revisions (so the file can be found in the new revision and svn can diff --git a/src/AddIns/Misc/SubversionAddIn/Project/Src/SubversionStateCondition.cs b/src/AddIns/Misc/SubversionAddIn/Project/Src/SubversionStateCondition.cs index 197e0bfd0a..698047bd13 100644 --- a/src/AddIns/Misc/SubversionAddIn/Project/Src/SubversionStateCondition.cs +++ b/src/AddIns/Misc/SubversionAddIn/Project/Src/SubversionStateCondition.cs @@ -10,8 +10,7 @@ using System.IO; using ICSharpCode.Core; using ICSharpCode.SharpDevelop.Project; using ICSharpCode.Svn.Commands; -using PumaCode.SvnDotNet.SubversionSharp; -using PumaCode.SvnDotNet.AprSharp; +using SharpSvn; namespace ICSharpCode.Svn { diff --git a/src/AddIns/Misc/SubversionAddIn/Project/Src/SvnClientWrapper.cs b/src/AddIns/Misc/SubversionAddIn/Project/Src/SvnClientWrapper.cs index c54e30cb1e..dd053fefc9 100644 --- a/src/AddIns/Misc/SubversionAddIn/Project/Src/SvnClientWrapper.cs +++ b/src/AddIns/Misc/SubversionAddIn/Project/Src/SvnClientWrapper.cs @@ -5,94 +5,92 @@ // $Revision$ // +using SharpSvn.UI; using System; using System.Collections.Generic; +using System.IO; +using System.Runtime.Serialization; +using System.Text; using System.Threading; using System.Windows.Forms; -using System.Text; -using System.IO; using ICSharpCode.Core; using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.Svn.Gui; -using PumaCode.SvnDotNet.SubversionSharp; -using PumaCode.SvnDotNet.AprSharp; -using System.Runtime.Serialization; +using SharpSvn; namespace ICSharpCode.Svn { - using Svn = PumaCode.SvnDotNet.SubversionSharp.Svn; - /// /// A wrapper around the subversion library. /// public sealed class SvnClientWrapper : IDisposable { #region status->string conversion - static string GetKindString(Svn.NodeKind kind) + static string GetKindString(SvnNodeKind kind) { switch (kind) { - case Svn.NodeKind.Dir: + case SvnNodeKind.Directory: return "directory "; - case Svn.NodeKind.File: + case SvnNodeKind.File: return "file "; + default: + return null; } - return null; } - public static string GetActionString(char action) + public static string GetActionString(SvnChangeAction action) { switch (action) { - case 'A': - return GetActionString(SvnWcNotify.Actions.CommitAdded); - case 'D': - return GetActionString(SvnWcNotify.Actions.CommitDeleted); - case 'M': - return GetActionString(SvnWcNotify.Actions.CommitModified); - case 'R': - return GetActionString(SvnWcNotify.Actions.CommitReplaced); + case SvnChangeAction.Add: + return GetActionString(SvnNotifyAction.CommitAdded); + case SvnChangeAction.Delete: + return GetActionString(SvnNotifyAction.CommitDeleted); + case SvnChangeAction.Modify: + return GetActionString(SvnNotifyAction.CommitModified); + case SvnChangeAction.Replace: + return GetActionString(SvnNotifyAction.CommitReplaced); default: return "unknown"; } } - static string GetActionString(SvnWcNotify.Actions action) + static string GetActionString(SvnNotifyAction action) { switch (action) { - case SvnWcNotify.Actions.Add: - case SvnWcNotify.Actions.UpdateAdd: - case SvnWcNotify.Actions.CommitAdded: + case SvnNotifyAction.Add: + case SvnNotifyAction.CommitAdded: return "added"; - case SvnWcNotify.Actions.Copy: + case SvnNotifyAction.Copy: return "copied"; - case SvnWcNotify.Actions.Delete: - case SvnWcNotify.Actions.UpdateDelete: - case SvnWcNotify.Actions.CommitDeleted: + case SvnNotifyAction.Delete: + case SvnNotifyAction.UpdateDelete: + case SvnNotifyAction.CommitDeleted: return "deleted"; - case SvnWcNotify.Actions.Restore: + case SvnNotifyAction.Restore: return "restored"; - case SvnWcNotify.Actions.Revert: + case SvnNotifyAction.Revert: return "reverted"; - case SvnWcNotify.Actions.FailedRevert: + case SvnNotifyAction.RevertFailed: return "revert failed"; - case SvnWcNotify.Actions.Resolved: + case SvnNotifyAction.Resolved: return "resolved"; - case SvnWcNotify.Actions.Skip: + case SvnNotifyAction.Skip: return "skipped"; - case SvnWcNotify.Actions.UpdateUpdate: + case SvnNotifyAction.UpdateUpdate: return "updated"; - case SvnWcNotify.Actions.UpdateExternal: + case SvnNotifyAction.UpdateExternal: return "updated external"; - case SvnWcNotify.Actions.CommitModified: + case SvnNotifyAction.CommitModified: return "modified"; - case SvnWcNotify.Actions.CommitReplaced: + case SvnNotifyAction.CommitReplaced: return "replaced"; - case SvnWcNotify.Actions.FailedLock: + case SvnNotifyAction.LockFailedLock: return "lock failed"; - case SvnWcNotify.Actions.FailedUnlock: + case SvnNotifyAction.LockFailedUnlock: return "unlock failed"; - case SvnWcNotify.Actions.Locked: + case SvnNotifyAction.LockLocked: return "locked"; - case SvnWcNotify.Actions.Unlocked: + case SvnNotifyAction.LockUnlocked: return "unlocked"; default: return "unknown"; @@ -100,37 +98,6 @@ namespace ICSharpCode.Svn } #endregion - #region AprPoolHandle - sealed class AprPoolHandle : IDisposable - { - AprPool pool; - - public AprPool Pool { - get { return pool; } - } - - public AprPoolHandle() - { - pool = Svn.PoolCreate(); - } - - public void Dispose() - { - if (!pool.IsNull) { - pool.Destroy(); - } - GC.SuppressFinalize(this); - } - - ~AprPoolHandle() - { - if (!pool.IsNull) { - pool.Destroy(); - } - } - } - #endregion - #region Cancel support bool cancel; @@ -139,17 +106,12 @@ namespace ICSharpCode.Svn cancel = true; } - SvnError OnCancel(IntPtr baton) + void client_Cancel(object sender, SvnCancelEventArgs e) { - // TODO: lookup correct error number - if (cancel) - return SvnError.Create(1, SvnError.NoError, "User cancelled."); - else - return SvnError.NoError; + e.Cancel = cancel; } #endregion - AprPoolHandle memoryPool; SvnClient client; Dictionary statusCache = new Dictionary(StringComparer.OrdinalIgnoreCase); @@ -157,19 +119,15 @@ namespace ICSharpCode.Svn { Debug("SVN: Create SvnClient instance"); - memoryPool = new AprPoolHandle(); - client = new SvnClient(memoryPool.Pool); - client.Context.NotifyFunc2 = new SvnDelegate(new SvnWcNotify.Func2(OnNotify)); - client.Context.CancelFunc = new SvnDelegate(new SvnClient.CancelFunc(OnCancel)); + client = new SvnClient(); + client.Notify += client_Notify; + client.Cancel += client_Cancel; } - + public void Dispose() { - if (memoryPool != null) { - Debug("SVN: Dispose SvnClient"); - memoryPool.Dispose(); - memoryPool = null; - } + if (client != null) + client.Dispose(); client = null; statusCache = null; } @@ -178,17 +136,12 @@ namespace ICSharpCode.Svn bool authorizationEnabled; bool allowInteractiveAuthorization; - public bool AllowInteractiveAuthorization { - get { - return allowInteractiveAuthorization; - } - set { - CheckNotDisposed(); - if (allowInteractiveAuthorization != value) { - if (authorizationEnabled) - throw new InvalidOperationException("Cannot change AllowInteractiveAuthorization after an operation was done."); - allowInteractiveAuthorization = value; - } + public void AllowInteractiveAuthorization() + { + CheckNotDisposed(); + if (!allowInteractiveAuthorization) { + allowInteractiveAuthorization = true; + SvnUI.Bind(client, WorkbenchSingleton.MainForm); } } @@ -197,90 +150,6 @@ namespace ICSharpCode.Svn if (authorizationEnabled) return; authorizationEnabled = true; - - const int retryLimit = 3; - client.AddUsernameProvider(); - client.AddSimpleProvider(); - if (allowInteractiveAuthorization) { - client.AddPromptProvider(PasswordPrompt, IntPtr.Zero, retryLimit); - } - client.AddSslServerTrustFileProvider(); - if (allowInteractiveAuthorization) { - client.AddPromptProvider(SslServerTrustPrompt, IntPtr.Zero); - } - client.AddSslClientCertPwFileProvider(); - if (allowInteractiveAuthorization) { - client.AddPromptProvider(ClientCertificatePasswordPrompt, IntPtr.Zero, retryLimit); - } - client.AddSslClientCertFileProvider(); - if (allowInteractiveAuthorization) { - client.AddPromptProvider(ClientCertificatePrompt, IntPtr.Zero, retryLimit); - } - client.OpenAuth(); - } - - SvnError PasswordPrompt(out SvnAuthCredSimple cred, IntPtr baton, AprString realm, AprString username, bool maySave, AprPool pool) - { - cred = IntPtr.Zero; - LoggingService.Debug("PasswordPrompt"); - try { - using (LoginDialog loginDialog = new LoginDialog(realm.Value, username.Value, maySave)) { - if (WorkbenchSingleton.SafeThreadFunction(loginDialog.ShowDialog, WorkbenchSingleton.MainForm) == DialogResult.OK) { - cred = loginDialog.CreateCredential(pool); - } - } - } catch (Exception ex) { - MessageService.ShowError(ex); - } - return SvnError.NoError; - } - - SvnError SslServerTrustPrompt(out SvnAuthCredSslServerTrust cred, IntPtr baton, AprString realm, SvnAuthCredSslServerTrust.CertFailures failures, SvnAuthSslServerCertInfo certInfo, bool maySave, IntPtr pool) - { - cred = IntPtr.Zero; - LoggingService.Debug("SslServerTrustPrompt"); - try { - using (SslServerTrustDialog sslServerTrustDialog = new SslServerTrustDialog(certInfo, failures, maySave)) { - if (WorkbenchSingleton.SafeThreadFunction(sslServerTrustDialog.ShowDialog, WorkbenchSingleton.MainForm) == DialogResult.OK) { - cred = sslServerTrustDialog.CreateCredential(pool); - } - } - } catch (Exception ex) { - MessageService.ShowError(ex); - } - return SvnError.NoError; - } - - SvnError ClientCertificatePasswordPrompt(out SvnAuthCredSslClientCertPw cred, IntPtr baton, AprString realm, bool maySave, IntPtr pool) - { - cred = IntPtr.Zero; - LoggingService.Debug("SslServerTrustPrompt"); - try { - using (ClientCertPassphraseDialog clientCertPassphraseDialog = new ClientCertPassphraseDialog(realm.Value, maySave)) { - if (WorkbenchSingleton.SafeThreadFunction(clientCertPassphraseDialog.ShowDialog, WorkbenchSingleton.MainForm) == DialogResult.OK) { - cred = clientCertPassphraseDialog.CreateCredential(pool); - } - } - } catch (Exception ex) { - MessageService.ShowError(ex); - } - return SvnError.NoError; - } - - SvnError ClientCertificatePrompt(out SvnAuthCredSslClientCert cred, IntPtr baton, AprString realm, bool maySave, IntPtr pool) - { - cred = IntPtr.Zero; - LoggingService.Debug("SslServerTrustPrompt"); - try { - using (ClientCertDialog clientCertDialog = new ClientCertDialog(realm.Value, maySave)) { - if (WorkbenchSingleton.SafeThreadFunction(clientCertDialog.ShowDialog, WorkbenchSingleton.MainForm) == DialogResult.OK) { - cred = clientCertDialog.CreateCredential(pool); - } - } - } catch (Exception ex) { - MessageService.ShowError(ex); - } - return SvnError.NoError; } #endregion @@ -289,20 +158,20 @@ namespace ICSharpCode.Svn public event EventHandler OperationFinished; public event EventHandler Notify; - void OnNotify(IntPtr baton, SvnWcNotify notify, AprPool pool) + void client_Notify(object sender, SvnNotifyEventArgs e) { if (Notify != null) { Notify(this, new NotificationEventArgs() { - Action = GetActionString(notify.Action), - Kind = GetKindString(notify.Kind), - Path = notify.Path.Value + Action = GetActionString(e.Action), + Kind = GetKindString(e.NodeKind), + Path = e.Path }); } } #endregion [System.Diagnostics.ConditionalAttribute("DEBUG")] - void Debug(string text) + static void Debug(string text) { LoggingService.Debug(text); } @@ -327,7 +196,6 @@ namespace ICSharpCode.Svn void AfterOperation() { // after any subversion operation, clear the memory pool - client.Clear(); if (OperationFinished != null) OperationFinished(this, EventArgs.Empty); } @@ -349,22 +217,25 @@ namespace ICSharpCode.Svn Debug("SVN: SingleStatus retrieved from cache " + result.TextStatus); return result; } - client.Status2( - filename, Svn.Revision.Working, - delegate (IntPtr baton, SvnPath path, SvnWcStatus2 status) { - string dir = path.Value; - Debug("SVN: SingleStatus.callback(" + dir + "," + status.TextStatus + ")"); + SvnStatusArgs args = new SvnStatusArgs { + Revision = SvnRevision.Working, + RetrieveAllEntries = true, + RetrieveIgnoredEntries = true + }; + client.Status( + filename, args, + delegate (object sender, SvnStatusEventArgs e) { + string dir = e.FullPath; + Debug("SVN: SingleStatus.callback(" + dir + "," + e.LocalContentStatus + ")"); Status s = new Status { - Copied = status.Copied, - TextStatus = ToStatusKind(status.TextStatus) + Copied = e.LocalCopied, + TextStatus = ToStatusKind(e.LocalContentStatus) }; statusCache[dir] = s; if (StringComparer.OrdinalIgnoreCase.Equals(filename, dir)) { result = s; } - }, - IntPtr.Zero, - false, true, false, false, false + } ); if (result != null) { return result; @@ -380,12 +251,20 @@ namespace ICSharpCode.Svn } } + static SvnDepth ConvertDepth(Recurse recurse) + { + if (recurse == Recurse.Full) + return SvnDepth.Infinity; + else + return SvnDepth.Empty; + } + public void Add(string filename, Recurse recurse) { Debug("SVN: Add(" + filename + ", " + recurse + ")"); BeforeOperation("add"); try { - client.Add3(filename, recurse == Recurse.Full, false, false); + client.Add(filename, ConvertDepth(recurse)); } catch (SvnException ex) { throw new SvnClientException(ex); } finally { @@ -398,17 +277,11 @@ namespace ICSharpCode.Svn Debug("SVN: GetPropertyValue(" + fileName + ", " + propertyName + ")"); BeforeOperation("propget"); try { - AprHash hash = client.PropGet2(propertyName, fileName, - Svn.Revision.Working, Svn.Revision.Working, - false); - foreach (AprHashEntry entry in hash) { - // entry.ValueAsString treats the value as const char*, but it is a svn_string_t* - SvnString value = entry.Value; - Debug("SVN: GetPropertyValue hash entry: (" + entry.KeyAsString + ", " + value + ")"); - return value.Data.Value; - } - Debug("SVN: GetPropertyValue did not find any entries"); - return null; + string propertyValue; + if (client.GetProperty(fileName, propertyName, out propertyValue)) + return propertyValue; + else + return null; } catch (SvnException ex) { throw new SvnClientException(ex); } finally { @@ -421,12 +294,10 @@ namespace ICSharpCode.Svn Debug("SVN: SetPropertyValue(" + fileName + ", " + propertyName + ", " + newPropertyValue + ")"); BeforeOperation("propset"); try { - SvnString npv; if (newPropertyValue != null) - npv = new SvnString(newPropertyValue, client.Pool); + client.SetProperty(fileName, propertyName, newPropertyValue); else - npv = IntPtr.Zero; - client.PropSet2(propertyName, npv, fileName, false, false); + client.DeleteProperty(fileName, propertyName); } catch (SvnException ex) { throw new SvnClientException(ex); } finally { @@ -434,21 +305,16 @@ namespace ICSharpCode.Svn } } - SvnPath[] ToSvnPaths(string[] files) - { - SvnPath[] paths = new SvnPath[files.Length]; - for (int i = 0; i < files.Length; i++) { - paths[i] = new SvnPath(files[i], client.Pool); - } - return paths; - } - public void Delete(string[] files, bool force) { Debug("SVN: Delete(" + string.Join(",", files) + ", " + force + ")"); BeforeOperation("delete"); try { - client.Delete2(ToSvnPaths(files), force); + client.Delete( + files, + new SvnDeleteArgs { + Force = force + }); } catch (SvnException ex) { throw new SvnClientException(ex); } finally { @@ -461,7 +327,11 @@ namespace ICSharpCode.Svn Debug("SVN: Revert(" + string.Join(",", files) + ", " + recurse + ")"); BeforeOperation("revert"); try { - client.Revert(ToSvnPaths(files), recurse == Recurse.Full); + client.Revert( + files, + new SvnRevertArgs { + Depth = ConvertDepth(recurse) + }); } catch (SvnException ex) { throw new SvnClientException(ex); } finally { @@ -474,7 +344,11 @@ namespace ICSharpCode.Svn Debug("SVN: Move(" + from + ", " + to + ", " + force + ")"); BeforeOperation("move"); try { - client.Move3(from, to, force); + client.Move( + from, to, + new SvnMoveArgs { + Force = force + }); } catch (SvnException ex) { throw new SvnClientException(ex); } finally { @@ -482,12 +356,12 @@ namespace ICSharpCode.Svn } } - public void Copy(string from, Revision revision, string to) + public void Copy(string from, string to) { - Debug("SVN: Copy(" + from + ", " + revision + ", " + to); + Debug("SVN: Copy(" + from + ", " + to); BeforeOperation("copy"); try { - client.Copy2(from, revision, to); + client.Copy(from, to); } catch (SvnException ex) { throw new SvnClientException(ex); } finally { @@ -523,37 +397,39 @@ namespace ICSharpCode.Svn ", " + limit + ", " + discoverChangePaths + ", " + strictNodeHistory + ")"); BeforeOperation("log"); try { - client.Log2( - ToSvnPaths(paths), - start, end, limit, discoverChangePaths, strictNodeHistory, - delegate (IntPtr baton, AprHash changed_paths, int revision, AprString author, AprString date, AprString message, AprPool pool) { - Debug("SVN: Log: Got revision " + revision); - DateTime dateTime = DateTime.MinValue; - DateTime.TryParse(date.Value, out dateTime); + client.Log( + paths, + new SvnLogArgs { + Start = start, + End = end, + Limit = limit, + RetrieveChangedPaths = discoverChangePaths, + StrictNodeHistory = strictNodeHistory + }, + delegate (object sender, SvnLogEventArgs e) { + Debug("SVN: Log: Got revision " + e.Revision); LogMessage msg = new LogMessage() { - Revision = revision, - Author = author.Value, - Date = dateTime, - Message = message.Value + Revision = e.Revision, + Author = e.Author, + Date = e.Time, + Message = e.LogMessage }; if (discoverChangePaths) { - msg.ChangedPaths = new List(); - foreach (AprHashEntry entry in changed_paths) { - SvnLogChangedPath changedPath = entry.Value; + foreach (var entry in e.ChangedPaths) { msg.ChangedPaths.Add(new ChangedPath { - Path = entry.KeyAsString, - CopyFromPath = changedPath.CopyFromPath.Value, - CopyFromRevision = changedPath.CopyFromRev, - Action = changedPath.Action + Path = entry.Path, + CopyFromPath = entry.CopyFromPath, + CopyFromRevision = entry.CopyFromRevision, + Action = entry.Action }); } } logMessageReceiver(msg); - return SvnError.NoError; - }, - IntPtr.Zero + } ); Debug("SVN: Log finished"); + } catch (SvnOperationCanceledException) { + // allow cancel without exception } catch (SvnException ex) { throw new SvnClientException(ex); } finally { @@ -561,35 +437,35 @@ namespace ICSharpCode.Svn } } - static StatusKind ToStatusKind(SvnWcStatus.Kind kind) + static StatusKind ToStatusKind(SvnStatus kind) { switch (kind) { - case SvnWcStatus.Kind.Added: + case SvnStatus.Added: return StatusKind.Added; - case SvnWcStatus.Kind.Conflicted: + case SvnStatus.Conflicted: return StatusKind.Conflicted; - case SvnWcStatus.Kind.Deleted: + case SvnStatus.Deleted: return StatusKind.Deleted; - case SvnWcStatus.Kind.External: + case SvnStatus.External: return StatusKind.External; - case SvnWcStatus.Kind.Ignored: + case SvnStatus.Ignored: return StatusKind.Ignored; - case SvnWcStatus.Kind.Incomplete: + case SvnStatus.Incomplete: return StatusKind.Incomplete; - case SvnWcStatus.Kind.Merged: + case SvnStatus.Merged: return StatusKind.Merged; - case SvnWcStatus.Kind.Missing: + case SvnStatus.Missing: return StatusKind.Missing; - case SvnWcStatus.Kind.Modified: + case SvnStatus.Modified: return StatusKind.Modified; - case SvnWcStatus.Kind.Normal: + case SvnStatus.Normal: return StatusKind.Normal; - case SvnWcStatus.Kind.Obstructed: + case SvnStatus.NotVersioned: + return StatusKind.Unversioned; + case SvnStatus.Obstructed: return StatusKind.Obstructed; - case SvnWcStatus.Kind.Replaced: + case SvnStatus.Replaced: return StatusKind.Replaced; - case SvnWcStatus.Kind.Unversioned: - return StatusKind.Unversioned; default: return StatusKind.None; } @@ -610,7 +486,7 @@ namespace ICSharpCode.Svn public class LogMessage { - public int Revision; + public long Revision; public string Author; public DateTime Date; public string Message; @@ -622,24 +498,24 @@ namespace ICSharpCode.Svn { public string Path; public string CopyFromPath; - public int CopyFromRevision; + public long CopyFromRevision; /// /// change action ('A','D','R' or 'M') /// - public char Action; + public SvnChangeAction Action; } public class Revision { SvnRevision revision; - public static readonly Revision Base = new SvnRevision(Svn.Revision.Base); - public static readonly Revision Committed = new SvnRevision(Svn.Revision.Committed); - public static readonly Revision Head = new SvnRevision(Svn.Revision.Head); - public static readonly Revision Working = new SvnRevision(Svn.Revision.Working); - public static readonly Revision Unspecified = new SvnRevision(Svn.Revision.Unspecified); + public static readonly Revision Base = SvnRevision.Base; + public static readonly Revision Committed = SvnRevision.Committed; + public static readonly Revision Head = SvnRevision.Head; + public static readonly Revision Working = SvnRevision.Working; + public static readonly Revision Unspecified = SvnRevision.None; - public static Revision FromNumber(int number) + public static Revision FromNumber(long number) { return new SvnRevision(number); } @@ -656,22 +532,22 @@ namespace ICSharpCode.Svn public override string ToString() { - switch (revision.Kind) { - case Svn.Revision.Base: + switch (revision.RevisionType) { + case SvnRevisionType.Base: return "base"; - case Svn.Revision.Committed: + case SvnRevisionType.Committed: return "committed"; - case Svn.Revision.Date: - return AprTime.ToDateTime(revision.Date).ToString(); - case Svn.Revision.Head: + case SvnRevisionType.Time: + return revision.Time.ToString(); + case SvnRevisionType.Head: return "head"; - case Svn.Revision.Number: - return revision.Number.ToString(); - case Svn.Revision.Previous: + case SvnRevisionType.Number: + return revision.Revision.ToString(); + case SvnRevisionType.Previous: return "previous"; - case Svn.Revision.Unspecified: + case SvnRevisionType.None: return "unspecified"; - case Svn.Revision.Working: + case SvnRevisionType.Working: return "working"; default: return "unknown"; @@ -693,12 +569,12 @@ namespace ICSharpCode.Svn public class SvnClientException : Exception { - public readonly int ErrorCode; + SvnErrorCode errorCode; internal SvnClientException(SvnException ex) : base(ex.Message, ex) { + this.errorCode = ex.SvnErrorCode; LoggingService.Debug(ex); - ErrorCode = ex.AprErr; } /// @@ -708,6 +584,18 @@ namespace ICSharpCode.Svn { return InnerException.InnerException; } + + public bool IsKnownError(KnownError knownError) + { + return (int)errorCode == (int)knownError; + } + } + + public enum KnownError + { + FileNotFound = SvnErrorCode.SVN_ERR_FS_NOT_FOUND, + CannotDeleteFileWithLocalModifications = SvnErrorCode.SVN_ERR_CLIENT_MODIFIED, + CannotDeleteFileNotUnderVersionControl = SvnErrorCode.SVN_ERR_UNVERSIONED_RESOURCE } public enum StatusKind diff --git a/src/AddIns/Misc/SubversionAddIn/Project/SubversionAddIn.csproj b/src/AddIns/Misc/SubversionAddIn/Project/SubversionAddIn.csproj index 3971f32c70..7e8edb5bf6 100644 --- a/src/AddIns/Misc/SubversionAddIn/Project/SubversionAddIn.csproj +++ b/src/AddIns/Misc/SubversionAddIn/Project/SubversionAddIn.csproj @@ -25,11 +25,11 @@ TRACE - - ..\RequiredLibraries\AprSharp.dll + + ..\..\..\..\Libraries\SharpSvn\SharpSvn.dll - - ..\RequiredLibraries\SubversionSharp.dll + + ..\..\..\..\Libraries\SharpSvn\SharpSvn.UI.dll @@ -39,38 +39,6 @@ - - intl3_svn.dll - PreserveNewest - - - libapr.dll - PreserveNewest - - - libapriconv.dll - PreserveNewest - - - libaprutil.dll - PreserveNewest - - - libdb44.dll - PreserveNewest - - - libeay32.dll - PreserveNewest - - - ssleay32.dll - PreserveNewest - - - svn_client-1.dll - PreserveNewest - Always @@ -80,25 +48,9 @@ - - - - - - Form - - - Form - - - Form - - - Form - diff --git a/src/Libraries/SharpSvn/Licenses/Apr-License.txt b/src/Libraries/SharpSvn/Licenses/Apr-License.txt new file mode 100644 index 0000000000..02418e1913 --- /dev/null +++ b/src/Libraries/SharpSvn/Licenses/Apr-License.txt @@ -0,0 +1,341 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + +APACHE PORTABLE RUNTIME SUBCOMPONENTS: + +The Apache Portable Runtime includes a number of subcomponents with +separate copyright notices and license terms. Your use of the source +code for the these subcomponents is subject to the terms and +conditions of the following licenses. + +From strings/apr_fnmatch.c, include/apr_fnmatch.h, misc/unix/getopt.c, +file_io/unix/mktemp.c, strings/apr_strings.c: + +/* + * Copyright (c) 1987, 1993, 1994 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + +From network_io/unix/inet_ntop.c, network_io/unix/inet_pton.c: + +/* Copyright (c) 1996 by Internet Software Consortium. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS + * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE + * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + +From dso/aix/dso.c: + + * Based on libdl (dlfcn.c/dlfcn.h) which is + * Copyright (c) 1992,1993,1995,1996,1997,1988 + * Jens-Uwe Mager, Helios Software GmbH, Hannover, Germany. + * + * Not derived from licensed software. + * + * Permission is granted to freely use, copy, modify, and redistribute + * this software, provided that the author is not construed to be liable + * for any results of using the software, alterations are clearly marked + * as such, and this notice is not modified. + +From strings/apr_strnatcmp.c, include/apr_strings.h: + + strnatcmp.c -- Perform 'natural order' comparisons of strings in C. + Copyright (C) 2000 by Martin Pool + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + +From strings/apr_snprintf.c: + + * + * cvt - IEEE floating point formatting routines. + * Derived from UNIX V7, Copyright(C) Caldera International Inc. + * + + Copyright(C) Caldera International Inc. 2001-2002. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + Redistributions of source code and documentation must retain the above + copyright notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + All advertising materials mentioning features or use of this software + must display the following acknowledgement: + + This product includes software developed or owned by Caldera + International, Inc. + + Neither the name of Caldera International, Inc. nor the names of other + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + USE OF THE SOFTWARE PROVIDED FOR UNDER THIS LICENSE BY CALDERA + INTERNATIONAL, INC. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + NO EVENT SHALL CALDERA INTERNATIONAL, INC. BE LIABLE FOR ANY DIRECT, + INDIRECT INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + + diff --git a/src/Libraries/SharpSvn/Licenses/Apr-Util-License.txt b/src/Libraries/SharpSvn/Licenses/Apr-Util-License.txt new file mode 100644 index 0000000000..7771972d85 --- /dev/null +++ b/src/Libraries/SharpSvn/Licenses/Apr-Util-License.txt @@ -0,0 +1,443 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + +APACHE PORTABLE RUNTIME SUBCOMPONENTS: + +The Apache Portable Runtime includes a number of subcomponents with +separate copyright notices and license terms. Your use of the source +code for the these subcomponents is subject to the terms and +conditions of the following licenses. + +For the include\apr_md5.h component: +/* + * This is work is derived from material Copyright RSA Data Security, Inc. + * + * The RSA copyright statement and Licence for that original material is + * included below. This is followed by the Apache copyright statement and + * licence for the modifications made to that material. + */ + +/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All + rights reserved. + + License to copy and use this software is granted provided that it + is identified as the "RSA Data Security, Inc. MD5 Message-Digest + Algorithm" in all material mentioning or referencing this software + or this function. + + License is also granted to make and use derivative works provided + that such works are identified as "derived from the RSA Data + Security, Inc. MD5 Message-Digest Algorithm" in all material + mentioning or referencing the derived work. + + RSA Data Security, Inc. makes no representations concerning either + the merchantability of this software or the suitability of this + software for any particular purpose. It is provided "as is" + without express or implied warranty of any kind. + + These notices must be retained in any copies of any part of this + documentation and/or software. + */ + +For the passwd\apr_md5.c component: + +/* + * This is work is derived from material Copyright RSA Data Security, Inc. + * + * The RSA copyright statement and Licence for that original material is + * included below. This is followed by the Apache copyright statement and + * licence for the modifications made to that material. + */ + +/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm + */ + +/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All + rights reserved. + + License to copy and use this software is granted provided that it + is identified as the "RSA Data Security, Inc. MD5 Message-Digest + Algorithm" in all material mentioning or referencing this software + or this function. + + License is also granted to make and use derivative works provided + that such works are identified as "derived from the RSA Data + Security, Inc. MD5 Message-Digest Algorithm" in all material + mentioning or referencing the derived work. + + RSA Data Security, Inc. makes no representations concerning either + the merchantability of this software or the suitability of this + software for any particular purpose. It is provided "as is" + without express or implied warranty of any kind. + + These notices must be retained in any copies of any part of this + documentation and/or software. + */ +/* + * The apr_md5_encode() routine uses much code obtained from the FreeBSD 3.0 + * MD5 crypt() function, which is licenced as follows: + * ---------------------------------------------------------------------------- + * "THE BEER-WARE LICENSE" (Revision 42): + * wrote this file. As long as you retain this notice you + * can do whatever you want with this stuff. If we meet some day, and you think + * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp + * ---------------------------------------------------------------------------- + */ + +For the crypto\apr_md4.c component: + + * This is derived from material copyright RSA Data Security, Inc. + * Their notice is reproduced below in its entirety. + * + * Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All + * rights reserved. + * + * License to copy and use this software is granted provided that it + * is identified as the "RSA Data Security, Inc. MD4 Message-Digest + * Algorithm" in all material mentioning or referencing this software + * or this function. + * + * License is also granted to make and use derivative works provided + * that such works are identified as "derived from the RSA Data + * Security, Inc. MD4 Message-Digest Algorithm" in all material + * mentioning or referencing the derived work. + * + * RSA Data Security, Inc. makes no representations concerning either + * the merchantability of this software or the suitability of this + * software for any particular purpose. It is provided "as is" + * without express or implied warranty of any kind. + * + * These notices must be retained in any copies of any part of this + * documentation and/or software. + */ + +For the include\apr_md4.h component: + + * + * This is derived from material copyright RSA Data Security, Inc. + * Their notice is reproduced below in its entirety. + * + * Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All + * rights reserved. + * + * License to copy and use this software is granted provided that it + * is identified as the "RSA Data Security, Inc. MD4 Message-Digest + * Algorithm" in all material mentioning or referencing this software + * or this function. + * + * License is also granted to make and use derivative works provided + * that such works are identified as "derived from the RSA Data + * Security, Inc. MD4 Message-Digest Algorithm" in all material + * mentioning or referencing the derived work. + * + * RSA Data Security, Inc. makes no representations concerning either + * the merchantability of this software or the suitability of this + * software for any particular purpose. It is provided "as is" + * without express or implied warranty of any kind. + * + * These notices must be retained in any copies of any part of this + * documentation and/or software. + */ + +For the test\testmd4.c component: + + * + * This is derived from material copyright RSA Data Security, Inc. + * Their notice is reproduced below in its entirety. + * + * Copyright (C) 1990-2, RSA Data Security, Inc. Created 1990. All + * rights reserved. + * + * RSA Data Security, Inc. makes no representations concerning either + * the merchantability of this software or the suitability of this + * software for any particular purpose. It is provided "as is" + * without express or implied warranty of any kind. + * + * These notices must be retained in any copies of any part of this + * documentation and/or software. + */ + +For the xml\expat\conftools\install-sh component: + +# +# install - install a program, script, or datafile +# This comes from X11R5 (mit/util/scripts/install.sh). +# +# Copyright 1991 by the Massachusetts Institute of Technology +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of M.I.T. not be used in advertising or +# publicity pertaining to distribution of the software without specific, +# written prior permission. M.I.T. makes no representations about the +# suitability of this software for any purpose. It is provided "as is" +# without express or implied warranty. +# + +For the expat xml parser component: + +Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd + and Clark Cooper + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==================================================================== + +For the ldap/apr_ldap_url.c component: + +/* Portions Copyright 1998-2002 The OpenLDAP Foundation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted only as authorized by the OpenLDAP + * Public License. A copy of this license is available at + * http://www.OpenLDAP.org/license.html or in file LICENSE in the + * top-level directory of the distribution. + * + * OpenLDAP is a registered trademark of the OpenLDAP Foundation. + * + * Individual files and/or contributed packages may be copyright by + * other parties and subject to additional restrictions. + * + * This work is derived from the University of Michigan LDAP v3.3 + * distribution. Information concerning this software is available + * at: http://www.umich.edu/~dirsvcs/ldap/ + * + * This work also contains materials derived from public sources. + * + * Additional information about OpenLDAP can be obtained at: + * http://www.openldap.org/ + */ + +/* + * Portions Copyright (c) 1992-1996 Regents of the University of Michigan. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that this notice is preserved and that due credit is given + * to the University of Michigan at Ann Arbor. The name of the University + * may not be used to endorse or promote products derived from this + * software without specific prior written permission. This software + * is provided ``as is'' without express or implied warranty. + */ + diff --git a/src/Libraries/SharpSvn/Licenses/BerkeleyDB-License.txt b/src/Libraries/SharpSvn/Licenses/BerkeleyDB-License.txt new file mode 100644 index 0000000000..87fa4cc6d1 --- /dev/null +++ b/src/Libraries/SharpSvn/Licenses/BerkeleyDB-License.txt @@ -0,0 +1,102 @@ +/*- + * $Id: LICENSE,v 12.1 2005/06/16 20:20:10 bostic Exp $ + */ + +The following is the license that applies to this copy of the Berkeley DB +software. For a license to use the Berkeley DB software under conditions +other than those described here, or to purchase support for this software, +please contact Sleepycat Software by email at info@sleepycat.com, or on +the Web at http://www.sleepycat.com. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +/* + * Copyright (c) 1990-2005 + * Sleepycat Software. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Redistributions in any form must be accompanied by information on + * how to obtain complete source code for the DB software and any + * accompanying software that uses the DB software. The source code + * must either be included in the distribution or be available for no + * more than the cost of distribution plus a nominal fee, and must be + * freely redistributable under reasonable conditions. For an + * executable file, complete source code means the source code for all + * modules it contains. It does not include source code for modules or + * files that typically accompany the major components of the operating + * system on which the executable file runs. + * + * THIS SOFTWARE IS PROVIDED BY SLEEPYCAT SOFTWARE ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR + * NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL SLEEPYCAT SOFTWARE + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ +/* + * Copyright (c) 1990, 1993, 1994, 1995 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +/* + * Copyright (c) 1995, 1996 + * The President and Fellows of Harvard University. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY HARVARD AND ITS CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL HARVARD OR ITS CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ diff --git a/src/Libraries/SharpSvn/Licenses/Cyrus-Sasl-License.txt b/src/Libraries/SharpSvn/Licenses/Cyrus-Sasl-License.txt new file mode 100644 index 0000000000..3f56f3059c --- /dev/null +++ b/src/Libraries/SharpSvn/Licenses/Cyrus-Sasl-License.txt @@ -0,0 +1,44 @@ +/* CMU libsasl + * Tim Martin + * Rob Earhart + * Rob Siemborski + */ +/* + * Copyright (c) 1998-2003 Carnegie Mellon University. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The name "Carnegie Mellon University" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For permission or any other legal + * details, please contact + * Office of Technology Transfer + * Carnegie Mellon University + * 5000 Forbes Avenue + * Pittsburgh, PA 15213-3890 + * (412) 268-4387, fax: (412) 268-7395 + * tech-transfer@andrew.cmu.edu + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Computing Services + * at Carnegie Mellon University (http://www.cmu.edu/computing/)." + * + * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE + * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ diff --git a/src/Libraries/SharpSvn/Licenses/Neon-License.txt b/src/Libraries/SharpSvn/Licenses/Neon-License.txt new file mode 100644 index 0000000000..161a3d1d47 --- /dev/null +++ b/src/Libraries/SharpSvn/Licenses/Neon-License.txt @@ -0,0 +1,482 @@ + GNU LIBRARY GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1991 Free Software Foundation, Inc. + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the library GPL. It is + numbered 2 because it goes with version 2 of the ordinary GPL.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Library General Public License, applies to some +specially designated Free Software Foundation software, and to any +other libraries whose authors decide to use it. You can use it for +your libraries, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if +you distribute copies of the library, or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link a program with the library, you must provide +complete object files to the recipients so that they can relink them +with the library, after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + Our method of protecting your rights has two steps: (1) copyright +the library, and (2) offer you this license which gives you legal +permission to copy, distribute and/or modify the library. + + Also, for each distributor's protection, we want to make certain +that everyone understands that there is no warranty for this free +library. If the library is modified by someone else and passed on, we +want its recipients to know that what they have is not the original +version, so that any problems introduced by others will not reflect on +the original authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that companies distributing free +software will individually obtain patent licenses, thus in effect +transforming the program into proprietary software. To prevent this, +we have made it clear that any patent must be licensed for everyone's +free use or not licensed at all. + + Most GNU software, including some libraries, is covered by the ordinary +GNU General Public License, which was designed for utility programs. This +license, the GNU Library General Public License, applies to certain +designated libraries. This license is quite different from the ordinary +one; be sure to read it in full, and don't assume that anything in it is +the same as in the ordinary license. + + The reason we have a separate public license for some libraries is that +they blur the distinction we usually make between modifying or adding to a +program and simply using it. Linking a program with a library, without +changing the library, is in some sense simply using the library, and is +analogous to running a utility program or application program. However, in +a textual and legal sense, the linked executable is a combined work, a +derivative of the original library, and the ordinary General Public License +treats it as such. + + Because of this blurred distinction, using the ordinary General +Public License for libraries did not effectively promote software +sharing, because most developers did not use the libraries. We +concluded that weaker conditions might promote sharing better. + + However, unrestricted linking of non-free programs would deprive the +users of those programs of all benefit from the free status of the +libraries themselves. This Library General Public License is intended to +permit developers of non-free programs to use free libraries, while +preserving your freedom as a user of such programs to change the free +libraries that are incorporated in them. (We have not seen how to achieve +this as regards changes in header files, but we have achieved it as regards +changes in the actual functions of the Library.) The hope is that this +will lead to faster development of free libraries. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, while the latter only +works together with the library. + + Note that it is possible for a library to be covered by the ordinary +General Public License rather than by this special one. + + GNU LIBRARY GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library which +contains a notice placed by the copyright holder or other authorized +party saying it may be distributed under the terms of this Library +General Public License (also called "this License"). Each licensee is +addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also compile or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + c) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + d) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the source code distributed need not include anything that is normally +distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Library General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/src/Libraries/SharpSvn/Licenses/OpenSsl-License.txt b/src/Libraries/SharpSvn/Licenses/OpenSsl-License.txt new file mode 100644 index 0000000000..a2c4adcbe6 --- /dev/null +++ b/src/Libraries/SharpSvn/Licenses/OpenSsl-License.txt @@ -0,0 +1,127 @@ + + LICENSE ISSUES + ============== + + The OpenSSL toolkit stays under a dual license, i.e. both the conditions of + the OpenSSL License and the original SSLeay license apply to the toolkit. + See below for the actual license texts. Actually both licenses are BSD-style + Open Source licenses. In case of any license issues related to OpenSSL + please contact openssl-core@openssl.org. + + OpenSSL License + --------------- + +/* ==================================================================== + * Copyright (c) 1998-2008 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + + Original SSLeay License + ----------------------- + +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + diff --git a/src/Libraries/SharpSvn/Licenses/Putty-License.txt b/src/Libraries/SharpSvn/Licenses/Putty-License.txt new file mode 100644 index 0000000000..1960cc2b0f --- /dev/null +++ b/src/Libraries/SharpSvn/Licenses/Putty-License.txt @@ -0,0 +1,25 @@ +PuTTY is copyright 1997-2007 Simon Tatham. + +Portions copyright Robert de Bath, Joris van Rantwijk, Delian +Delchev, Andreas Schultz, Jeroen Massar, Wez Furlong, Nicolas Barry, +Justin Bradford, Ben Harris, Malcolm Smith, Ahmad Khalifa, Markus +Kuhn, and CORE SDI S.A. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation files +(the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, +and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF +CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/src/Libraries/SharpSvn/Licenses/Serf-License.txt b/src/Libraries/SharpSvn/Licenses/Serf-License.txt new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/src/Libraries/SharpSvn/Licenses/Serf-License.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/src/Libraries/SharpSvn/Licenses/SharpSvn-License.txt b/src/Libraries/SharpSvn/Licenses/SharpSvn-License.txt new file mode 100644 index 0000000000..7f3448f9b5 --- /dev/null +++ b/src/Libraries/SharpSvn/Licenses/SharpSvn-License.txt @@ -0,0 +1,219 @@ + Copyright 2007-2008 The SharpSvn Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +---------------------------------------------------------------------------- + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/src/Libraries/SharpSvn/Licenses/SharpSvn-Licenses.wxs b/src/Libraries/SharpSvn/Licenses/SharpSvn-Licenses.wxs new file mode 100644 index 0000000000..4a9885f392 --- /dev/null +++ b/src/Libraries/SharpSvn/Licenses/SharpSvn-Licenses.wxs @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Libraries/SharpSvn/Licenses/Subversion-License.txt b/src/Libraries/SharpSvn/Licenses/Subversion-License.txt new file mode 100644 index 0000000000..276dbe2476 --- /dev/null +++ b/src/Libraries/SharpSvn/Licenses/Subversion-License.txt @@ -0,0 +1,47 @@ +/* ================================================================ + * Copyright (c) 2000-2009 CollabNet. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by + * CollabNet (http://www.Collab.Net/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The hosted project names must not be used to endorse or promote + * products derived from this software without prior written + * permission. For written permission, please contact info@collab.net. + * + * 5. Products derived from this software may not use the "Tigris" name + * nor may "Tigris" appear in their names without prior written + * permission of CollabNet. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL COLLABNET OR ITS CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of CollabNet. + */ diff --git a/src/Libraries/SharpSvn/Licenses/ZLib-License.txt b/src/Libraries/SharpSvn/Licenses/ZLib-License.txt new file mode 100644 index 0000000000..758cc50020 --- /dev/null +++ b/src/Libraries/SharpSvn/Licenses/ZLib-License.txt @@ -0,0 +1,125 @@ +ZLIB DATA COMPRESSION LIBRARY + +zlib 1.2.3 is a general purpose data compression library. All the code is +thread safe. The data format used by the zlib library is described by RFCs +(Request for Comments) 1950 to 1952 in the files +http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format) +and rfc1952.txt (gzip format). These documents are also available in other +formats from ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html + +All functions of the compression library are documented in the file zlib.h +(volunteer to write man pages welcome, contact zlib@gzip.org). A usage example +of the library is given in the file example.c which also tests that the library +is working correctly. Another example is given in the file minigzip.c. The +compression library itself is composed of all source files except example.c and +minigzip.c. + +To compile all files and run the test program, follow the instructions given at +the top of Makefile. In short "make test; make install" should work for most +machines. For Unix: "./configure; make test; make install". For MSDOS, use one +of the special makefiles such as Makefile.msc. For VMS, use make_vms.com. + +Questions about zlib should be sent to , or to Gilles Vollant + for the Windows DLL version. The zlib home page is +http://www.zlib.org or http://www.gzip.org/zlib/ Before reporting a problem, +please check this site to verify that you have the latest version of zlib; +otherwise get the latest version and check whether the problem still exists or +not. + +PLEASE read the zlib FAQ http://www.gzip.org/zlib/zlib_faq.html before asking +for help. + +Mark Nelson wrote an article about zlib for the Jan. 1997 +issue of Dr. Dobb's Journal; a copy of the article is available in +http://dogma.net/markn/articles/zlibtool/zlibtool.htm + +The changes made in version 1.2.3 are documented in the file ChangeLog. + +Unsupported third party contributions are provided in directory "contrib". + +A Java implementation of zlib is available in the Java Development Kit +http://java.sun.com/j2se/1.4.2/docs/api/java/util/zip/package-summary.html +See the zlib home page http://www.zlib.org for details. + +A Perl interface to zlib written by Paul Marquess is in the +CPAN (Comprehensive Perl Archive Network) sites +http://www.cpan.org/modules/by-module/Compress/ + +A Python interface to zlib written by A.M. Kuchling is +available in Python 1.5 and later versions, see +http://www.python.org/doc/lib/module-zlib.html + +A zlib binding for TCL written by Andreas Kupries is +availlable at http://www.oche.de/~akupries/soft/trf/trf_zip.html + +An experimental package to read and write files in .zip format, written on top +of zlib by Gilles Vollant , is available in the +contrib/minizip directory of zlib. + + +Notes for some targets: + +- For Windows DLL versions, please see win32/DLL_FAQ.txt + +- For 64-bit Irix, deflate.c must be compiled without any optimization. With + -O, one libpng test fails. The test works in 32 bit mode (with the -n32 + compiler flag). The compiler bug has been reported to SGI. + +- zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 it works + when compiled with cc. + +- On Digital Unix 4.0D (formely OSF/1) on AlphaServer, the cc option -std1 is + necessary to get gzprintf working correctly. This is done by configure. + +- zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with + other compilers. Use "make test" to check your compiler. + +- gzdopen is not supported on RISCOS, BEOS and by some Mac compilers. + +- For PalmOs, see http://palmzlib.sourceforge.net/ + +- When building a shared, i.e. dynamic library on Mac OS X, the library must be + installed before testing (do "make install" before "make test"), since the + library location is specified in the library. + + +Acknowledgments: + + The deflate format used by zlib was defined by Phil Katz. The deflate + and zlib specifications were written by L. Peter Deutsch. Thanks to all the + people who reported problems and suggested various improvements in zlib; + they are too numerous to cite here. + +Copyright notice: + + (C) 1995-2004 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +If you use the zlib library in a product, we would appreciate *not* +receiving lengthy legal documents to sign. The sources are provided +for free but without warranty of any kind. The library has been +entirely written by Jean-loup Gailly and Mark Adler; it does not +include third-party code. + +If you redistribute modified sources, we would appreciate that you include +in the file ChangeLog history information documenting your changes. Please +read the FAQ for more information on the distribution of modified source +versions. diff --git a/src/Libraries/SharpSvn/SharpPlink-Win32.svnExe b/src/Libraries/SharpSvn/SharpPlink-Win32.svnExe new file mode 100644 index 0000000000..726ae6d184 Binary files /dev/null and b/src/Libraries/SharpSvn/SharpPlink-Win32.svnExe differ diff --git a/src/Libraries/SharpSvn/SharpSvn-DB44-20-win32.dll b/src/Libraries/SharpSvn/SharpSvn-DB44-20-win32.dll new file mode 100644 index 0000000000..2490f5a77c Binary files /dev/null and b/src/Libraries/SharpSvn/SharpSvn-DB44-20-win32.dll differ diff --git a/src/Libraries/SharpSvn/SharpSvn-Sasl21-22-win32.dll b/src/Libraries/SharpSvn/SharpSvn-Sasl21-22-win32.dll new file mode 100644 index 0000000000..9dc2bb3f49 Binary files /dev/null and b/src/Libraries/SharpSvn/SharpSvn-Sasl21-22-win32.dll differ diff --git a/src/Libraries/SharpSvn/SharpSvn.UI.dll b/src/Libraries/SharpSvn/SharpSvn.UI.dll new file mode 100644 index 0000000000..3521448aaa Binary files /dev/null and b/src/Libraries/SharpSvn/SharpSvn.UI.dll differ diff --git a/src/Libraries/SharpSvn/SharpSvn.UI.xml b/src/Libraries/SharpSvn/SharpSvn.UI.xml new file mode 100644 index 0000000000..81bec83236 --- /dev/null +++ b/src/Libraries/SharpSvn/SharpSvn.UI.xml @@ -0,0 +1,439 @@ + + + + SharpSvn.UI + + + + + + + + + + Initializes a new instance of the class. + + + + + Gets or sets a value indicating whether the form is displayed in the Windows taskbar. + + + true to display the form in the Windows taskbar at run time; otherwise, false. The default is true. + + + + + + + + + + + Gets or sets a value indicating whether the Minimize button is displayed in the caption bar of the form. + + + true to display a Minimize button for the form; otherwise, false. The default is true. + + + + + + + + + + + Gets or sets a value indicating whether the Maximize button is displayed in the caption bar of the form. + + + true to display a Maximize button for the form; otherwise, false. The default is true. + + + + + + + + + + + Gets or sets the starting position of the form at run time. + + + + A that represents the starting position of the form. + + + The value specified is outside the range of valid values. + + + + + + + + + + Initializes a new instance of the class. + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + + + + + + Gets or sets the hostname. + + The hostname. + + + + Gets or sets the fingerprint. + + The fingerprint. + + + + Gets or sets the valid from. + + The valid from. + + + + Gets or sets the valid to. + + The valid to. + + + + Gets or sets the issuer. + + The issuer. + + + + Gets or sets the certificate. + + The certificate. + + + + Gets or sets a value indicating whether [no trusted issuer]. + + true if [no trusted issuer]; otherwise, false. + + + + Gets or sets a value indicating whether [time error]. + + true if [time error]; otherwise, false. + + + + Gets or sets a value indicating whether [invalid common name]. + + true if [invalid common name]; otherwise, false. + + + + + + + + + Initializes a new instance of the class. + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + + + + + + Initializes a new instance of the class. + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Former public api used for binding to SharpSvn + + + + + Makes the description. + + The realm. + The format. + + + + + Determines whether [has win32 handle] [the specified owner]. + + The owner. + + true if [has win32 handle] [the specified owner]; otherwise, false. + + + + + Gets the win32 handle. + + The owner. + + + + + + + + + + + + + Initializes a new instance of the class. + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + + + + + + Initializes a new instance of the class. + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Helper methods to bind a user interface to an + + + + + Binds the default userinterface to the using as parent for the popup windows + + The client to bind. + The parent window. + + + + Binds the default userinterface to the using as parent for the popup windows + + The client. + The parent window. + The header image. + + + + Binds the default userinterface to the using as parent for the popup windows + + The client. + The parent window. + The synchronizer. + The header image. + + + + Container for + + + + + Initializes a new instance of the class. + + + + + Gets or sets the parent window. + + The parent window. + + + + Gets or sets the synchronizer. + + The synchronizer. + + + + Gets or sets the header image. + + The header image. + + + + Gets or sets the UI service. + + The UI service allows redirecting dialog processing to the specific UI service. + (You should use this within .Net development environments (Like MS Visual Studio) implementing this interface) + The UI service. + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to A client certificate is required for accessing server {0} at {1}.. + + + + + Looks up a localized string similar to Connect to Subversion. + + + + + Looks up a localized string similar to The certificate for server {0} at {1} requires a passphrase.. + + + + + Looks up a localized string similar to The server {0} at {1} requires a username.. + + + + + Looks up a localized string similar to The server {0} at {1} requires a username and password.. + + + + + + + + + + Binds the specified client to the user interface defined by args + + The client to bind. + The args. + + + + Binds the specified client to the user interface defined by args + + The client to bind. + The parent window. + + + diff --git a/src/Libraries/SharpSvn/SharpSvn.dll b/src/Libraries/SharpSvn/SharpSvn.dll new file mode 100644 index 0000000000..8456a4c307 Binary files /dev/null and b/src/Libraries/SharpSvn/SharpSvn.dll differ diff --git a/src/Libraries/SharpSvn/SharpSvn.wxs b/src/Libraries/SharpSvn/SharpSvn.wxs new file mode 100644 index 0000000000..3beae3a65d --- /dev/null +++ b/src/Libraries/SharpSvn/SharpSvn.wxs @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Libraries/SharpSvn/SharpSvn.xml b/src/Libraries/SharpSvn/SharpSvn.xml new file mode 100644 index 0000000000..1873079556 --- /dev/null +++ b/src/Libraries/SharpSvn/SharpSvn.xml @@ -0,0 +1,18537 @@ + + + + "SharpSvn" + + + + Writes the specified message to the result writer and appends a + + + Writes the progress message to the result writer + The default implementation calls with the specified message + + + Writes the specified message to the result writer + + + Subversion Client Context wrapper; base class of objects using client context + + + + Extended Parameter container of and + + + + Gets the list of changelist-names + + + Extended Parameter container of + + + + originalPath and modifiedPath must live at least as long as pool + + + Gets the of the command + + + Gets the of the command + + + Gets or sets a replacement for the conflict separator (null is use original) + + + Gets or sets a replacement for the Conflict latest line (null is use original) + + + Gets or sets a replacement for the Conflict modified line (null is use original) + + + Gets or sets a replacement for the Ancestor Path (null is use original) + + + Gets or sets a replacement for the Latest Path (null is use original) + + + Gets or sets a replacement for the Modified Path (null is use original) + + + Gets or sets a replacement for the Original Path (null is use original) + + + Gets the of the command + + + Like svn_diff_conflict_display_modified_original_latest, but +*only* showing conflicts. + + + Just display latest, with no markers. + + + Just display modified, with no markers. + + + Display modified, original, and latest, with conflict markers. + + + Like svn_diff_conflict_display_modified_latest, but with an +extra effort to identify common sequences between modified and +latest. + + + Display modified and latest, with conflict markers + + + Creates the comparer used to compare the tokens. Defaults to Comparer<TToken>::Default + + + Gets the comparer used to compare the tokens + The instance returned is creatd by + + + Gets a boolean indicating whether the merge result contains differences + + + Gets a boolean indicating whether the merge result contains conflicts + + + Extended Parameter container of and + + + + Extended Parameter container of + + + + Extended Parameter container of 's GetSuggestedMergeSources method + + + + Gets or sets the blame range as + + + Extended Parameter container for SvnClient.Blame + + + + Extended Parameter container for SvnClient.List + + + + Extended Parameter container of 's RecoverRepository method + + + + Extended Parameter container of 's GetAppliedMergeInfo method + + + + Gets or sets a boolean indicating whether to retrieve real property +and content changes. If set to false only marker changes are sent. (Changes on "" +property and empty file deltas + + + Gets or sets the maximum version the client knows about. Deltas will be +based on this version + + + Extended Parameter container of .ReplayRevision + + + + Gets or sets a boolean that if set to true tells copy not to process +externals definitions as part of this operation. + + + Always copies the result to below the target (this behaviour is always used if multiple targets are provided) + + + Creates parent directories if required + + + Extended Parameter container of SvnClient.Copy(SvnTarget^,String^,SvnCopyArgs^)" /> and + + + + + Gets the list of changelist-names + + + Extended Parameter container of + + + + Gets the list of changelist-names + + + Gets or sets a boolean indicating whether externals should be ignored + +If IgnoreExternals is not set, then recurse into externals +definitions (if any exist) after handling the main target. This +calls the client notification function (in @a ctx) with the @c +svn_wc_notify_status_external action before handling each externals +definition, and with @c svn_wc_notify_status_completed +after each. + + + + Gets or sets a boolean indicating whether ignored files should be retrieved + If RetrieveIgnoredEntries is set add files or directories that match ignore patterns. + + + Gets or sets a boolean indicating whether the repository should be contacted to retrieve aut of date information + +If Update is set, contact the repository and augment the +status structures with information about out-of-dateness (with +respect to @a revision). Also, if @a result_rev is not @c NULL, +set @a *result_rev to the actual revision against which the +working copy was compared (result_rev is not meaningful unless +update is set + + + + Gets or sets a boolean indicating whether all status properties should be retrieved + +If @a get_all is set, retrieve all entries; otherwise, +retrieve only "interesting" entries (local mods and/or +out of date + + + + Extended Parameter container for SvnClient.Status + + + + +If TRUE, recurse up path's directory and look for +a versioned directory. If found, add all intermediate paths between it +and path. If not found, fail with SVN_ERR_CLIENT_NO_VERSIONED_PARENTS. + + + + If force is not set and path is already under version control, return the error +SVN_ERR_ENTRY_EXISTS. If force is set, do not error on already-versioned items. When used +on a directory in conjunction with the recursive flag, this has the effect of scheduling +for addition unversioned files and directories scattered deep within a versioned tree. + + + Extended Parameter container of + + + + Extended Parameter container of 's CreateRepository method + + + + Gets the list of changelist-names to commit + + + Extended Parameter container of + + + + Gets the list of changelist-names + + + Extended Parameter container of 's GetProperty + + + +An @a entry was found at @a path. + + + Gets the of the command + + + The depth to walk for entries; reeds all entries in path when depth is unknown (default) + + + Gets or sets a boolean indicating whether to return deleted or absent entries + + + Creates parent directories if required + + + Extended Parameter container of and + + + + + Extended Parameter container of 's DeleteRepository method + + + + Extended Parameter container of and + + + + Formats a DateTime in Subversions string format + + + Tries to parse a Svn property into a value + + + Gets a list of TortoiseSvn defined directory properties, which are applied recursively on all directories below the set root + + + +Properties whose values are interpreted as booleans (such as +svn:executable, svn:needs_lock, and svn:special) always fold their +value to this. + + + + All Subversion property names start with this + + + Gets a list of TortoiseSvn defined directory properties, which are applied recursively on all directories below the set root + + + A full combination of the first four keywords. + + + A compressed combination of the other four keywords. + + + Short version of HeadURL + + + The URL for the head revision of this file. + + + Short version of LastChangedBy + + + Who most recently committed to this file. + + + Short version of LastChangedDate + + + The most recent date (repository time) when this file was changed. + + + Medium version of LastChangedRevision, matching the one CVS uses + + + Short version of LastChangedRevision + + + The most recent revision in which this file was changed + + + The maximum size of an expanded or un-expanded keyword. + + + Extended Parameter container of + + + + + Looks up a localized string similar to The value {0} is not a valid {1}. + + + + + Looks up a localized string similar to The passed Uri is not absolute. + + + + + Looks up a localized string similar to The specified target is not a valid Uri target. + + + + + Looks up a localized string similar to The specified target is not a value Uri or Path target. + + + + + Looks up a localized string similar to The specified target is not a valid Path target. + + + + + Looks up a localized string similar to The passed target must contain an explicit revision. + + + + + Looks up a localized string similar to Subversion reported a malfunction '{0}' on line {2} of '{1}'.. + + + + + Looks up a localized string similar to Svn operation in progress; an SvnClient instance can handle only one command at a time. + + + + + Looks up a localized string similar to This function is not available from managed code. . + + + + + Looks up a localized string similar to Revision type must be head, date or a specific revision number. + + + + + Looks up a localized string similar to The Working revision type is not supported here. + + + + + Looks up a localized string similar to Revision number must be at least 0. + + + + + Looks up a localized string similar to Revision must be >= 0. + + + + + Looks up a localized string similar to Property name is not valid. + + + + + Looks up a localized string similar to Please restart this application before continuing.\n\nStack trace:\n{0}. + + + + + Looks up a localized string similar to Paths with a length above MAX_PATH (like '{0}') must be rooted.. + + + + + Looks up a localized string similar to Path '{0}' contains invalid characters. + + + + + Looks up a localized string similar to The number of elements in the paths collection does not match the number in revisions. + + + + + Looks up a localized string similar to '{0}' unlocked.. + + + + + Looks up a localized string similar to '{0}' locked by user '{1}'.. + + + + + Looks up a localized string similar to Updated to revision {0}.. + + + + + Looks up a localized string similar to Updated external to revision {0}.. + + + + + Looks up a localized string similar to Transmitting file data. + + + + + Looks up a localized string similar to Status against revision: {0}. + + + + + Looks up a localized string similar to Skipped missing '{0}'. + + + + + Looks up a localized string similar to Skipped missing target '{0}'. + + + + + Looks up a localized string similar to Reverted '{0}'. + + + + + Looks up a localized string similar to --- Reverse-merging r{0} through r{1} into '{2}':. + + + + + Looks up a localized string similar to --- Reverse-merging r{0} into '{1}':. + + + + + Looks up a localized string similar to Restored '{0}'. + + + + + Looks up a localized string similar to Resolved conflicted state of '{0}'. + + + + + Looks up a localized string similar to Performing status on external item at '{0}'. + + + + + Looks up a localized string similar to Path '{0}' is now a member of change list '{1}'.. + + + + + Looks up a localized string similar to Path '{0}' is no longer a member of a change list.. + + + + + Looks up a localized string similar to --- Merging r{0} through r{1} into '{2}':. + + + + + Looks up a localized string similar to --- Merging r{0} into '{1}':. + + + + + Looks up a localized string similar to --- Merging differences between repository URLs into '{0}':. + + + + + Looks up a localized string similar to Fetching external item into '{0}'. + + + + + Looks up a localized string similar to Failed to revert '{0}' -- try updating instead. + + + + + Looks up a localized string similar to External at revision {0}.. + + + + + Looks up a localized string similar to Exported revision {0}.. + + + + + Looks up a localized string similar to Exported external at revision {0}.. + + + + + Looks up a localized string similar to Checked out revision {0}.. + + + + + Looks up a localized string similar to Checked out external at revision {0}.. + + + + + Looks up a localized string similar to At revision {0}.. + + + + + Looks up a localized string similar to {This line does contain non-Utf8 characters}. + + + + + Looks up a localized string similar to The loading of the subversion mime mapping file failed. + + + + + Looks up a localized string similar to One or more items in the list are null. + + + + + Looks up a localized string similar to The IO Thread Blocked -- Do you have a deadlock?. + + + + + Looks up a localized string similar to Invalid Uri string. + + + + + Looks up a localized string similar to Invalid SvnRevisionType value specified. + + + + + Looks up a localized string similar to Invalid character in client name. + + + + + Looks up a localized string similar to The handler is not registered at this time. + + + + + Looks up a localized string similar to File '{0}' not found. + + + + + Looks up a localized string similar to A fatal error occurred within the subversion API - (Use Ctrl+C to copy message). + + + + + Looks up a localized string similar to Depth must be Empty, Files or Infinity in 1.4 compatible compilation. + + + + + Looks up a localized string similar to You can only crop a node to a depth between empty and files.. + + + + + Looks up a localized string similar to The collection must at least contain one item. + + + + + Looks up a localized string similar to The argument must be a valid absolute repository Uri. + + + + + Looks up a localized string similar to This argument is not a valid path. A Uri was specified. + + + + + Looks up a localized string similar to All provided Uri's must be on the same server. + + + + + Looks up a localized string similar to All targets must either be Uri or Path. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + @copyright + ==================================================================== + Copyright (c) 2000-2008 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_io.h + @brief General file I/O for Subversion + + @copyright + ==================================================================== + Copyright (c) 2006-2008 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_mergeinfo.h + @brief mergeinfo handling and processing + + + + Possibly update the filesystem located in the directory @a path + to use disk space more efficiently. + + @since New in 1.6. + + + +The type of a pack notification function. @a shard is the shard being + * acted upon; @a action is the type of action being performed. @a baton is + * the corresponding baton for the notification function, and @a pool can + * be used for temporary allocations, but will be cleared between invocations. + + + +packing of the shard is completed + + +packing of the shard has commenced + + +@} + Append a textual list of all available FS modules to the stringbuf + @a output. + + @since New in 1.2. + + + +Report locks on or below @a path in @a fs using the @a + * get_locks_func / @a get_locks_baton. Use @a pool for necessary + * allocations. + * + * If the @a get_locks_func callback implementation returns an error, + * lock iteration will terminate and that error will be returned by + * this function. + + + +The type of a lock discovery callback function. @a baton is the + * value specified in the call to svn_fs_get_locks(); the filesystem + * passes it through to the callback. @a lock is a lock structure. + * @a pool is a temporary subpool for use by the callback + * implementation -- it is cleared after invocation of the callback. + + + +If @a path is locked in @a fs, set @a *lock to an svn_lock_t which + * represents the lock, allocated in @a pool. + * + * If @a path is not locked, set @a *lock to NULL. + + + +Remove the lock on @a path represented by @a token in @a fs. + * + * If @a token doesn't point to a lock, return @c SVN_ERR_FS_BAD_LOCK_TOKEN. + * If @a token points to an expired lock, return @c SVN_ERR_FS_LOCK_EXPIRED. + * If @a fs has no username associated with it, return @c SVN_ERR_FS_NO_USER + * unless @a break_lock is specified. + * + * If @a token points to a lock, but the username of @a fs's access + * context doesn't match the lock's owner, return @c + * SVN_ERR_FS_LOCK_OWNER_MISMATCH. If @a break_lock is TRUE, however, don't + * return error; allow the lock to be "broken" in any case. In the latter + * case, @a token shall be @c NULL. + * + * Use @a pool for temporary allocations. + + + +Generate a unique lock-token using @a fs. Return in @a *token, + * allocated in @a pool. + * + * This can be used in to populate lock->token before calling + * svn_fs_attach_lock(). + + + +@defgroup svn_fs_locks Filesystem locks + * @{ + * @since New in 1.2. +A lock represents one user's exclusive right to modify a path in a + * filesystem. In order to create or destroy a lock, a username must + * be associated with the filesystem's access context (see @c + * svn_fs_access_t). + * + * When a lock is created, a 'lock-token' is returned. The lock-token + * is a unique URI that represents the lock (treated as an opaque + * string by the client), and is required to make further use of the + * lock (including removal of the lock.) A lock-token can also be + * queried to return a svn_lock_t structure that describes the details + * of the lock. lock-tokens must not contain any newline character, + * mainly due to the serialization for tokens for pre-commit hook. + * + * Locks are not secret; anyone can view existing locks in a + * filesystem. Locks are not omnipotent: they can broken and stolen + * by people who don't "own" the lock. (Though admins can tailor a + * custom break/steal policy via libsvn_repos pre-lock hook script.) + * + * Locks can be created with an optional expiration date. If a lock + * has an expiration date, then the act of fetching/reading it might + * cause it to automatically expire, returning either nothing or an + * expiration error (depending on the API). + +Lock @a path in @a fs, and set @a *lock to a lock + * representing the new lock, allocated in @a pool. + * + * @warning You may prefer to use svn_repos_fs_lock() instead, + * which see. + * + * @a fs must have a username associated with it (see @c + * svn_fs_access_t), else return @c SVN_ERR_FS_NO_USER. Set the + * 'owner' field in the new lock to the fs username. + * + * @a comment is optional: it's either an xml-escapable UTF8 string + * which describes the lock, or it is @c NULL. + * + * @a is_dav_comment describes whether the comment was created by a + * generic DAV client; only mod_dav_svn's autoversioning feature needs + * to use it. If in doubt, pass 0. + * + * If path is already locked, then return @c SVN_ERR_FS_PATH_ALREADY_LOCKED, + * unless @a steal_lock is TRUE, in which case "steal" the existing + * lock, even if the FS access-context's username does not match the + * current lock's owner: delete the existing lock on @a path, and + * create a new one. + * + * @a token is a lock token such as can be generated using + * svn_fs_generate_lock_token() (indicating that the caller wants to + * dictate the lock token used), or it is @c NULL (indicating that the + * caller wishes to have a new token generated by this function). If + * @a token is not @c NULL, and represents an existing lock, then @a + * path must match the path associated with that existing lock. + * + * If @a expiration_date is zero, then create a non-expiring lock. + * Else, the lock will expire at @a expiration_date. + * + * If @a current_rev is a valid revnum, then do an out-of-dateness + * check. If the revnum is less than the last-changed-revision of @a + * path (or if @a path doesn't exist in HEAD), return @c + * SVN_ERR_FS_OUT_OF_DATE. + * + * @note At this time, only files can be locked. + + + +If not @c NULL, associate @a *uuid with @a fs. Otherwise (if @a + * uuid is @c NULL), generate a new UUID for @a fs. Use @a pool for + * any scratchwork. + + + +Populate @a *uuid with the UUID associated with @a fs. Allocate + @a *uuid in @a pool. + + +Set @a *stream_p to a pointer to a delta stream that will turn the + * contents of the file @a source into the contents of the file @a target. + * If @a source_root is zero, use a file with zero length as the source. + * + * This function does not compare the two files' properties. + * + * Allocate @a *stream_p, and do any necessary temporary allocation, in + * @a pool. + + + +Change a revision's property's value, or add/delete a property. + * + * - @a fs is a filesystem, and @a rev is the revision in that filesystem + * whose property should change. + * - @a name is the name of the property to change. + * - @a value is the new value of the property, or zero if the property should + * be removed altogether. + * + * Note that revision properties are non-historied --- you can change + * them after the revision has been committed. They are not protected + * via transactions. + * + * Do any necessary temporary allocation in @a pool. + + + +Set @a *table_p to the entire property list of revision @a rev in + * filesystem @a fs, as an APR hash table allocated in @a pool. The table + * maps char * property names to @c svn_string_t * values; the names + * and values are allocated in @a pool. + + + +Set @a *value_p to the value of the property named @a propname on + * revision @a rev in the filesystem @a fs. If @a rev has no property by + * that name, set @a *value_p to zero. Allocate the result in @a pool. + + + +Provide filesystem @a fs the opportunity to compress storage relating to + * associated with @a revision in filesystem @a fs. Use @a pool for all + * allocations. + * + * @note This can be a time-consuming process, depending the breadth + * of the changes made in @a revision, and the depth of the history of + * those changed paths. This may also be a no op. + + + +Set @a *youngest_p to the number of the youngest revision in filesystem + * @a fs. Use @a pool for all temporary allocation. + * + * The oldest revision in any filesystem is numbered zero. + + + +Check if the contents of two root/path combos have changed. + * + * Set @a *changed_p to 1 if the contents at @a path1 under @a root1 differ + * from those at @a path2 under @a root2, or set it to 0 if they are the + * same. Both paths must exist under their respective roots, and both + * roots must be in the same filesystem. + + + +Write data directly to the file @a path in @a root. @a root must be the + * root of a transaction, not a revision. + * + * Set @a *contents_p to a stream ready to receive full textual data. + * When the caller closes this stream, the data replaces the previous + * contents of the file. The caller must write all file data and close + * the stream before making further changes to the transaction. + * + * If @a path does not exist in @a root, return an error. (You cannot use + * this routine to create new files; use svn_fs_make_file() to create + * an empty file first.) + * + * @a result_checksum is the hex MD5 digest for the final fulltext + * written to the stream. It is ignored if NULL, but if not null, it + * must match the checksum of the result; if it does not, then the @a + * *contents_p call which detects the mismatch will return the error + * @c SVN_ERR_CHECKSUM_MISMATCH. + * + * Do any necessary temporary allocation in @a pool. + * + * ### This is like svn_fs_apply_textdelta(), but takes the text + * straight. It is currently used only by the loader, see + * libsvn_repos/load.c. It should accept a checksum, of course, which + * would come from an (optional) header in the dump file. See + * http://subversion.tigris.org/issues/show_bug.cgi?id=1102 for more. + + + +Apply a text delta to the file @a path in @a root. @a root must be the + * root of a transaction, not a revision. + * + * Set @a *contents_p to a function ready to receive text delta windows + * describing how to change the file's contents, relative to its + * current contents. Set @a *contents_baton_p to a baton to pass to + * @a *contents_p. + * + * If @a path does not exist in @a root, return an error. (You cannot use + * this routine to create new files; use svn_fs_make_file() to create + * an empty file first.) + * + * @a base_checksum is the hex MD5 digest for the base text against + * which the delta is to be applied; it is ignored if NULL, and may be + * ignored even if not NULL. If it is not ignored, it must match the + * checksum of the base text against which svndiff data is being + * applied; if not, svn_fs_apply_textdelta() or the @a *contents_p call + * which detects the mismatch will return the error + * @c SVN_ERR_CHECKSUM_MISMATCH (if there is no base text, there may + * still be an error if @a base_checksum is neither NULL nor the + * checksum of the empty string). + * + * @a result_checksum is the hex MD5 digest for the fulltext that + * results from this delta application. It is ignored if NULL, but if + * not NULL, it must match the checksum of the result; if it does not, + * then the @a *contents_p call which detects the mismatch will return + * the error @c SVN_ERR_CHECKSUM_MISMATCH. + * + * The caller must send all delta windows including the terminating + * NULL window to @a *contents_p before making further changes to the + * transaction. + * + * Do temporary allocation in @a pool. + + + +Create a new file named @a path in @a root. The file's initial contents + * are the empty string, and it has no properties. @a root must be the + * root of a transaction, not a revision. + * + * Do any necessary temporary allocation in @a pool. + + + +Set @a *contents to a readable generic stream that will yield the + * contents of the file @a path in @a root. Allocate the stream in + * @a pool. You can only use @a *contents for as long as the underlying + * filesystem is open. If @a path is not a file, return + * @c SVN_ERR_FS_NOT_FILE. + * + * If @a root is the root of a transaction, it is possible that the + * contents of the file @a path will change between calls to + * svn_fs_file_contents(). In that case, the result of reading from + * @a *contents is undefined. + * + * ### @todo kff: I am worried about lifetime issues with this pool vs + * the trail created farther down the call stack. Trace this function + * to investigate... + + + + Same as svn_fs_file_checksum(), only always put the MD5 checksum of file + @a path into @a digest, which should point to @c APR_MD5_DIGESTSIZE bytes + of storage. If the checksum doesn't exist, put all 0's into @a digest. + + @deprecated Provided for backward compatibility with the 1.5 API. + + + +Set @a *checksum to the checksum of type @a kind for the file @a path. + * @a *checksum will be allocated out of @a pool, which will also be used + * for temporary allocations. + * + * If the filesystem does not have a prerecorded checksum of @a kind for + * @a path, and @a force is not TRUE, do not calculate a checksum + * dynamically, just put NULL into @a checksum. (By convention, the NULL + * checksum is considered to match any checksum.) + * + * Notes: + * + * You might wonder, why do we only provide this interface for file + * contents, and not for properties or directories? + * + * The answer is that property lists and directory entry lists are + * essentially data structures, not text. We serialize them for + * transmission, but there is no guarantee that the consumer will + * parse them into the same form, or even the same order, as the + * producer. It's difficult to find a checksumming method that + * reaches the same result given such variation in input. (I suppose + * we could calculate an independent MD5 sum for each propname and + * value, and XOR them together; same with directory entry names. + * Maybe that's the solution?) Anyway, for now we punt. The most + * important data, and the only data that goes through svndiff + * processing, is file contents, so that's what we provide + * checksumming for. + * + * Internally, of course, the filesystem checksums everything, because + * it has access to the lowest level storage forms: strings behind + * representations. + * + * @since New in 1.6. + + + +Set @a *length_p to the length of the file @a path in @a root, in bytes. + * Do any necessary temporary allocation in @a pool. + + + +Like svn_fs_copy(), but doesn't record copy history, and preserves + * the PATH. You cannot use svn_fs_copied_from() later to find out + * where this copy came from. + * + * Use svn_fs_revision_link() in situations where you don't care + * about the copy history, and where @a to_path and @a from_path are + * the same, because it is cheaper than svn_fs_copy(). + + + +Create a copy of @a from_path in @a from_root named @a to_path in + * @a to_root. If @a from_path in @a from_root is a directory, copy the + * tree it refers to recursively. + * + * The copy will remember its source; use svn_fs_copied_from() to + * access this information. + * + * @a to_root must be the root of a transaction; @a from_root must be the + * root of a revision. (Requiring @a from_root to be the root of a + * revision makes the implementation trivial: there is no detectable + * difference (modulo node revision ID's) between copying @a from and + * simply adding a reference to it. So the operation takes place in + * constant time. However, there's no reason not to extend this to + * mutable nodes --- it's just more code.) Further, @a to_root and @a + * from_root must represent the same filesystem. + * + * @note To do a copy without preserving copy history, use + * svn_fs_revision_link(). + * + * Do any necessary temporary allocation in @a pool. + + + +Delete the node named @a path in @a root. If the node being deleted is + * a directory, its contents will be deleted recursively. @a root must be + * the root of a transaction, not of a revision. Use @a pool for + * temporary allocation. + * + * This function may be more efficient than making the equivalent + * series of calls to svn_fs_delete(), because it takes advantage of the + * fact that, to delete an immutable subtree, shared with some + * committed revision, you need only remove the directory entry. The + * dumb algorithm would recurse into the subtree and end up cloning + * each non-empty directory it contains, only to delete it later. + * + * If return @c SVN_ERR_FS_NO_SUCH_ENTRY, then the basename of @a path is + * missing from its parent, that is, the final target of the deletion + * is missing. + * + * Attempting to remove the root dir also results in an error, + * @c SVN_ERR_FS_ROOT_DIR, even if the dir is empty. + + + +Create a new directory named @a path in @a root. The new directory has + * no entries, and no properties. @a root must be the root of a transaction, + * not a revision. + * + * Do any necessary temporary allocation in @a pool. + + + +Set @a *entries_p to a newly allocated APR hash table containing the + * entries of the directory at @a path in @a root. The keys of the table + * are entry names, as byte strings, excluding the final NULL + * character; the table's values are pointers to @c svn_fs_dirent_t + * structures. Allocate the table and its contents in @a pool. + + + +The node kind. + + +The node revision ID it names. + + +The name of this directory entry. + + +The type of a Subversion directory entry. + + +Merge changes between two nodes into a third node. + * + * Given nodes @a source and @a target, and a common ancestor @a ancestor, + * modify @a target to contain all the changes made between @a ancestor and + * @a source, as well as the changes made between @a ancestor and @a target. + * @a target_root must be the root of a transaction, not a revision. + * + * @a source, @a target, and @a ancestor are generally directories; this + * function recursively merges the directories' contents. If they are + * files, this function simply returns an error whenever @a source, + * @a target, and @a ancestor are all distinct node revisions. + * + * If there are differences between @a ancestor and @a source that conflict + * with changes between @a ancestor and @a target, this function returns an + * @c SVN_ERR_FS_CONFLICT error. + * + * If the merge is successful, @a target is left in the merged state, and + * the base root of @a target's txn is set to the root node of @a source. + * If an error is returned (whether for conflict or otherwise), @a target + * is left unaffected. + * + * If @a conflict_p is non-NULL, then: a conflict error sets @a *conflict_p + * to the name of the node in @a target which couldn't be merged, + * otherwise, success sets @a *conflict_p to NULL. + * + * Do any necessary temporary allocation in @a pool. + + + +Retrieve mergeinfo for multiple nodes. + * + * @a *catalog is a catalog for @a paths. It will never be @c NULL, + * but may be empty. + * + * @a root is revision root to use when looking up paths. + * + * @a paths are the paths you are requesting information for. + * + * @a inherit indicates whether to retrieve explicit, + * explicit-or-inherited, or only inherited mergeinfo. + * + * If @a include_descendants is TRUE, then additionally return the + * mergeinfo for any descendant of any element of @a paths which has + * the @c SVN_PROP_MERGEINFO property explicitly set on it. (Note + * that inheritance is only taken into account for the elements in @a + * paths; descendants of the elements in @a paths which get their + * mergeinfo via inheritance are not included in @a *mergeoutput.) + * + * Do any necessary temporary allocation in @a pool. + * + * @since New in 1.5. + + + +Set @a *root_p and @a *path_p to the revision root and path of the + * destination of the most recent copy event that caused @a path to + * exist where it does in @a root, or to NULL if no such copy exists. + * When non-NULL, allocate @a *root_p and @a *path_p in @a pool. + * + * @a *path_p might be a parent of @a path, rather than @a path + * itself. However, it will always be the deepest relevant path. + * That is, if a copy occurs underneath another copy in the same txn, + * this function makes sure to set @a *path_p to the longest copy + * destination path that is still a parent of or equal to @a path. + * + * @since New in 1.3. + + + +Discover a node's copy ancestry, if any. + * + * If the node at @a path in @a root was copied from some other node, set + * @a *rev_p and @a *path_p to the revision and path of the other node, + * allocating @a *path_p in @a pool. + * + * Else if there is no copy ancestry for the node, set @a *rev_p to + * @c SVN_INVALID_REVNUM and @a *path_p to NULL. + * + * If an error is returned, the values of @a *rev_p and @a *path_p are + * undefined, but otherwise, if one of them is set as described above, + * you may assume the other is set correspondingly. + * + * @a root may be a revision root or a transaction root. + * + * Notes: + * - Copy ancestry does not descend. After copying directory D to + * E, E will have copy ancestry referring to D, but E's children + * may not. See also svn_fs_copy(). + * + * - Copy ancestry *under* a copy is preserved. That is, if you + * copy /A/D/G/pi to /A/D/G/pi2, and then copy /A/D/G to /G, then + * /G/pi2 will still have copy ancestry pointing to /A/D/G/pi. + * We don't know if this is a feature or a bug yet; if it turns + * out to be a bug, then the fix is to make svn_fs_copied_from() + * observe the following logic, which currently callers may + * choose to follow themselves: if node X has copy history, but + * its ancestor A also has copy history, then you may ignore X's + * history if X's revision-of-origin is earlier than A's -- + * because that would mean that X's copy history was preserved in + * a copy-under-a-copy scenario. If X's revision-of-origin is + * the same as A's, then it was copied under A during the same + * transaction that created A. (X's revision-of-origin cannot be + * greater than A's, if X has copy history.) @todo See how + * people like this, it can always be hidden behind the curtain + * if necessary. + * + * - Copy ancestry is not stored as a regular subversion property + * because it is not inherited. Copying foo to bar results in a + * revision of bar with copy ancestry; but committing a text + * change to bar right after that results in a new revision of + * bar without copy ancestry. + + + +Determine if the properties of two path/root combinations are different. + * + * Set @a *changed_p to 1 if the properties at @a path1 under @a root1 differ + * from those at @a path2 under @a root2, or set it to 0 if they are the + * same. Both paths must exist under their respective roots, and both + * roots must be in the same filesystem. + + + +Change a node's property's value, or add/delete a property. + * + * - @a root and @a path indicate the node whose property should change. + * @a root must be the root of a transaction, not the root of a revision. + * - @a name is the name of the property to change. + * - @a value is the new value of the property, or zero if the property should + * be removed altogether. + * Do any necessary temporary allocation in @a pool. + + + +Set @a *table_p to the entire property list of @a path in @a root, + * as an APR hash table allocated in @a pool. The resulting table maps + * property names to pointers to @c svn_string_t objects containing the + * property value. + + + +Set @a *value_p to the value of the property named @a propname of + * @a path in @a root. If the node has no property by that name, set + * @a *value_p to zero. Allocate the result in @a pool. + + + +Set @a *created_path to the path at which @a path under @a root was + * created. Use @a pool for all allocations. Callers may use this + * function in conjunction with svn_fs_node_created_rev() to perform a + * reverse lookup of the mapping of (path, revision) -> node-id that + * svn_fs_node_id() performs. + + + +Set @a *revision to the revision in which the line of history + * represented by @a path under @a root originated. Use @a pool for + * any temporary allocations. If @a root is a transaction root, @a + * *revision will be set to @c SVN_INVALID_REVNUM for any nodes newly + * added in that transaction (brand new files or directories created + * using @c svn_fs_make_dir or @c svn_fs_make_file). + * + * @since New in 1.5. + + + +Set @a *revision to the revision in which @a path under @a root was + * created. Use @a pool for any temporary allocations. @a *revision will + * be set to @c SVN_INVALID_REVNUM for uncommitted nodes (i.e. modified nodes + * under a transaction root). Note that the root of an unmodified transaction + * is not itself considered to be modified; in that case, return the revision + * upon which the transaction was based. + + + +Get the id of a node. + * + * Set @a *id_p to the node revision ID of @a path in @a root, allocated in + * @a pool. + * + * If @a root is the root of a transaction, keep in mind that other + * changes to the transaction can change which node @a path refers to, + * and even whether the path exists at all. + + + +Set @a *is_file to @c TRUE iff @a path in @a root is a file. + * Do any necessary temporary allocation in @a pool. + + + +Set @a *is_dir to @c TRUE iff @a path in @a root is a directory. + * Do any necessary temporary allocation in @a pool. + + + +Set @a *path and @a *revision to the path and revision, + * respectively, of the @a history object. Use @a pool for all + * allocations. + + + +Set @a *prev_history_p to an opaque node history object which + * represents the previous (or "next oldest") interesting history + * location for the filesystem node represented by @a history, or @c + * NULL if no such previous history exists. If @a cross_copies is @c + * FALSE, also return @c NULL if stepping backwards in history to @a + * *prev_history_p would cross a filesystem copy operation. + * + * @note If this is the first call to svn_fs_history_prev() for the @a + * history object, it could return a history object whose location is + * the same as the original. This will happen if the original + * location was an interesting one (where the node was modified, or + * took place in a copy event). This behavior allows looping callers + * to avoid the calling svn_fs_history_location() on the object + * returned by svn_fs_node_history(), and instead go ahead and begin + * calling svn_fs_history_prev(). + * + * @note This function uses node-id ancestry alone to determine + * modifiedness, and therefore does NOT claim that in any of the + * returned revisions file contents changed, properties changed, + * directory entries lists changed, etc. + * + * @note The revisions returned for @a path will be older than or + * the same age as the revision of that path in @a root. That is, if + * @a root is a revision root based on revision X, and @a path was + * modified in some revision(s) younger than X, those revisions + * younger than X will not be included for @a path. + + +Set @a *history_p to an opaque node history object which + * represents @a path under @a root. @a root must be a revision root. + * Use @a pool for all allocations. + + + +An opaque node history object. + + +@} +Set @a *kind_p to the type of node present at @a path under @a + * root. If @a path does not exist under @a root, set @a *kind_p to @c + * svn_node_none. Use @a pool for temporary allocation. + + + +Same as svn_fs_paths_changed2(), only with @c svn_fs_path_change_t * values + * in the hash (and thus no kind or copyfrom data). + * + * @deprecated Provided for backward compatibility with the 1.5 API. + + + +Determine what has changed under a @a root. + * + * Allocate and return a hash @a *changed_paths_p containing descriptions + * of the paths changed under @a root. The hash is keyed with + * const char * paths, and has @c svn_fs_path_change2_t * values. + * + * Callers can assume that this function takes time proportional to + * the amount of data output, and does not need to do tree crawls; + * however, it is possible that some of the @c node_kind fields in the + * @c svn_fs_path_change2_t * values will be @c svn_node_unknown or + * that and some of the @c copyfrom_known fields will be FALSE. + * + * Use @c pool for all allocations, including the hash and its values. + * + * @since New in 1.6. + + + + Allocate an @c svn_fs_path_change2_t structure in @a pool, initialize and + return it. + + Set the @c node_rev_id field of the created struct to @a node_rev_id, and + @c change_kind to @a change_kind. Set all other fields to their + @c _unknown, @c NULL or invalid value, respectively. + + @since New in 1.6. + + + +were there property mods? + + +were there text mods? + + +kind of change + + +node revision id of changed path + + +Similar to @c svn_fs_path_change2_t, but without kind and copyfrom + * information. + * + * @deprecated Provided for backwards compatibility with the 1.5 API. + + + +Copyfrom revision and path; this is only valid if copyfrom_known + * is true. + + +what node kind is the path? + (Note: it is legal for this to be @c svn_node_unknown.) + + +were there property mods? + + +were there text mods? + + +kind of change + + +node revision id of changed path + + +Change descriptor. + * + * @note Fields may be added to the end of this structure in future + * versions. Therefore, to preserve binary compatibility, users + * should not directly allocate structures of this type. + * + * @since New in 1.6. + + +ignore all previous change items for path (internal-use only) + + +path removed and re-added in txn + + +path removed in txn + + +path added in txn + + +path modified in txn + + +If @a root is the root of a revision, return the revision number. + * Otherwise, return @c SVN_INVALID_REVNUM. + + + +If @a root is the root of a transaction, return the number of the + * revision on which is was based when created. Otherwise, return @c + * SVN_INVALID_REVNUM. + * + * @since New in 1.5. + + + +If @a root is the root of a transaction, return the name of the + * transaction, allocated in @a pool; otherwise, return NULL. + + + +Return @c TRUE iff @a root is a revision root. + + +Return @c TRUE iff @a root is a transaction root. + + +Return the filesystem to which @a root belongs. + + +Free the root directory @a root. Simply clearing or destroying the + * pool @a root was allocated in will have the same effect as calling + * this function. + + + +Set @a *root_p to the root directory of @a txn. Allocate @a *root_p in + * @a pool. + + + +Set @a *root_p to the root directory of revision @a rev in filesystem + * @a fs. Allocate @a *root_p in @a pool. + + + +@} +Roots. + * + * An @c svn_fs_root_t object represents the root directory of some + * revision or transaction in a filesystem. To refer to particular + * node, you provide a root, and a directory path relative that root. + * + * @defgroup svn_fs_roots Filesystem roots + * @{ + +The Filesystem Root object. + + +Change, add, and/or delete transaction property values in + * transaction @a txn. @a props is an array of svn_prop_t + * elements. This is equivalent to calling svn_fs_change_txp_prop + * multiple times with the @c name and @c value fields of each + * successive svn_prop_t, but may be more efficient. + * (Properties not mentioned are left alone.) Do any necessary + * temporary allocation in @a pool. + * + * @since New in 1.5. + + + +Change a transactions @a txn's property's value, or add/delete a + * property. @a name is the name of the property to change, and @a value + * is the new value of the property, or zero if the property should be + * removed altogether. Do any necessary temporary allocation in @a pool. + + + +Set @a *table_p to the entire property list of transaction @a txn, as + * an APR hash table allocated in @a pool. The resulting table maps property + * names to pointers to @c svn_string_t objects containing the property value. + + + +Set @a *value_p to the value of the property named @a propname on + * transaction @a txn. If @a txn has no property by that name, set + * @a *value_p to zero. Allocate the result in @a pool. + + + +Set @a *names_p to an array of const char * ids which are the + * names of all the currently active transactions in the filesystem @a fs. + * Allocate the array in @a pool. + + + +Open the transaction named @a name in the filesystem @a fs. Set @a *txn + * to the transaction. + * + * If there is no such transaction, @c SVN_ERR_FS_NO_SUCH_TRANSACTION is + * the error returned. + * + * Allocate the new transaction in @a pool; when @a pool is freed, the new + * transaction will be closed (neither committed nor aborted). + + + +Return @a txn's base revision. + + +Set @a *name_p to the name of the transaction @a txn, as a + * NULL-terminated string. Allocate the name in @a pool. + + + +Cleanup the dead transaction in @a fs whose ID is @a txn_id. Use + * @a pool for all allocations. If the transaction is not yet dead, + * the error @c SVN_ERR_FS_TRANSACTION_NOT_DEAD is returned. (The + * caller probably forgot to abort the transaction, or the cleanup + * step of that abort failed for some reason.) + + + +Abort the transaction @a txn. Any changes made in @a txn are + * discarded, and the filesystem is left unchanged. Use @a pool for + * any necessary allocations. + * + * @note This function first sets the state of @a txn to "dead", and + * then attempts to purge it and any related data from the filesystem. + * If some part of the cleanup process fails, @a txn and some portion + * of its data may remain in the database after this function returns. + * Use svn_fs_purge_txn() to retry the transaction cleanup. + + + +Commit @a txn. + * + * @note You usually don't want to call this directly. + * Instead, call svn_repos_fs_commit_txn(), which honors the + * repository's hook configurations. + * + * If the transaction conflicts with other changes committed to the + * repository, return an @c SVN_ERR_FS_CONFLICT error. Otherwise, create + * a new filesystem revision containing the changes made in @a txn, + * storing that new revision number in @a *new_rev, and return zero. + * + * If @a conflict_p is non-zero, use it to provide details on any + * conflicts encountered merging @a txn with the most recent committed + * revisions. If a conflict occurs, set @a *conflict_p to the path of + * the conflict in @a txn, with the same lifetime as @a txn; + * otherwise, set @a *conflict_p to NULL. + * + * If the commit succeeds, @a txn is invalid. + * + * If the commit fails, @a txn is still valid; you can make more + * operations to resolve the conflict, or call svn_fs_abort_txn() to + * abort the transaction. + * + * @note Success or failure of the commit of @a txn is determined by + * examining the value of @a *new_rev upon this function's return. If + * the value is a valid revision number, the commit was successful, + * even though a non-@c NULL function return value may indicate that + * something else went wrong. + + + + Same as svn_fs_begin_txn2(), but with @a flags set to 0. + + @deprecated Provided for backward compatibility with the 1.1 API. + + + +@defgroup svn_fs_begin_txn2_flags Bitmask flags for svn_fs_begin_txn2() + * @since New in 1.2. + * @{ +Do on-the-fly out-of-dateness checks. That is, an fs routine may + * throw error if a caller tries to edit an out-of-date item in the + * transaction. + * + * @warning ### Not yet implemented. + +Do on-the-fly lock checks. That is, an fs routine may throw error + * if a caller tries to edit a locked item without having rights to the lock. + +@} + Begin a new transaction on the filesystem @a fs, based on existing + revision @a rev. Set @a *txn_p to a pointer to the new transaction. + When committed, this transaction will create a new revision. + + Allocate the new transaction in @a pool; when @a pool is freed, the new + transaction will be closed (neither committed nor aborted). + + @a flags determines transaction enforcement behaviors, and is composed + from the constants SVN_FS_TXN_* (@c SVN_FS_TXN_CHECK_OOD etc.). + + @note If you're building a txn for committing, you probably + don't want to call this directly. Instead, call + svn_repos_fs_begin_txn_for_commit(), which honors the + repository's hook configurations. + + @since New in 1.2. + + + +@} +Filesystem Transactions. + * + * To make a change to a Subversion filesystem: + * - Create a transaction object, using svn_fs_begin_txn(). + * - Call svn_fs_txn_root(), to get the transaction's root directory. + * - Make whatever changes you like in that tree. + * - Commit the transaction, using svn_fs_commit_txn(). + * + * The filesystem implementation guarantees that your commit will + * either: + * - succeed completely, so that all of the changes are committed to + * create a new revision of the filesystem, or + * - fail completely, leaving the filesystem unchanged. + * + * Until you commit the transaction, any changes you make are + * invisible. Only when your commit succeeds do they become visible + * to the outside world, as a new revision of the filesystem. + * + * If you begin a transaction, and then decide you don't want to make + * the change after all (say, because your net connection with the + * client disappeared before the change was complete), you can call + * svn_fs_abort_txn(), to cancel the entire transaction; this + * leaves the filesystem unchanged. + * + * The only way to change the contents of files or directories, or + * their properties, is by making a transaction and creating a new + * revision, as described above. Once a revision has been committed, it + * never changes again; the filesystem interface provides no means to + * go back and edit the contents of an old revision. Once history has + * been recorded, it is set in stone. Clients depend on this property + * to do updates and commits reliably; proxies depend on this property + * to cache changes accurately; and so on. + * + * There are two kinds of nodes in the filesystem: mutable, and + * immutable. Revisions in the filesystem consist entirely of + * immutable nodes, whose contents never change. A transaction in + * progress, which the user is still constructing, uses mutable nodes + * for those nodes which have been changed so far, and refers to + * immutable nodes from existing revisions for portions of the tree + * which haven't been changed yet in that transaction. + * + * Immutable nodes, as part of revisions, never refer to mutable + * nodes, which are part of uncommitted transactions. Mutable nodes + * may refer to immutable nodes, or other mutable nodes. + * + * Note that the terms "immutable" and "mutable" describe whether or + * not the nodes have been changed as part of a transaction --- not + * the permissions on the nodes they refer to. Even if you aren't + * authorized to modify the filesystem's root directory, you might be + * authorized to change some descendant of the root; doing so would + * create a new mutable copy of the root directory. Mutability refers + * to the role of the node: part of an existing revision, or part of a + * new one. This is independent of your authorization to make changes + * to a given node. + * + * Transactions are actually persistent objects, stored in the + * database. You can open a filesystem, begin a transaction, and + * close the filesystem, and then a separate process could open the + * filesystem, pick up the same transaction, and continue work on it. + * When a transaction is successfully committed, it is removed from + * the database. + * + * Every transaction is assigned a name. You can open a transaction + * by name, and resume work on it, or find out the name of a + * transaction you already have open. You can also list all the + * transactions currently present in the database. + * + * You may assign properties to transactions; these are name/value + * pairs. When you commit a transaction, all of its properties become + * unversioned revision properties of the new revision. (There is one + * exception: the svn:date property will be automatically set on new + * transactions to the date that the transaction was created, and will + * be overwritten when the transaction is committed by the current + * time; changes to a transaction's svn:date property will not affect + * its committed value.) + * + * Transaction names are guaranteed to contain only letters (upper- + * and lower-case), digits, `-', and `.', from the ASCII character + * set. + * + * The Subversion filesystem will make a best effort to not reuse + * transaction names. The Berkeley DB backend generates transaction + * names using a sequence, or a counter, which is stored in the BDB + * database. Each new transaction increments the counter. The + * current value of the counter is not serialized into a filesystem + * dump file, so dumping and restoring the repository will reset the + * sequence and reuse transaction names. The FSFS backend generates a + * transaction name using the hostname, process ID and current time in + * microseconds since 00:00:00 January 1, 1970 UTC. So it is + * extremely unlikely that a transaction name will be reused. + * + * @defgroup svn_fs_txns Filesystem transactions + * @{ + +The type of a Subversion transaction object. + + +Return a Subversion string containing the unparsed form of the + * node or node revision id @a id. Allocate the string containing the + * unparsed form in @a pool. + + + + @note This function is not guaranteed to work with all filesystem + types. There is currently no un-deprecated equivalent; contact the + Subversion developers if you have a need for it. + + @deprecated Provided for backward compatibility with the 1.0 API. + + + +Return non-zero IFF the nodes associated with @a id1 and @a id2 are + * related, else return zero. + + + +Return -1, 0, or 1 if node revisions @a a and @a b are unrelated, + * equivalent, or otherwise related (respectively). + + + +@} +Filesystem Nodes. + * + * In a Subversion filesystem, a `node' corresponds roughly to an + * `inode' in a Unix filesystem: + * - A node is either a file or a directory. + * - A node's contents change over time. + * - When you change a node's contents, it's still the same node; it's + * just been changed. So a node's identity isn't bound to a specific + * set of contents. + * - If you rename a node, it's still the same node, just under a + * different name. So a node's identity isn't bound to a particular + * filename. + * + * A `node revision' refers to a node's contents at a specific point in + * time. Changing a node's contents always creates a new revision of that + * node. Once created, a node revision's contents never change. + * + * When we create a node, its initial contents are the initial revision of + * the node. As users make changes to the node over time, we create new + * revisions of that same node. When a user commits a change that deletes + * a file from the filesystem, we don't delete the node, or any revision + * of it --- those stick around to allow us to recreate prior revisions of + * the filesystem. Instead, we just remove the reference to the node + * from the directory. + * + * @defgroup svn_fs_nodes Filesystem nodes + * @{ + +An object representing a node-id. + + + Same as svn_fs_access_add_lock_token2(), but with @a path set to value 1. + + @deprecated Provided for backward compatibility with the 1.1 API. + + + +Push a lock-token @a token associated with path @a path into the + * context @a access_ctx. The context remembers all tokens it + * receives, and makes them available to fs functions. The token and + * path are not duplicated into @a access_ctx's pool; make sure the + * token's lifetime is at least as long as @a access_ctx. + * + * @since New in 1.6. + + +Accessors for the access context: +Set @a *username to the name represented by @a access_ctx. + + +Set @a *access_ctx to the current @a fs access context, or NULL if + * there is no current fs access context. + + + +Associate @a access_ctx with an open @a fs. + * + * This function can be run multiple times on the same open + * filesystem, in order to change the filesystem access context for + * different filesystem operations. Pass a NULL value for @a + * access_ctx to disassociate the current access context from the + * filesystem. + + + +Set @a *access_ctx to a new @c svn_fs_access_t object representing + * @a username, allocated in @a pool. @a username is presumed to + * have been authenticated by the caller. + * + * Make a deep copy of @a username. + + + +@} +@} +Filesystem Access Contexts. + * + * @since New in 1.2. + * + * At certain times, filesystem functions need access to temporary + * user data. For example, which user is changing a file? If the + * file is locked, has an appropriate lock-token been supplied? + * + * This temporary user data is stored in an "access context" object, + * and the access context is then connected to the filesystem object. + * Whenever a filesystem function requires information, it can pull + * things out of the context as needed. + * + * @defgroup svn_fs_access_ctx Filesystem access contexts + * @{ + +An opaque object representing temporary user data. + + +@deprecated Provided for backward compatibility with the 1.4 API. + + +@deprecated Provided for backward compatibility with the 1.0 API. + + +@deprecated Provided for backward compatibility with the 1.0 API. + + +@deprecated Provided for backward compatibility with the 1.0 API. + + +@deprecated Provided for backward compatibility with the 1.0 API. + + +@deprecated Provided for backward compatibility with the 1.0 API. + + + The following functions are similar to their generic counterparts. + + In Subversion 1.2 and earlier, they only work on Berkeley DB filesystems. + In Subversion 1.3 and later, they perform largely as aliases for their + generic counterparts (with the exception of recover, which only gained + a generic counterpart in 1.5). + + @defgroup svn_fs_bdb_deprecated Berkeley DB filesystem compatibility + @{ + +@deprecated Provided for backward compatibility with the 1.0 API. + + +Set @a *logfiles to an array of const char * log file names + * of Berkeley DB-based Subversion filesystem. + * + * If @a only_unused is @c TRUE, set @a *logfiles to an array which + * contains only the names of Berkeley DB log files no longer in use + * by the filesystem. Otherwise, all log files (used and unused) are + * returned. + + * This function wraps the Berkeley DB 'log_archive' function + * called by the db_archive binary. Repository administrators may + * want to run this function periodically and delete the unused log + * files, as a way of reclaiming disk space. + + + +Subversion filesystems based on Berkeley DB. + * + * The following functions are specific to Berkeley DB filesystems. + * + * @defgroup svn_fs_bdb Berkeley DB filesystems + * @{ + +Register an error handling function for Berkeley DB error messages. + * + * @deprecated Provided for backward compatibility with the 1.2 API. + * + * Despite being first declared deprecated in Subversion 1.3, this API + * is redundant in versions 1.1 and 1.2 as well. + * + * Berkeley DB's error codes are seldom sufficiently informative to allow + * adequate troubleshooting. Berkeley DB provides extra messages through + * a callback function - if an error occurs, the @a handler will be called + * with two strings: an error message prefix, which will be zero, and + * an error message. @a handler might print it out, log it somewhere, + * etc. + * + * Subversion 1.1 and later install their own handler internally, and + * wrap the messages from Berkeley DB into the standard svn_error_t object, + * making any information gained through this interface redundant. + * + * It is only worth using this function if your program will be used + * with Subversion 1.0. + * + * This function connects to the Berkeley DB @c DBENV->set_errcall interface. + * Since that interface supports only a single callback, Subversion's internal + * callback is registered with Berkeley DB, and will forward notifications to + * a user provided callback after performing its own processing. + + + +Perform any necessary non-catastrophic recovery on the Subversion + * filesystem located at @a path. + * + * If @a cancel_func is not @c NULL, it is called periodically with + * @a cancel_baton as argument to see if the client wishes to cancel + * recovery. BDB filesystems do not currently support cancellation. + * + * Do any necessary allocation within @a pool. + * + * For FSFS filesystems, recovery is currently limited to recreating + * the db/current file, and does not require exclusive access. + * + * For BDB filesystems, recovery requires exclusive access, and is + * described in detail below. + * + * After an unexpected server exit, due to a server crash or a system + * crash, a Subversion filesystem based on Berkeley DB needs to run + * recovery procedures to bring the database back into a consistent + * state and release any locks that were held by the deceased process. + * The recovery procedures require exclusive access to the database + * --- while they execute, no other process or thread may access the + * database. + * + * In a server with multiple worker processes, like Apache, if a + * worker process accessing the filesystem dies, you must stop the + * other worker processes, and run recovery. Then, the other worker + * processes can re-open the database and resume work. + * + * If the server exited cleanly, there is no need to run recovery, but + * there is no harm in it, either, and it take very little time. So + * it's a fine idea to run recovery when the server process starts, + * before it begins handling any requests. + * + * @since New in 1.5. + + + + Copy a possibly live Subversion filesystem from @a src_path to + @a dest_path. If @a clean is @c TRUE, perform cleanup on the + source filesystem as part of the copy operation; currently, this + means deleting copied, unused logfiles for a Berkeley DB source + filesystem. + + @since New in 1.1. + + + + Delete the filesystem at @a path. + + @since New in 1.1. + + + + Return the path to @a fs's repository, allocated in @a pool. + @note This is just what was passed to svn_fs_create() or + svn_fs_open() -- might be absolute, might not. + + @since New in 1.1. + + + + Return, in @a *fs_type, a string identifying the back-end type of + the Subversion filesystem located in @a path. Allocate @a *fs_type + in @a pool. + + The string should be equal to one of the @c SVN_FS_TYPE_* defined + constants, unless the filesystem is a new back-end type added in + a later version of Subversion. + + In general, the type should make no difference in the filesystem's + semantics, but there are a few situations (such as backups) where + it might matter. + + @since New in 1.3. + + + + Upgrade the Subversion filesystem located in the directory @a path + to the latest version supported by this library. Return @c + SVN_ERR_FS_UNSUPPORTED_UPGRADE and make no changes to the + filesystem if the requested upgrade is not supported. Use @a pool + for necessary allocations. + + @note You probably don't want to use this directly. Take a look at + svn_repos_upgrade() instead. + + @since New in 1.5. + + + + Open a Subversion filesystem located in the directory @a path, and + return a pointer to it in @a *fs_p. If @a fs_config is not @c + NULL, the options it contains modify the behavior of the + filesystem. The interpretation of @a fs_config is specific to the + filesystem back-end. The opened filesystem may be closed by + destroying @a pool. + + @note The lifetime of @a fs_config must not be shorter than @a + pool's. It's a good idea to allocate @a fs_config from @a pool or + one of its ancestors. + + Only one thread may operate on any given filesystem object at once. + Two threads may access the same filesystem simultaneously only if + they open separate filesystem objects. + + @note You probably don't want to use this directly. Take a look at + svn_repos_open() instead. + + @since New in 1.1. + + + + Create a new, empty Subversion filesystem, stored in the directory + @a path, and return a pointer to it in @a *fs_p. @a path must not + currently exist, but its parent must exist. If @a fs_config is not + @c NULL, the options it contains modify the behavior of the + filesystem. The interpretation of @a fs_config is specific to the + filesystem back-end. The new filesystem may be closed by + destroying @a pool. + + @note The lifetime of @a fs_config must not be shorter than @a + pool's. It's a good idea to allocate @a fs_config from @a pool or + one of its ancestors. + + If @a fs_config contains a value for @c SVN_FS_CONFIG_FS_TYPE, that + value determines the filesystem type for the new filesystem. + Currently defined values are: + + SVN_FS_TYPE_BDB Berkeley-DB implementation + SVN_FS_TYPE_FSFS Native-filesystem implementation + + If @a fs_config is @c NULL or does not contain a value for + @c SVN_FS_CONFIG_FS_TYPE then the default filesystem type will be used. + This will typically be BDB for version 1.1 and FSFS for later versions, + though the caller should not rely upon any particular default if they + wish to ensure that a filesystem of a specific type is created. + + @since New in 1.1. + + + +Provide a callback function, @a warning, that @a fs should use to + * report (non-fatal) errors. To print an error, the filesystem will call + * @a warning, passing it @a warning_baton and the error. + * + * By default, this is set to a function that will crash the process. + * Dumping to @c stderr or /dev/tty is not acceptable default + * behavior for server processes, since those may both be equivalent to + * /dev/null. + + + +The type of a warning callback function. @a baton is the value specified + * in the call to svn_fs_set_warning_func(); the filesystem passes it through + * to the callback. @a err contains the warning message. + * + * The callback function should not clear the error that is passed to it; + * its caller should do that. + + + +@name Filesystem configuration options +@{ + +@since New in 1.1. +@since New in 1.1. +@since New in 1.1. +Create repository format compatible with Subversion versions + * earlier than 1.4. + * + * @since New in 1.4. + +Create repository format compatible with Subversion versions + * earlier than 1.5. + * + * @since New in 1.5. + +Create repository format compatible with Subversion versions + * earlier than 1.6. + * + * @since New in 1.6. + +@} + Callers should invoke this function to initialize global state in + the FS library before creating FS objects. If this function is + invoked, no FS objects may be created in another thread at the same + time as this invocation, and the provided @a pool must last longer + than any FS object created subsequently. + + If this function is not called, the FS library will make a best + effort to bootstrap a mutex for protecting data common to FS + objects; however, there is a small window of failure. Also, a + small amount of data will be leaked if the Subversion FS library is + dynamically unloaded, and using the bdb FS can potentially segfault + or invoke other undefined behavior if this function is not called + with an appropriate pool (such as the pool the module was loaded into) + when loaded dynamically. + + If this function is called multiple times before the pool passed to + the first call is destroyed or cleared, the later calls will have + no effect. + + @since New in 1.2. + + + +@defgroup fs_handling Filesystem interaction subsystem +@{ + +An object representing a Subversion filesystem. + + + @copyright + ==================================================================== + Copyright (c) 2002-2009 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_auth.h + @brief Subversion's authentication system + + + +Similar to svn_diff_mem_string_output_merge2, but with @a + * display_original_in_conflict and @a display_resolved_conflicts + * booleans instead of the @a conflict_style enum. + * + * If both booleans are false, acts like + * svn_diff_conflict_display_modified_latest; if @a + * display_original_in_conflict is true, acts like + * svn_diff_conflict_display_modified_original_latest; if @a + * display_resolved_conflicts is true, acts like + * svn_diff_conflict_display_resolved_modified_latest. The booleans + * may not both be true. + * + * @deprecated Provided for backward compatibility with the 1.5 API. + + + +Output the @a diff generated by svn_diff_mem_string_diff3() in diff3 + * format on @a output_stream, using @a original, @a modified and @a latest + * for content changes. + * + * Use the conflict markers @a conflict_original, @a conflict_modified, + * @a conflict_latest and @a conflict_separator or the default one for + * each of these if @c NULL is passed. + * + * @a conflict_style dictates how conflicts are displayed. + * + * @since New in 1.6. + + + +Outputs the @a diff object generated by svn_diff_mem_string_diff() + * in unified diff format on @a output_stream, using @a original + * and @a modified for the text in the output. + * Outputs the header and markers in @a header_encoding. + * + * @a original_header and @a modified header are + * used to fill the field after the "---" and "+++" header markers. + * + * @since New in 1.5. + + + +Generate @a diff output from the @a original, @a modified and @a latest + * in-memory strings, using @a ancestor. @a diff will be allocated in @a pool. + * + * @since New in 1.5. + + + +Generate @a diff output from the @a orginal, @a modified and @a latest + * in-memory strings. @a diff will be allocated in @a pool. + * + * @since New in 1.5. + + + +Generate @a diff output from the @a original and @a modified + * in-memory strings. @a diff will be allocated from @a pool. + * + * @since New in 1.5. + + + +Similar to svn_diff_file_output_merge2, but with @a + * display_original_in_conflict and @a display_resolved_conflicts + * booleans instead of the @a conflict_style enum. + * + * If both booleans are false, acts like + * svn_diff_conflict_display_modified_latest; if @a + * display_original_in_conflict is true, acts like + * svn_diff_conflict_display_modified_original_latest; if @a + * display_resolved_conflicts is true, acts like + * svn_diff_conflict_display_resolved_modified_latest. The booleans + * may not both be true. + * + * @deprecated Provided for backward compatibility with the 1.5 API. + + + +A convenience function to produce diff3 output from the + * diff generated by svn_diff_file_diff3(). + * + * Output a @a diff between @a original_path, @a modified_path and + * @a latest_path in merged format to @a output_stream. Optionally supply + * @a conflict_modified, @a conflict_original, @a conflict_separator and/or + * @a conflict_latest to be displayed as conflict markers in the output. + * If @a conflict_original, @a conflict_modified, @a conflict_latest and/or + * @a conflict_separator is @c NULL, a default marker will be displayed. + * @a conflict_style dictates how conflicts are displayed. + * + * @since New in 1.6. + + + +Similar to svn_diff_file_output_unified2(), but with @a header_encoding + * set to @c APR_LOCALE_CHARSET. + * + * @deprecated Provided for backward compatibility with the 1.2 API. + + + +Similar to svn_diff_file_output_unified3(), but with @a relative_to_dir + * set to NULL and @a show_c_function to false. + * + * @deprecated Provided for backwards compatibility with the 1.3 API. + + + +A convenience function to produce unified diff output from the + * diff generated by svn_diff_file_diff(). + * + * @since New in 1.5. + * + * Output a @a diff between @a original_path and @a modified_path in unified + * context diff format to @a output_stream. Optionally supply + * @a original_header and/or @a modified_header to be displayed in the header + * of the output. If @a original_header or @a modified_header is @c NULL, a + * default header will be displayed, consisting of path and last modified time. + * Output all headers and markers in @a header_encoding. If @a relative_to_dir + * is not @c NULL, the @a original_path and @a modified_path will have the + * @a relative_to_dir stripped from the front of the respective paths. If + * @a relative_to_dir is @c NULL, paths will be not be modified. If + * @a relative_to_dir is not @c NULL but @a relative_to_dir is not a parent + * path of the target, an error is returned. Finally, if @a relative_to_dir + * is a URL, an error will be returned. + + + +Simliar to svn_file_diff4_2(), but with @a options set to a struct with + * default options. + * + * @deprecated Provided for backwards compatibility with the 1.3 API. + + + +A convenience function to produce a diff between four files. + * + * @since New in 1.4. + * + * Return a diff object in @a *diff (allocated from @a pool) that represents + * the difference between an @a original file, @a modified file, @a latest + * and @a ancestor file. (The file arguments must be full paths to the files.) + * + * Compare lines according to the relevant fields of @a options. + + + +Similar to svn_diff_file_diff3_2(), but with @a options set to a struct + * with default options. + * + * @deprecated Provided for backwards compatibility with the 1.3 API. + + + +A convenience function to produce a diff between three files. + * + * @since New in 1.4. + * + * Return a diff object in @a *diff (allocated from @a pool) that represents + * the difference between an @a original file, @a modified file, and @a latest + * file. + * + * Compare lines according to the relevant fields of @a options. + + + +Similar to svn_file_diff_2(), but with @a options set to a struct with + * default options. + * + * @deprecated Provided for backwards compatibility with the 1.3 API. + + + +A convenience function to produce a diff between two files. + * + * @since New in 1.4. + * + * Return a diff object in @a *diff (allocated from @a pool) that represents + * the difference between an @a original file and @a modified file. + * (The file arguments must be full paths to the files.) + * + * Compare lines according to the relevant fields of @a options. + + + + Parse @a args, an array of const char * command line switches + and adjust @a options accordingly. @a options is assumed to be initialized + with default values. @a pool is used for temporary allocation. + + @since New in 1.4. + + The following options are supported: + - --ignore-space-change, -b + - --ignore-all-space, -w + - --ignore-eol-style + - --unified, -u (for compatibility, does nothing). + + + +Allocate a @c svn_diff_file_options_t structure in @a pool, initializing + * it with default values. + * + * @since New in 1.4. + + + +Whether the '@@' lines of the unified diff output should include a prefix + * of the nearest preceding line that starts with a character that might be + * the initial character of a C language identifier. The default is + * @c FALSE. + + + +Whether to treat all end-of-line markers the same when comparing lines. + * The default is @c FALSE. + + +To what extent whitespace should be ignored when comparing lines. + * The default is @c svn_diff_file_ignore_space_none. + + +Options to control the behaviour of the file diff routines. + * + * @since New in 1.4. + * + * @note This structure may be extended in the future, so to preserve binary + * compatibility, users must not allocate structs of this type themselves. + * @see svn_diff_file_options_create(). + * + * @note Although its name suggests otherwise, this structure is used to + * pass options to file as well as in-memory diff functions. + + + +To what extent whitespace should be ignored when comparing lines. + * + * @since New in 1.4. + + + +Ignore all whitespace characters. + + +Ignore changes in sequences of whitespace characters, treating each + * sequence of whitespace characters as a single space. + + +Ignore no whitespace. + + +Given a vtable of @a output_fns/@a output_baton for consuming + * differences, output the differences in @a diff. + + + +Style for displaying conflicts during diff3 output. + * + * @since New in 1.6. + + + +Like svn_diff_conflict_display_modified_original_latest, but + *only* showing conflicts. + + +Just display latest, with no markers. + + +Just display modified, with no markers. + + +Display modified, original, and latest, with conflict + markers. + + +Like svn_diff_conflict_display_modified_latest, but with an + extra effort to identify common sequences between modified and + latest. + + +Display modified and latest, with conflict markers. + + +All three datasources have conflicting data ranges. The range + * @a latest_start, @a latest_length in the "latest" datasource conflicts + * with the range @a original_start, @a original_length in the "original" + * datasource, and also conflicts with the range @a modified_start, + * @a modified_length in the "modified" datasource. + * If there are common ranges in the "modified" and "latest" datasources + * in this conflicting range, @a resolved_diff will contain a diff + * which can be used to retrieve the common and conflicting ranges. + + + +An identical data range was discovered between the "modified" and + * "latest" datasources, but this conflicts with a range in the + * "original" datasource. + + + +An identical data range was discovered between the "original" and + * "modified" datasources, but this conflicts with a range in the + * "latest" datasource. + + + + If doing a two-way diff, then an *conflicting* data range was found + between the "original" and "modified" datasources. Specifically, + the conflict starts at @a original_start and goes for @a original_length + tokens in the original data, and at @a modified_start for + @a modified_length tokens in the modified data. + + If doing a three-way diff, then an identical data range was discovered + between the "original" and "latest" datasources, but this conflicts with + a range in the "modified" datasource. + + + + If doing a two-way diff, then an *identical* data range was found + between the "original" and "modified" datasources. Specifically, + the match starts at @a original_start and goes for @a original_length + tokens in the original data, and at @a modified_start for + @a modified_length tokens in the modified data. + + If doing a three-way diff, then all three datasources have + matching data ranges. The range @a latest_start, @a latest_length in + the "latest" datasource is identical to the range @a original_start, + @a original_length in the original data, and is also identical to + the range @a modified_start, @a modified_length in the modified data. + + + +A vtable for displaying (or consuming) differences between datasources. + * + * Differences, similarities, and conflicts are described by lining up + * "ranges" of data. + * + * @note These callbacks describe data ranges in units of "tokens". + * A "token" is whatever you've defined it to be in your datasource + * @c svn_diff_fns_t vtable. + + + +Determine if a diff object contains actual differences between the + * datasources. If so, return @c TRUE, else return @c FALSE. + + + +Determine if a diff object contains conflicts. If it does, return + * @c TRUE, else return @c FALSE. + + + +Given a vtable of @a diff_fns/@a diff_baton for reading datasources, + * return a diff object in @a *diff that represents a difference between + * two datasources: "original" and "latest", adjusted to become a full + * difference between "original", "modified" and "latest" using "ancestor". + * Do all allocation in @a pool. + + + +Given a vtable of @a diff_fns/@a diff_baton for reading datasources, + * return a diff object in @a *diff that represents a difference between + * three datasources: "original", "modified", and "latest". Do all + * allocation in @a pool. + + + +Given a vtable of @a diff_fns/@a diff_baton for reading datasources, + * return a diff object in @a *diff that represents a difference between + * an "original" and "modified" datasource. Do all allocation in @a pool. + + + +Free *all* tokens from memory, they're no longer needed. + + +Free @a token from memory, the diff algorithm is done with it. + + +Get the next "token" from the datasource of type @a datasource. + * Return a "token" in @a *token. Return a hash of "token" in @a *hash. + * Leave @a token and @a hash untouched when the datasource is exhausted. + + + +Close the datasource of type @a datasource. + + +Open the datasource of type @a datasource. + + +A vtable for reading data from the three datasources. + + +There are four types of datasources. In GNU diff3 terminology, +the first three types correspond to the phrases "older", "mine", +and "yours". + + + +The common ancestor of original and modified. + + +The latest version of the data, possibly different than the + * user's modified version. + + + +The same data, but potentially changed by the user. + + +The oldest form of the data. + + +An opaque type that represents a difference between either two or + * three datasources. This object is returned by svn_diff_diff(), + * svn_diff_diff3() and svn_diff_diff4(), and consumed by a number of + * other routines. + + + +Crop @a target according to @a depth. + * + * Remove any item that exceeds the boundary of @a depth (relative to + * @a target) from revision control. Leave modified items behind + * (unversioned), while removing unmodified ones completely. + * + * If @a target starts out with a shallower depth than @a depth, do not + * upgrade it to @a depth (that would not be cropping); however, do + * check children and crop them appropriately according to @a depth. + * + * Returns immediately with no error if @a target is not a directory, + * or if @a depth is not restrictive (e.g., @c svn_depth_infinity). + * + * @a anchor is an access baton, with a tree lock, for the local path to the + * working copy which will be used as the root of this operation. If + * @a target is not empty, it represents an entry in the @a anchor path; + * otherwise, the @a anchor path is the target. @a target may not be + * @c NULL. + * + * If @a cancel_func is not @c NULL, call it with @a cancel_baton at + * various points to determine if the client has cancelled the operation. + * + * If @a notify_func is not @c NULL, call it with @a notify_baton to + * report changes as they are made. + * + * @note: svn_depth_exclude currently does nothing; passing it results + * in immediate success with no side effects. + * + * @since New in 1.6 + + + + Set @a path's entry's 'changelist' attribute to @a changelist iff + @a changelist is not @c NULL; otherwise, remove any current + changelist assignment from @a path. @a changelist may not be the + empty string. @a adm_access is an access baton set that contains + @a path. + + If @a cancel_func is not @c NULL, call it with @a cancel_baton to + determine if the client has cancelled the operation. + + If @a notify_func is not @c NULL, call it with @a notify_baton to + report the change (using notification types @c + svn_wc_notify_changelist_set and @c svn_wc_notify_changelist_clear). + + @note For now, directories are NOT allowed to be associated with + changelists; there is confusion about whether they should behave + as depth-0 or depth-infinity objects. If @a path is a directory, + return @c SVN_ERR_UNSUPPORTED_FEATURE. + + @note This metadata is purely a client-side "bookkeeping" + convenience, and is entirely managed by the working copy. + + @since New in 1.5. + + + +Set @a *result_p to point to a new @c svn_wc_revision_status_t structure + * containing a summary of the revision range and status of the working copy + * at @a wc_path (not including "externals"). + * + * Set @a (*result_p)->min_rev and @a (*result_p)->max_rev respectively to the + * lowest and highest revision numbers in the working copy. If @a committed + * is TRUE, summarize the last-changed revisions, else the base revisions. + * + * Set @a (*result_p)->switched to indicate whether any item in the WC is + * switched relative to its parent. If @a trail_url is non-NULL, use it to + * determine if @a wc_path itself is switched. It should be any trailing + * portion of @a wc_path's expected URL, long enough to include any parts + * that the caller considers might be changed by a switch. If it does not + * match the end of @a wc_path's actual URL, then report a "switched" + * status. + * + * Set @a (*result_p)->modified to indicate whether any item is locally + * modified. + * + * If @a cancel_func is non-NULL, call it with @a cancel_baton to determine + * if the client has cancelled the operation. + * + * Allocate *result_p in @a pool. + * + * @since New in 1.4 + + + +Whether any WC paths are at a depth other than @c svn_depth_infinity. + * @since New in 1.5. + + + +A structure to report a summary of a working copy, including the + * mix of revisions found within it, whether any parts are switched or + * locally modified, and whether it is a sparse checkout. + * + * @note Fields may be added to the end of this structure in future + * versions. Therefore, to preserve binary compatibility, users + * should not directly allocate structures of this type. + * + * @since New in 1.4 + + + +Remove any lock from @a path. @a adm_access must contain a + * write-lock for @a path. If @a path has a lock and the locking + * so specifies, make the file read-only. Don't return an error if @a + * path didn't have a lock. Perform temporary allocations in @a pool. + + +Add @a lock to the working copy for @a path. @a adm_access must contain + * a write lock for @a path. If @a path is read-only, due to locking + * properties, make it writable. Perform temporary allocations in @a + * pool. + + +Return TRUE iff @a str matches any of the elements of @a list, a + * list of zero or more ignore patterns. + * + * @since New in 1.5. + + + +Get the list of ignore patterns from the @c svn_config_t's in the + * @a config hash and the local ignore patterns from the directory + * in @a adm_access, and store them in @a *patterns. + * Allocate @a *patterns and its contents in @a pool. + * + * @since New in 1.3. + + + +Get the run-time configured list of ignore patterns from the + * @c svn_config_t's in the @a config hash, and store them in @a *patterns. + * Allocate @a *patterns and its contents in @a pool. + + + +Given a @a path with its accompanying @a entry, transmit all local + * property modifications using the appropriate @a editor method (in + * conjunction with @a baton). @a adm_access is an access baton set + * that contains @a path. Use @a pool for all allocations. + * + * If a temporary file remains after this function is finished, the + * path to that file is returned in @a *tempfile (so the caller can + * clean this up if it wishes to do so). + * + * @note Starting version 1.5, no tempfile will ever be returned + * anymore. If @a *tempfile is passed, its value is set to @c NULL. + + + +Similar to svn_wc_transmit_text_deltas2(), but with @a digest set to NULL. + * + * @deprecated Provided for backwards compatibility with the 1.3 API. + + + +Send the local modifications for versioned file @a path (with + * matching @a file_baton) through @a editor, then close @a file_baton + * afterwards. Use @a pool for any temporary allocation and + * @a adm_access as an access baton for @a path. + * + * This process creates a copy of @a path with keywords and eol + * untranslated. If @a tempfile is non-NULL, set @a *tempfile to the + * path to this copy. Do not clean up the copy; caller can do that. + * If @a digest is non-NULL, put the MD5 checksum of the + * temporary file into @a digest, which must point to @c APR_MD5_DIGESTSIZE + * bytes of storage. (The purpose of handing back the tmp copy is that + * it is usually about to become the new text base anyway, but the + * installation of the new text base is outside the scope of this + * function.) + * + * If @a fulltext, send the untranslated copy of @a path through @a editor + * as full-text; else send it as svndiff against the current text base. + * + * If sending a diff, and the recorded checksum for @a path's text-base + * does not match the current actual checksum, then remove the tmp + * copy (and set @a *tempfile to NULL if appropriate), and return the + * error @c SVN_ERR_WC_CORRUPT_TEXT_BASE. + * + * @note This is intended for use with both infix and postfix + * text-delta styled editor drivers. + * + * @since New in 1.4. + + + +Returns a @a stream allocated in @a pool with access to the given + * @a path taking the file properties from @a versioned_file using + * @a adm_access. + * + * When translation from normal form is requested + * (@c SVN_WC_TRANSLATE_FROM_NF is specified in @a flags), @a path + * is used as target path and stream read operations are not supported. + * Conversely, if translation to normal form is requested + * (@c SVN_WC_TRANSLATE_TO_NF is specified in @a flags), @a path is + * used as source path and stream write operations are not supported. + * + * The @a flags are the same constants as those used for + * svn_wc_translated_file(). + * + * @since New in 1.5. + + + +Same as svn_wc_translated_file2, but will never clean up + * temporary files. + * + * @deprecated Provided for compatibility with the 1.3 API + + + +Set @a xlated_path to a translated copy of @a src + * or to @a src itself if no translation is necessary. + * That is, if @a versioned_file's properties indicate newline conversion or + * keyword expansion, point @a *xlated_path to a copy of @a src + * whose newlines and keywords are converted using the translation + * as requested by @a flags. + * + * When translating to the normal form, inconsistent eol styles will be + * repaired when appropriate for the given setting. When translating + * from normal form, no EOL repair is performed (consistency is assumed). + * This behaviour can be overridden by specifying + * @c SVN_WC_TRANSLATE_FORCE_EOL_REPAIR. + * + * The caller can explicitly request a new file to be returned by setting the + * @c SVN_WC_TRANSLATE_FORCE_COPY flag in @a flags. + * + * This function is generally used to get a file that can be compared + * meaningfully against @a versioned_file's text base, if + * @c SVN_WC_TRANSLATE_TO_NF is specified, against @a versioned_file itself + * if @c SVN_WC_TRANSLATE_FROM_NF is specified. + * + * Output files are created in the temp file area belonging to + * @a versioned_file. By default they will be deleted at pool cleanup. + * + * If @c SVN_WC_TRANSLATE_NO_OUTPUT_CLEANUP is specified, the default + * pool cleanup handler to remove @a *xlated_path is not registered. + * + * If an error is returned, the effect on @a *xlated_path is undefined. + * + * @since New in 1.4 + + + +Same as svn_wc_create_tmp_file2(), but with @a new_name set to @c NULL, + * and without the ability to delete the file on pool cleanup. + * + * @deprecated For compatibility with 1.3 API + + + +Create a unique temporary file in administrative tmp/ area of + * directory @a path. Return a handle in @a *fp and the path + * in @a *new_name. Either @a fp or @a new_name can be NULL. + * + * The flags will be APR_WRITE | APR_CREATE | APR_EXCL and + * optionally @c APR_DELONCLOSE (if the @a delete_when argument is + * set to @c svn_io_file_del_on_close). + * + * This means that as soon as @a fp is closed, the tmp file will vanish. + * + * @since New in 1.4 + + + + Similar to svn_wc_revert2(), but takes an @c svn_wc_notify_func_t instead. + + @deprecated Provided for backward compatibility with the 1.1 API. + + + + Similar to svn_wc_revert3(), but with @a changelists passed as @c + NULL, and @a depth set according to @a recursive: if @a recursive + is TRUE, @a depth is @c svn_depth_infinity; if FALSE, @a depth is + @c svn_depth_empty. + + @note Most APIs map @a recurse==FALSE to @a depth==svn_depth_files; + revert is deliberately different. + + @deprecated Provided for backward compatibility with the 1.2 API. + + + + Revert changes to @a path. Perform necessary allocations in @a pool. + + @a parent_access is an access baton for the directory containing @a + path, unless @a path is a working copy root (as determined by @c + svn_wc_is_wc_root), in which case @a parent_access refers to @a + path itself. + + If @a depth is @c svn_depth_empty, revert just @a path (if a + directory, then revert just the properties on that directory). + Else if @c svn_depth_files, revert @a path and any files + directly under @a path if it is directory. Else if + @c svn_depth_immediates, revert all of the preceding plus + properties on immediate subdirectories; else if @c svn_depth_infinity, + revert path and everything under it fully recursively. + + @a changelists is an array of const char * changelist + names, used as a restrictive filter on items reverted; that is, + don't revert any item unless it's a member of one of those + changelists. If @a changelists is empty (or altogether @c NULL), + no changelist filtering occurs. + + If @a cancel_func is non-NULL, call it with @a cancel_baton at + various points during the reversion process. If it returns an + error (typically @c SVN_ERR_CANCELLED), return that error + immediately. + + If @a use_commit_times is TRUE, then all reverted working-files + will have their timestamp set to the last-committed-time. If + FALSE, the reverted working-files will be touched with the 'now' time. + + For each item reverted, @a notify_func will be called with @a notify_baton + and the path of the reverted item. @a notify_func may be @c NULL if this + notification is not needed. + + If @a path is not under version control, return the error + SVN_ERR_UNVERSIONED_RESOURCE. + + @since New in 1.5. + + + +Similar to svn_wc_relocate2(), but uses @c svn_wc_relocation_validator_t. + * + * @deprecated Provided for backwards compatibility with the 1.3 API. + + +Similar to svn_wc_relocate3(), but uses @c svn_wc_relocation_validator2_t. + * + * @deprecated Provided for backwards compatibility with the 1.4 API. + + +Change repository references at @a path that begin with @a from + * to begin with @a to instead. Perform necessary allocations in @a pool. + * If @a recurse is TRUE, do so. @a validator (and its baton, + * @a validator_baton), will be called for each newly generated URL. + * + * @a adm_access is an access baton for the directory containing + * @a path. + * + * @since New in 1.5. + + + +Similar to @c svn_wc_relocation_validator2_t, but without + * the @a root and @a pool arguments. @a uuid will not be NULL in this version + * of the function. + * + * @deprecated Provided for backwards compatibility with the 1.3 API. + + + +Similar to @c svn_wc_relocation_validator3_t, but without + * the @a root_url arguments. + * + * @deprecated Provided for backwards compatibility with the 1.4 API. + + + +Relocation validation callback typedef. + * + * Called for each relocated file/directory. @a uuid, if non-NULL, contains + * the expected repository UUID, @a url contains the tentative URL. + * + * @a baton is a closure object; it should be provided by the + * implementation, and passed by the caller. + * + * If @a root is TRUE, then the implementation should make sure that @a url + * is the repository root. Else, it can be an URL inside the repository. + * @a pool may be used for temporary allocations. + * + * @since New in 1.5. + + + + Similar to svn_wc_cleanup2(). @a optional_adm_access is an historic + relic and not used, it may be NULL. + + @deprecated Provided for backward compatibility with the 1.1 API. + + + + Recurse from @a path, cleaning up unfinished log business. Perform + necessary allocations in @a pool. Any working copy locks under @a path + will be taken over and then cleared by this function. If @a diff3_cmd + is non-NULL, then use it as the diff3 command for any merging; otherwise, + use the built-in merge code. + + WARNING: there is no mechanism that will protect locks that are still + being used. + + If @a cancel_func is non-NULL, invoke it with @a cancel_baton at + various points during the operation. If it returns an error + (typically @c SVN_ERR_CANCELLED), return that error immediately. + + @since New in 1.2. + + + +Returns a path to the pristine copy of @a path. Should use + * svn_wc_get_pristine_contents() instead. + * + * @deprecated Provided for backwards compatibility with the 1.5 API. + + + +Given a @a path to a wc file, return a stream to the @a contents of + * the pristine copy of the file. This is needed so clients can do + * diffs. If the WC has no text-base, return a @c NULL instead of a + * stream. + * + * @since New in 1.6. + + + + Similar to svn_wc_merge_props(), but no baseprops are given. + Instead, it's assumed that the incoming propchanges are based + against the working copy's own baseprops. While this assumption is + correct for 'svn update', it's incorrect for 'svn merge', and can + cause flawed behavior. (See issue #2035.) + + @deprecated Provided for backward compatibility with the 1.2 API. + + + + Same as svn_wc_merge_props2(), but with a @a conflict_func (and + baton) of NULL. + + @deprecated Provided for backward compatibility with the 1.3 API. + + + + +Given a @a path under version control, merge an array of @a + * propchanges into the path's existing properties. @a propchanges is + * an array of @c svn_prop_t objects, and @a baseprops is a hash + * representing the original set of properties that @a propchanges is + * working against. @a adm_access is an access baton for the directory + * containing @a path. + * + * If @a base_merge is @c FALSE only the working properties will be changed, + * if it is @c TRUE both the base and working properties will be changed. + * + * If @a state is non-NULL, set @a *state to the state of the properties + * after the merge. + * + * If conflicts are found when merging working properties, they are + * described in a temporary .prej file (or appended to an already-existing + * .prej file), and the entry is marked "conflicted". Base properties + * are changed unconditionally, if @a base_merge is @c TRUE, they never result + * in a conflict. + * + * If @a path is not under version control, return the error + * SVN_ERR_UNVERSIONED_RESOURCE and don't touch anyone's properties. + * + * @since New in 1.5. + + + +Similar to svn_wc_merge2(), but with @a merge_options set to NULL. + * + * @deprecated Provided for backwards compatibility with the 1.3 API. + + + +Similar to svn_wc_merge3(), but with @a prop_diff, @a + * conflict_func, @a conflict_baton set to NULL. + * + * @deprecated Provided for backwards compatibility with the 1.4 API. + + + +Given paths to three fulltexts, merge the differences between @a left + * and @a right into @a merge_target. (It may help to know that @a left, + * @a right, and @a merge_target correspond to "OLDER", "YOURS", and "MINE", + * respectively, in the diff3 documentation.) Use @a pool for any + * temporary allocation. + * + * @a adm_access is an access baton with a write lock for the directory + * containing @a merge_target. + * + * This function assumes that @a left and @a right are in repository-normal + * form (linefeeds, with keywords contracted); if necessary, + * @a merge_target is temporarily converted to this form to receive the + * changes, then translated back again. + * + * If @a merge_target is absent, or present but not under version + * control, then set @a *merge_outcome to @c svn_wc_merge_no_merge and + * return success without merging anything. (The reasoning is that if + * the file is not versioned, then it is probably unrelated to the + * changes being considered, so they should not be merged into it.) + * + * @a dry_run determines whether the working copy is modified. When it + * is @c FALSE the merge will cause @a merge_target to be modified, when it + * is @c TRUE the merge will be carried out to determine the result but + * @a merge_target will not be modified. + * + * If @a diff3_cmd is non-NULL, then use it as the diff3 command for + * any merging; otherwise, use the built-in merge code. If @a + * merge_options is non-NULL, either pass its elements to @a diff3_cmd or + * parse it and use as options to the internal merge code (see + * svn_diff_file_options_parse()). @a merge_options must contain + * const char * elements. + * + * The outcome of the merge is returned in @a *merge_outcome. If there + * is a conflict and @a dry_run is @c FALSE, then attempt to call @a + * conflict_func with @a conflict_baton (if non-NULL). If the + * conflict callback cannot resolve the conflict, then: + * + * * Put conflict markers around the conflicting regions in + * @a merge_target, labeled with @a left_label, @a right_label, and + * @a target_label. (If any of these labels are @c NULL, default + * values will be used.) + * + * * Copy @a left, @a right, and the original @a merge_target to unique + * names in the same directory as @a merge_target, ending with the + * suffixes ".LEFT_LABEL", ".RIGHT_LABEL", and ".TARGET_LABEL" + * respectively. + * + * * Mark the entry for @a merge_target as "conflicted", and track the + * above mentioned backup files in the entry as well. + * + * Binary case: + * + * If @a merge_target is a binary file, then no merging is attempted, + * the merge is deemed to be a conflict. If @a dry_run is @c FALSE the + * working @a merge_target is untouched, and copies of @a left and + * @a right are created next to it using @a left_label and @a right_label. + * @a merge_target's entry is marked as "conflicted", and begins + * tracking the two backup files. If @a dry_run is @c TRUE no files are + * changed. The outcome of the merge is returned in @a *merge_outcome. + * + * @since New in 1.5. + + + +The outcome of a merge carried out (or tried as a dry-run) by + * svn_wc_merge() + + + +No merge was performed, probably because the target file was + * either absent or not under version control. + + + +The working copy has been (or would be) changed, but there was (or + * would be) a conflict + + + +The working copy has been (or would be) changed. + + +The working copy is (or would be) unchanged. The changes to be + * merged were already present in the working copy + + + +Given a @a path to a file or directory under version control, discover + * any local changes made to properties and/or the set of 'pristine' + * properties. @a adm_access is an access baton set for @a path. + * + * If @a propchanges is non-@c NULL, return these changes as an array of + * @c svn_prop_t structures stored in @a *propchanges. The structures and + * array will be allocated in @a pool. If there are no local property + * modifications on @a path, then set @a *propchanges to @c NULL. + * + * If @a original_props is non-@c NULL, then set @a *original_props to + * hashtable (const char *name -> const svn_string_t *value) + * that represents the 'pristine' property list of @a path. This hashtable is + * allocated in @a pool, and can be used to compare old and new values of + * properties. + + + + Similar to svn_wc_diff2(), but with @a ignore_ancestry always set + to @c FALSE. + + @deprecated Provided for backward compatibility with the 1.0 API. + + + + Similar to svn_wc_diff3(), but with a @c svn_wc_diff_callbacks_t argument + instead of @c svn_wc_diff_callbacks2_t. + + @deprecated Provided for backward compatibility with the 1.1 API. + + + + Similar to svn_wc_diff4(), but with @a changelists passed @c NULL, + and @a depth set to @c svn_depth_infinity if @a recurse is TRUE, or + @c svn_depth_files if @a recurse is FALSE. + + @deprecated Provided for backward compatibility with the 1.2 API. + + + + Similar to svn_wc_diff5(), but with a @c svn_wc_diff_callbacks2_t argument + instead of @c svn_wc_diff_callbacks3_t. + + @deprecated Provided for backward compatibility with the 1.5 API. + + + + Compare working copy against the text-base. + + @a anchor/@a target represent the base of the hierarchy to be compared. + + @a callbacks/@a callback_baton is the callback table to use when two + files are to be compared. + + If @a depth is @c svn_depth_empty, just diff exactly @a target or + @a anchor if @a target is empty. If @c svn_depth_files then do the same + and for top-level file entries as well (if any). If + @c svn_depth_immediates, do the same as @c svn_depth_files but also diff + top-level subdirectories at @c svn_depth_empty. If @c svn_depth_infinity, + then diff fully recursively. In the latter case, @a anchor should be part + of an access baton set for the @a target hierarchy. + + @a ignore_ancestry determines whether paths that have discontinuous node + ancestry are treated as delete/add or as simple modifications. If + @a ignore_ancestry is @c FALSE, then any discontinuous node ancestry will + result in the diff given as a full delete followed by an add. + + @a changelists is an array of const char * changelist + names, used as a restrictive filter on items whose differences are + reported; that is, don't generate diffs about any item unless + it's a member of one of those changelists. If @a changelists is + empty (or altogether @c NULL), no changelist filtering occurs. + + @since New in 1.6. + + + + Similar to svn_wc_get_diff_editor2(), but with @a ignore_ancestry + always set to @c FALSE. + + @deprecated Provided for backward compatibility with the 1.0 API. + + + + Similar to svn_wc_get_diff_editor3(), but with an + @c svn_wc_diff_callbacks_t instead of @c svn_wc_diff_callbacks2_t. + + @deprecated Provided for backward compatibility with the 1.1 API. + + + + * Similar to svn_wc_get_diff_editor4(), but with @a changelists + * passed as @c NULL, and @a depth set to @c svn_depth_infinity if @a + * recurse is TRUE, or @c svn_depth_files if @a recurse is FALSE. + * + * @deprecated Provided for backward compatibility with the 1.4 API. + + * @since New in 1.2. + + + + Similar to svn_wc_get_diff_editor5(), but with an + @c svn_wc_diff_callbacks2_t instead of @c svn_wc_diff_callbacks3_t. + + @deprecated Provided for backward compatibility with the 1.5 API. + + + + Return an @a editor/@a edit_baton for diffing a working copy against the + repository. + + @a anchor/@a target represent the base of the hierarchy to be compared. + + @a callbacks/@a callback_baton is the callback table to use when two + files are to be compared. + + If @a depth is @c svn_depth_empty, just diff exactly @a target or + @a anchor if @a target is empty. If @c svn_depth_files then do the same + and for top-level file entries as well (if any). If + @c svn_depth_immediates, do the same as @c svn_depth_files but also diff + top-level subdirectories at @c svn_depth_empty. If @c svn_depth_infinity, + then diff fully recursively. In the latter case, @a anchor should be part + of an access baton set for the @a target hierarchy. + + @a ignore_ancestry determines whether paths that have discontinuous node + ancestry are treated as delete/add or as simple modifications. If + @a ignore_ancestry is @c FALSE, then any discontinuous node ancestry will + result in the diff given as a full delete followed by an add. + + If @a use_text_base is TRUE, then compare the repository against + the working copy's text-base files, rather than the working files. + + Normally, the difference from repository->working_copy is shown. + If @a reverse_order is TRUE, then show working_copy->repository diffs. + + If @a cancel_func is non-NULL, it will be used along with @a cancel_baton + to periodically check if the client has canceled the operation. + + @a changelists is an array of const char * changelist + names, used as a restrictive filter on items whose differences are + reported; that is, don't generate diffs about any item unless + it's a member of one of those changelists. If @a changelists is + empty (or altogether @c NULL), no changelist filtering occurs. + + @since New in 1.6. + + + +Canonicalize the value of an svn:* property @a propname with + * value @a propval. + * + * If the property is not appropriate for a node of kind @a kind, or + * is otherwise invalid, throw an error. Otherwise, set @a *propval_p + * to a canonicalized version of the property value. If @a + * skip_some_checks is TRUE, only some validity checks are taken. + * + * Some validity checks require access to the contents and MIME type + * of the target if it is a file; they will call @a prop_getter with @a + * getter_baton, which then needs to set the MIME type and print the + * contents of the file to the given stream. + * + * @a path should be the path of the file in question; it is only used + * for error messages. + * + * ### This is not actually related to the WC, but it does need to call + * ### svn_wc_parse_externals_description2. + + + +Callback type used by @c svn_wc_canonicalize_svn_prop. + * + * If @a mime_type is non-null, it sets @a *mime_type to the value of + * @c SVN_PROP_MIME_TYPE for the path passed to @c + * svn_wc_canonicalize_svn_prop (allocated from @a pool). If @a + * stream is non-null, it writes the contents of the file to @a + * stream. + * + * (Currently, this is used if you are attempting to set the @c + * SVN_PROP_EOL_STYLE property, to make sure that the value matches + * the mime type and contents.) + + + +Return TRUE iff @a name is a 'entry' property name. + + +Return TRUE iff @a name is a 'wc' property name. + + +Return TRUE iff @a name is a 'normal' property name. 'Normal' is + * defined as a user-visible and user-tweakable property that shows up + * when you fetch a proplist. + * + * The function currently parses the namespace like so: + * + * - 'svn:wc:' ==> a wcprop, stored/accessed separately via different API. + * + * - 'svn:entry:' ==> an "entry" prop, shunted into the 'entries' file. + * + * If these patterns aren't found, then the property is assumed to be + * Normal. + + + + Like svn_wc_prop_set2(), but with @a skip_checks always FALSE. + + @deprecated Provided for backward compatibility with the 1.1 API. + + + + Like svn_wc_prop_set3(), but without the notification callbacks. + + @since New in 1.2. + + + + Set property @a name to @a value for @a path, or if @a value is + NULL, remove property @a name from @a path. @a adm_access is an + access baton with a write lock for @a path. + + If @a skip_checks is TRUE, do no validity checking. But if @a + skip_checks is FALSE, and @a name is not a valid property for @a + path, return an error, either @c SVN_ERR_ILLEGAL_TARGET (if the + property is not appropriate for @a path), or @c + SVN_ERR_BAD_MIME_TYPE (if @a name is "svn:mime-type", but @a value + is not a valid mime-type). + + @a name may be a wc property or a regular property; but if it is an + entry property, return the error @c SVN_ERR_BAD_PROP_KIND, even if + @a skip_checks is TRUE. + + For each file or directory operated on, @a notify_func will be called + with its path and the @a notify_baton. @a notify_func may be @c NULL + if you are not interested in this information. + + Use @a pool for temporary allocation. + + @since New in 1.6. + + + +Set @a *value to the value of property @a name for @a path, allocating + * @a *value in @a pool. If no such prop, set @a *value to @c NULL. + * @a name may be a regular or wc property; if it is an entry property, + * return the error @c SVN_ERR_BAD_PROP_KIND. @a adm_access is an access + * baton set that contains @a path. + + + +Set @a *props to a hash table mapping char * names onto + * svn_string_t * values for all the regular properties of + * @a path. Allocate the table, names, and values in @a pool. If + * the node has no properties, or does not exist in the working copy, + * then an empty hash is returned. @a adm_access is an access baton + * set that contains @a path. + + + + Similar to svn_wc_get_switch_editor2(), but takes an + @c svn_wc_notify_func_t instead. + + @deprecated Provided for backward compatibility with the 1.1 API. + + + + Similar to svn_wc_get_switch_editor3() but with the + @a allow_unver_obstructions parameter always set to FALSE, + @a preserved_exts set to NULL, @a conflict_func and baton set to NULL, + @a depth_is_sticky set to FALSE, and @a depth set according to @a + recurse: if @a recurse is TRUE, pass @c svn_depth_infinity, if + FALSE, pass @c svn_depth_files. + + @deprecated Provided for backward compatibility with the 1.4 API. + + + + A variant of svn_wc_get_update_editor(). + + Set @a *editor and @a *edit_baton to an editor and baton for "switching" + a working copy to a new @a switch_url. (Right now, this URL must be + within the same repository that the working copy already comes + from.) @a switch_url must not be @c NULL. + + If @a ti is non-NULL, record traversal info in @a ti, for use by + post-traversal accessors such as svn_wc_edited_externals(). + + @a anchor is an access baton, with a write lock, for the local path to the + working copy which will be used as the root of our editor. Further + locks will be acquired if the switch creates new directories. All + locks, both those in @a anchor and newly acquired ones, will be released + when the editor driver calls @c close_edit. + + @a target is the entry in @a anchor that will actually be updated, or + empty if all of @a anchor should be updated. + + The editor invokes @a notify_func with @a notify_baton as the switch + progresses, if @a notify_func is non-NULL. + + If @a cancel_func is non-NULL, it will be called with @a cancel_baton as + the switch progresses to determine if it should continue. + + If @a conflict_func is non-NULL, then invoke it with @a + conflict_baton whenever a conflict is encountered, giving the + callback a chance to resolve the conflict before the editor takes + more drastic measures (such as marking a file conflicted, or + bailing out of the switch). + + If @a diff3_cmd is non-NULL, then use it as the diff3 command for + any merging; otherwise, use the built-in merge code. + + @a preserved_exts is an array of filename patterns which, when + matched against the extensions of versioned files, determine for + which such files any related generated conflict files will preserve + the original file's extension as their own. If a file's extension + does not match any of the patterns in @a preserved_exts (which is + certainly the case if @a preserved_exts is @c NULL or empty), + generated conflict files will carry Subversion's custom extensions. + + @a target_revision is a pointer to a revision location which, after + successful completion of the drive of this editor, will be + populated with the revision to which the working copy was updated. + + If @a use_commit_times is TRUE, then all edited/added files will + have their working timestamp set to the last-committed-time. If + FALSE, the working files will be touched with the 'now' time. + + @a depth and @a depth_is_sticky behave as for svn_wc_get_update_editor3(). + + If @a allow_unver_obstructions is TRUE, then allow unversioned + obstructions when adding a path. + + @since New in 1.5. + + + + Similar to svn_wc_get_update_editor2(), but takes an svn_wc_notify_func_t + instead. + + @deprecated Provided for backward compatibility with the 1.1 API. + + + + Similar to svn_wc_get_update_editor3() but with the @a + allow_unver_obstructions parameter always set to FALSE, @a + conflict_func and baton set to NULL, @a fetch_func and baton set to + NULL, @a preserved_exts set to NULL, @a depth_is_sticky set to + FALSE, and @a depth set according to @a recurse: if @a recurse is + TRUE, pass @c svn_depth_infinity, if FALSE, pass @c + svn_depth_files. + + @deprecated Provided for backward compatibility with the 1.4 API. + + + + Set @a *editor and @a *edit_baton to an editor and baton for updating a + working copy. + + If @a ti is non-NULL, record traversal info in @a ti, for use by + post-traversal accessors such as svn_wc_edited_externals(). + + @a anchor is an access baton, with a write lock, for the local path to the + working copy which will be used as the root of our editor. Further + locks will be acquired if the update creates new directories. All + locks, both those in @a anchor and newly acquired ones, will be released + when the editor driver calls @c close_edit. + + @a target is the entry in @a anchor that will actually be updated, or + the empty string if all of @a anchor should be updated. + + The editor invokes @a notify_func with @a notify_baton as the update + progresses, if @a notify_func is non-NULL. + + If @a cancel_func is non-NULL, the editor will invoke @a cancel_func with + @a cancel_baton as the update progresses to see if it should continue. + + If @a conflict_func is non-NULL, then invoke it with @a + conflict_baton whenever a conflict is encountered, giving the + callback a chance to resolve the conflict before the editor takes + more drastic measures (such as marking a file conflicted, or + bailing out of the update). + + If @a fetch_func is non-NULL, then use it (with @a fetch_baton) as + a fallback for retrieving repository files whenever 'copyfrom' args + are sent into editor->add_file(). + + If @a diff3_cmd is non-NULL, then use it as the diff3 command for + any merging; otherwise, use the built-in merge code. + + @a preserved_exts is an array of filename patterns which, when + matched against the extensions of versioned files, determine for + which such files any related generated conflict files will preserve + the original file's extension as their own. If a file's extension + does not match any of the patterns in @a preserved_exts (which is + certainly the case if @a preserved_exts is @c NULL or empty), + generated conflict files will carry Subversion's custom extensions. + + @a target_revision is a pointer to a revision location which, after + successful completion of the drive of this editor, will be + populated with the revision to which the working copy was updated. + + If @a use_commit_times is TRUE, then all edited/added files will + have their working timestamp set to the last-committed-time. If + FALSE, the working files will be touched with the 'now' time. + + If @a allow_unver_obstructions is TRUE, then allow unversioned + obstructions when adding a path. + + If @a depth is @c svn_depth_infinity, update fully recursively. + Else if it is @c svn_depth_immediates, update the uppermost + directory, its file entries, and the presence or absence of + subdirectories (but do not descend into the subdirectories). + Else if it is @c svn_depth_files, update the uppermost directory + and its immediate file entries, but not subdirectories. + Else if it is @c svn_depth_empty, update exactly the uppermost + target, and don't touch its entries. + + If @a depth_is_sticky is set and @a depth is not @c + svn_depth_unknown, then in addition to updating PATHS, also set + their sticky ambient depth value to @a depth. + + @since New in 1.5. + + + +Conditionally split @a path into an @a anchor and @a target for the + * purpose of updating and committing. + * + * @a anchor is the directory at which the update or commit editor + * should be rooted. + * + * @a target is the actual subject (relative to the @a anchor) of the + * update/commit, or "" if the @a anchor itself is the subject. + * + * Allocate @a anchor and @a target in @a pool. + + + +Set @a *wc_root to @c TRUE if @a path represents a "working copy root", + * @c FALSE otherwise. Here, @a path is a "working copy root" if its parent + * directory is not a WC or if its parent directory's repository URL is not + * the parent of its own repository URL. Thus, a switched subtree is + * considered to be a working copy root. Also, a deleted tree-conflict + * victim is considered a "working copy root" because it has no URL. + * + * If @a path is not found, return the error @c SVN_ERR_ENTRY_NOT_FOUND. + * + * Use @a pool for any intermediate allocations. + * + * @note Due to the way in which "WC-root-ness" is calculated, passing + * a @a path of `.' to this function will always return @c TRUE. + + + + Similar to svn_wc_crawl_revisions2(), but takes an svn_wc_notify_func_t + and a @c svn_reporter_t instead. + + @deprecated Provided for backward compatibility with the 1.1 API. + + + + Similar to svn_wc_crawl_revisions3, but taking svn_ra_reporter2_t + instead of svn_ra_reporter3_t, and therefore only able to report @c + svn_depth_infinity for depths; and taking @a recurse instead of @a + depth; and with @a depth_compatibility_trick always false. + + @deprecated Provided for compatibility with the 1.4 API. + + + + Similar to svn_wc_crawl_revisions4, but with @a honor_depth_exclude always + set to false. + + @deprecated Provided for compatibility with the 1.5 API. + + + + Do a depth-first crawl in a working copy, beginning at @a path. + + Communicate the `state' of the working copy's revisions and depths + to @a reporter/@a report_baton. Obviously, if @a path is a file + instead of a directory, this depth-first crawl will be a short one. + + No locks are or logs are created, nor are any animals harmed in the + process. No cleanup is necessary. @a adm_access must be an access + baton for the @a path hierarchy, it does not require a write lock. + + After all revisions are reported, @a reporter->finish_report() is + called, which immediately causes the RA layer to update the working + copy. Thus the return value may very well reflect the result of + the update! + + If @a depth is @c svn_depth_empty, then report state only for + @a path itself. If @c svn_depth_files, do the same and include + immediate file children of @a path. If @c svn_depth_immediates, + then behave as if for @c svn_depth_files but also report the + property states of immediate subdirectories. If @a depth is + @c svn_depth_infinity, then report state fully recursively. All + descents are only as deep as @a path's own depth permits, of + course. If @a depth is @c svn_depth_unknown, then just use + @c svn_depth_infinity, which in practice means depth of @a path. + + Iff @a honor_depth_exclude is TRUE, the crawler will report paths + whose ambient depth is @c svn_depth_exclude as being excluded, and + thus prevent the server from pushing update data for those paths; + therefore, don't set this flag if you wish to pull in excluded paths. + Note that @c svn_depth_exclude on the target @a path is never + honored, even if @a honor_depth_exclude is TRUE, because we need to + be able to explicitly pull in a target. For example, if this is + the working copy... + + svn co greek_tree_repos wc_dir + svn up --set-depth exclude wc_dir/A/B/E # now A/B/E is excluded + + ...then 'svn up wc_dir/A/B' would report E as excluded (assuming + @a honor_depth_exclude is TRUE), but 'svn up wc_dir/A/B/E' would + not, because the latter is trying to explicitly pull in E. In + general, we never report the update target as excluded. + + Iff @a depth_compatibility_trick is TRUE, then set the @c start_empty + flag on @a reporter->set_path() and @a reporter->link_path() calls + as necessary to trick a pre-1.5 (i.e., depth-unaware) server into + sending back all the items the client might need to upgrade a + working copy from a shallower depth to a deeper one. + + If @a restore_files is TRUE, then unexpectedly missing working files + will be restored from the administrative directory's cache. For each + file restored, the @a notify_func function will be called with the + @a notify_baton and the path of the restored file. @a notify_func may + be @c NULL if this notification is not required. If @a + use_commit_times is TRUE, then set restored files' timestamps to + their last-commit-times. + + If @a traversal_info is non-NULL, then record pre-update traversal + state in it. (Caller should obtain @a traversal_info from + svn_wc_init_traversal_info().) + + @since New in 1.6. + + + +@see svn_wc_process_committed4() + * + * @deprecated Use the svn_wc_committed_queue_* functions instead. Provided + * for backward compatibility with the 1.1 API. + + + +@see svn_wc_process_committed4() + * + * @deprecated Use the svn_wc_committed_queue_* functions instead. Provided + * for backwards compatibility with the 1.3 API. + + + +@see svn_wc_process_committed4() + * + * @deprecated Use the svn_wc_committed_queue_* functions instead. Provided + * for backwards compatibility with the 1.4 API. + + + + @note this function has improper expectations around the operation and + execution of other parts of the Subversion WC library. The resulting + coupling makes this interface near-impossible to support. Documentation + has been removed, as a result. + + @deprecated Use the svn_wc_committed_queue_* functions instead. Provided + for backwards compatibility with the 1.5 API. + + + + Bump all items in @a queue to @a new_revnum after a commit succeeds. + @a rev_date and @a rev_author are the (server-side) date and author + of the new revision; one or both may be @c NULL. + + @a adm_access must be associated with all affected directories, and + must hold a write lock in each one. + + @since New in 1.5. + + + +Same as svn_wc_queue_committed2() but the @a queue parameter has an + * extra indirection and @a digest is supplied instead of a checksum type. + * + * @note despite the extra indirection, this function does NOT allocate + * the queue for you. svn_wc_committed_queue_create() must be called. + * + * @since New in 1.5 + * + * @deprecated Provided for backwards compatibility with 1.5 + + + + Queue committed items to be processed later by + svn_wc_process_committed_queue(). + + All pointer data passed to this function (@a path, @a adm_access, + @a wcprop_changes and @a checksum) should remain valid until the queue + has been processed by svn_wc_process_committed_queue(). + + Record in @a queue that @a path will need to be bumped after a commit + succeeds. @a adm_access must hold a write lock appropriate for @a path. + + If non-NULL, @a wcprop_changes is an array of svn_prop_t * + changes to wc properties; if an @c svn_prop_t->value is NULL, then + that property is deleted. + + If @a remove_lock is @c TRUE, any entryprops related to a repository + lock will be removed. + + If @a remove_changelist is @c TRUE, any association with a + changelist will be removed. + + If @a path is a file and @a checksum is non-NULL, use @a checksum as + the checksum for the new text base. Otherwise, calculate the checksum + if needed. + + If @a recurse is TRUE and @a path is a directory, then bump every + versioned object at or under @a path. This is usually done for + copied trees. + + Temporary allocations will be performed in @a scratch_pool, and persistent + allocations will use the same pool as @a queue used when it was created. + + @note the @a recurse parameter should be used with extreme care since + it will bump ALL nodes under the directory, regardless of their + actual inclusion in the new revision. + + @since New in 1.6. + + + + Create a queue for use with svn_wc_queue_committed() and + svn_wc_process_committed_queue(). + + The returned queue and all further allocations required for queueing + new items will also be done from @a pool. + + @since New in 1.5. + + + + Storage type for queued post-commit data. + + @since New in 1.5. + + + + Similar to svn_wc_resolved_conflict2(), but takes an + svn_wc_notify_func_t and doesn't have cancellation support. + + @deprecated Provided for backward compatibility with the 1.0 API. + + + + Similar to svn_wc_resolved_conflict3(), but without automatic conflict + resolution support, and with @a depth set according to @a recurse: + if @a recurse is TRUE, @a depth is @c svn_depth_infinity, else it is + @c svn_depth_files. + + @deprecated Provided for backward compatibility with the 1.4 API. + + + + Similar to svn_wc_resolved_conflict4(), but without tree-conflict + resolution support. + + @deprecated Provided for backward compatibility with the 1.5 API. + + + + Assuming @a path is under version control and in a state of conflict, + then take @a path *out* of this state. If @a resolve_text is TRUE then + any text conflict is resolved, if @a resolve_props is TRUE then any + property conflicts are resolved, if @a resolve_tree is TRUE then any + tree conflicts are resolved. + + If @a depth is @c svn_depth_empty, act only on @a path; if + @c svn_depth_files, resolve @a path and its conflicted file + children (if any); if @c svn_depth_immediates, resolve @a path and + all its immediate conflicted children (both files and directories, + if any); if @c svn_depth_infinity, resolve @a path and every + conflicted file or directory anywhere beneath it. + + If @a conflict_choice is @c svn_wc_conflict_choose_base, resolve the + conflict with the old file contents; if + @c svn_wc_conflict_choose_mine_full, use the original working contents; + if @c svn_wc_conflict_choose_theirs_full, the new contents; and if + @c svn_wc_conflict_choose_merged, don't change the contents at all, + just remove the conflict status, which is the pre-1.5 behavior. + + @c svn_wc_conflict_choose_theirs_conflict and @c + svn_wc_conflict_choose_mine_conflict are not legal for binary + files or properties. + + @a adm_access is an access baton, with a write lock, for @a path. + + Needless to say, this function doesn't touch conflict markers or + anything of that sort -- only a human can semantically resolve a + conflict. Instead, this function simply marks a file as "having + been resolved", clearing the way for a commit. + + The implementation details are opaque, as our "conflicted" criteria + might change over time. (At the moment, this routine removes the + three fulltext 'backup' files and any .prej file created in a conflict, + and modifies @a path's entry.) + + If @a path is not under version control, return @c SVN_ERR_ENTRY_NOT_FOUND. + If @a path isn't in a state of conflict to begin with, do nothing, and + return @c SVN_NO_ERROR. + + If @c path was successfully taken out of a state of conflict, report this + information to @c notify_func (if non-@c NULL.) If only text, only + property, or only tree conflict resolution was requested, and it was + successful, then success gets reported. + + @since New in 1.6. + + + +Remove entry @a name in @a adm_access from revision control. @a name + * must be either a file or @c SVN_WC_ENTRY_THIS_DIR. @a adm_access must + * hold a write lock. + * + * If @a name is a file, all its info will be removed from @a adm_access's + * administrative directory. If @a name is @c SVN_WC_ENTRY_THIS_DIR, then + * @a adm_access's entire administrative area will be deleted, along with + * *all* the administrative areas anywhere in the tree below @a adm_access. + * + * Normally, only administrative data is removed. However, if + * @a destroy_wf is TRUE, then all working file(s) and dirs are deleted + * from disk as well. When called with @a destroy_wf, any locally + * modified files will *not* be deleted, and the special error + * @c SVN_ERR_WC_LEFT_LOCAL_MOD might be returned. (Callers only need to + * check for this special return value if @a destroy_wf is TRUE.) + * + * If @a instant_error is TRUE, then return @c + * SVN_ERR_WC_LEFT_LOCAL_MOD the instant a locally modified file is + * encountered. Otherwise, leave locally modified files in place and + * return the error only after all the recursion is complete. + * + * If @a cancel_func is non-NULL, call it with @a cancel_baton at + * various points during the removal. If it returns an error + * (typically @c SVN_ERR_CANCELLED), return that error immediately. + * + * WARNING: This routine is exported for careful, measured use by + * libsvn_client. Do *not* call this routine unless you really + * understand what the heck you're doing. + + + +Same as svn_wc_add_repos_file3(), except that it doesn't have the + * BASE arguments or cancellation. + * + * @deprecated Provided for compatibility with the 1.3 API + + + +Same as svn_wc_add_repos_file3(), except that it has pathnames rather + * than streams for the text base, and actual text, and has no cancellation. + * + * @since New in 1.4. + * @deprecated Provided for compatibility with the 1.5 API + + + +Add a file to a working copy at @a dst_path, obtaining the text-base's + * contents from @a new_base_contents, the wc file's content from + * @a new_contents, its base properties from @a new_base_props and + * wc properties from @a new_props. + * + * The base text and props normally come from the repository file + * represented by the copyfrom args, see below. The new file will + * be scheduled for addition with history. + * + * @a new_contents and @a new_props may be NULL, in which case + * the working copy text and props are taken from the base files with + * appropriate translation of the file's content. + * + * @a new_contents must be provided in Normal Form. This is required + * in order to pass both special and non-special files through a stream. + * + * @a adm_access, or an access baton in its associated set, must + * contain a write lock for the parent of @a dst_path. + * + * If @a copyfrom_url is non-NULL, then @a copyfrom_rev must be a + * valid revision number, and together they are the copyfrom history + * for the new file. + * + * The @a cancel_func and @a cancel_baton are a standard cancellation + * callback, or NULL if no callback is needed. @a notify_func and + * @a notify_baton are a notification callback, and will be notified + * of the addition of this file. + * + * Use @a scratch_pool for temporary allocations. + * + * ### NOTE: the notification callback/baton is not yet used. + * + * ### This function is very redundant with svn_wc_add(). Ideally, + * we'd merge them, so that svn_wc_add() would just take optional + * new_props and optional copyfrom information. That way it could be + * used for both 'svn add somefilesittingonmydisk' and for adding + * files from repositories, with or without copyfrom history. + * + * The problem with this Ideal Plan is that svn_wc_add() also takes + * care of recursive URL-rewriting. There's a whole comment in its + * doc string about how that's really weird, outside its core mission, + * etc, etc. So another part of the Ideal Plan is that that + * functionality of svn_wc_add() would move into a separate function. + * + * @since New in 1.6 + + + + Similar to svn_wc_add2(), but takes an @c svn_wc_notify_func_t instead. + + @deprecated Provided for backward compatibility with the 1.1 API. + + + + Similar to svn_wc_add3(), but with the @a depth parameter always + @c svn_depth_infinity. + + @since New in 1.2. + @deprecated Provided for backward compatibility with the 1.5 API. + + + + Put @a path under version control by adding an entry in its parent, + and, if @a path is a directory, adding an administrative area. The + new entry and anything under it is scheduled for addition to the + repository. @a parent_access should hold a write lock for the parent + directory of @a path. If @a path is a directory then an access baton + for @a path will be added to the set containing @a parent_access. + + If @a path does not exist, return @c SVN_ERR_WC_PATH_NOT_FOUND. + + If @a path is a directory, add it at @a depth; otherwise, ignore + @a depth. + + If @a copyfrom_url is non-NULL, it and @a copyfrom_rev are used as + `copyfrom' args. This is for copy operations, where one wants + to schedule @a path for addition with a particular history. + + If @a cancel_func is non-NULL, call it with @a cancel_baton at + various points during the operation. If it returns an error + (typically @c SVN_ERR_CANCELLED), return that error immediately. + + When the @a path has been added, then @a notify_func will be called + (if it is not @c NULL) with the @a notify_baton and the path. + + Return @c SVN_ERR_WC_NODE_KIND_CHANGE if @a path is both an unversioned + directory and a file that is scheduled for deletion or in state deleted. + +
 ### This function currently does double duty -- it is also
+ ### responsible for "switching" a working copy directory over to a
+ ### new copyfrom ancestry and scheduling it for addition.  Here is
+ ### the old doc string from Ben, lightly edited to bring it
+ ### up-to-date, explaining the TRUE, secret life of this function:
+ + Given a @a path within a working copy of type KIND, follow this algorithm: + + - if @a path is not under version control: + - Place it under version control and schedule for addition; + if @a copyfrom_url is non-NULL, use it and @a copyfrom_rev as + 'copyfrom' history + + - if @a path is already under version control: + (This can only happen when a directory is copied, in which + case ancestry must have been supplied as well.) + + - Schedule the directory itself for addition with copyfrom history. + - Mark all its children with a 'copied' flag + - Rewrite all the URLs to what they will be after a commit. + - ### @todo Remove old wcprops too, see the '###' below. + +
 ### I think possibly the "switchover" functionality should be
+ ### broken out into a separate function, but its all intertwined in
+ ### the code right now.  Ben, thoughts?  Hard?  Easy?  Mauve?
+ + ### Update: see "###" comment in svn_wc_add_repos_file3()'s doc + string about this. + + @since New in 1.6. + +
+ + Similar to svn_wc_delete2(), but takes an @c svn_wc_notify_func_t instead. + + @deprecated Provided for backward compatibility with the 1.1 API. + + + + Similar to svn_wc_delete3(), but with @a keep_local always set to FALSE. + + @deprecated Provided for backward compatibility with the 1.4 API. + + + + Schedule @a path for deletion, it will be deleted from the repository on + the next commit. If @a path refers to a directory, then a recursive + deletion will occur. @a adm_access must hold a write lock for the parent + of @a path. + + If @a keep_local is FALSE, this function immediately deletes all files, + modified and unmodified, versioned and unversioned from the working copy. + It also immediately deletes unversioned directories and directories that + are scheduled to be added. Only versioned directories will remain in the + working copy, these get deleted by the update following the commit. + + If @a keep_local is TRUE, all files and directories will be kept in the + working copy (and will become unversioned on the next commit). + + If @a cancel_func is non-NULL, call it with @a cancel_baton at + various points during the operation. If it returns an error + (typically @c SVN_ERR_CANCELLED), return that error immediately. + + For each path marked for deletion, @a notify_func will be called with + the @a notify_baton and that path. The @a notify_func callback may be + @c NULL if notification is not needed. + + @since New in 1.5. + + + + Similar to svn_wc_copy2(), but takes an @c svn_wc_notify_func_t instead. + + @deprecated Provided for backward compatibility with the 1.1 API. + + + +@} + Copy @a src to @a dst_basename in @a dst_parent, and schedule + @a dst_basename for addition to the repository, remembering the copy + history. + + @a src must be a file or directory under version control; @a dst_parent + must be a directory under version control in the same working copy; + @a dst_basename will be the name of the copied item, and it must not + exist already. + + If @a cancel_func is non-NULL, call it with @a cancel_baton at + various points during the operation. If it returns an error + (typically @c SVN_ERR_CANCELLED), return that error immediately. + + For each file or directory copied, @a notify_func will be called + with its path and the @a notify_baton. @a notify_func may be @c NULL + if you are not interested in this information. + + @par Important: + This is a variant of svn_wc_add(). No changes will happen + to the repository until a commit occurs. This scheduling can be + removed with svn_client_revert2(). + + @since New in 1.2. + + + + Associate @a locks, a hash table mapping const char* + absolute repository paths to svn_lock_t objects, with a + @a set_locks_baton returned by an earlier call to + svn_wc_get_status_editor3(). @a repos_root is the repository root URL. + Perform all allocations in @a pool. + + @note @a locks will not be copied, so it must be valid throughout the + edit. @a pool must also not be destroyed or cleared before the edit is + finished. + + @since New in 1.2. + + + + Same as svn_wc_get_status_editor2(), but with @a set_locks_baton set + to @c NULL, and taking a deprecated svn_wc_status_func_t argument. + + @deprecated Provided for backward compatibility with the 1.1 API. + + + + Like svn_wc_get_status_editor3(), but with @a ignore_patterns + provided from the corresponding value in @a config, and @a recurse + instead of @a depth. If @a recurse is TRUE, behave as if for @c + svn_depth_infinity; else if @a recurse is FALSE, behave as if for + @c svn_depth_immediates. + + @since New in 1.2. + @deprecated Provided for backward compatibility with the 1.4 API. + + + + Same as svn_wc_get_status_editor4(), but using @c svn_wc_status_func2_t + instead of @c svn_wc_status_func3_t. + + @since New in 1.5. + @deprecated Provided for backward compatibility with the 1.4 API. + + + + Set @a *editor and @a *edit_baton to an editor that generates @c + svn_wc_status2_t structures and sends them through @a status_func / + @a status_baton. @a anchor is an access baton, with a tree lock, + for the local path to the working copy which will be used as the + root of our editor. If @a target is not empty, it represents an + entry in the @a anchor path which is the subject of the editor + drive (otherwise, the @a anchor is the subject). + + If @a set_locks_baton is non-@c NULL, it will be set to a baton that can + be used in a call to the svn_wc_status_set_repos_locks() function. + + Callers drive this editor to describe working copy out-of-dateness + with respect to the repository. If this information is not + available or not desired, callers should simply call the + close_edit() function of the @a editor vtable. + + If the editor driver calls @a editor's set_target_revision() vtable + function, then when the edit drive is completed, @a *edit_revision + will contain the revision delivered via that interface. + + Assuming the target is a directory, then: + + - If @a get_all is FALSE, then only locally-modified entries will be + returned. If TRUE, then all entries will be returned. + + - If @a depth is @c svn_depth_empty, a status structure will + be returned for the target only; if @c svn_depth_files, for the + target and its immediate file children; if + @c svn_depth_immediates, for the target and its immediate + children; if @c svn_depth_infinity, for the target and + everything underneath it, fully recursively. + + If @a depth is @c svn_depth_unknown, take depths from the + working copy and behave as above in each directory's case. + + If the given @a depth is incompatible with the depth found in a + working copy directory, the found depth always governs. + + If @a no_ignore is set, statuses that would typically be ignored + will instead be reported. + + @a ignore_patterns is an array of file patterns matching + unversioned files to ignore for the purposes of status reporting, + or @c NULL if the default set of ignorable file patterns should be used. + + If @a cancel_func is non-NULL, call it with @a cancel_baton while building + the @a statushash to determine if the client has cancelled the operation. + + If @a traversal_info is non-NULL, then record pre-update traversal + state in it. (Caller should obtain @a traversal_info from + svn_wc_init_traversal_info().) + + Allocate the editor itself in @a pool, but the editor does temporary + allocations in a subpool of @a pool. + + @since New in 1.6. + + + + Same as svn_wc_status_func2_t(), but for older svn_wc_status_t structures. + + @deprecated Provided for backward compatibility with the 1.1 API. + + + + Same as svn_wc_status_func3_t(), but without a provided pool or + the ability to propagate errors. + + @since New in 1.2. + @deprecated Provided for backward compatibility with the 1.5 API. + + + + A callback for reporting a @a status about @a path. + + @a baton is a closure object; it should be provided by the + implementation, and passed by the caller. + + @a pool will be cleared between invocations to the callback. + + @since New in 1.6. + + + + Same as svn_wc_status2(), but for older svn_wc_status_t structures. + + @deprecated Provided for backward compatibility with the 1.1 API. + + + + Fill @a *status for @a path, allocating in @a pool. + @a adm_access must be an access baton for @a path. + + Here are some things to note about the returned structure. A quick + examination of the @c status->text_status after a successful return of + this function can reveal the following things: + + - @c svn_wc_status_none : @a path is not versioned, and is either not + present on disk, or is ignored by svn's + default ignore regular expressions or the + svn:ignore property setting for @a path's + parent directory. + + - @c svn_wc_status_missing : @a path is versioned, but is missing from + the working copy. + + - @c svn_wc_status_unversioned : @a path is not versioned, but is + present on disk and not being + ignored (see above). + + The other available results for the @c text_status field are more + straightforward in their meanings. See the comments on the + @c svn_wc_status_kind structure for some hints. + + @since New in 1.2. + + + + Same as svn_wc_dup_status2(), but for older svn_wc_status_t structures. + + @deprecated Provided for backward compatibility with the 1.1 API. + + + + Return a deep copy of the @a orig_stat status structure, allocated + in @a pool. + + @since New in 1.2. + + + +a file or directory can be 'switched' if the switch command has been + * used. + + + +a file or directory can be 'copied' if it's scheduled for + * addition-with-history (or part of a subtree that is scheduled as such.). + + + +a directory can be 'locked' if a working copy update was interrupted. + + +Can be @c NULL if not under version control. + + + Same as @c svn_wc_status2_t, but without the svn_lock_t 'repos_lock' field. + + @deprecated Provided for backward compatibility with the 1.1 API. + + + +If the item is a file that was added to the working copy with an + * svn:externals; if file_external is TRUE, then switched is always + * FALSE. + * @since New in 1.6 + + + +@} +Non-NULL if the entry is the victim of a tree conflict. + * @since New in 1.6 + + + +Set to the user name of the youngest commit, or @c NULL if not + * out of date or non-existent. Because a non-existent @c + * svn:author property has the same behavior as an out-of-date + * working copy, examine @c ood_last_cmt_rev to determine whether + * the working copy is out of date. + * @since New in 1.3 + + + +Set to the node kind of the youngest commit, or @c svn_node_none + * if not out of date. + * @since New in 1.3 + + + +Set to the most recent commit date, or @c 0 if not out of date. + * @since New in 1.3 + + + + @defgroup svn_wc_status_ood WC out-of-date info from the repository + @{ + + When the working copy item is out-of-date compared to the + repository, the following fields represent the state of the + youngest revision of the item in the repository. If the working + copy is not out of date, the fields are initialized as described + below. + +Set to the youngest committed revision, or @c SVN_INVALID_REVNUM + * if not out of date. + * @since New in 1.3 + + + +Set to the URI (actual or expected) of the item. + * @since New in 1.3 + + + +The entry's lock in the repository, if any. + + +a file or directory can be 'switched' if the switch command has been + * used. If this is TRUE, then file_external will be FALSE. + + + +a file or directory can be 'copied' if it's scheduled for + * addition-with-history (or part of a subtree that is scheduled as such.). + + + +a directory can be 'locked' if a working copy update was interrupted. + + +Can be @c NULL if not under version control. + + + Structure for holding the "status" of a working copy item. + + The item's entry data is in @a entry, augmented and possibly shadowed + by the other fields. @a entry is @c NULL if this item is not under + version control. + + @note Fields may be added to the end of this structure in future + versions. Therefore, to preserve binary compatibility, users + should not directly allocate structures of this type. + + @since New in 1.2. + + + + @defgroup svn_wc_status Working copy status. + @{ + + We have two functions for getting working copy status: one function + for getting the status of exactly one thing, and another for + getting the statuses of (potentially) multiple things. + + The concept of depth, as explained in the documentation for + svn_depth_t, may be useful in understanding this. Suppose we're + getting the status of directory D: + + To offer all three levels, we could have one unified function, + taking a `depth' parameter. Unfortunately, because this function + would have to handle multiple return values as well as the single + return value case, getting the status of just one entity would + become cumbersome: you'd have to roll through a hash to find one + lone status. + + So we have svn_wc_status() for depth-empty (just D itself), and + svn_wc_get_status_editor() for depth-immediates and depth-infinity, + since the latter two involve multiple return values. + + @note The status structures may contain a @c NULL ->entry field. + This indicates an item that is not versioned in the working copy. + +The type of status for the working copy. + +The status of the entries text. + +The status of the entries properties. + +The entry's text status in the repository. + +The entry's property status in the repository. + +The actual status of the text compared to the pristine base of the + * file. This value isn't masked by other working copy statuses. + * @c pristine_text_status is @c svn_wc_status_none if this value was + * not calculated during the status walk. + * @since New in 1.6 + + +The actual status of the properties compared to the pristine base of + * the node. This value isn't masked by other working copy statuses. + * @c pristine_prop_status is @c svn_wc_status_none if this value was + * not calculated during the status walk. + * @since New in 1.6 + + +The status of the entries text. + +The status of the entries properties. + +The entry's text status in the repository. + +The entry's property status in the repository. + + +a directory doesn't contain a complete entries list + + +an unversioned directory path populated by an svn:externals + property; this status is not used for file externals + + +an unversioned resource is in the way of the versioned resource + + +is unversioned but configured to be ignored + + +local mods received conflicting repos mods + + +local mods received repos mods + + +text or props have been modified + + +was deleted and then re-added + + +scheduled for deletion + + +under v.c., but is missing + + +is scheduled for addition + + +exists, but uninteresting + + +is not a versioned thing in this wc + + +does not exist + + +Set the repository root URL of @a path to @a repos, if possible. + * + * @a adm_access must contain @a path and be write-locked, if @a path + * is versioned. Return no error if path is missing or unversioned. + * Use @a pool for temporary allocations. + * + * @note In some circumstances, the repository root can't be set + * without making the working copy corrupt. In such cases, this + * function just returns no error, without modifying the @a path entry. + * + * @note This function exists to make it possible to try to set the repository + * root in old working copies; new working copies normally get this set at + * creation time. + * + * @since New in 1.3. + + + + Similar to svn_wc_ensure_adm2(), but with @a repos set to @c NULL. + + @deprecated Provided for backwards compatibility with the 1.2 API. + + + + Similar to svn_wc_ensure_adm3(), but with @a depth set to + @c svn_depth_infinity. + + @deprecated Provided for backwards compatibility with the 1.4 API. + + @since New in 1.3. + + + +Ensure that an administrative area exists for @a path, so that @a + * path is a working copy subdir based on @a url at @a revision, with + * depth @a depth, and with repository UUID @a uuid and repository + * root URL @a repos. + * + * @a depth must be a definite depth, it cannot be @c svn_depth_unknown. + * @a uuid and @a repos may be @c NULL. If non-@c NULL, @a repos must + * be a prefix of @a url. + * + * If the administrative area does not exist, then create it and + * initialize it to an unlocked state. + * + * If the administrative area already exists then the given @a url + * must match the URL in the administrative area and the given + * @a revision must match the BASE of the working copy dir unless + * the admin directory is scheduled for deletion or the + * SVN_ERR_WC_OBSTRUCTED_UPDATE error will be returned. + * + * Do not ensure existence of @a path itself; if @a path does not + * exist, return error. + * + * @since New in 1.5. + + + +Mark missing @a path as 'deleted' in its @a parent's list of entries. + * + * Return @c SVN_ERR_WC_PATH_FOUND if @a path isn't actually missing. + + + + Similar to svn_wc_walk_entries2(), but without cancellation support. + + @deprecated Provided for backward compatibility with the 1.0 API. + + + + Similar to svn_wc_walk_entries3(), but without cancellation support + or error handling from @a walk_callbacks, and with @a depth always + set to @c svn_depth_infinity. + + @deprecated Provided for backward compatibility with the 1.4 API. + + + + A generic entry-walker. + + Do a potentially recursive depth-first entry-walk beginning on + @a path, which can be a file or dir. Call callbacks in + @a walk_callbacks, passing @a walk_baton to each. Use @a pool for + looping, recursion, and to allocate all entries returned. + @a adm_access must be an access baton for @a path. + + If @a depth is @c svn_depth_empty, invoke the callbacks on @a path + and return without recursing further. If @c svn_depth_files, do + the same and invoke the callbacks on file children (if any) of + @a path, then return. If @c svn_depth_immediates, do the preceding + but also invoke callbacks on immediate subdirectories, then return. + If @c svn_depth_infinity, recurse fully starting from @a path. + + If @a cancel_func is non-NULL, call it with @a cancel_baton to determine + if the client has cancelled the operation. + + Like our other entries interfaces, entries that are in a 'excluded', + 'deleted' or 'absent' state (and not scheduled for re-addition) are not + discovered, unless @a show_hidden is TRUE. Excluded entries are those with + their depth set to @c svn_depth_exclude. + + When a new directory is entered, @c SVN_WC_ENTRY_THIS_DIR will always + be returned first. + + @note Callers should be aware that each directory will be + returned *twice*: first as an entry within its parent, and + subsequently as the '.' entry within itself. The two calls can be + distinguished by looking for @c SVN_WC_ENTRY_THIS_DIR in the 'name' + field of the entry. + + @since New in 1.5. + + + +An @a entry was found at @a path. + + +@deprecated Provided for backward compatibility with the 1.4 API. + + +Handle the error @a err encountered while processing @a path. + * Wrap or squelch @a err as desired, and return an @c svn_error_t + * *, or @c SVN_NO_ERROR. + + + +An @a entry was found at @a path. + + +A callback vtable invoked by the generic entry-walker function. + * @since New in 1.5. + + + +Set @a *url and @a *rev to the ancestor URL and revision for @a path, + * allocating in @a pool. @a adm_access must be an access baton for @a path. + * + * If @a url or @a rev is NULL, then ignore it (just don't return the + * corresponding information). + + + +Given a @a dir_path under version control, decide if one of its entries + * (@a entry) is in a state of conflict; return the answers in @a + * text_conflicted_p and @a prop_conflicted_p. These pointers must not be + * null. + * + * If the @a entry mentions that text conflict files (with suffix .mine, + * .theirs, etc.) exist, but they cannot be found, assume the text conflict + * has been resolved by the user and return FALSE in @a *text_conflicted_p. + * + * Similarly, if the @a entry mentions that a property conflicts file (.prej + * suffix) exists, but it cannot be found, assume the property conflicts + * have been resolved by the user and return FALSE in @a *prop_conflicted_p. + * + * The @a entry is not updated. + * + * @deprecated Provided for backward compatibility with the 1.5 API. + + + +Given a @a path in a dir under version control, decide if it is in a + * state of conflict; return the answers in @a *text_conflicted_p, @a + * *prop_conflicted_p, and @a *tree_conflicted_p. If one or two of the + * answers are uninteresting, simply pass @c NULL pointers for those. + * + * If @a path is unversioned or does not exist, @a *text_conflicted_p and + * @a *prop_conflicted_p will be @c FALSE if non-NULL. + * + * @a adm_access is the admin access baton of the parent directory. + * + * If the @a path has corresponding text conflict files (with suffix .mine, + * .theirs, etc.) that cannot be found, assume that the text conflict has + * been resolved by the user and return @c FALSE in @a *text_conflicted_p. + * + * Similarly, if a property conflicts file (.prej suffix) is said to exist, + * but it cannot be found, assume that the property conflicts have been + * resolved by the user and return @c FALSE in @a *prop_conflicted_p. + * + * @a *tree_conflicted_p can't be auto-resolved in this fashion. An + * explicit `resolved' is needed. + * + * @since New in 1.6. + + + +Return a duplicate of @a entry, allocated in @a pool. No part of the new + * entry will be shared with @a entry. + + + +Parse the `entries' file for @a adm_access and return a hash @a entries, + * whose keys are (const char *) entry names and values are + * (svn_wc_entry_t *). The hash @a entries, and its keys and + * values, are allocated from the pool used to open the @a adm_access + * baton (that's how the entries caching works). @a pool is used for + * transient allocations. + * + * Entries that are in a 'excluded', 'deleted' or 'absent' state (and not + * scheduled for re-addition) are not returned in the hash, unless + * @a show_hidden is TRUE. Excluded entries are those with their depth set to + * @c svn_depth_exclude. + * + * @par Important: + * The @a entries hash is the entries cache in @a adm_access + * and so usually the hash itself, the keys and the values should be treated + * as read-only. If any of these are modified then it is the caller's + * responsibility to ensure that the entries file on disk is updated. Treat + * the hash values as type (const svn_wc_entry_t *) if you wish to + * avoid accidental modification. Modifying the schedule member is a + * particularly bad idea, as the entries writing process relies on having + * access to the original schedule. Use a duplicate entry to modify the + * schedule. + * + * @par Important: + * Only the entry structures representing files and + * @c SVN_WC_ENTRY_THIS_DIR contain complete information. The entry + * structures representing subdirs have only the `kind' and `state' + * fields filled in. If you want info on a subdir, you must use this + * routine to open its @a path and read the @c SVN_WC_ENTRY_THIS_DIR + * structure, or call svn_wc_entry() on its @a path. + + + +How an entries file's owner dir is named in the entries file. +Set @a *entry to an entry for @a path, allocated in the access baton pool. + * If @a show_hidden is TRUE, return the entry even if it's in 'excluded', + * 'deleted' or 'absent' state. Excluded entries are those with their depth + * set to @c svn_depth_exclude. If @a path is not under revision control, or + * if entry is hidden, not scheduled for re-addition, and @a show_hidden is @c + * FALSE, then set @a *entry to @c NULL. + * + * @a *entry should not be modified, since doing so modifies the entries + * cache in @a adm_access without changing the entries file on disk. + * + * If @a path is not a directory then @a adm_access must be an access baton + * for the parent directory of @a path. To avoid needing to know whether + * @a path is a directory or not, if @a path is a directory @a adm_access + * can still be an access baton for the parent of @a path so long as the + * access baton for @a path itself is in the same access baton set. + * + * @a path can be relative or absolute but must share the same base used + * to open @a adm_access. + * + * Note that it is possible for @a path to be absent from disk but still + * under revision control; and conversely, it is possible for @a path to + * be present, but not under revision control. + * + * Use @a pool only for local processing. + + + +The entry is a intra-repository file external and this is the + * operative revision number specified in the externals definition. + * This field is only valid when the file_external_path field is + * non-NULL. The only permissible values are + * svn_opt_revision_unspecified if the entry is not an external, + * svn_opt_revision_head if the external revision is unspecified or + * specified with -r HEAD or svn_opt_revision_number for a specific + * revision number. + * + * @since New in 1.6. + + +The entry is a intra-repository file external and this is the + * peg revision number specified in the externals definition. This + * field is only valid when the file_external_path field is + * non-NULL. The only permissible values are + * svn_opt_revision_unspecified if the entry is not an external, + * svn_opt_revision_head if the external revision is unspecified or + * specified with -r HEAD or svn_opt_revision_number for a specific + * revision number. + * + * @since New in 1.6. + + +The entry is a intra-repository file external and this is the + * repository root relative path to the file specified in the + * externals definition, otherwise NULL if the entry is not a file + * external. + * + * @since New in 1.6. + + +Serialized data for all of the tree conflicts detected in this_dir. + * + * @since New in 1.6. + + +The depth of this entry. + * + * ### It's a bit annoying that we only use this on this_dir + * ### entries, yet it will exist (with value svn_depth_infinity) on + * ### all entries. Maybe some future extensibility would make this + * ### field meaningful on entries besides this_dir. + * + * @since New in 1.5. + + +Whether a local copy of this entry should be kept in the working copy + * after a deletion has been committed, Only valid for the this-dir entry + * when it is scheduled for deletion. + * + * @since New in 1.5. + + +Size of the file after being translated into local + * representation, or @c SVN_WC_ENTRY_WORKING_SIZE_UNKNOWN if + * unknown. + * + * @since New in 1.5. + + + +which changelist this item is part of, or NULL if not part of any. + * @since New in 1.5. + + + +Cached property existence for this entry. + * This is a space-separated list of property names. If a name exists in + * @c cachable_props but not in this list, this entry does not have that + * property. If a name exists in both lists, the property is present on this + * entry. + * + * @since New in 1.4. + * @deprecated This value will always be "" in version 1.7 and later. + + +A space-separated list of all properties whose presence/absence is cached + * in this entry. + * + * @see @c present_props. + * + * @since New in 1.4. + * @deprecated This value will always be "" in version 1.7 and later. + + +Whether this entry has property modifications. + * + * @note For working copies in older formats, this flag is not valid. + * + * @see svn_wc_props_modified_p(). + * + * @since New in 1.4. + + +Whether this entry has any working properties. + * False if this information is not stored in the entry. + * + * @since New in 1.4. + + +Lock creation date or 0 if not locked in this WC + * @since New in 1.2. + + + +lock comment or NULL if not locked in this WC or no comment + * @since New in 1.2. + + + +lock owner, or NULL if not locked in this WC + * @since New in 1.2. + + + +lock token or NULL if path not locked in this WC + * @since New in 1.2. + + + +last commit author of this item + + +last date this was changed + + +last revision this was changed + + +Hex MD5 checksum for the untranslated text base file, + * can be @c NULL for backwards compatibility. + + + +last up-to-date time for properties (0 means no information available) + * + * @deprecated This value will always be 0 in version 1.4 and later. + + + +last up-to-date time for text contents (0 means no information available) + + + +property reject file. A file basename, relative to the user's + * directory that the THIS_DIR entry refers to. + + +working version of conflicted file. A file basename, relative to the + * user's directory that the THIS_DIR entry refers to. + + +new version of conflicted file. A file basename, relative to the + * user's directory that the THIS_DIR entry refers to. + + +old version of conflicted file. A file basename, relative to the + * user's directory that the THIS_DIR entry refers to. + + +copyfrom revision + + +copyfrom location + + +for THIS_DIR entry, implies whole entries file is incomplete + + +absent -- we know an entry of this name exists, but that's all + (usually this happens because of authz restrictions) + + +The directory containing this entry had a versioned child of this + * name, but this entry represents a different revision or a switched + * path at which no item exists in the repository. This typically + * arises from committing or updating to a deletion of this entry + * without committing or updating the parent directory. + * + * The schedule can be 'normal' or 'add'. + + +in a copied state (possibly because the entry is a child of a + * path that is @c svn_wc_schedule_add or @c svn_wc_schedule_replace, + * when the entry itself is @c svn_wc_schedule_normal). + * COPIED is true for nodes under a directory that was copied, but + * COPYFROM_URL is null there. They are both set for the root + * destination of the copy. + + + +scheduling (add, delete, replace ...) + + +node kind (file, dir, ...) + + +repository uuid + + +canonical repository URL or NULL if not known + + +url in repository + + +base revision + + +entry's name + + + Values for the working_size field in svn_wc_entry_t + when it isn't set to the actual size value of the unchanged + working file. + + @defgroup svn_wc_entry_working_size_constants Working size constants + + @{ + +The value of the working size is unknown (hasn't been + * calculated and stored in the past for whatever reason). + * + * @since New in 1.5 + +@} +A working copy entry -- that is, revision control information about + * one versioned entity. + + + +Administrative subdir. + * + * Ideally, this would be completely private to wc internals (in fact, + * it used to be that adm_subdir() in adm_files.c was the only function + * who knew the adm subdir's name). However, import wants to protect + * against importing administrative subdirs, so now the name is a + * matter of public record. + * + * @deprecated Provided for backward compatibility with the 1.2 API. + +The schedule states an entry can be in. + + +Slated for replacement (delete + add) + + +Slated for deletion + + +Slated for addition + + +Nothing special here + + +Set @a *modified_p to non-zero if @a path's properties are modified + * with regard to the base revision, else set @a modified_p to zero. + * @a adm_access must be an access baton for @a path. + + + +Set @a *modified_p to non-zero if @a filename's text is modified + * with regard to the base revision, else set @a *modified_p to zero. + * @a filename is a path to the file, not just a basename. @a adm_access + * must be an access baton for @a filename. + * + * If @a force_comparison is @c TRUE, this function will not allow + * early return mechanisms that avoid actual content comparison. + * Instead, if there is a text base, a full byte-by-byte comparison + * will be done, and the entry checksum verified as well. (This means + * that if the text base is much longer than the working file, every + * byte of the text base will still be examined.) + * + * If @a filename does not exist, consider it unmodified. If it exists + * but is not under revision control (not even scheduled for + * addition), return the error @c SVN_ERR_ENTRY_NOT_FOUND. + * + * If @a filename is unmodified but has a timestamp variation then this + * function may "repair" @a filename's text-time by setting it to + * @a filename's last modification time. + + + +Set @a *has_binary_prop to @c TRUE iff @a path has been marked + * with a property indicating that it is non-text (in other words, binary). + * @a adm_access is an access baton set that contains @a path. + + + +Set @a *wc_format to @a path's working copy format version number if + * @a path is a valid working copy directory, else set it to 0. + * Return error @c APR_ENOENT if @a path does not exist at all. + + + +Similar to @c dir_props_changed in @c svn_wc_diff_callbacks2_t, but this + * function is called for files as well as directories. + + +The same as @c dir_deleted in @c svn_wc_diff_callbacks2_t. + + +The same as @c dir_added in @c svn_wc_diff_callbacks2_t. + + +Similar to @c file_deleted in @c svn_wc_diff_callbacks2_t, but without + * the properties. + + +Similar to @c file_added in @c svn_wc_diff_callbacks2_t, but without + * property change information. @a *state applies to the file contents. + + +Similar to @c file_changed in @c svn_wc_diff_callbacks2_t, but without + * property change information. @a tmpfile2 is never NULL. @a state applies + * to the file contents. + + + Similar to @c svn_wc_diff_callbacks2_t, but with file additions/content + changes and property changes split into different functions. + + @deprecated Provided for backward compatibility with the 1.1 API. + + + +The same as @c dir_props_changed in @c svn_wc_diff_callbacks3_t. + + +The same as @c dir_deleted in @c svn_wc_diff_callbacks3_t. + + +The same as @c dir_added in @c svn_wc_diff_callbacks3_t. + + +The same as @c file_deleted in @c svn_wc_diff_callbacks3_t. + + +The same as @c file_added in @c svn_wc_diff_callbacks3_t. + + +The same as @c file_changed in @c svn_wc_diff_callbacks3_t. + + + Similar to @c svn_wc_diff_callbacks3_t, but without the dir_opened() + function, and without the 'tree_conflicted' argument to the functions. + + @deprecated Provided for backward compatibility with the 1.2 API. + + + +A directory @a path has been closed. + + + + A directory @a path has been opened. @a rev is the revision that the + directory came from. + + This function is called for @a path before any of the callbacks are + called for a child of @a path. + + + + A list of property changes (@a propchanges) was applied to the + directory @a path. + + The array is a list of (@c svn_prop_t) structures. + + The original list of properties is provided in @a original_props, + which is a hash of @c svn_string_t values, keyed on the property + name. + + + +A directory @a path was deleted. + + + +A directory @a path was added. @a rev is the revision that the +directory came from. + + + + A file @a path was deleted. The [loss of] contents can be seen by + comparing @a tmpfile1 and @a tmpfile2. @a originalprops provides + the properties of the file. + ### Some existing callers include WC "entry props" in @a originalprops. + + If known, the @c svn:mime-type value of each file is passed into + @a mimetype1 and @a mimetype2; either or both of the values can + be NULL. The implementor can use this information to decide if + (or how) to generate differences. + + + + A file @a path was added. The contents can be seen by comparing + @a tmpfile1 and @a tmpfile2, which represent @a rev1 and @a rev2 + of the file, respectively. (If either file is empty, the rev + will be 0.) + + If known, the @c svn:mime-type value of each file is passed into + @a mimetype1 and @a mimetype2; either or both of the values can + be NULL. The implementor can use this information to decide if + (or how) to generate differences. + + @a propchanges is an array of (@c svn_prop_t) structures. If it contains + any elements, the original list of properties is provided in + @a originalprops, which is a hash of @c svn_string_t values, keyed on the + property name. + + + + A file @a path has changed. If @a tmpfile2 is non-NULL, the + contents have changed and those changes can be seen by comparing + @a tmpfile1 and @a tmpfile2, which represent @a rev1 and @a rev2 of + the file, respectively. + + If known, the @c svn:mime-type value of each file is passed into + @a mimetype1 and @a mimetype2; either or both of the values can + be NULL. The implementor can use this information to decide if + (or how) to generate differences. + + @a propchanges is an array of (@c svn_prop_t) structures. If it contains + any elements, the original list of properties is provided in + @a originalprops, which is a hash of @c svn_string_t values, keyed on the + property name. + + + + +@} + A callback vtable invoked by our diff-editors, as they receive + diffs from the server. 'svn diff' and 'svn merge' both implement + their own versions of this table. + + Common parameters: + + @a adm_access will be an access baton for the directory containing + @a path, or @c NULL if the diff editor is not using access batons. + + If @a state is non-NULL, set @a *state to the state of the item + after the operation has been performed. (In practice, this is only + useful with merge, not diff; diff callbacks will probably set + @a *state to @c svn_wc_notify_state_unknown, since they do not change + the state and therefore do not bother to know the state after the + operation.) By default, @a state refers to the item's content + state. Functions concerned with property state have separate + @a contentstate and @a propstate arguments. + + If @a tree_conflicted is non-NULL, set @a *tree_conflicted to true if + this operation caused a tree conflict, else to false. (Like with @a + state, this is only useful with merge, not diff; diff callbacks + should set this to false.) + + @since New in 1.6. + + + +A callback used in svn_client_merge3(), svn_client_update3(), and + * svn_client_switch2() for resolving conflicts during the application + * of a tree delta to a working copy. + * + * @a description describes the exact nature of the conflict, and + * provides information to help resolve it. @a baton is a closure + * object; it should be provided by the implementation, and passed by + * the caller. All allocations should be performed in @a pool. When + * finished, the callback signals its resolution by returning a + * structure in @a *result. (See @c svn_wc_conflict_result_t.) + * + * The values @c svn_wc_conflict_choose_mine_conflict and @c + * svn_wc_conflict_choose_theirs_conflict are not legal for conflicts + * in binary files or properties. + * + * Implementations of this callback are free to present the conflict + * using any user interface. This may include simple contextual + * conflicts in a file's text or properties, or more complex + * 'tree'-based conflcts related to obstructed additions, deletions, + * and edits. The callback implementation is free to decide which + * sorts of conflicts to handle; it's also free to decide which types + * of conflicts are automatically resolvable and which require user + * interaction. + * + * @since New in 1.5. + + + + Allocate an @c svn_wc_conflict_result_t structure in @a pool, + initialize and return it. + + Set the @c choice field of the structure to @a choice, and @c + merged_file to @a merged_file. Set all other fields to their @c + _unknown, @c NULL or invalid value, respectively. Make only a shallow + copy of the pointer argument @a merged_file. + + @since New in 1.5. + + + +If true, save a backup copy of merged_file (or the original + merged_file from the conflict description, if merged_file is + NULL) in the user's working copy. + + +If not NULL, this is a path to a file which contains the client's + (or more likely, the user's) merging of the three values in + conflict. libsvn_wc accepts this file if (and only if) @c choice + is set to @c svn_wc_conflict_choose_merged. + + +A choice to either delay the conflict resolution or select a + particular file to resolve the conflict. + + +The final result returned by @c svn_wc_conflict_resolver_func_t. + * + * @note Fields may be added to the end of this structure in future + * versions. Therefore, to preserve binary compatibility, users + * should not directly allocate structures of this type. Instead, + * construct this structure using @c svn_wc_create_conflict_result() + * below. + * + * @since New in 1.5. + + + +The way in which the conflict callback chooses a course of action. + * + * @since New in 1.5. + + + + Allocate an @c svn_wc_conflict_description_t structure in @a pool, + initialize to represent a tree conflict, and return it. + + Set the @c path field of the created struct to @a path, the @c access + field to @a adm_access, the @c kind field to @c + svn_wc_conflict_kind_tree, the @c node_kind to @a node_kind, the @c + operation to @a operation, the @c src_left_version field to + @a src_left_version, and the @c src_right_version field to + @a src_right_version. + Make only shallow copies of the pointer arguments. + + @note: It is the caller's responsibility to set the other required fields + (such as the four file names and @c action and @c reason). + + @since New in 1.6. + + + + Allocate an @c svn_wc_conflict_description_t structure in @a pool, + initialize to represent a property conflict, and return it. + + Set the @c path field of the created struct to @a path, the @c access + field to @a adm_access, the @c kind field to @c + svn_wc_conflict_kind_prop, the @c node_kind to @a node_kind, and the @c + property_name to @a property_name. Make only shallow copies of the pointer + arguments. + + @note: It is the caller's responsibility to set the other required fields + (such as the four file names and @c action and @c reason). + + @since New in 1.6. + + + + Allocate an @c svn_wc_conflict_description_t structure in @a pool, + initialize to represent a text conflict, and return it. + + Set the @c path field of the created struct to @a path, the @c access + field to @a adm_access, the @c kind field to @c + svn_wc_conflict_kind_text, the @c node_kind to @c svn_node_file, the @c + action to @c svn_wc_conflict_action_edit, and the @c reason to @c + svn_wc_conflict_reason_edited. Make only shallow copies of the pointer + arguments. + + @note: It is the caller's responsibility to set the other required fields + (such as the four file names and @c mime_type and @c is_binary). + + @since New in 1.6. + + + +Info on the "merge-right source" or "their" version of incoming change. + * @since New in 1.6. + + +Info on the "merge-left source" or "older" version of incoming change. + * @since New in 1.6. + + +The operation that exposed the conflict. + * Used only for tree conflicts. + * + * @since New in 1.6. + + + +merged version; may contain conflict markers + + +my locally-edited version of the file + + +their version of the file + + +If this is text-conflict and involves the merging of two files + * descended from a common ancestor, here are the paths of up to + * four fulltext files that can be used to interactively resolve the + * conflict. All four files will be in repository-normal form -- LF + * line endings and contracted keywords. (If any of these files are + * not available, they default to NULL.) + * + * On the other hand, if this is a property-conflict, then these + * paths represent temporary files that contain the three different + * property-values in conflict. The fourth path (@c merged_file) + * may or may not be NULL; if set, it represents libsvn_wc's + * attempt to merge the property values together. (Remember that + * property values are technically binary values, and thus can't + * always be merged.) + + + +The state of the target node or property, relative to its merge-left + * source, that is the reason for the conflict. + * (When @c kind is 'text', this reason must be 'edited'.) + + +The action being attempted on the conflicted node or property. + * (When @c kind is 'text', this action must be 'edit'.) + + +If not NULL, an open working copy access baton to either the + * path itself (if @c path is a directory), or to the parent + * directory (if @c path is a file.) + * For a tree conflict, this will always be an access baton + * to the parent directory of the path, even if the path is + * a directory. + + +The svn:mime-type property of ('my' version of) @c path, if available, + * else NULL. + * (Only if @c kind is 'text', else undefined.) + + +Whether svn thinks ('my' version of) @c path is a 'binary' file. + * (Only if @c kind is 'text', else undefined.) + + +The name of the property whose conflict is being described. + * (Only if @a kind is 'property'; else undefined.) + + +What sort of conflict are we describing? + + +The node type of the path being operated on (for a tree conflict, + * ### which version?) + + +The path that is in conflict (for a tree conflict, it is the victim) + + +A struct that describes a conflict that has occurred in the + * working copy. Passed to @c svn_wc_conflict_resolver_func_t. + * + * The conflict described by this structure is one of: + * - a conflict on the content of the file node @a path + * - a conflict on the property @a property_name of @a path + * + * @note Fields may be added to the end of this structure in future + * versions. Therefore, to preserve binary compatibility, users + * should not directly allocate structures of this type but should use + * svn_wc_create_conflict_description_text() or + * svn_wc_create_conflict_description_prop() or + * svn_wc_create_conflict_description_tree() instead. + * + * @since New in 1.5. + + + +Return a duplicate of @a version, allocated in @a pool. + * No part of the new version will be shared with @a version. + * + * @since New in 1.6. + + + + Allocate an @c svn_wc_conflict_version_t structure in @a pool, + initialize to contain a conflict origin, and return it. + + Set the @c repos_url field of the created struct to @a repos_url, the + @c path_in_repos field to @a path_in_repos, the @c peg_rev field to + @a peg_rev and the the @c node_kind to @c node_kind. Make only shallow + copies of the pointer arguments. + + @since New in 1.6. + + + +@} +Info about this node + + +path within repos; must not start with '/' + + +revision at which to look up path_in_repos + + +@name Where to find this node version in a repository +@{ +URL of repository root + + +Info about one of the conflicting versions of a node. Each field may + * have its respective null/invalid/unknown value if the corresponding + * information is not relevant or not available. + * + * @todo Consider making some or all of the info mandatory, to reduce + * complexity. + * + * @note Fields may be added to the end of this structure in future + * versions. Therefore, to preserve binary compatibility, users + * should not directly allocate structures of this type. + * + * @see svn_wc_conflict_version_create() + * @see svn_wc_conflict_version_dup() + * + * @since New in 1.6. + + + +The user operation that exposed a conflict. + * + * @since New in 1.6. + + + +The type of conflict being described by an @c + * svn_wc_conflict_description_t (see below). + * + * @since New in 1.5. + + + +tree conflict (on a dir) @since New in 1.6. + + +property conflict (on a file or dir) + + +textual conflict (on a file) + + +The pre-existing condition which is causing a state of conflict. + * + * @since New in 1.5. + + + +Object is already added or schedule-add. @since New in 1.6. + + +Object is unversioned + + +Object is unknown or missing + + +Object is already schedule-delete + + +Another object is in the way + + +Local edits are already present + + + Interactive conflict handling + + @defgroup svn_wc_conflict Conflict callback functionality + + @{ + + This API gives a Subversion client application the opportunity to + define a callback that allows the user to resolve conflicts + interactively during updates and merges. + + If a conflict is discovered, libsvn_wc invokes the callback with an + @c svn_wc_conflict_description_t. This structure describes the + path in conflict, whether it's a text or property conflict, and may + also present up to three files that can be used to resolve the + conflict (perhaps by launching an editor or 3rd-party merging + tool). The structure also provides a possible fourth file (@c + merged_file) which, if not NULL, represents libsvn_wc's attempt to + contextually merge the first three files. (Note that libsvn_wc + will not attempt to merge a file that it believes is binary, and it + will only attempt to merge property values it believes to be a + series of multi-line text.) + + When the callback is finished interacting with the user, it + responds by returning a @c svn_wc_conflict_result_t. This + structure indicates whether the user wants to postpone the conflict + for later (allowing libsvn_wc to mark the path "conflicted" as + usual), or whether the user wants libsvn_wc to use one of the four + files as the "final" state for resolving the conflict immediately. + + Note that the callback is at liberty (and encouraged) to merge the + three files itself. If it does so, it signals this to libsvn_wc by + returning a choice of @c svn_wc_conflict_choose_merged. To return + the 'final' merged file to libsvn_wc, the callback has the option of + either: + + - editing the original @c merged_file in-place + + or, if libsvn_wc never supplied a merged_file in the + description structure (i.e. passed NULL for that field), + + - return the merged file in the @c svn_wc_conflict_result_t. + + +The type of action being attempted on an object. + * + * @since New in 1.5. + + + +@} + A simple callback type to wrap svn_ra_get_file(); see that + docstring for more information. + + This technique allows libsvn_client to 'wrap' svn_ra_get_file() and + pass it down into libsvn_wc functions, thus allowing the WC layer + to legally call the RA function via (blind) callback. + + @since New in 1.5 + + + + Similar to @c svn_wc_notify_func2_t, but takes the information as arguments + instead of struct fields. + + @deprecated Provided for backward compatibility with the 1.1 API. + + + + Notify the world that @a notify->action has happened to @a notify->path. + + Recommendation: callers of @c svn_wc_notify_func2_t should avoid + invoking it multiple times on the same path within a given + operation, and implementations should not bother checking for such + duplicate calls. For example, in an update, the caller should not + invoke the notify func on receiving a prop change and then again + on receiving a text change. Instead, wait until all changes have + been received, and then invoke the notify func once (from within + an @c svn_delta_editor_t's close_file(), for example), passing + the appropriate @a notify->content_state and @a notify->prop_state flags. + + @since New in 1.2. + + + + Return a deep copy of @a notify, allocated in @a pool. + + @since New in 1.2. + + + + Allocate an @c svn_wc_notify_t structure in @a pool, initialize and return + it. + + Set the @c url field of the created struct to @a url, @c action to, @c path + to "." and @a action. Set all other fields to their @c _unknown, @c NULL or + invalid value, respectively. Make only a shallow copy of the pointer + @a url. + + @since New in 1.6. + + + + Allocate an @c svn_wc_notify_t structure in @a pool, initialize and return + it. + + Set the @c path field of the created struct to @a path, and @c action to + @a action. Set all other fields to their @c _unknown, @c NULL or + invalid value, respectively. Make only a shallow copy of the pointer + @a path. + + @since New in 1.2. + + + +If @c action is @c svn_wc_notify_update_update or @c + * svn_wc_notify_update_add, contains the revision before the update. + * In all other cases, it is @c SVN_INVALID_REVNUM. + * @since New in 1.7 + + +If @c action is @c svn_wc_notify_blame_revision, contains a list of + * revision properties for the specified revision + * @since New in 1.6 + + +If @c action relates to properties, specifies the name of the property. + * @since New in 1.6 + + +If non-NULL, specifies an absolute path prefix that can be subtracted + * from the start of the absolute path in @c path or @c url. Its purpose + * is to allow notification to remove a common prefix from all the paths + * displayed for an operation. @since New in 1.6 + + +Similar to @c path, but if non-NULL the notification is about a url. + * @since New in 1.6 + + +When @c action is @c svn_wc_notify_merge_begin, and both the + * left and right sides of the merge are from the same URL. In all + * other cases, it is @c NULL. @since New in 1.5 + + +When @c action is @c svn_wc_notify_changelist_add or name. In all other + * cases, it is @c NULL. @since New in 1.5 + + +When @c action is @c svn_wc_notify_update_completed, target revision + * of the update, or @c SVN_INVALID_REVNUM if not available; when @c + * action is @c svn_wc_notify_blame_revision, processed revision; Since + * Subversion 1.7 when action is @c svn_wc_notify_update_update or @c + * svn_wc_notify_update_add, the target revision. + * In all other cases, it is @c SVN_INVALID_REVNUM. + + + +Reflects the addition or removal of a lock token in the working copy. + + +The type of notification that is occurring about node properties. + + +The type of notification that is occurring about node content. + + +Points to an error describing the reason for the failure when @c + * action is one of the following: @c svn_wc_notify_failed_lock, @c + * svn_wc_notify_failed_unlock, @c svn_wc_notify_failed_external. + * Is @c NULL otherwise. + + +Points to the lock structure received from the repository when + * @c action is @c svn_wc_notify_locked. For other actions, it is + * @c NULL. + + +If non-NULL, indicates the mime-type of @c path. + * It is always @c NULL for directories. + + +Node kind of @c path. + + +Action that describes what happened to @c path. + + +Path, either absolute or relative to the current working directory + * (i.e., not relative to an anchor).@c path is "." or another valid path + * value for compatibilty reasons when the real target is an url that + * is available in @c url. + + + Structure used in the @c svn_wc_notify_func2_t function. + + @c kind, @c content_state, @c prop_state and @c lock_state are from + after @c action, not before. + + @note If @c action is @c svn_wc_notify_update, then @c path has + already been installed, so it is legitimate for an implementation of + @c svn_wc_notify_func2_t to examine @c path in the working copy. + + @note The purpose of the @c kind, @c mime_type, @c content_state, and + @c prop_state fields is to provide "for free" information that an + implementation is likely to want, and which it would otherwise be + forced to deduce via expensive operations such as reading entries + and properties. However, if the caller does not have this + information, it will simply pass the corresponding `*_unknown' + values, and it is up to the implementation how to handle that + (i.e., whether to attempt deduction, or just to punt and + give a less informative notification). + + @note Callers of notification functions should use svn_wc_create_notify() + or svn_wc_create_notify_url() to create structures of this type to allow + for extensibility. + + @since New in 1.2. + + + + What happened to a lock during an operation. + + @since New in 1.2. + + + +The item was unlocked. + + +The item was locked. + + +The lock wasn't changed. + + +The type of notification that is occurring. + + +Modified state got conflicting mods. + + +Modified state had mods merged in. + + +Pristine state was modified. + + +An unversioned item obstructed work. + + +The item wasn't present. + + +The state did not change. + + +Notifier doesn't know or isn't saying. + + + @defgroup svn_wc_notifications Notification callback handling + @{ + + In many cases, the WC library will scan a working copy and make + changes. The caller usually wants to know when each of these changes + has been made, so that it can display some kind of notification to + the user. + + These notifications have a standard callback function type, which + takes the path of the file that was affected, and a caller- + supplied baton. + + Note that the callback is a 'void' return -- this is a simple + reporting mechanism, rather than an opportunity for the caller to + alter the operation of the WC library. + + Note also that some of the actions are used across several + different Subversion commands. For example, the update actions are + also used for checkouts, switches, and merges. + +The type of action occurring. + + +The path is a subdirectory referenced in an externals definition + * which is unable to be operated on. @since New in 1.6. + + +The path is a tree-conflict victim of the intended action (*not* + * a persistent tree-conflict from an earlier operation, but *this* + * operation caused the tree-conflict). @since New in 1.6. + + +The last notification in a merge. @since New in 1.6. + + +Revprop deleted. @since New in 1.6. + + +Revprop set. @since New in 1.6. + + +Nonexistent property deleted. @since New in 1.6. + + +Property deleted. @since New in 1.6. + + +Property updated. @since New in 1.6. + + +Property added. @since New in 1.6. + + +Replace notification. @since New in 1.5. + + +A merge operation (to path) from a foreign repository has begun. + See @c merge_range in @c svn_wc_notify_t. @since New in 1.5. + + +A merge operation (to path) has begun. See @c merge_range in + @c svn_wc_notify_t. @since New in 1.5. + + +Warn user that a path has moved from one changelist to another. + @since New in 1.5. + + +Changelist name cleared. @since New in 1.5. + + +Changelist name set. @since New in 1.5. + + +Tried adding a path that already exists. @since New in 1.5. + + +Failed to unlock a path. @since New in 1.2. + + +Failed to lock a path. @since New in 1.2. + + +Unlocking a path. @since New in 1.2. + + +Locking a path. @since New in 1.2. + + +Processed a single revision's blame. + + +Transmitting post-fix text-delta data for a file. + + +Committing a replacement. + + +Committing a deletion. + + +Committing an addition. + + +Committing a modification. + + +Running status on an external module. + + +The last notification in a status (including status on externals). + + +Updating an external module. + + +The last notification in an update (including updates of externals). + + +Got any other action in an update. + + +Got an add in an update. + + +Got a delete in an update. + + +Skipping a path. + + +Resolving a conflict. + + +A revert operation has failed. + + +Reverting a modified path. + + +Restoring a missing path from the pristine text-base. + + +Deleting a versioned path. + + +Copying a versioned path. + + +Adding a path to revision control. + + + Similar to svn_wc_parse_externals_description2(), but returns the + parsed externals in a hash instead of an array. This function + should not be used, as storing the externals in a hash causes their + order of evaluation to be not easily identifiable. + + @deprecated Provided for backward compatibility with the 1.0 API. + + + + Similar to svn_wc_parse_externals_description3() with @a + canonicalize_url set to @c TRUE, but returns an array of @c + svn_wc_external_item_t * objects instead of @c + svn_wc_external_item2_t * objects + + @since New in 1.1. + + @deprecated Provided for backward compatibility with the 1.4 API. + + + + If @a externals_p is non-NULL, set @a *externals_p to an array of + @c svn_wc_external_item2_t * objects based on @a desc. The @a url + member of the objects will be canonicalized if @a canonicalize_url + is @c TRUE. + + If the format of @a desc is invalid, don't touch @a *externals_p and + return @c SVN_ERR_CLIENT_INVALID_EXTERNALS_DESCRIPTION. Thus, if + you just want to check the validity of an externals description, + and don't care about the parsed result, pass NULL for @a externals_p. + + The format of @a desc is the same as for values of the directory + property @c SVN_PROP_EXTERNALS, which see. + + Allocate the table, keys, and values in @a pool. + + Use @a parent_directory only in constructing error strings. + + @since New in 1.5. + + + + Return a duplicate of @a item, allocated in @a pool. No part of the new + item will be shared with @a item. + + @since New in 1.3. + + @deprecated Provided for backward compatibility with the 1.4 API. + + + +Same as @c svn_wc_external_item2_t.revision + + +Same as @c svn_wc_external_item2_t.url + + +Same as @c svn_wc_external_item2_t.target_dir + + + One external item. Similar to svn_wc_external_item2_t, except + @a revision is interpreted as both the operational revision and the + peg revision. + + @deprecated Provided for backward compatibility with the 1.4 API. + + + + Return a duplicate of @a item, allocated in @a pool. No part of the new + item will be shared with @a item. + + @since New in 1.5. + + + + Initialize an external item. + Set @a *item to an external item object, allocated in @a pool. + + In order to avoid backwards compatibility problems, this function + is used to initialize and allocate the @c svn_wc_external_item2_t + structure rather than doing so explicitly, as the size of this + structure may change in the future. + + The current implementation never returns error, but callers should + still check for error, for compatibility with future versions. + + @since New in 1.5. + + + +The peg revision to use when checking out. The only valid kinds are + svn_opt_revision_number, svn_opt_revision_date, and + svn_opt_revision_head. + + +What revision to check out. The only valid kinds for this are + svn_opt_revision_number, svn_opt_revision_date, and + svn_opt_revision_head. + + +Where to check out from. + + +The name of the subdirectory into which this external should be + checked out. This is relative to the parent directory that + holds this external item. (Note that these structs are often + stored in hash tables with the target dirs as keys, so this + field will often be redundant.) + + +One external item. This usually represents one line from an + * svn:externals description but with the path and URL + * canonicalized. + * + * In order to avoid backwards compatibility problems clients should use + * svn_wc_external_item_create() to allocate and initialize this structure + * instead of doing so themselves. + * + * @since New in 1.5. + + + +Set @a *depths to a hash table mapping const char * + * directory names (directories traversed by @a traversal_info) to + * const char * values (the depths of those directories, as + * converted by svn_depth_to_word()). + * + * @a traversal_info is obtained from svn_wc_init_traversal_info(), but is + * only useful after it has been passed through another function, such + * as svn_wc_crawl_revisions(), svn_wc_get_update_editor(), + * svn_wc_get_switch_editor(), etc. + * + * The dir names are full paths -- that is, anchor plus target, not target + * alone. The values are not allocated, they are static constant strings. + * Although the values are never NULL, not all directories traversed + * are necessarily listed. For example, directories which did not + * have an svn:externals property set or modified are not included. + * + * The hashes and keys have the same lifetime as @a traversal_info. + * + * @since New in 1.5. + + + +Set @a *externals_old and @a *externals_new to hash tables representing + * changes to values of the svn:externals property on directories + * traversed by @a traversal_info. + * + * @a traversal_info is obtained from svn_wc_init_traversal_info(), but is + * only useful after it has been passed through another function, such + * as svn_wc_crawl_revisions(), svn_wc_get_update_editor(), + * svn_wc_get_switch_editor(), etc. + * + * Each hash maps const char * directory names onto + * const char * values of the externals property for that directory. + * The dir names are full paths -- that is, anchor plus target, not target + * alone. The values are not parsed, they are simply copied raw, and are + * never NULL: directories that acquired or lost the property are + * simply omitted from the appropriate table. Directories whose value + * of the property did not change show the same value in each hash. + * + * The hashes, keys, and values have the same lifetime as @a traversal_info. + + + +Return a new, empty traversal info object, allocated in @a pool. + + +Traversal information is information gathered by a working copy + * crawl or update. For example, the before and after values of the + * svn:externals property are important after an update, and since + * we're traversing the working tree anyway (a complete traversal + * during the initial crawl, and a traversal of changed paths during + * the checkout/update/switch), it makes sense to gather the + * property's values then instead of making a second pass. + + + + Use @a name for the administrative directory in the working copy. + Use @a pool for any temporary allocations. + + The list of valid names is limited. Currently only ".svn" (the + default) and "_svn" are allowed. + + @note This function changes global (per-process) state and must be + called in a single-threaded context during the initialization of a + Subversion client. + + @since New in 1.3. + + + + Return the name of the administrative directory. + Use @a pool for any temporary allocations. + + The returned pointer will refer to either a statically allocated + string, or to a string allocated in @a pool. + + @since New in 1.3. + + + + Return @c TRUE if @a name is the name of the WC administrative + directory. Use @a pool for any temporary allocations. Only works + with base directory names, not paths or URIs. + + For compatibility, the default name (.svn) will always be treated + as an admin dir name, even if the working copy is actually using an + alternative name. + + @since New in 1.3. + + + +Set @a *locked to non-zero if @a path is locked, else set it to zero. + + +Return @c TRUE is the access baton @a adm_access has a write lock, + * @c FALSE otherwise. Compared to svn_wc_locked() this is a cheap, fast + * function that doesn't access the filesystem. + + + +Return the pool used by access baton @a adm_access + + +Return the path used to open the access baton @a adm_access + + +Give up the access baton @a adm_access, and its lock if any. This will + * recursively close any batons in the same set that are direct + * subdirectories of @a adm_access. Any physical locks will be removed from + * the working copy. Lock removal is unconditional, there is no check to + * determine if cleanup is required. + * + * Any temporary allocations are performed using @a scratch_pool. + * + * @since New in 1.6 + + + + Similar to svn_wc_adm_probe_try2(), but with @a tree_lock instead of + @a levels_to_lock. @a levels_to_lock is set to -1 if @a tree_lock + is @c TRUE, else 0. + + @deprecated Provided for backward compatibility with the 1.0 API. + + + + Similar to svn_wc_adm_probe_try3() without the cancel + functionality. + + @deprecated Provided for backward compatibility with the 1.1 API. + + + + Try various ways to obtain an access baton for @a path. + + First, try to obtain @a *adm_access via svn_wc_adm_probe_retrieve(), + but if this fails because @a associated can't give a baton for + @a path or @a path's parent, then try svn_wc_adm_probe_open3(), + this time passing @a write_lock and @a levels_to_lock. If there is + still no access because @a path is not a versioned directory, then + just set @a *adm_access to NULL and return success. But if it is + because @a path is locked, then return the error @c SVN_ERR_WC_LOCKED, + and the effect on @a *adm_access is undefined. (Or if the attempt + fails for any other reason, return the corresponding error, and the + effect on @a *adm_access is also undefined.) + + If svn_wc_adm_probe_open3() succeeds, then add @a *adm_access to + @a associated. + + If @a cancel_func is non-NULL, call it with @a cancel_baton to determine + if the client has cancelled the operation. + + Use @a pool only for local processing, not to allocate @a *adm_access. + + @since New in 1.2. + + + +Check the working copy to determine the node type of @a path. If + * @a path is a versioned directory then the behaviour is like that of + * svn_wc_adm_retrieve(), otherwise, if @a path is a file, an unversioned + * directory, or does not exist, then the behaviour is like that of + * svn_wc_adm_retrieve() with @a path replaced by the parent directory of + * @a path. + + + +Return, in @a *adm_access, a pointer to an existing access baton associated + * with @a path. @a path must be a directory that is locked as part of the + * set containing the @a associated access baton. + * + * If the requested access baton is marked as missing in, or is simply + * absent from, @a associated, return SVN_ERR_WC_NOT_LOCKED. + * + * @a pool is used only for local processing, it is not used for the batons. + + + + Open access batons for @a path and return in @a *anchor_access and + @a *target the anchor and target required to drive an editor. Return + in @a *target_access the access baton for the target, which may be the + same as @a *anchor_access (in which case @a *target is the empty + string, never NULL). All the access batons will be in the + @a *anchor_access set. + + @a levels_to_lock determines the levels_to_lock used when opening + @a path if @a path is a versioned directory, @a levels_to_lock is + ignored otherwise. If @a write_lock is @c TRUE the access batons + will hold write locks. + + If @a cancel_func is non-NULL, call it with @a cancel_baton to determine + if the client has cancelled the operation. + + This function is essentially a combination of svn_wc_adm_open3() and + svn_wc_get_actual_target(), with the emphasis on reducing physical IO. + + @since New in 1.2. + + + + Similar to svn_wc_adm_probe_open2(), but with @a tree_lock instead of + @a levels_to_lock. @a levels_to_lock is set to -1 if @a tree_lock + is @c TRUE, else 0. + + @deprecated Provided for backward compatibility with the 1.0 API. + + + + Similar to svn_wc_adm_probe_open3() without the cancel + functionality. + + @deprecated Provided for backward compatibility with the 1.1 API. + + + + Checks the working copy to determine the node type of @a path. If + @a path is a versioned directory then the behaviour is like that of + svn_wc_adm_open3(), otherwise, if @a path is a file or does not + exist, then the behaviour is like that of svn_wc_adm_open3() with + @a path replaced by the parent directory of @a path. If @a path is + an unversioned directory, the behaviour is also like that of + svn_wc_adm_open3() on the parent, except that if the open fails, + then the returned SVN_ERR_WC_NOT_DIRECTORY error refers to @a path, + not to @a path's parent. + + @since New in 1.2. + + + + Similar to svn_wc_adm_open2(), but with @a tree_lock instead of + @a levels_to_lock. @a levels_to_lock is set to -1 if @a tree_lock + is @c TRUE, else 0. + + @deprecated Provided for backward compatibility with the 1.0 API. + + + + Similar to svn_wc_adm_open3(), but without cancellation support. + + @deprecated Provided for backward compatibility with the 1.1 API. + + + + Return, in @a *adm_access, a pointer to a new access baton for the working + copy administrative area associated with the directory @a path. If + @a write_lock is TRUE the baton will include a write lock, otherwise the + baton can only be used for read access. If @a path refers to a directory + that is already write locked then the error @c SVN_ERR_WC_LOCKED will be + returned. The error @c SVN_ERR_WC_NOT_DIRECTORY will be returned if + @a path is not a versioned directory. + + If @a associated is an open access baton then @a adm_access will be added + to the set containing @a associated. @a associated can be @c NULL, in + which case @a adm_access is the start of a new set. + + @a levels_to_lock specifies how far to lock. Zero means just the specified + directory. Any negative value means to lock the entire working copy + directory hierarchy under @a path. A positive value indicates the number of + levels of directories to lock -- 1 means just immediate subdirectories, 2 + means immediate subdirectories and their subdirectories, etc. All the + access batons will become part of the set containing @a adm_access. This + is an all-or-nothing option, if it is not possible to lock all the + requested directories then an error will be returned and @a adm_access will + be invalid, with the exception that subdirectories of @a path that are + missing from the physical filesystem will not be locked and will not cause + an error. The error @c SVN_ERR_WC_LOCKED will be returned if a + subdirectory of @a path is already write locked. + + If @a cancel_func is non-NULL, call it with @a cancel_baton to determine + if the client has cancelled the operation. + + @a pool will be used to allocate memory for the baton and any subsequently + cached items. If @a adm_access has not been closed when the pool is + cleared, it will be closed automatically at that point, and removed from + its set. A baton closed in this way will not remove physical locks from + the working copy if cleanup is required. + + The first baton in a set, with @a associated passed as @c NULL, must have + the longest lifetime of all the batons in the set. This implies it must be + the root of the hierarchy. + + @since New in 1.2. + + + +@defgroup svn_wc Working copy management +@{ + +Flags for use with svn_wc_translated_file2 + * + * @defgroup translate_flags Translation flags + * + * @{ + +Translate from Normal Form. + * + * The working copy text bases and repository files are stored + * in normal form. Some files' contents - or ever representation - + * differs between the working copy and the normal form. This flag + * specifies to take the latter form as input and transform it + * to the former. + * + * Either this flag or @c SVN_WC_TRANSLATE_TO_NF should be specified, + * but not both. + +Translate to Normal Form. + * + * Either this flag or @c SVN_WC_TRANSLATE_FROM_NF should be specified, + * but not both. + +Force repair of eol styles, making sure the output file consistently + * contains the one eol style as specified by the svn:eol-style + * property and the required translation direction. + * + +Don't register a pool cleanup to delete the output file +Guarantee a new file is created on successful return. + * The default shortcuts translation by returning the path + * of the untranslated file when no translation is required. + +Use a non-wc-local tmp directory for creating output files, + * instead of in the working copy admin tmp area which is the default. + * + * @since New in 1.4. + +@} +Baton for access to a working copy administrative area. + * + * One day all such access will require a baton, we're not there yet. + * + * Access batons can be grouped into sets, by passing an existing open + * baton when opening a new baton. Given one baton in a set, other batons + * may be retrieved. This allows an entire hierarchy to be locked, and + * then the set of batons can be passed around by passing a single baton. + + + + Get libsvn_wc version information. + + @since New in 1.1. + + + + Return an RA vtable-@a library which can handle URL. A number of + svn_client_* routines will call this internally, but client apps might + use it too. $a ra_baton is a baton obtained by a call to + svn_ra_init_ra_libs(). + + @deprecated Provided for backward compatibility with the 1.1 API. + + + + Initialize the compatibility wrapper, using @a pool for any allocations. + The caller must hold on to @a ra_baton as long as the RA library is used. + + @deprecated Provided for backward compatibility with the 1.1 API. + + + +Initialize libsvn_ra_serf. + * + * @since New in 1.4. + * @deprecated Provided for backward compatibility with the 1.1 API. + + +Initialize libsvn_ra_svn. + * + * @deprecated Provided for backward compatibility with the 1.1 API. + + +Initialize libsvn_ra_local. + * + * @deprecated Provided for backward compatibility with the 1.1 API. + + + The current ABI (Application Binary Interface) version for the + RA plugin model. This version number will change when the ABI + between the SVN core (e.g. libsvn_client) and the RA plugin changes. + + An RA plugin should verify that the passed version number is acceptable + before accessing the rest of the parameters, and before returning any + information. + + It is entirely acceptable for an RA plugin to accept multiple ABI + versions. It can simply interpret the parameters based on the version, + and it can return different plugin structures. + + +
+ VSN  DATE        REASON FOR CHANGE
+ ---  ----------  ------------------------------------------------
+   1  2001-02-17  Initial revision.
+   2  2004-06-29  Preparing for svn 1.1, which adds new RA vtable funcs.
+      2005-01-19  Rework the plugin interface and don't provide the vtable
+                  to the client.  Separate ABI versions are no longer used.
+ 
+ + @deprecated Provided for backward compatibility with the 1.0 API. + +Initialize libsvn_ra_neon. + * + * @deprecated Provided for backward compatibility with the 1.1 API. +
+ + All "ra_FOO" implementations *must* export a function named + svn_ra_FOO_init() of type @c svn_ra_init_func_t. + + When called by libsvn_client, this routine adds an entry (or + entries) to the hash table for any URL schemes it handles. The hash + value must be of type (@c svn_ra_plugin_t *). @a pool is a + pool for allocating configuration / one-time data. + + This type is defined to use the "C Calling Conventions" to ensure that + abi_version is the first parameter. The RA plugin must check that value + before accessing the other parameters. + + ### need to force this to be __cdecl on Windows... how?? + + @deprecated Provided for backward compatibility with the 1.1 API. + + + + Return the plugin's version information. + + @since New in 1.1. + + + + Call svn_ra_get_file_revs() with the session associated with + @a session_baton and all other arguments. + + @since New in 1.1. + + + + Call svn_ra_get_locations() with the session associated with + @a session_baton and all other arguments. + + @since New in 1.1. + + + +Call svn_ra_get_repos_root() with the session associated with + * @a session_baton and all other arguments. + + + +Call svn_ra_get_uuid() with the session associated with + * @a session_baton and all other arguments. + + + +Call svn_ra_check_path() with the session associated with + * @a session_baton and all other arguments. + + + +Call svn_ra_get_log() with the session associated with + * @a session_baton and all other arguments. @a limit is set to 0. + + + +Call svn_ra_do_diff() with the session associated with + * @a session_baton and all other arguments. + + + +Call svn_ra_do_status() with the session associated with + * @a session_baton and all other arguments. + + + +Call svn_ra_do_switch() with the session associated with + * @a session_baton and all other arguments. + + + +Call svn_ra_do_update() with the session associated with + * @a session_baton and all other arguments. + + + +Call svn_ra_get_dir() with the session associated with + * @a session_baton and all other arguments. + + + +Call svn_ra_get_file() with the session associated with + * @a session_baton and all other arguments. + + + +Call svn_ra_get_commit_editor() with the session associated with + * @a session_baton and all other arguments plus @a lock_tokens set to + * @c NULL and @a keep_locks set to @c TRUE. + + + +Call svn_ra_rev_prop() with the session associated with + * @a session_baton and all other arguments. + + + +Call svn_ra_rev_proplist() with the session associated with + * @a session_baton and all other arguments. + + + +Call svn_ra_change_rev_prop() with the session associated with + * @a session_baton and all other arguments. + + + +Call svn_ra_get_dated_revision() with the session associated with + * @a session_baton and all other arguments. + + + +Call svn_ra_get_latest_revnum() with the session associated with + * @a session_baton and all other arguments. + + + +Call svn_ra_open() and set @a session_baton to an object representing + * the new session. All other arguments are passed to svn_ra_open(). + + + +Short doc string printed out by `svn --version` + + +The proper name of the RA library, (like "ra_neon" or "ra_local") + + + Using this callback struct is similar to calling the newer public + interface that is based on @c svn_ra_session_t. + + @deprecated Provided for backward compatibility with the 1.1 API. + + + + Similar to svn_ra_print_modules(). + @a ra_baton is ignored. + + @deprecated Provided for backward compatibility with the 1.1 API. + + + + The capability of understanding @c svn_depth_t (e.g., the server + understands what the client means when the client describes the + depth of a working copy to the server.) + + @since New in 1.5. + + The capability of doing the right thing with merge-tracking + information. This capability should be reported bidirectionally, + because some repositories may want to reject clients that do not + self-report as knowing how to handle merge-tracking. + + @since New in 1.5. + + The capability of retrieving arbitrary revprops in svn_ra_get_log2. + + @since New in 1.5. + + The capability of replaying a directory in the repository (partial replay). + + @since New in 1.5. + + The capability of including revision properties in a commit. + + @since New in 1.5. + + Append a textual list of all available RA modules to the stringbuf + @a output. + + @since New in 1.2. + + + + Given @a path at revision @a peg_revision, set @a *revision_deleted to the + revision @a path was first deleted, within the inclusive revision range + defined by @a peg_revision and @a end_revision. @a path is relative + to the URL in @a session. + + If @a path does not exist at @a peg_revision or was not deleted within + the specified range, then set @a *revision_deleted to @c SVN_INVALID_REVNUM. + If @a peg_revision or @a end_revision are invalid or if @a peg_revision is + greater than @a end_revision, then return @c SVN_ERR_CLIENT_BAD_REVISION. + + Use @a pool for all allocations. + + @since New in 1.6. + + + + Set @a *has to TRUE if the server represented by @a session has + @a capability (one of the capabilities beginning with + @c "SVN_RA_CAPABILITY_"), else set @a *has to FALSE. + + If @a capability isn't recognized, throw @c SVN_ERR_UNKNOWN_CAPABILITY, + with the effect on @a *has undefined. + + Use @a pool for all allocation. + + @since New in 1.5. + + + + Replay the changes from @a revision through @a editor and @a edit_baton. + + Changes will be limited to those that occur under @a session's URL, and + the server will assume that the client has no knowledge of revisions + prior to @a low_water_mark. These two limiting factors define the portion + of the tree that the server will assume the client already has knowledge of, + and thus any copies of data from outside that part of the tree will be + sent in their entirety, not as simple copies or deltas against a previous + version. + + If @a send_deltas is @c TRUE, the actual text and property changes in + the revision will be sent, otherwise dummy text deltas and null property + changes will be sent instead. + + @a pool is used for all allocation. + + @since New in 1.4. + + + + Replay the changes from a range of revisions between @a start_revision + and @a end_revision. + + When receiving information for one revision, a callback @a revstart_func is + called; this callback will provide an editor and baton through which the + revision will be replayed. + When replaying the revision is finished, callback @a revfinish_func will be + called so the editor can be closed. + + Changes will be limited to those that occur under @a session's URL, and + the server will assume that the client has no knowledge of revisions + prior to @a low_water_mark. These two limiting factors define the portion + of the tree that the server will assume the client already has knowledge of, + and thus any copies of data from outside that part of the tree will be + sent in their entirety, not as simple copies or deltas against a previous + version. + + If @a send_deltas is @c TRUE, the actual text and property changes in + the revision will be sent, otherwise dummy text deltas and NULL property + changes will be sent instead. + + @a pool is used for all allocation. + + @since New in 1.5. + + + + Set @a *locks to a hashtable which represents all locks on or + below @a path. + + The hashtable maps (const char *) absolute fs paths to (const + svn_lock_t *) structures. The hashtable -- and all keys and + values -- are allocated in @a pool. + + @note It is not considered an error for @a path to not exist in HEAD. + Such a search will simply return no locks. + + @note This functionality is not available in pre-1.2 servers. If the + server doesn't implement it, an @c SVN_ERR_RA_NOT_IMPLEMENTED error is + returned. + + @since New in 1.2. + + + + If @a path is locked, set @a *lock to an svn_lock_t which + represents the lock, allocated in @a pool. If @a path is not + locked, set @a *lock to NULL. + + @since New in 1.2. + + + + Remove the repository lock for each path in @a path_tokens. + @a path_tokens is a hash whose keys are the paths to be locked, and + whose values are the corresponding lock tokens for each path. If + the path has no corresponding lock token, or if @a break_lock is TRUE, + then the corresponding value shall be "". + + Note that unlocking is never anonymous, so any server + implementing this function will have to "pull" a username from + the client, if it hasn't done so already. + + If @a token points to a lock, but the RA username doesn't match the + lock's owner, call @a lock_func/@a lock_baton with an error. If @a + break_lock is TRUE, however, instead allow the lock to be "broken" + by the RA user. + + After successfully unlocking a path, @a lock_func is called with + the @a lock_baton. + + Use @a pool for temporary allocations. + + @since New in 1.2. + + + + Lock each path in @a path_revs, which is a hash whose keys are the + paths to be locked, and whose values are the corresponding base + revisions for each path. + + Note that locking is never anonymous, so any server implementing + this function will have to "pull" a username from the client, if + it hasn't done so already. + + @a comment is optional: it's either an xml-escapable string + which describes the lock, or it is NULL. + + If any path is already locked by a different user, then call @a + lock_func/@a lock_baton with an error. If @a steal_lock is TRUE, + then "steal" the existing lock(s) anyway, even if the RA username + does not match the current lock's owner. Delete any lock on the + path, and unconditionally create a new lock. + + For each path, if its base revision (in @a path_revs) is a valid + revnum, then do an out-of-dateness check. If the revnum is less + than the last-changed-revision of any path (or if a path doesn't + exist in HEAD), call @a lock_func/@a lock_baton with an + SVN_ERR_RA_OUT_OF_DATE error. + + After successfully locking a file, @a lock_func is called with the + @a lock_baton. + + Use @a pool for temporary allocations. + + @since New in 1.2. + + + + Similiar to svn_ra_get_file_revs2(), but with @a include_merged_revisions + set to FALSE. + + @since New in 1.2. + @deprecated Provided for backward compatibility with the 1.4 API. + + + + Retrieve a subset of the interesting revisions of a file @a path + as seen in revision @a end (see svn_fs_history_prev() for a + definition of "interesting revisions"). Invoke @a handler with + @a handler_baton as its first argument for each such revision. + @a session is an open RA session. Use @a pool for all allocations. + + If there is an interesting revision of the file that is less than or + equal to @a start, the iteration will begin at that revision. + Else, the iteration will begin at the first revision of the file in + the repository, which has to be less than or equal to @a end. Note + that if the function succeeds, @a handler will have been called at + least once. + + In a series of calls to @a handler, the file contents for the first + interesting revision will be provided as a text delta against the + empty file. In the following calls, the delta will be against the + fulltext contents for the previous call. + + If @a include_merged_revisions is TRUE, revisions which a included as a + result of a merge between @a start and @a end will be included. + + @note This functionality is not available in pre-1.1 servers. If the + server doesn't implement it, an alternative (but much slower) + implementation based on svn_ra_get_log2() is used. + + @since New in 1.5. + + + + Call @a receiver (with @a receiver_baton) for each segment in the + location history of @a path in @a peg_revision, working backwards in + time from @a start_rev to @a end_rev. + + @a end_rev may be @c SVN_INVALID_REVNUM to indicate that you want + to trace the history of the object to its origin. + + @a start_rev may be @c SVN_INVALID_REVNUM to indicate "the HEAD + revision". Otherwise, @a start_rev must be younger than @a end_rev + (unless @a end_rev is @c SVN_INVALID_REVNUM). + + @a peg_revision may be @c SVN_INVALID_REVNUM to indicate "the HEAD + revision", and must evaluate to be at least as young as @a start_rev. + + Use @a pool for all allocations. + + @since New in 1.5. + + + + Set @a *locations to the locations (at the repository revisions + @a location_revisions) of the file identified by @a path in + @a peg_revision. @a path is relative to the URL to which + @a session was opened. @a location_revisions is an array of + @c svn_revnum_t's. @a *locations will be a mapping from the revisions to + their appropriate absolute paths. If the file doesn't exist in a + location_revision, that revision will be ignored. + + Use @a pool for all allocations. + + @since New in 1.2. + + + + Similar to svn_ra_get_repos_root2(), but returns the value + allocated in @a session's pool. + + @deprecated Provided for backward compatibility with the 1.4 API. + @since New in 1.2. + + + + Set @a *url to the repository's root URL, allocated in @a pool. + The value will not include a trailing '/'. The returned URL is + guaranteed to be a prefix of the @a session's URL. + + @since New in 1.5. + + + + Similar to svn_ra_get_uuid2(), but returns the value allocated in + @a session's pool. + + @deprecated Provided for backward compatibility with the 1.4 API. + @since New in 1.2. + + + + Set @a *uuid to the repository's UUID, allocated in @a pool. + + @since New in 1.5. + + + + Set @a *dirent to an @c svn_dirent_t associated with @a path at @a + revision. @a path is relative to the @a session's parent's URL. + If @a path does not exist in @a revision, set @a *dirent to NULL. + + Use @a pool for memory allocation. + + @since New in 1.2. + + + + Set @a *kind to the node kind associated with @a path at @a revision. + If @a path does not exist under @a revision, set @a *kind to + @c svn_node_none. @a path is relative to the @a session's parent URL. + + Use @a pool for memory allocation. + + @since New in 1.2. + + + + Similar to svn_ra_get_log2(), but uses @c svn_log_message_receiver_t + instead of @c svn_log_entry_receiver_t. Also, @a + include_merged_revisions is set to @c FALSE and @a revprops is + svn:author, svn:date, and svn:log. + + @since New in 1.2. + @deprecated Provided for backward compatibility with the 1.4 API. + + + + Invoke @a receiver with @a receiver_baton on each log message from + @a start to @a end. @a start may be greater or less than @a end; + this just controls whether the log messages are processed in descending + or ascending revision number order. + + If @a start or @a end is @c SVN_INVALID_REVNUM, it defaults to youngest. + + If @a paths is non-NULL and has one or more elements, then only show + revisions in which at least one of @a paths was changed (i.e., if + file, text or props changed; if dir, props changed or an entry + was added or deleted). Each path is an const char *, relative + to the @a session's common parent. + + If @a limit is non-zero only invoke @a receiver on the first @a limit + logs. + + If @a discover_changed_paths, then each call to receiver passes a + const apr_hash_t * for the receiver's @a changed_paths argument; + the hash's keys are all the paths committed in that revision. + Otherwise, each call to receiver passes NULL for @a changed_paths. + + If @a strict_node_history is set, copy history will not be traversed + (if any exists) when harvesting the revision logs for each path. + + If @a include_merged_revisions is set, log information for revisions + which have been merged to @a targets will also be returned. + + If @a revprops is NULL, retrieve all revprops; else, retrieve only the + revprops named in the array (i.e. retrieve none if the array is empty). + + If any invocation of @a receiver returns error, return that error + immediately and without wrapping it. + + If @a start or @a end is a non-existent revision, return the error + @c SVN_ERR_FS_NO_SUCH_REVISION, without ever invoking @a receiver. + + See also the documentation for @c svn_log_message_receiver_t. + + The caller may not invoke any RA operations using @a session from + within @a receiver. + + Use @a pool for memory allocation. + + @note If @a paths is NULL or empty, the result depends on the + server. Pre-1.5 servers will send nothing; 1.5 servers will + effectively perform the log operation on the root of the + repository. This behavior may be changed in the future to ensure + consistency across all pedigrees of server. + + @note Pre-1.5 servers do not support custom revprop retrieval; if @a + revprops is NULL or contains a revprop other than svn:author, svn:date, + or svn:log, an @c SVN_ERR_RA_NOT_IMPLEMENTED error is returned. + + @since New in 1.5. + + + + Similar to svn_ra_do_diff2(), but with @a text_deltas set to @c TRUE. + + @deprecated Provided for backward compatibility with the 1.3 API. + + + + Similar to svn_ra_do_diff3(), but taking @c svn_ra_reporter2_t + instead of @c svn_ra_reporter3_t, and therefore only able to report + @c svn_depth_infinity for depths. Perform the diff according to + @a recurse: if TRUE, then @a depth is @c svn_depth_infinity, else + it is @c svn_depth_files. + + @deprecated Provided for compatibility with the 1.4 API. + + + + Ask the RA layer to 'diff' a working copy against @a versus_url; + it's another form of svn_ra_do_update2(). + + @note This function cannot be used to diff a single file, only a + working copy directory. See the svn_ra_do_switch2() function + for more details. + + The client initially provides a @a diff_editor/@a diff_baton to the RA + layer; this editor contains knowledge of where the common diff + root is in the working copy (when open_root() is called). + + In return, the client receives a @a reporter/@a report_baton. The + client then describes its working copy by making calls into the + @a reporter. + + When finished, the client calls @a reporter->finish_report(). The + RA layer then does a complete drive of @a diff_editor, ending with + close_edit(), to transmit the diff. + + @a diff_target is an optional single path component will restrict + the scope of the diff to an entry in the directory represented by + the @a session's URL, or empty if the entire directory is meant to be + one of the diff paths. + + The working copy will be diffed against @a versus_url as it exists + in revision @a revision, or as it is in head if @a revision is + @c SVN_INVALID_REVNUM. + + Use @a ignore_ancestry to control whether or not items being + diffed will be checked for relatedness first. Unrelated items + are typically transmitted to the editor as a deletion of one thing + and the addition of another, but if this flag is @c TRUE, + unrelated items will be diffed as if they were related. + + Diff only as deeply as @a depth indicates. + + The caller may not perform any RA operations using @a session before + finishing the report, and may not perform any RA operations using + @a session from within the editing operations of @a diff_editor. + + @a text_deltas instructs the driver of the @a diff_editor to enable + the generation of text deltas. If @a text_deltas is FALSE the window + handler returned by apply_textdelta will be called once with a NULL + @c svn_txdelta_window_t pointer. + + Use @a pool for memory allocation. + + @note The reporter provided by this function does NOT supply copy- + from information to the diff editor callbacks. + + @note In order to prevent pre-1.5 servers from doing more work than + needed, and sending too much data back, a pre-1.5 'recurse' + directive may be sent to the server, based on @a depth. + + @since New in 1.5. + + + + Similar to svn_ra_do_status2(), but taking @c svn_ra_reporter2_t + instead of @c svn_ra_reporter3_t, and therefore only able to report + @c svn_depth_infinity for depths. The status operation itself is + performed according to @a recurse: if TRUE, then @a depth is + @c svn_depth_infinity, else it is @c svn_depth_immediates. + + @deprecated Provided for compatibility with the 1.4 API. + + + + Ask the RA layer to describe the status of a working copy with respect + to @a revision of the repository (or HEAD, if @a revision is invalid). + + The client initially provides a @a status_editor/@a status_baton to the RA + layer; this editor contains knowledge of where the change will + begin in the working copy (when open_root() is called). + + In return, the client receives a @a reporter/@a report_baton. The + client then describes its working copy by making calls into the + @a reporter. + + When finished, the client calls @a reporter->finish_report(). The RA + layer then does a complete drive of @a status_editor, ending with + close_edit(), to report, essentially, what would be modified in + the working copy were the client to call do_update(). + @a status_target is an optional single path component will restrict + the scope of the status report to an entry in the directory + represented by the @a session's URL, or empty if the entire directory + is meant to be examined. + + Get status only as deeply as @a depth indicates. + + The caller may not perform any RA operations using @a session + before finishing the report, and may not perform any RA operations + using @a session from within the editing operations of @a status_editor. + + Use @a pool for memory allocation. + + @note The reporter provided by this function does NOT supply copy- + from information to the diff editor callbacks. + + @note In order to prevent pre-1.5 servers from doing more work than + needed, and sending too much data back, a pre-1.5 'recurse' + directive may be sent to the server, based on @a depth. + + @since New in 1.5. + + + + Similar to svn_ra_do_switch2(), but taking @c svn_ra_reporter2_t + instead of @c svn_ra_reporter3_t, and therefore only able to report + @c svn_depth_infinity for depths. The switch itself is performed + according to @a recurse: if TRUE, then use @c svn_depth_infinity + for @a depth, else use @c svn_depth_files. + + @deprecated Provided for compatibility with the 1.4 API. + + + + Ask the RA layer to 'switch' a working copy to a new + @a switch_url; it's another form of svn_ra_do_update(). + + The client initially provides a @a switch_editor/@a switch_baton to the RA + layer; this editor contains knowledge of where the change will + begin in the working copy (when open_root() is called). + + In return, the client receives a @a reporter/@a report_baton. The + client then describes its working copy by making calls into the + @a reporter. + + When finished, the client calls @a reporter->finish_report(). The + RA layer then does a complete drive of @a switch_editor, ending with + close_edit(), to switch the working copy. + + @a switch_target is an optional single path component will restrict + the scope of things affected by the switch to an entry in the + directory represented by the @a session's URL, or empty if the + entire directory is meant to be switched. + + Switch the target only as deeply as @a depth indicates. + + The working copy will be switched to @a revision_to_switch_to, or the + "latest" revision if this arg is invalid. + + The caller may not perform any RA operations using + @a session before finishing the report, and may not perform + any RA operations using @a session from within the editing + operations of @a switch_editor. + + Use @a pool for memory allocation. + + @note The reporter provided by this function does NOT supply copy- + from information to the diff editor callbacks. + + @note In order to prevent pre-1.5 servers from doing more work than + needed, and sending too much data back, a pre-1.5 'recurse' + directive may be sent to the server, based on @a depth. + + @since New in 1.5. + + + + Similar to svn_ra_do_update2(), but taking @c svn_ra_reporter2_t + instead of @c svn_ra_reporter3_t; if @a recurse is true, pass @c + svn_depth_infinity for @a depth, else pass @c svn_depth_files; and + with @a send_copyfrom_args always false. + + @deprecated Provided for compatibility with the 1.4 API. + + + + Ask the RA layer to update a working copy. + + The client initially provides an @a update_editor/@a update_baton to the + RA layer; this editor contains knowledge of where the change will + begin in the working copy (when @c open_root() is called). + + In return, the client receives a @a reporter/@a report_baton. The + client then describes its working copy by making calls into the + @a reporter. + + When finished, the client calls @a reporter->finish_report(). The + RA layer then does a complete drive of @a update_editor, ending with + @a update_editor->close_edit(), to update the working copy. + + @a update_target is an optional single path component to restrict + the scope of the update to just that entry (in the directory + represented by the @a session's URL). If @a update_target is the + empty string, the entire directory is updated. + + Update the target only as deeply as @a depth indicates. + + If @a send_copyfrom_args is TRUE, then ask the server to send + copyfrom arguments to add_file() and add_directory() when possible. + (Note: this means that any subsequent txdeltas coming from the + server are presumed to apply against the copied file!) + + The working copy will be updated to @a revision_to_update_to, or the + "latest" revision if this arg is invalid. + + The caller may not perform any RA operations using @a session before + finishing the report, and may not perform any RA operations using + @a session from within the editing operations of @a update_editor. + + Use @a pool for memory allocation. + + @note The reporter provided by this function does NOT supply copy- + from information to the diff editor callbacks. + + @note In order to prevent pre-1.5 servers from doing more work than + needed, and sending too much data back, a pre-1.5 'recurse' + directive may be sent to the server, based on @a depth. + + @since New in 1.5. + + + + Set @a *catalog to a mergeinfo catalog for the paths in @a paths. + If no mergeinfo is available, set @a *catalog to @c NULL. The + requested mergeinfo hashes are for @a paths (which are relative to + @a session's URL) in @a revision. If one of the paths does not exist + in that revision, return SVN_ERR_FS_NOT_FOUND. + + @a inherit indicates whether explicit, explicit or inherited, or + only inherited mergeinfo for @a paths is retrieved. + + If @a include_descendants is TRUE, then additionally return the + mergeinfo for any descendant of any element of @a paths which has + the @c SVN_PROP_MERGEINFO property explicitly set on it. (Note + that inheritance is only taken into account for the elements in @a + paths; descendants of the elements in @a paths which get their + mergeinfo via inheritance are not included in @a *catalog.) + + Allocate the returned values in @a pool. + + If @a revision is @c SVN_INVALID_REVNUM, it defaults to youngest. + + If the server doesn't support retrieval of mergeinfo (which can + happen even for file:// URLs, if the repository itself hasn't been + upgraded), return @c SVN_ERR_UNSUPPORTED_FEATURE in preference to + any other error that might otherwise be returned. + + @since New in 1.5. + + + + Similar to @c svn_ra_get_dir2, but with @c SVN_DIRENT_ALL for the + @a dirent_fields parameter. + + @since New in 1.2. + + @deprecated Provided for compatibility with the 1.3 API. + + + + If @a dirents is non @c NULL, set @a *dirents to contain all the entries + of directory @a path at @a revision. The keys of @a dirents will be + entry names (const char *), and the values dirents + (@c svn_dirent_t *). Use @a pool for all allocations. + + @a dirent_fields controls which portions of the @c svn_dirent_t + objects are filled in. To have them completely filled in just pass + @c SVN_DIRENT_ALL, otherwise pass the bitwise OR of all the @c SVN_DIRENT_ + fields you would like to have returned to you. + + @a path is interpreted relative to the URL in @a session. + + If @a revision is @c SVN_INVALID_REVNUM (meaning 'head') and + @a *fetched_rev is not @c NULL, then this function will set + @a *fetched_rev to the actual revision that was retrieved. (Some + callers want to know, and some don't.) + + If @a props is non @c NULL, set @a *props to contain the properties of + the directory. This means @em all properties: not just ones controlled by + the user and stored in the repository fs, but non-tweakable ones + generated by the SCM system itself (e.g. 'wcprops', 'entryprops', + etc.) The keys are const char *, values are + @c svn_string_t *. + + @since New in 1.4. + + + + Fetch the contents and properties of file @a path at @a revision. + @a revision may be SVN_INVALID_REVNUM, indicating that the HEAD + revision should be used. Interpret @a path relative to the URL in + @a session. Use @a pool for all allocations. + + If @a revision is @c SVN_INVALID_REVNUM and @a fetched_rev is not + @c NULL, then set @a *fetched_rev to the actual revision that was + retrieved. + + If @a stream is non @c NULL, push the contents of the file at @a + stream, do not call svn_stream_close() when finished. + + If @a props is non @c NULL, set @a *props to contain the properties of + the file. This means @em all properties: not just ones controlled by + the user and stored in the repository fs, but non-tweakable ones + generated by the SCM system itself (e.g. 'wcprops', 'entryprops', + etc.) The keys are const char *, values are + @c svn_string_t *. + + The stream handlers for @a stream may not perform any RA + operations using @a session. + + @since New in 1.2. + + + + Same as svn_ra_get_commit_editor2(), but uses @c svn_commit_callback_t. + + @since New in 1.2. + + @deprecated Provided for backward compatibility with the 1.3 API. + + + + Same as svn_ra_get_commit_editor3(), but with @c revprop_table set + to a hash containing the @c SVN_PROP_REVISION_LOG property set + to the value of @a log_msg. + + @since New in 1.4. + + @deprecated Provided for backward compatibility with the 1.4 API. + + + + Set @a *editor and @a *edit_baton to an editor for committing + changes to the repository of @a session, setting the revision + properties from @a revprop_table. The revisions being committed + against are passed to the editor functions, starting with the rev + argument to @c open_root. The path root of the commit is the @a + session's URL. + + @a revprop_table is a hash mapping const char * property + names to @c svn_string_t property values. The commit log message + is expected to be in the @c SVN_PROP_REVISION_LOG element. @a + revprop_table can not contain either of @c SVN_PROP_REVISION_DATE + or @c SVN_PROP_REVISION_AUTHOR. + + Before @c close_edit returns, but after the commit has succeeded, + it will invoke @a callback with the new revision number, the + commit date (as a const char *), commit author (as a + const char *), and @a callback_baton as arguments. If + @a callback returns an error, that error will be returned from @c + close_edit, otherwise @c close_edit will return successfully + (unless it encountered an error before invoking @a callback). + + The callback will not be called if the commit was a no-op + (i.e. nothing was committed); + + @a lock_tokens, if non-NULL, is a hash mapping const char + * paths (relative to the URL of @a session) to + const char * lock tokens. The server checks that the + correct token is provided for each committed, locked path. @a lock_tokens + must live during the whole commit operation. + + If @a keep_locks is @c TRUE, then do not release locks on + committed objects. Else, automatically release such locks. + + The caller may not perform any RA operations using @a session before + finishing the edit. + + Use @a pool for memory allocation. + + @since New in 1.5. + + + + Set @a *value to the value of unversioned property @a name attached to + revision @a rev in the repository of @a session. If @a rev has no + property by that name, set @a *value to @c NULL. + + Use @a pool for memory allocation. + + @since New in 1.2. + + + + Set @a *props to the list of unversioned properties attached to revision + @a rev in the repository of @a session. The hash maps + (const char *) names to (@c svn_string_t *) values. + + Use @a pool for memory allocation. + + @since New in 1.2. + + + + Set the property @a name to @a value on revision @a rev in the repository + of @a session. + + If @a value is @c NULL, delete the named revision property. + + Please note that properties attached to revisions are @em unversioned. + + Use @a pool for memory allocation. + + @since New in 1.2. + + + + Get the latest revision number at time @a tm in the repository of + @a session. + + Use @a pool for memory allocation. + + @since New in 1.2. + + + + Get the latest revision number from the repository of @a session. + + Use @a pool for memory allocation. + + @since New in 1.2. + + + +Set @a *url to the repository URL to which @a ra_session was + * opened or most recently reparented. + + + +Change the root URL of an open @a ra_session to point to a new path in the + * same repository. @a url is the new root URL. Use @a pool for + * temporary allocations. + * + * If @a url has a different repository root than the current session + * URL, return @c SVN_ERR_RA_ILLEGAL_URL. + * + * @since New in 1.4. + + + +@see svn_ra_open2(). +@since New in 1.2. +@deprecated Provided for backward compatibility with the 1.2 API. + + + + Similiar to svn_ra_open3(), but with @a uuid set to @c NULL. + + @since New in 1.3. + @deprecated Provided for backward compatibility with the 1.4 API. + + + + Open a repository session to @a repos_URL. Return an opaque object + representing this session in @a *session_p, allocated in @a pool. + + Return @c SVN_ERR_RA_UUID_MISMATCH if @a uuid is non-NULL and not equal + to the UUID of the repository at @c repos_URL. + + @a callbacks/@a callback_baton is a table of callbacks provided by the + client; see @c svn_ra_callbacks2_t. + + @a config is a hash mapping const char * keys to + @c svn_config_t * values. For example, the @c svn_config_t for the + "~/.subversion/config" file is under the key "config". + + All RA requests require a session; they will continue to + use @a pool for memory allocation. + + @see svn_client_open_ra_session(). + + @since New in 1.5. + + + + A repository access session. This object is used to perform requests + to a repository, identified by an URL. + + @since New in 1.2. + + + +Initialize a callback structure. +* Set @a *callbacks to a ra callbacks object, allocated in @a pool. +* +* Clients must use this function to allocate and initialize @c +* svn_ra_callbacks2_t structures. +* +* @since New in 1.3. + + + + Initialize the RA library. This function must be called before using + any function in this header, except the deprecated APIs based on + @c svn_ra_plugin_t, or svn_ra_version(). This function must not be called + simultaneously in multiple threads. @a pool must live + longer than any open RA sessions. + + @since New in 1.2. + + + +Similar to svn_ra_callbacks2_t, except that the progress + * notification function and baton is missing. + * + * @deprecated Provided for backward compatibility with the 1.2 API. + + + +Client string customization callback function + * @since New in 1.5 + + + +Cancelation function + * + * As its baton, the general callback baton is used + * + * @since New in 1.5 + + + +Notification callback baton, used with progress_func. + + +Notification callback used for progress information. + * May be NULL if not used. + + + +Invalidate working copy properties. + + +Schedule new values for working copy properties. + + +Immediately set new values for working copy properties. + + +Fetch working copy properties. + * + *
 ### we might have a problem if the RA layer ever wants a property
+   * ### that corresponds to a different revision of the file than
+   * ### what is in the WC. we'll cross that bridge one day...
+ +An authentication baton, created by the application, which is + * capable of retrieving all known types of credentials. + + + +Open a unique temporary file for writing in the working copy. + * This file will be automatically deleted when @a fp is closed. + * + * @deprecated This callback should no longer be used by RA layers. + + + +A collection of callbacks implemented by libsvn_client which allows + * an RA layer to "pull" information from the client application, or + * possibly store information. libsvn_client passes this vtable to + * svn_ra_open3(). + * + * Each routine takes a @a callback_baton originally provided with the + * vtable. + * + * Clients must use svn_ra_create_callbacks() to allocate and + * initialize this structure. + * + * @since New in 1.3. + + + +Same as the corresponding field in @c svn_ra_reporter2_t. + + +Same as the corresponding field in @c svn_ra_reporter2_t. + + +Similar to the corresponding field in @c svn_ra_reporter2_t, but + * with @a lock_token always set to NULL. + + +Same as the corresponding field in @c svn_ra_reporter2_t. + + +Similar to the corresponding field in @c svn_ra_reporter2_t, but + * with @a lock_token always set to NULL. + + + Similar to @c svn_ra_reporter2_t, but without support for lock tokens. + + @deprecated Provided for backward compatibility with the 1.1 API. + + + +Same as the corresponding field in @c svn_ra_reporter3_t. + + +Same as the corresponding field in @c svn_ra_reporter3_t. + + +Similar to the corresponding field in @c svn_ra_reporter3_t, but + * with @a depth always set to @c svn_depth_infinity. + + +Same as the corresponding field in @c svn_ra_reporter3_t. + + +Similar to the corresponding field in @c svn_ra_reporter3_t, but + * with @a depth always set to @c svn_depth_infinity. + + + Similar to @c svn_ra_reporter3_t, but without support for depths. + + @deprecated Provided for backward compatibility with the 1.4 API. + + + +WC calls this when the state report is finished; any directories + * or files not explicitly `set' are assumed to be at the + * baseline revision originally passed into do_update(). No other + * reporting functions, including abort_report, should be called after + * calling this function. + + + +Like set_path(), but differs in that @a path in the working copy + * (relative to the root of the report driver) isn't a reflection of + * @a path in the repository (relative to the URL specified when + * opening the RA layer), but is instead a reflection of a different + * repository @a url at @a revision, and has depth @a depth. + * + * @a path may not be underneath a path on which set_path() was + * previously called with @c svn_depth_exclude in this report. + * + * If @a start_empty is set and @a path is a directory, + * the implementor should assume the directory has no entries or props. + * + * If @a lock_token is non-NULL, it is the lock token for @a path in the WC. + * + * All temporary allocations are done in @a pool. + + + +Describing a working copy @a path as missing. + * + * @a path may not be underneath a path on which set_path() was + * previously called with @c svn_depth_exclude in this report. + * + * All temporary allocations are done in @a pool. + + + +Describe a working copy @a path as being at a particular + * @a revision and having depth @a depth. + * + * @a revision may be SVN_INVALID_REVNUM if (for example) @a path + * represents a locally-added path with no revision number, or @a + * depth is @c svn_depth_exclude. + * + * @a path may not be underneath a path on which set_path() was + * previously called with @c svn_depth_exclude in this report. + * + * If @a start_empty is set and @a path is a directory, the + * implementor should assume the directory has no entries or props. + * + * This will *override* any previous set_path() calls made on parent + * paths. @a path is relative to the URL specified in svn_ra_open3(). + * + * If @a lock_token is non-NULL, it is the lock token for @a path in the WC. + * + * All temporary allocations are done in @a pool. + + + + The update Reporter. + + A vtable structure which allows a working copy to describe a subset + (or possibly all) of its working-copy to an RA layer, for the + purposes of an update, switch, status, or diff operation. + + Paths for report calls are relative to the target (not the anchor) + of the operation. Report calls must be made in depth-first order: + parents before children, all children of a parent before any + siblings of the parent. The first report call must be a set_path + with a @a path argument of "" and a valid revision. (If the target + of the operation is locally deleted or missing, use the anchor's + revision.) If the target of the operation is deleted or switched + relative to the anchor, follow up the initial set_path call with a + link_path or delete_path call with a @a path argument of "" to + indicate that. In no other case may there be two report + descriptions for the same path. If the target of the operation is + a locally added file or directory (which previously did not exist), + it may be reported as having revision 0 or as having the parent + directory's revision. + + @since New in 1.5. + + + + Callback function type for replay_range actions. + + This callback function should close the editor. + + @a revision is the target revision number of the received replay report. + + @a editor and @a edit_baton should provided by the callback implementation. + + @a replay_baton is the baton as originally passed to replay_range. + + @a revprops contains key/value pairs for each revision properties for this + revision. + + @since New in 1.5. + + + + Callback function type for replay_range actions. + + This callback function should provide replay_range with an editor which + will be driven with the received replay reports from the master repository. + + @a revision is the target revision number of the received replay report. + + @a editor and @a edit_baton should provided by the callback implementation. + + @a replay_baton is the baton as originally passed to replay_range. + + @a revprops contains key/value pairs for each revision properties for this + revision. + + @since New in 1.5. + + + + Callback function type for progress notification. + + @a progress is the number of bytes already transferred, @a total is + the total number of bytes to transfer or -1 if it's not known, @a + baton is the callback baton. + + @since New in 1.3. + + + + Callback function type for locking and unlocking actions. + + @since New in 1.2. + + @a do_lock is TRUE when locking @a path, and FALSE + otherwise. + + @a lock is a lock for @a path or NULL if @a do_lock is FALSE or @a ra_err is + non-NULL. + + @a ra_err is NULL unless the ra layer encounters a locking related + error which it passes back for notification purposes. The caller + is responsible for clearing @a ra_err after the callback is run. + + @a baton is a closure object; it should be provided by the + implementation, and passed by the caller. @a pool may be used for + temporary allocation. + + + + A callback function type for use in @c get_file_revs. + @a baton is provided by the caller, @a path is the pathname of the file + in revision @a rev and @a rev_props are the revision properties. + If @a delta_handler and @a delta_baton are non-NULL, they may be set to a + handler/baton which will be called with the delta between the previous + revision and this one after the return of this callback. They may be + left as NULL/NULL. + @a prop_diffs is an array of svn_prop_t elements indicating the property + delta for this and the previous revision. + @a pool may be used for temporary allocations, but you can't rely + on objects allocated to live outside of this particular call and the + immediately following calls to @a *delta_handler, if any. + + @since New in 1.1. + + + +A function type which allows the RA layer to ask about any + * customizations to the client name string. This is primarily used + * by HTTP-based RA layers wishing to extend the string reported to + * Apache/mod_dav_svn via the User-agent HTTP header. + + + +A function type for retrieving the youngest revision from a repos. + + +This is a function type which allows the RA layer to invalidate + * (i.e., remove) wcprops recursively. See the documentation for + * @c svn_ra_get_wc_prop_func_t for @a baton, @a path, and @a name. + * + * Unlike @c svn_ra_push_wc_prop_func_t, this has immediate effect. If + * it returns success, the wcprops have been removed. + + + +This is a function type which allows the RA layer to store new + * working copy properties as part of a commit. See the comments for + * @c svn_ra_get_wc_prop_func_t for @a baton, @a path, and @a name. + * The @a value is the value that will be stored for the property; a + * @c NULL @a value means the property will be deleted. + * + * Note that this might not actually store the new property before + * returning, but instead schedule it to be changed as part of + * post-commit processing (in which case a successful commit means the + * properties got written). Thus, during the commit, it is possible + * to invoke this function to set a new value for a wc prop, then read + * the wc prop back from the working copy and get the *old* value. + * Callers beware. + + + +This is a function type which allows the RA layer to store new + * working copy properties during update-like operations. See the + * comments for @c svn_ra_get_wc_prop_func_t for @a baton, @a path, and + * @a name. The @a value is the value that will be stored for the property; + * a NULL @a value means the property will be deleted. + + + +This is a function type which allows the RA layer to fetch working + * copy (WC) properties. + * + * The @a baton is provided along with the function pointer and should + * be passed back in. This will be the @a callback_baton or the + * @a close_baton as appropriate. + * + * @a path is relative to the "root" of the session, defined by the + * @a repos_URL passed to svn_ra_open3() vtable call. + * + * @a name is the name of the property to fetch. If the property is present, + * then it is returned in @a value. Otherwise, @a *value is set to @c NULL. + + + + Get libsvn_ra version information. + + @since New in 1.1. + + + +Return the appropriate @c svn_mergeinfo_inheritance_t for @a word. + * @a word is as returned from svn_inheritance_to_word(). Defaults to + * @c svn_mergeinfo_explicit. + * + * @since New in 1.5. + + + +Mergeinfo on target's nearest (path-wise, not history-wise) + ancestor, regardless of whether target has explict mergeinfo. + + +Explicit mergeinfo, or if that doesn't exist, the inherited + mergeinfo from a target's nearest (path-wise, not history-wise) + ancestor. + + +Explicit mergeinfo only. + + +Return a deep copy of @a rangelist, allocated in @a pool. + * + * @since New in 1.5. + + + +Return a deep copy of @a mergeinfo, allocated in @a pool. + * + * @since New in 1.5. + + + +Return a deep copy of @a mergeinfo_catalog, allocated in @a pool. + * + * @since New in 1.6. + + + +Take a hash of mergeinfo in @a mergeinfo, and sort the rangelists + * associated with each key (in place). + * + * TODO(miapi): mergeinfos should *always* be sorted. This should be + * a private function. + * + * @since New in 1.5 + + + +Take a mergeinfo in MERGEINPUT, and convert it back to unparsed + * mergeinfo in *OUTPUT. If INPUT contains no elements, return the + * empty string. + * + * @since New in 1.5. + + + +Return a deep copy of @a mergeinfo, excluding all non-inheritable + * @c svn_merge_range_t. If @a start and @a end are valid revisions + * and @a start is less than or equal to @a end, then exclude only the + * non-inheritable revisions that intersect inclusively with the range + * defined by @a start and @a end. If @a path is not NULL remove + * non-inheritable ranges only for @a path. If all ranges are removed + * for a given path then remove that path as well. If all paths are + * removed or @a rangelist is empty then set @a *inheritable_rangelist + * to an empty array. Allocate the copy in @a pool. + * + * @since New in 1.5. + + + +Return a deep copy of @c svn_merge_range_t *'s in @a rangelist excluding + * all non-inheritable @c svn_merge_range_t. If @a start and @a end are valid + * revisions and @a start is less than or equal to @a end, then exclude only the + * non-inheritable revision ranges that intersect inclusively with the range + * defined by @a start and @a end. If @a rangelist contains no elements, return + * an empty array. Allocate the copy in @a pool. + * + * @since New in 1.5. + + + +Take an array of svn_merge_range_t *'s in @a rangelist, and convert it + * back to a text format rangelist in @a output. If @a rangelist contains + * no elements, sets @a output to the empty string. + * + * @since New in 1.5. + + + +Reverse @a rangelist, and the @c start and @c end fields of each + * range in @a rangelist, in place. + * + * TODO(miapi): Is this really a valid function? Rangelists that + * aren't sorted, or rangelists containing reverse ranges, are + * generally not valid in mergeinfo code. Can we rewrite the two + * places where this is used? + * + * @since New in 1.5. + + + +Find the intersection of two rangelists consisting of @c + * svn_merge_range_t * elements, @a rangelist1 and @a rangelist2, and + * place the result in @a *rangelist (which is never @c NULL). + * + * @a consider_inheritance determines how to account for the inheritability + * of the two rangelist's ranges when calculating the intersection, + * @see svn_mergeinfo_diff(). + * + * Note: @a rangelist1 and @a rangelist2 must be sorted as said by @c + * svn_sort_compare_ranges(). @a *rangelist is guaranteed to be in sorted + * order. + * @since New in 1.5. + + + +Find the intersection of two mergeinfos, @a mergeinfo1 and @a + * mergeinfo2, and place the result in @a *mergeinfo, which is (deeply) + * allocated in @a pool. + * + * @since New in 1.5. + + + +Removes @a eraser (the subtrahend) from @a whiteboard (the + * minuend), and places the resulting difference in @a output. + * + * Note: @a eraser and @a whiteboard must be sorted as said by @c + * svn_sort_compare_ranges(). @a output is guaranteed to be in sorted + * order. + * + * @a consider_inheritance determines how to account for the + * @c svn_merge_range_t inheritable field when comparing @a whiteboard's + * and @a *eraser's rangelists for equality. @see svn_mergeinfo_diff(). + * + * @since New in 1.5. + + + +Merge two rangelists consisting of @c svn_merge_range_t * + * elements, @a *rangelist and @a changes, placing the results in + * @a *rangelist. Either rangelist may be empty. + * + * When intersecting rangelists are merged, the inheritability of + * the resulting svn_merge_range_t depends on the inheritability of the + * operands: see svn_mergeinfo_merge(). + * + * Note: @a *rangelist and @a changes must be sorted as said by @c + * svn_sort_compare_ranges(). @a *rangelist is guaranteed to remain + * in sorted order and be compacted to the minimal number of ranges + * needed to represent the merged result. + * + * @since New in 1.5. + + + +Calculate the delta between two rangelists consisting of @c + * svn_merge_range_t * elements (sorted in ascending order), @a from + * and @a to, and place the result in @a *deleted and @a *added + * (neither output argument will ever be @c NULL). + * + * @a consider_inheritance determines how to account for the inheritability + * of the two rangelist's ranges when calculating the diff, + * as described for svn_mergeinfo_diff(). + * + * @since New in 1.5. + + + +Removes @a eraser (the subtrahend) from @a whiteboard (the + * minuend), and places the resulting difference in @a *mergeinfo. + * + * @since New in 1.5. + + + +Merge one mergeinfo, @a changes, into another mergeinfo @a + * mergeinfo. + * + * When intersecting rangelists for a path are merged, the inheritability of + * the resulting svn_merge_range_t depends on the inheritability of the + * operands. If two non-inheritable ranges are merged the result is always + * non-inheritable, in all other cases the resulting range is inheritable. + * + * e.g. '/A: 1,3-4' merged with '/A: 1,3,4*,5' --> '/A: 1,3-5' + * '/A: 1,3-4*' merged with '/A: 1,3,4*,5' --> '/A: 1,3,4*,5' + * + * @since New in 1.5. + + + +Calculate the delta between two mergeinfos, @a mergefrom and @a mergeto + * (which may be @c NULL), and place the result in @a *deleted and @a + * *added (neither output argument may be @c NULL). + * + * @a consider_inheritance determines how the rangelists in the two + * hashes are compared for equality. If @a consider_inheritance is FALSE, + * then the start and end revisions of the @c svn_merge_range_t's being + * compared are the only factors considered when determining equality. + * + * e.g. '/trunk: 1,3-4*,5' == '/trunk: 1,3-5' + * + * If @a consider_inheritance is TRUE, then the inheritability of the + * @c svn_merge_range_t's is also considered and must be the same for two + * otherwise identical ranges to be judged equal. + * + * e.g. '/trunk: 1,3-4*,5' != '/trunk: 1,3-5' + * '/trunk: 1,3-4*,5' == '/trunk: 1,3-4*,5' + * '/trunk: 1,3-4,5' == '/trunk: 1,3-4,5' + * + * @since New in 1.5. + + + +Parse the mergeinfo from @a input into @a *mergeinfo. If no + * mergeinfo is available, return an empty mergeinfo (never @c NULL). + * Perform temporary allocations in @a pool. + * + * If @a input is not a grammatically correct @c SVN_PROP_MERGEINFO + * property, contains overlapping revision ranges of differing + * inheritability, or revision ranges with a start revision greater + * than or equal to its end revision, or contains paths mapped to empty + * revision ranges, then return @c SVN_ERR_MERGEINFO_PARSE_ERROR. + * Unordered revision ranges are allowed, but will be sorted when + * placed into @a *mergeinfo. Overlapping revision ranges of the same + * inheritability are also allowed, but will be combined into a single + * range when placed into @a *mergeinfo. + * + * @since New in 1.5. + + + + @copyright + ==================================================================== + Copyright (c) 2006-2008 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_mergeinfo.h + @brief mergeinfo handling and processing + + @copyright + ==================================================================== + Copyright (c) 2000-2008 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_types.h + @brief Subversion's data types + + @copyright + ==================================================================== + Copyright (c) 2000-2006 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_string.h + @brief Counted-length strings for Subversion, plus some C string goodies. + + There are two string datatypes: @c svn_string_t and @c svn_stringbuf_t. + The former is a simple pointer/length pair useful for passing around + strings (or arbitrary bytes) with a counted length. @c svn_stringbuf_t is + buffered to enable efficient appending of strings without an allocation + and copy for each append operation. + + @c svn_string_t contains a const char * for its data, so it is + most appropriate for constant data and for functions which expect constant, + counted data. Functions should generally use const @c svn_string_t + * as their parameter to indicate they are expecting a constant, + counted string. + + @c svn_stringbuf_t uses a plain char * for its data, so it is + most appropriate for modifiable data. + +

Invariants

+ + 1. Null termination: + + Both structures maintain a significant invariant: + + s->data[s->len] == '\\0' + + The functions defined within this header file will maintain + the invariant (which does imply that memory is + allocated/defined as @c len+1 bytes). If code outside of the + @c svn_string.h functions manually builds these structures, + then they must enforce this invariant. + + Note that an @c svn_string(buf)_t may contain binary data, + which means that strlen(s->data) does not have to equal @c + s->len. The NULL terminator is provided to make it easier to + pass @c s->data to C string interfaces. + + + 2. Non-NULL input: + + All the functions assume their input data is non-NULL, + unless otherwise documented, and may seg fault if passed + NULL. The input data may *contain* null bytes, of course, just + the data pointer itself must not be NULL. + +

Memory allocation

+ + All the functions make a deep copy of all input data, and never store + a pointer to the original input data. + +Overview of the @c SVN_PROP_MERGEINFO property. + * + * Merge history is stored in the @c SVN_PROP_MERGEINFO property of files + * and directories. The @c SVN_PROP_MERGEINFO property on a path stores the + * complete list of changes merged to that path, either directly or via the + * path's parent, grand-parent, etc.. A path may have empty mergeinfo which + * means that nothing has been merged to that path or all previous merges + * to the path were reversed. Note that a path may have no mergeinfo, this + * is not the same as empty mergeinfo. + * + * Every path in a tree may have @c SVN_PROP_MERGEINFO set, but if the + * @c SVN_PROP_MERGEINFO for a path is equivalent to the + * @c SVN_PROP_MERGEINFO for its parent, then the @c SVN_PROP_MERGEINFO on + * the path will 'elide' (be removed) from the path as a post step to any + * merge. If a path's parent does not have any @c SVN_PROP_MERGEINFO set, + * the path's mergeinfo can elide to its nearest grand-parent, + * great-grand-parent, etc. that has equivalent @c SVN_PROP_MERGEINFO set + * on it. + * + * If a path has no @c SVN_PROP_MERGEINFO of its own, it inherits mergeinfo + * from its nearest parent that has @c SVN_PROP_MERGEINFO set. The + * exception to this is @c SVN_PROP_MERGEINFO with non-ineritable revision + * ranges. These non-inheritable ranges apply only to the path which they + * are set on. + * + * Due to Subversion's allowance for mixed revision working copies, both + * elision and inheritance within the working copy presume the path + * between a path and its nearest parent with mergeinfo is at the same + * working revision. If this is not the case then neither inheritance nor + * elision can occur. + * + * The value of the @c SVN_PROP_MERGEINFO property is either an empty string + * (representing empty mergeinfo) or a non-empty string consisting of + * a path, a colon, and comma separated revision list, containing one or more + * revision or revision ranges. Revision range start and end points are + * separated by "-". Revisions and revision ranges may have the optional + * @c SVN_MERGEINFO_NONINHERITABLE_STR suffix to signify a non-inheritable + * revision/revision range. + * + * @c SVN_PROP_MERGEINFO Value Grammar: + * + * Token Definition + * ----- ---------- + * revisionrange REVISION1 "-" REVISION2 + * revisioneelement (revisionrange | REVISION)"*"? + * rangelist revisioneelement (COMMA revisioneelement)* + * revisionline PATHNAME COLON rangelist + * top "" | (revisionline (NEWLINE revisionline))* + * + * The PATHNAME is the source of a merge and the rangelist the revision(s) + * merged to the path @c SVN_PROP_MERGEINFO is set on directly or indirectly + * via inheritance. PATHNAME must always exist at the specified rangelist + * and thus a single merge may result in multiple revisionlines if the source + * was renamed. + * + * Rangelists must be sorted from lowest to highest revision and cannot + * contain overlapping revisionlistelements. REVISION1 must be less than + * REVISION2. Consecutive single revisions that can be represented by a + * revisionrange are allowed however (e.g. '5,6,7,8,9-12' or '5-12' are + * both acceptable). + +Terminology for data structures that contain mergeinfo. + * + * Subversion commonly uses several data structures to represent + * mergeinfo in RAM: + * + * (a) Strings (@c svn_string_t *) containing "unparsed mergeinfo". + * + * (b) A "rangelist". An array (@c apr_array_header_t *) of non-overlapping + * merge ranges (@c svn_merge_range_t *), sorted as said by + * @c svn_sort_compare_ranges(). An empty range list is represented by + * an empty array. Unless specifically noted otherwise, all APIs require + * rangelists that describe only forward ranges, i.e. the range's start + * revision is less than its end revision. + * + * (c) @c svn_mergeinfo_t, called "mergeinfo". A hash mapping merge + * source paths (@c const char *, starting with slashes) to + * non-empty rangelist arrays. A @c NULL hash is used to represent + * no mergeinfo and an empty hash is used to represent empty + * mergeinfo. + * + * (d) @c svn_mergeinfo_catalog_t, called a "mergeinfo catalog". A hash + * mapping paths (@c const char *, starting with slashes) to + * @c svn_mergeinfo_t. + * + * Both @c svn_mergeinfo_t and @c svn_mergeinfo_catalog_t are just + * typedefs for @c apr_hash_t *; there is no static type-checking, and + * you still use standard @c apr_hash_t functions to interact with + * them. + * + * Note that while the keys of mergeinfos are always relative to the + * repository root, the keys of a catalog may be relative to something + * else, such as an RA session root. + +
+ +Set @a *provider to an authentication provider of type @c + * svn_auth_cred_ssl_client_cert_pw_t, allocated in @a pool. + * + * @a *provider retrieves its credentials by using the @a prompt_func + * and @a prompt_baton. The returned credential is used when a loaded + * client certificate is protected by a passphrase. The prompt will + * be retried @a retry_limit times. For infinite retries, set + * @a retry_limit to value less than 0. + * + * @since New in 1.4. + + + +Set @a *provider to an authentication provider of type @c + * svn_auth_cred_ssl_client_cert_t, allocated in @a pool. + * + * @a *provider retrieves its credentials by using the @a prompt_func + * and @a prompt_baton. The returned credential is used to load the + * appropriate client certificate for authentication when requested by + * a server. The prompt will be retried @a retry_limit times. For + * infinite retries, set @a retry_limit to value less than 0. + * + * @since New in 1.4. + + + +Set @a *provider to an authentication provider of type @c + * svn_auth_cred_ssl_server_trust_t, allocated in @a pool. + * + * @a *provider retrieves its credentials by using the @a prompt_func + * and @a prompt_baton. The returned credential is used to override + * SSL security on an error. + * + * @since New in 1.4. + + + +Like svn_auth_get_ssl_client_cert_pw_file_provider2, but without + * the ability to call the svn_auth_plaintext_passphrase_prompt_func_t + * callback, and the provider always assumes that it is not allowed + * to store the passphrase in plaintext. + * + * @deprecated Provided for backwards compatibility with the 1.5 API. + * @since New in 1.4. + + + +Set @a *provider to an authentication provider of type @c + * svn_auth_cred_ssl_client_cert_pw_t that gets/sets information from the user's + * ~/.subversion configuration directory. + * + * If the provider is going to save the passphrase unencrypted, + * it calls @a plaintext_passphrase_prompt_func, passing @a + * prompt_baton, before saving the passphrase. + * + * If @a plaintext_passphrase_prompt_func is NULL it is not called + * and the passphrase is not stored in plaintext. + * Client developers are highly encouraged to provide this callback + * to ensure their users are made aware of the fact that their passphrase + * is going to be stored unencrypted. + * + * Clients can however set the callback to NULL and set + * SVN_AUTH_PARAM_STORE_SSL_CLIENT_CERT_PP_PLAINTEXT to SVN_CONFIG_FALSE or + * SVN_CONFIG_TRUE to enforce a certain behaviour. + * + * Allocate @a *provider in @a pool. + * + * @since New in 1.6. + + + +Set @a *provider to an authentication provider of type @c + * svn_auth_cred_ssl_client_cert_t, allocated in @a pool. + * + * @a *provider retrieves its credentials from the configuration + * mechanism. The returned credential is used to load the appropriate + * client certificate for authentication when requested by a server. + * + * @since New in 1.4. + + + +Set @a *provider to an authentication provider of type @c + * svn_auth_cred_ssl_server_trust_t, allocated in @a pool. + * + * @a *provider retrieves its credentials from the configuration + * mechanism. The returned credential is used to override SSL + * security on an error. + * + * @since New in 1.4. + + + +Set @a *provider to an authentication provider of type @c + * svn_auth_cred_username_t that gets/sets information from a user's + * ~/.subversion configuration directory. Allocate @a *provider in + * @a pool. + * + * If a default username is available, @a *provider will honor it, + * and return it when svn_auth_first_credentials() is called. (See + * @c SVN_AUTH_PARAM_DEFAULT_USERNAME.) + * + * @since New in 1.4. + + + + Set @a *provider to an authentication provider of type @c + svn_auth_cred_ssl_server_trust_t, allocated in @a pool. + + This provider automatically validates ssl server certificates with + the CryptoApi, like Internet Explorer and the Windows network API do. + This allows the rollout of root certificates via Windows Domain + policies, instead of Subversion specific configuration. + + @since New in 1.5. + @note This function is only available on Windows. + + + + Set @a *provider to an authentication provider of type @c + svn_auth_cred_ssl_client_cert_pw_t that gets/sets information from the + user's ~/.subversion configuration directory. Allocate @a *provider in + @a pool. + + This is like svn_auth_get_ssl_client_cert_pw_file_provider(), except that + when running on Window 2000 or newer, the provider encrypts the password + before storing it to disk. On earlier versions of Windows, the provider + does nothing. + + @since New in 1.6 + @note This function is only available on Windows. + + @note An administrative password reset may invalidate the account's + secret key. This function will detect that situation and behave as + if the password were not cached at all. + + + + Set @a *provider to an authentication provider of type @c + svn_auth_cred_simple_t that gets/sets information from the user's + ~/.subversion configuration directory. Allocate @a *provider in + @a pool. + + This is like svn_auth_get_simple_provider(), except that, when + running on Window 2000 or newer (or any other Windows version that + includes the CryptoAPI), the provider encrypts the password before + storing it to disk. On earlier versions of Windows, the provider + does nothing. + + @since New in 1.4. + @note This function is only available on Windows. + + @note An administrative password reset may invalidate the account's + secret key. This function will detect that situation and behave as + if the password were not cached at all. + + + +Set @a *providers to an array of svn_auth_provider_object_t * + * objects. + * Only client authentication providers available for the current platform are + * returned. Order of the platform-specific authentication providers is + * determined by the 'password-stores' configuration option which is retrieved + * from @a config. @a config can be NULL. + * + * Create and allocate @a *providers in @a pool. + * + * Default order of the platform-specific authentication providers: + * 1. gnome-keyring + * 2. kwallet + * 3. keychain + * 4. windows-cryptoapi + * + * @since New in 1.6. + + + +Like svn_auth_get_simple_provider2, but without the ability to + * call the svn_auth_plaintext_prompt_func_t callback, and the provider + * always assumes that it is allowed to store the password in plaintext. + * + * @deprecated Provided for backwards compatibility with the 1.5 API. + * @since New in 1.4. + + + +Set @a *provider to an authentication provider of type @c + * svn_auth_cred_simple_t that gets/sets information from the user's + * ~/.subversion configuration directory. + * + * If the provider is going to save the password unencrypted, it calls @a + * plaintext_prompt_func, passing @a prompt_baton, before saving the + * password. + * + * If @a plaintext_prompt_func is NULL it is not called and the answer is + * assumed to be TRUE. This matches the deprecated behaviour of storing + * unencrypted passwords by default, and is only done this way for backward + * compatibility reasons. + * Client developers are highly encouraged to provide this callback + * to ensure their users are made aware of the fact that their password + * is going to be stored unencrypted. In the future, providers may + * default to not storing the password unencrypted if this callback is NULL. + * + * Clients can however set the callback to NULL and set + * SVN_AUTH_PARAM_STORE_PLAINTEXT_PASSWORDS to SVN_CONFIG_FALSE or + * SVN_CONFIG_TRUE to enforce a certain behaviour. + * + * Allocate @a *provider in @a pool. + * + * If a default username or password is available, @a *provider will + * honor them as well, and return them when + * svn_auth_first_credentials() is called. (see @c + * SVN_AUTH_PARAM_DEFAULT_USERNAME and @c + * SVN_AUTH_PARAM_DEFAULT_PASSWORD). + * + * @since New in 1.6. + + + +Set @a *provider to an authentication provider of type @c + * svn_auth_cred_username_t that gets information by prompting the + * user with @a prompt_func and @a prompt_baton. Allocate @a *provider + * in @a pool. + * + * If @c SVN_AUTH_PARAM_DEFAULT_USERNAME is defined as a runtime + * parameter in the @c auth_baton, then @a *provider will return the + * default argument when svn_auth_first_credentials() is called. If + * svn_auth_first_credentials() fails, then @a *provider will + * re-prompt @a retry_limit times (via svn_auth_next_credentials()). + * For infinite retries, set @a retry_limit to value less than 0. + * + * @since New in 1.4. + + + +@} +Set @a *provider to an authentication provider of type + * svn_auth_cred_simple_t that gets information by prompting the user + * with @a prompt_func and @a prompt_baton. Allocate @a *provider in + * @a pool. + * + * If both @c SVN_AUTH_PARAM_DEFAULT_USERNAME and + * @c SVN_AUTH_PARAM_DEFAULT_PASSWORD are defined as runtime + * parameters in the @c auth_baton, then @a *provider will return the + * default arguments when svn_auth_first_credentials() is called. If + * svn_auth_first_credentials() fails, then @a *provider will + * re-prompt @a retry_limit times (via svn_auth_next_credentials()). + * For infinite retries, set @a retry_limit to value less than 0. + * + * @since New in 1.4. + + + +Save a set of credentials. + * + * Ask @a state to store the most recently returned credentials, + * presumably because they successfully authenticated. + * All allocations should be done in @a pool. + * + * If no credentials were ever returned, do nothing. + + + +Get another set of credentials, assuming previous ones failed to + * authenticate. + * + * Use @a state to fetch a different set of @a *credentials, as a + * follow-up to svn_auth_first_credentials() or + * svn_auth_next_credentials(). If no more credentials are available, + * set @a *credentials to NULL. + * + * Note that @a *credentials will be allocated in @c auth_baton's pool. + + + +Universal run-time parameters, made available to all providers. + + If you are writing a new provider, then to be a "good citizen", + you should notice these global parameters! Note that these + run-time params should be treated as read-only by providers; the + application is responsible for placing them into the auth_baton + hash. +The auth-hash prefix indicating that the parameter is global. +@name Default credentials defines +Any 'default' credentials that came in through the application itself, +(e.g. --username and --password options). Property values are +const char *. +@{ +@} +@brief The application doesn't want any providers to prompt + * users. Property value is irrelevant; only property's existence + * matters. +@brief The application doesn't want any providers to save passwords + * to disk. Property value is irrelevant; only property's existence + * matters. +@brief Indicates whether providers may save passwords to disk in + * plaintext. Property value can be either SVN_CONFIG_TRUE, + * SVN_CONFIG_FALSE, or SVN_CONFIG_ASK. +@brief The application doesn't want any providers to save passphrase + * to disk. Property value is irrelevant; only property's existence + * matters. +@brief Indicates whether providers may save passphrase to disk in + * plaintext. Property value can be either SVN_CONFIG_TRUE, + * SVN_CONFIG_FALSE, or SVN_CONFIG_ASK. +@brief The application doesn't want any providers to save credentials + * to disk. Property value is irrelevant; only property's existence + * matters. +@brief The following property is for SSL server cert providers. This + * provides a pointer to an @c apr_uint32_t containing the failures + * detected by the certificate validator. +@brief The following property is for SSL server cert providers. This + * provides the cert info (svn_auth_ssl_server_cert_info_t). +Some providers need access to the @c svn_config_t configuration. +@deprecated Provided for backward compatibility with the 1.5 API. +The current server group. +@brief A configuration directory that overrides the default + * ~/.subversion. +Get an initial set of credentials. + * + * Ask @a auth_baton to set @a *credentials to a set of credentials + * defined by @a cred_kind and valid within @a realmstring, or NULL if + * no credentials are available. Otherwise, return an iteration state + * in @a *state, so that the caller can call + * svn_auth_next_credentials(), in case the first set of credentials + * fails to authenticate. + * + * Use @a pool to allocate @a *state, and for temporary allocation. + * Note that @a *credentials will be allocated in @a auth_baton's pool. + + + +Get an authentication run-time parameter. + * + * Return a value for run-time parameter @a name from @a auth_baton. + * Return NULL if the parameter doesn't exist. + + + +Set an authentication run-time parameter. + * + * Store @a name / @a value pair as a run-time parameter in @a + * auth_baton, making the data accessible to all providers. @a name + * and @a value will NOT be duplicated into the auth_baton's pool. + * To delete a run-time parameter, pass NULL for @a value. + + + +Initialize an authentication system. + * + * Return an authentication object in @a *auth_baton (allocated in @a + * pool) that represents a particular instance of the svn + * authentication system. @a providers is an array of @c + * svn_auth_provider_object_t pointers, already allocated in @a pool + * and intentionally ordered. These pointers will be stored within @a + * *auth_baton, grouped by credential type, and searched in this exact + * order. + + + +A type of callback function for asking whether storing a passphrase to + * disk in plaintext is allowed. + * + * In this callback, the client should ask the user whether storing + * a passphrase for the realm identified by @a realmstring to disk + * in plaintext is allowed. + * + * The answer is returned in @a *may_save_plaintext. + * @a baton is an implementation-specific closure. + * All allocations should be done in @a pool. + * + * @since New in 1.6 + + + +A type of callback function for asking whether storing a password to + * disk in plaintext is allowed. + * + * In this callback, the client should ask the user whether storing + * a password for the realm identified by @a realmstring to disk + * in plaintext is allowed. + * + * The answer is returned in @a *may_save_plaintext. + * @a baton is an implementation-specific closure. + * All allocations should be done in @a pool. + * + * @since New in 1.6 + + + +Set @a *cred by prompting the user, allocating @a *cred in @a pool. + * @a baton is an implementation-specific closure. @a realm is a string + * identifying the certificate, and can be used in the prompt string. + * + * If @a may_save is FALSE, the auth system does not allow the credentials + * to be saved (to disk). A prompt function shall not ask the user if the + * credentials shall be saved if @a may_save is FALSE. For example, a GUI + * client with a remember password checkbox would grey out the checkbox if + * @a may_save is FALSE. + + + +Set @a *cred by prompting the user, allocating @a *cred in @a pool. + * @a baton is an implementation-specific closure. @a realm is a string + * that can be used in the prompt string. + * + * If @a may_save is FALSE, the auth system does not allow the credentials + * to be saved (to disk). A prompt function shall not ask the user if the + * credentials shall be saved if @a may_save is FALSE. For example, a GUI + * client with a remember certificate checkbox would grey out the checkbox + * if @a may_save is FALSE. + + + +@name SSL server certificate failure bits + * + * @note These values are stored in the on disk auth cache by the SSL + * server certificate auth provider, so the meaning of these bits must + * not be changed. + * @{ + +Certificate is not yet valid. +Certificate has expired. +Certificate's CN (hostname) does not match the remote hostname. +@brief Certificate authority is unknown (i.e. not trusted) +@brief Other failure. This can happen if neon has introduced a new + * failure bit that we do not handle yet. +@} +Set @a *cred by prompting the user, allocating @a *cred in @a pool. + * @a baton is an implementation-specific closure. + * + * @a cert_info is a structure describing the server cert that was + * presented to the client, and @a failures is a bitmask that + * describes exactly why the cert could not be automatically validated, + * composed from the constants SVN_AUTH_SSL_* (@c SVN_AUTH_SSL_NOTYETVALID + * etc.). @a realm is a string that can be used in the prompt string. + * + * If @a may_save is FALSE, the auth system does not allow the credentials + * to be saved (to disk). A prompt function shall not ask the user if the + * credentials shall be saved if @a may_save is FALSE. For example, a GUI + * client with a trust permanently checkbox would grey out the checkbox if + * @a may_save is FALSE. + + + +Set @a *cred by prompting the user, allocating @a *cred in @a pool. + * @a baton is an implementation-specific closure. + * + * If @a realm is non-NULL, maybe use it in the prompt string. + * + * If @a may_save is FALSE, the auth system does not allow the credentials + * to be saved (to disk). A prompt function shall not ask the user if the + * credentials shall be saved if @a may_save is FALSE. For example, a GUI + * client with a remember username checkbox would grey out the checkbox if + * @a may_save is FALSE. + + + +Credential-constructing prompt functions. * +These exist so that different client applications can use + * different prompt mechanisms to supply the same credentials. For + * example, if authentication requires a username and password, a + * command-line client's prompting function might prompt first for the + * username and then for the password, whereas a GUI client's would + * present a single dialog box asking for both, and a telepathic + * client's would read all the information directly from the user's + * mind. All these prompting functions return the same type of + * credential, but the information used to construct the credential is + * gathered in an interface-specific way in each case. + +Set @a *cred by prompting the user, allocating @a *cred in @a pool. + * @a baton is an implementation-specific closure. + * + * If @a realm is non-NULL, maybe use it in the prompt string. + * + * If @a username is non-NULL, then the user might be prompted only + * for a password, but @a *cred would still be filled with both + * username and password. For example, a typical usage would be to + * pass @a username on the first call, but then leave it NULL for + * subsequent calls, on the theory that if credentials failed, it's + * as likely to be due to incorrect username as incorrect password. + * + * If @a may_save is FALSE, the auth system does not allow the credentials + * to be saved (to disk). A prompt function shall not ask the user if the + * credentials shall be saved if @a may_save is FALSE. For example, a GUI + * client with a remember password checkbox would grey out the checkbox if + * @a may_save is FALSE. + + + +Bit mask of the accepted failures + + +Indicates if the credentials may be saved (to disk). For example, a + * GUI prompt implementation with a checkbox to accept the certificate + * permanently shall set @a may_save to TRUE if the checkbox is checked. + + + +@c SVN_AUTH_CRED_SSL_SERVER_TRUST credentials. + + + Return a deep copy of @a info, allocated in @a pool. + + @since New in 1.3. + + + +Base-64 encoded DER certificate representation + + +DN of the certificate issuer + + +ASCII date until which the certificate is valid + + +ASCII date from which the certificate is valid + + +ASCII fingerprint + + +Primary CN + + +SSL server verification credential type. + * + * The following auth parameters are available to the providers: + * + * - @c SVN_AUTH_PARAM_CONFIG_CATEGORY_SERVERS (@c svn_config_t*) + * - @c SVN_AUTH_PARAM_SERVER_GROUP (@c char*) + * - @c SVN_AUTH_PARAM_SSL_SERVER_FAILURES (@c apr_uint32_t*) + * - @c SVN_AUTH_PARAM_SSL_SERVER_CERT_INFO + * (@c svn_auth_ssl_server_cert_info_t*) + * + * The following optional auth parameters are relevant to the providers: + * + * - @c SVN_AUTH_PARAM_NO_AUTH_CACHE (@c void*) + +SSL server certificate information used by @c + * SVN_AUTH_CRED_SSL_SERVER_TRUST providers. + + + +Indicates if the credentials may be saved (to disk). For example, a + * GUI prompt implementation with a remember password checkbox shall set + * @a may_save to TRUE if the checkbox is checked. + + + +Certificate password + + +SSL client certificate passphrase credential type. + * + * @note The realmstring used with this credential type must be a name that + * makes it possible for the user to identify the certificate. + * + * The following auth parameters are available to the providers: + * + * - @c SVN_AUTH_PARAM_CONFIG_CATEGORY_CONFIG (@c svn_config_t*) + * - @c SVN_AUTH_PARAM_CONFIG_CATEGORY_SERVERS (@c svn_config_t*) + * - @c SVN_AUTH_PARAM_SERVER_GROUP (@c char*) + * + * The following optional auth parameters are relevant to the providers: + * + * - @c SVN_AUTH_PARAM_NO_AUTH_CACHE (@c void*) + +@c SVN_AUTH_CRED_SSL_CLIENT_CERT_PW credentials. + + +A function returning an SSL client certificate passphrase provider. + + +Indicates if the credentials may be saved (to disk). For example, a + * GUI prompt implementation with a remember certificate checkbox shall + * set @a may_save to TRUE if the checkbox is checked. + + + +Absolute path to the certificate file + + +SSL client certificate credential type. + * + * The following auth parameters are available to the providers: + * + * - @c SVN_AUTH_PARAM_CONFIG_CATEGORY_SERVERS (@c svn_config_t*) + * - @c SVN_AUTH_PARAM_SERVER_GROUP (@c char*) + * + * The following optional auth parameters are relevant to the providers: + * + * - @c SVN_AUTH_PARAM_NO_AUTH_CACHE (@c void*) + +@c SVN_AUTH_CRED_SSL_CLIENT_CERT credentials. + + +Indicates if the credentials may be saved (to disk). For example, a + * GUI prompt implementation with a remember username checkbox shall set + * @a may_save to TRUE if the checkbox is checked. + + + +Username + + +Username credential kind. + * + * The following optional auth parameters are relevant to the providers: + * + * - @c SVN_AUTH_PARAM_NO_AUTH_CACHE (@c void*) + * - @c SVN_AUTH_PARAM_DEFAULT_USERNAME (@c char*) + +@c SVN_AUTH_CRED_USERNAME credentials. + + +Indicates if the credentials may be saved (to disk). For example, a + * GUI prompt implementation with a remember password checkbox shall set + * @a may_save to TRUE if the checkbox is checked. + + + +Password + + +Username + + +Specific types of credentials * +Simple username/password pair credential kind. + * + * The following auth parameters are available to the providers: + * + * - @c SVN_AUTH_PARAM_CONFIG_CATEGORY_CONFIG (@c svn_config_t*) + * - @c SVN_AUTH_PARAM_CONFIG_CATEGORY_SERVERS (@c svn_config_t*) + * + * The following auth parameters may be available to the providers: + * + * - @c SVN_AUTH_PARAM_NO_AUTH_CACHE (@c void*) + * - @c SVN_AUTH_PARAM_DEFAULT_USERNAME (@c char*) + * - @c SVN_AUTH_PARAM_DEFAULT_PASSWORD (@c char*) + +@c SVN_AUTH_CRED_SIMPLE credentials. + + +The type of function returning authentication provider. + + +A provider object, ready to be put into an array and given to + svn_auth_open(). + + +Save credentials. + * + * Store @a credentials for future use. @a provider_baton is + * general context for the vtable, and @a parameters contains any + * run-time data the provider may need. Set @a *saved to TRUE if + * the save happened, or FALSE if not. The provider is not required + * to save; if it refuses or is unable to save for non-fatal + * reasons, return FALSE. If the provider never saves data, then + * this function pointer should simply be NULL. @a realmstring comes + * from the svn_auth_first_credentials() call. + + + +Get a different set of credentials. + * + * Set @a *credentials to another set of valid credentials (using @a + * iter_baton as the context from previous call to first_credentials + * or next_credentials). If no more credentials are available, set + * @a *credentials to NULL. If the provider only has one set of + * credentials, this function pointer should simply be NULL. @a + * provider_baton is general context for the vtable, @a parameters + * contains any run-time data that the provider may need, and @a + * realmstring comes from the svn_auth_first_credentials() call. + + + +Get an initial set of credentials. + * + * Set @a *credentials to a set of valid credentials within @a + * realmstring, or NULL if no credentials are available. Set @a + * *iter_baton to context that allows a subsequent call to @c + * next_credentials, in case the first credentials fail to + * authenticate. @a provider_baton is general context for the + * vtable, @a parameters contains any run-time data that the + * provider may need, and @a realmstring comes from the + * svn_auth_first_credentials() call. + + + +The kind of credentials this provider knows how to retrieve. + + +The main authentication "provider" vtable. + + +The type of a Subversion authentication-iteration object + + +Overview of the svn authentication system. + * + * We define an authentication "provider" as a module that is able to + * return a specific set of credentials. (e.g. username/password, + * certificate, etc.) Each provider implements a vtable that + * + * - can fetch initial credentials + * - can retry the fetch (or try to fetch something different) + * - can store the credentials for future use + * + * For any given type of credentials, there can exist any number of + * separate providers -- each provider has a different method of + * fetching. (i.e. from a disk store, by prompting the user, etc.) + * + * The application begins by creating an auth baton object, and + * "registers" some number of providers with the auth baton, in a + * specific order. (For example, it may first register a + * username/password provider that looks in disk store, then register + * a username/password provider that prompts the user.) + * + * Later on, when any svn library is challenged, it asks the auth + * baton for the specific credentials. If the initial credentials + * fail to authenticate, the caller keeps requesting new credentials. + * Under the hood, libsvn_auth effectively "walks" over each provider + * (in order of registry), one at a time, until all the providers have + * exhausted all their retry options. + * + * This system allows an application to flexibly define authentication + * behaviors (by changing registration order), and very easily write + * new authentication providers. + * + * An auth_baton also contains an internal hashtable of run-time + * parameters; any provider or library layer can set these run-time + * parameters at any time, so that the provider has access to the + * data. (For example, certain run-time data may not be available + * until an authentication challenge is made.) Each credential type + * must document the run-time parameters that are made available to + * its providers. + * + * @defgroup auth_fns Authentication functions + * @{ + +The type of a Subversion authentication object + + +Put the absolute path to the user's configuration directory, + * or to a file within that directory, into @a *path. + * + * If @a config_dir is not NULL, it must point to an alternative + * config directory location. If it is NULL, the default location + * is used. If @a fname is not NULL, it must specify the last + * component of the path to be returned. This can be used to create + * a path to any file in the configuration directory. + * + * Do all allocations in @a pool. + * + * Hint: + * To get the user configuration file, pass @c SVN_CONFIG_CATEGORY_CONFIG + * for @a fname. To get the servers configuration file, pass + * @c SVN_CONFIG_CATEGORY_SERVERS for @a fname. + * + * @since New in 1.6. + + + +Use @a cred_kind and @a realmstring to create or overwrite a file + * within the ~/.subversion/auth/ area. Write the contents of @a hash into + * the file. If @a config_dir is not NULL it specifies a directory to read + * the config overriding all other sources. + * + * Also, add @a realmstring to the file, with key @c + * SVN_CONFIG_REALMSTRING_KEY. This allows programs (or users) to + * verify exactly which set credentials live within the file. + * + * The hashtable must contain const char * keys and + * svn_string_t * values. + + + +Accessing cached authentication data in the user config area. + * + * @defgroup cached_authentication_data Cached authentication data + * @{ + +A hash-key pointing to a realmstring. Every file containing + * authentication data should have this key. + +Use @a cred_kind and @a realmstring to locate a file within the + * ~/.subversion/auth/ area. If the file exists, initialize @a *hash + * and load the file contents into the hash, using @a pool. If the + * file doesn't exist, set @a *hash to NULL. + * + * If @a config_dir is not NULL it specifies a directory from which to + * read the config overriding all other sources. + * + * Besides containing the original credential fields, the hash will + * also contain @c SVN_CONFIG_REALMSTRING_KEY. The caller can examine + * this value as a sanity-check that the correct file was loaded. + * + * The hashtable will contain const char * keys and + * svn_string_t * values. + + + +Try to ensure that the user's ~/.subversion/ area exists, and create + * no-op template files for any absent config files. Use @a pool for any + * temporary allocation. If @a config_dir is not @c NULL it specifies a + * directory from which to read the config overriding all other sources. + * + * Don't error if something exists but is the wrong kind (for example, + * ~/.subversion exists but is a file, or ~/.subversion/servers exists + * but is a directory). + * + * Also don't error if trying to create something and failing -- it's + * okay for the config area or its contents not to be created. + * However, if creating a config template file succeeds, return an + * error if unable to initialize its contents. + + + +Set @a *valuep according to @a option_name for a given + * @a server_group in @a cfg, or set to @a default_value if no value is + * specified. + * + * Check first a default, then for an override in a server group. If + * a value is found but is not a valid boolean, return an + * SVN_ERR_BAD_CONFIG_VALUE error. + * + * @since New in 1.6. + + + +Retrieve value into @a result_value corresponding to @a option_name for a + * given @a server_group in @a cfg, or return @a default_value if none is + * found. + * + * The config will first be checked for a default, then will be checked for + * an override in a server group. If the value found is not a valid integer, + * a @c svn_error_t* will be returned. + + + +Retrieve value corresponding to @a option_name in @a cfg, or + * return @a default_value if none is found. + * + * The config will first be checked for a default. + * If @a server_group is not @c NULL, the config will also be checked + * for an override in a server group, + * + + + +Enumerate the group @a master_section in @a cfg. Each variable + * value is interpreted as a list of glob patterns (separated by comma + * and optional whitespace). Return the name of the first variable + * whose value matches @a key, or @c NULL if no variable matches. + + + + Return @c TRUE if @a section exists in @a cfg, @c FALSE otherwise. + + @since New in 1.4. + + + +Enumerate the options in @a section, passing @a baton and the current + * option's name and value to @a callback. Continue the enumeration if + * @a callback returns @c TRUE. Return the number of times @a callback + * was called. + * + * ### kff asks: A more usual interface is to continue enumerating + * while @a callback does not return error, and if @a callback does + * return error, to return the same error (or a wrapping of it) + * from svn_config_enumerate(). What's the use case for + * svn_config_enumerate()? Is it more likely to need to break out + * of an enumeration early, with no error, than an invocation of + * @a callback is likely to need to return an error? ### + * + * @a callback's @a name and @a value parameters are only valid for the + * duration of the call. + * + * @since New in 1.3. + + + +A callback function used in enumerating config options. + * + * See svn_config_enumerate2() for the details of this type. + * + * @since New in 1.3. + + + +Similar to svn_config_enumerate2(), but uses a memory pool of + * @a cfg instead of one that is explicitely provided. + * + * @deprecated Provided for backwards compatibility with the 1.2 API. + + + +Similar to @c svn_config_enumerator2_t, but is not + * provided with a memory pool argument. + * See svn_config_enumerate() for the details of this type. + * + * @deprecated Provided for backwards compatibility with the 1.2 API. + + + +Enumerate the sections, passing @a baton and the current section's name + * to @a callback. Continue the enumeration if @a callback returns @c TRUE. + * Return the number of times @a callback was called. + * + * ### See kff's comment to svn_config_enumerate2(). It applies to this + * function, too. ### + * + * @a callback's @a name parameter is only valid for the duration of the call. + * + * @since New in 1.3. + + + +A callback function used in enumerating config sections. + * + * See svn_config_enumerate_sections2() for the details of this type. + * + * @since New in 1.3. + + + +Similar to svn_config_enumerate_sections2(), but uses a memory pool of + * @a cfg instead of one that is explicitely provided. + * + * @deprecated Provided for backwards compatibility with the 1.2 API. + + + +Similar to @c svn_config_section_enumerator2_t, but is not + * provided with a memory pool argument. + * + * See svn_config_enumerate_sections() for the details of this type. + * + * @deprecated Provided for backwards compatibility with the 1.2 API. + + + +Like svn_config_get(), but only for yes/no/ask values. + * + * Parse @a option in @a section and set @a *valuep to one of + * SVN_CONFIG_TRUE, SVN_CONFIG_FALSE, or SVN_CONFIG_ASK. If there is + * no setting for @a option, then parse @a default_value and set + * @a *valuep accordingly. If @a default_value is NULL, the result is + * undefined, and may be an error; we recommend that you pass one of + * SVN_CONFIG_TRUE, SVN_CONFIG_FALSE, or SVN_CONFIG_ASK for @a default value. + * + * Valid representations are (at least) "true"/"false", "yes"/"no", + * "on"/"off", "1"/"0", and "ask"; they are case-insensitive. Return + * an SVN_ERR_BAD_CONFIG_VALUE error if either @a default_value or + * @a option's value is not a valid representation. + * + * @since New in 1.6. + + + +Like svn_config_set(), but for boolean values. + * + * Sets the option to 'TRUE'/'FALSE', depending on @a value. + + + +Like svn_config_get(), but for boolean values. + * + * Parses the option as a boolean value. The recognized representations + * are 'TRUE'/'FALSE', 'yes'/'no', 'on'/'off', '1'/'0'; case does not + * matter. Returns an error if the option doesn't contain a known string. + + + +Add or replace the value of a (@a section, @a option) pair in @a cfg with + * @a value. + * + * This function invalidates all value expansions in @a cfg. + * + * To remove an option, pass NULL for the @c value. + + + +Find the value of a (@a section, @a option) pair in @a cfg, set @a + * *valuep to the value. + * + * If @a cfg is @c NULL, just sets @a *valuep to @a default_value. If + * the value does not exist, expand and return @a default_value. @a + * default_value can be NULL. + * + * The returned value will be valid at least until the next call to + * svn_config_get(), or for the lifetime of @a default_value. It is + * safest to consume the returned value immediately. + * + * This function may change @a cfg by expanding option values. + + + +Like svn_config_read(), but merges the configuration data from @a file + * (a file or registry path) into @a *cfg, which was previously returned + * from svn_config_read(). This function invalidates all value + * expansions in @a cfg, so that the next svn_config_get() takes the + * modifications into account. + + + +Read configuration data from @a file (a file or registry path) into + * @a *cfgp, allocated in @a pool. + * + * If @a file does not exist, then if @a must_exist, return an error, + * otherwise return an empty @c svn_config_t. + + + +@name Client configuration files strings +Strings for the names of files, sections, and options in the +client configuration files. +@{ + +@} +@name Repository conf directory configuration files strings + * Strings for the names of sections and options in the + * repository conf directory configuration files. + * @{ + +@} +Read configuration information from the standard sources and merge it + * into the hash @a *cfg_hash. If @a config_dir is not NULL it specifies a + * directory from which to read the configuration files, overriding all + * other sources. Otherwise, first read any system-wide configurations + * (from a file or from the registry), then merge in personal + * configurations (again from file or registry). The hash and all its data + * are allocated in @a pool. + * + * @a *cfg_hash is a hash whose keys are @c const char * configuration + * categories (@c SVN_CONFIG_CATEGORY_SERVERS, + * @c SVN_CONFIG_CATEGORY_CONFIG, etc.) and whose values are the @c + * svn_config_t * items representing the configuration values for that + * category. + + + + @copyright + ==================================================================== + Copyright (c) 2000-2008 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_ra.h + @brief Repository Access + + @copyright + ==================================================================== + Copyright (c) 2000-2008 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_types.h + @brief Subversion's data types + + @copyright + ==================================================================== + Copyright (c) 2000-2006 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_string.h + @brief Counted-length strings for Subversion, plus some C string goodies. + + There are two string datatypes: @c svn_string_t and @c svn_stringbuf_t. + The former is a simple pointer/length pair useful for passing around + strings (or arbitrary bytes) with a counted length. @c svn_stringbuf_t is + buffered to enable efficient appending of strings without an allocation + and copy for each append operation. + + @c svn_string_t contains a const char * for its data, so it is + most appropriate for constant data and for functions which expect constant, + counted data. Functions should generally use const @c svn_string_t + * as their parameter to indicate they are expecting a constant, + counted string. + + @c svn_stringbuf_t uses a plain char * for its data, so it is + most appropriate for modifiable data. + +

Invariants

+ + 1. Null termination: + + Both structures maintain a significant invariant: + + s->data[s->len] == '\\0' + + The functions defined within this header file will maintain + the invariant (which does imply that memory is + allocated/defined as @c len+1 bytes). If code outside of the + @c svn_string.h functions manually builds these structures, + then they must enforce this invariant. + + Note that an @c svn_string(buf)_t may contain binary data, + which means that strlen(s->data) does not have to equal @c + s->len. The NULL terminator is provided to make it easier to + pass @c s->data to C string interfaces. + + + 2. Non-NULL input: + + All the functions assume their input data is non-NULL, + unless otherwise documented, and may seg fault if passed + NULL. The input data may *contain* null bytes, of course, just + the data pointer itself must not be NULL. + +

Memory allocation

+ + All the functions make a deep copy of all input data, and never store + a pointer to the original input data. + + @copyright + ==================================================================== + Copyright (c) 2000-2008 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_delta.h + @brief Delta-parsing + + @copyright + ==================================================================== + Copyright (c) 2002-2009 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_auth.h + @brief Subversion's authentication system + + @copyright + ==================================================================== + Copyright (c) 2000-2008 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_types.h + @brief Subversion's data types + + @copyright + ==================================================================== + Copyright (c) 2000-2008 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_config.h + @brief Accessing SVN configuration files. + + @copyright + ==================================================================== + Copyright (c) 2000-2008 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_types.h + @brief Subversion's data types + +Opaque structure describing a set of configuration options. +
+ + Same as svn_opt_print_help2(), but acts on #svn_opt_subcommand_desc_t. + + @deprecated Provided for backward compatibility with the 1.3 API. + + + + Same as svn_opt_print_help3(), but with @a global_options always @c + NULL. + + @deprecated Provided for backward compatibility with the 1.4 API. + + + + Central dispatcher function for various kinds of help message. + Prints one of: + * subcommand-specific help (svn_opt_subcommand_help) + * generic help (svn_opt_print_generic_help) + * version info + * simple usage complaint: "Type '@a pgm_name help' for usage." + + If @a os is not @c NULL and it contains arguments, then try + printing help for them as though they are subcommands, using @a + cmd_table and @a option_table for option information. If not @c + NULL, @a global_options is a zero-terminated array of options taken + by all subcommands. + + Else, if @a print_version is TRUE, then print version info, in + brief form if @a quiet is also TRUE; if @a quiet is FALSE, then if + @a version_footer is non-NULL, print it following the version + information. + + Else, if @a os is not @c NULL and does not contain arguments, print + generic help, via svn_opt_print_generic_help2() with the @a header, + @a cmd_table, @a option_table, and @a footer arguments. + + Else, when @a os is @c NULL, print the simple usage complaint. + + Use @a pool for temporary allocations. + + Notes: The reason this function handles both version printing and + general usage help is that a confused user might put both the + --version flag *and* subcommand arguments on a help command line. + The logic for handling such a situation should be in one place. + + @since New in 1.5. + + + + Parse a working-copy or URL in @a path, extracting any trailing + revision specifier of the form "@rev" from the last component of + the path. + + Some examples would be: + + "foo/bar" -> "foo/bar", (unspecified) + "foo/bar@13" -> "foo/bar", (number, 13) + "foo/bar@HEAD" -> "foo/bar", (head) + "foo/bar@{1999-12-31}" -> "foo/bar", (date, 1999-12-31) + "http://a/b@27" -> "http://a/b", (number, 27) + "http://a/b@COMMITTED" -> "http://a/b", (committed) [*] + "http://a/b@{1999-12-31} -> "http://a/b", (date, 1999-12-31) + "http://a/b@%7B1999-12-31%7D -> "http://a/b", (date, 1999-12-31) + "foo/bar@1:2" -> error + "foo/bar@baz" -> error + "foo/bar@" -> "foo/bar", (base) + "foo/bar/@13" -> "foo/bar/", (number, 13) + "foo/bar@@13" -> "foo/bar@", (number, 13) + "foo/@bar@HEAD" -> "foo/@bar", (head) + "foo@/bar" -> "foo@/bar", (unspecified) + "foo@HEAD/bar" -> "foo@HEAD/bar", (unspecified) + + [*] Syntactically valid but probably not semantically useful. + + If a trailing revision specifier is found, parse it into @a *rev and + put the rest of the path into @a *truepath, allocating from @a pool; + or return an @c SVN_ERR_CL_ARG_PARSING_ERROR (with the effect on + @a *truepath undefined) if the revision specifier is invalid. + If no trailing revision specifier is found, set @a *truepath to + @a path and @a rev->kind to @c svn_opt_revision_unspecified. + + This function does not require that @a path be in canonical form. + No canonicalization is done and @a *truepath will only be in + canonical form if @a path is in canonical form. + + @since New in 1.1. + + + +Parse all remaining arguments from @a os->argv, return them as +const char * in @a *args_p, without doing any UTF-8 conversion. +Allocate @a *args_p and its values in @a pool. + + + +Parse @a num_args non-target arguments from the list of arguments in +@a os->argv, return them as const char * in @a *args_p, without +doing any UTF-8 conversion. Allocate @a *args_p and its values in @a pool. + + + + If no targets exist in @a *targets, add `.' as the lone target. + + (Some commands take an implicit "." string argument when invoked + with no arguments. Those commands make use of this function to + add "." to the target array if the user passes no args.) + + + + Parse revprop key/value pair from @a revprop_spec (name[=value]) into + @a revprops, making copies of both with @a pool. If @a revprops is + @c NULL, allocate a new apr_hash_t in it. @a revprops maps + const char * revprop names to svn_string_t * revprop values for use + with svn_repos_get_commit_editor5 and other get_commit_editor APIs. + + @since New in 1.6. + + + + The same as svn_opt_args_to_target_array2() except that, in + addition, if @a extract_revisions is set, then look for trailing + "@rev" syntax on the first two paths. If the first target in @a + *targets_p ends in "@rev", replace it with a canonicalized version of + the part before "@rev" and replace @a *start_revision with the value + of "rev". If the second target in @a *targets_p ends in "@rev", + replace it with a canonicalized version of the part before "@rev" + and replace @a *end_revision with the value of "rev". Ignore + revision specifiers on any further paths. "rev" can be any form of + single revision specifier, as accepted by svn_opt_parse_revision(). + + @deprecated Provided for backward compatibility with the 1.1 API. + + + + This is the same as svn_opt_args_to_target_array3() except that it + silently ignores paths that have the same name as a working copy + administrative directory. + + @since New in 1.2. + + @deprecated Provided for backward compatibility with the 1.4 API. + + + + Pull remaining target arguments from @a os into @a *targets_p, + converting them to UTF-8, followed by targets from @a known_targets + (which might come from, for example, the "--targets" command line + option), which are already in UTF-8. + + On each URL target, do some IRI-to-URI encoding and some + auto-escaping. On each local path, canonicalize case and path + separators. + + Allocate @a *targets_p and its elements in @a pool. + + If a path has the same name as a Subversion working copy + administrative directory, return SVN_ERR_RESERVED_FILENAME_SPECIFIED; + if multiple reserved paths are encountered, return a chain of + errors, all of which are SVN_ERR_RESERVED_FILENAME_SPECIFIED. Do + not return this type of error in a chain with any other type of + error, and if this is the only type of error encountered, complete + the operation before returning the error(s). + + @deprecated Provided for backward compatibility with the 1.5 API. + @see svn_client_args_to_target_array() + + + + Resolve peg revisions and operational revisions in the following way: + + - If @a is_url is set and @a peg_rev->kind is + @c svn_opt_revision_unspecified, @a peg_rev->kind defaults to + @c svn_opt_revision_head. + + - If @a is_url is not set, and @a peg_rev->kind is + @c svn_opt_revision_unspecified, @a peg_rev->kind defaults to + @c svn_opt_revision_base. + + - If @a op_rev->kind is @c svn_opt_revision_unspecified, @a op_rev + defaults to @a peg_rev. + + Both @a peg_rev and @a op_rev may be modified as a result of this + function. @a is_url should be set if the path the revisions refer to is + a url, and unset otherwise. + + If @a notice_local_mods is set, @c svn_opt_revision_working is used, + instead of @c svn_opt_revision_base. + + Use @a pool for allocations. + + @since New in 1.5. + + + + Parse @a arg, where @a arg is "N" or "N:M", into a + @c svn_opt_revision_range_t and push that onto @a opt_ranges. + + - If @a arg is "N", set the @c start field of the + @c svn_opt_revision_range_t to represent N and the @c end field + to @c svn_opt_revision_unspecified. + + - If @a arg is "N:M", set the @c start field of the + @c svn_opt_revision_range_t to represent N and the @c end field + to represent M. + + If @a arg is invalid, return -1; else return 0. It is invalid to omit + a revision (as in, ":", "N:" or ":M"). + + Use @a pool to allocate @c svn_opt_revision_range_t pushed to the array. + + @since New in 1.5. + + + + Set @a *start_revision and/or @a *end_revision according to @a arg, + where @a arg is "N" or "N:M", like so: + + - If @a arg is "N", set @a *start_revision to represent N, and + leave @a *end_revision untouched. + + - If @a arg is "N:M", set @a *start_revision and @a *end_revision + to represent N and M respectively. + + N and/or M may be one of the special revision descriptors + recognized by revision_from_word(), or a date in curly braces. + + If @a arg is invalid, return -1; else return 0. + It is invalid to omit a revision (as in, ":", "N:" or ":M"). + + @note It is typical, though not required, for @a *start_revision and + @a *end_revision to be @c svn_opt_revision_unspecified kind on entry. + + Use @a pool for temporary allocations. + + + +The last revision in the range + + +The first revision in the range + + +A revision range, specified in one of @c svn_opt_revision_kind ways. + + +A revision, specified in one of @c svn_opt_revision_kind ways. + + +the date of the revision + + +The revision number + + + A revision value, which can be specified as a number or a date. + + @note This union was formerly an anonymous inline type in + @c svn_opt_revision_t, and was converted to a named type just to + make things easier for SWIG. + + @since New in 1.3. + + + + Various ways of specifying revisions. + + @note + In contexts where local mods are relevant, the `working' kind + refers to the uncommitted "working" revision, which may be modified + with respect to its base revision. In other contexts, `working' + should behave the same as `committed' or `current'. + + + +repository youngest + + +current, plus local mods + + +.svn/entries current revision + + +(rev of most recent change) - 1 + + +rev of most recent change + + +revision given as date + + +revision given as number + + +No revision information given. + + + Same as svn_opt_subcommand_help2(), but acts on + #svn_opt_subcommand_desc_t. + + @deprecated Provided for backward compatibility with the 1.3 API. + + + + Same as svn_opt_subcommand_help3(), but with @a global_options + always NULL. + + @deprecated Provided for backward compatibility with the 1.4 API. + + + + Get @a subcommand's usage from @a table, and print it to @c stdout. + Obtain option usage from @a options_table. If not @c NULL, @a + global_options is a zero-terminated list of global options. Use @a + pool for temporary allocation. @a subcommand may be a canonical + command name or an alias. ### @todo Why does this only print to + @c stdout, whereas svn_opt_print_generic_help() gives us a choice? + + @since New in 1.5. + + + +Print an option @a opt nicely into a @a string allocated in @a pool. +If @a doc is set, include the generic documentation string of @a opt, +localized to the current locale if a translation is available. + + + + Same as svn_opt_print_generic_help2(), but acts on + #svn_opt_subcommand_desc_t. + + @deprecated Provided for backward compatibility with the 1.3 API. + + + + Print a generic (not command-specific) usage message to @a stream. + + ### @todo Why is @a stream a stdio file instead of an svn stream? + + If @a header is non-NULL, print @a header followed by a newline. Then + loop over @a cmd_table printing the usage for each command (getting + option usages from @a opt_table). Then if @a footer is non-NULL, print + @a footer followed by a newline. + + Use @a pool for temporary allocation. + + @since New in 1.4. + + + + Return @c TRUE iff subcommand @a command supports option @a option_code, + else return @c FALSE. + + Same as svn_opt_subcommand_takes_option2(), but acts on + #svn_opt_subcommand_desc_t. + + @deprecated Provided for backward compatibility with the 1.3 API. + + + + Same as svn_opt_subcommand_takes_option3(), but with @c NULL for @a + global_options. + + @deprecated Provided for backward compatibility with the 1.4 API. + + + + Return @c TRUE iff subcommand @a command supports option @a + option_code, else return @c FALSE. If @a global_options is + non-NULL, it is a zero-terminated array, and all subcommands take + the options listed in it. + + @since New in 1.5. + + + + Return the first entry from @a option_table whose option code is @a code, + or @c NULL if no match. @a option_table must end with an element whose + every field is zero. + + @deprecated Provided for backward compatibility with the 1.3 API. + + + + Return pointer to an @c apr_getopt_option_t for the option whose + option code is @a code, or @c NULL if no match. @a option_table must end + with an element whose every field is zero. If @c command is non-NULL, + then return the subcommand-specific option description instead of the + generic one, if a specific description is defined. + + The returned value may be statically allocated, or allocated in @a pool. + + @since New in 1.4. + + + + Return the entry in @a table whose name matches @a cmd_name, or @c NULL if + none. @a cmd_name may be an alias. + + Same as svn_opt_get_canonical_subcommand2(), but acts on + #svn_opt_subcommand_desc_t. + + @deprecated Provided for backward compatibility with the 1.3 API. + + + + Return the entry in @a table whose name matches @a cmd_name, or @c NULL if + none. @a cmd_name may be an alias. + + @since New in 1.4. + + + +A list of options accepted by this command. Each value in the + * array is a unique enum (the 2nd field in apr_getopt_option_t) + + + +A brief string describing this command, for usage messages. + + +A list of alias names for this command (e.g., 'up' for 'update'). + + +The function this command invokes. + + +The full name of this command. + + +One element of a subcommand dispatch table. + * + * @deprecated Provided for backward compatibility with the 1.3 API. + * + * Like #svn_opt_subcommand_desc2_t but lacking the @c desc_overrides + * member. + + + +A list of options accepted by this command. Each value in the + * array is a unique enum (the 2nd field in apr_getopt_option_t) + + + +A brief string describing this command, for usage messages. + + +A list of alias names for this command (e.g., 'up' for 'update'). + + +The function this command invokes. + + +The full name of this command. + + +The maximum number of aliases a subcommand can have. +The maximum number of options that can be accepted by a subcommand. +Options that have no short option char should use an identifying + * integer equal to or greater than this. + +One element of a subcommand dispatch table. + * + * @since New in 1.4. + + + + @copyright + ==================================================================== + Copyright (c) 2000-2008 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_opt.h + @brief Option and argument parsing for Subversion command lines + + @copyright + ==================================================================== + Copyright (c) 2000-2008 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_types.h + @brief Subversion's data types + + All subcommand procedures in Subversion conform to this prototype. + + @a os is the apr option state after getopt processing has been run; in + other words, it still contains the non-option arguments following + the subcommand. See @a os->argv and @a os->ind. + + @a baton is anything you need it to be. + + @a pool is used for allocating errors, and for any other allocation + unless the instance is explicitly documented to allocate from a + pool in @a baton. + + + +Return, in @a *handler2 and @a *handler2_baton a function/baton that + * will call @a handler/@a handler_baton, allocating the @a *handler2_baton + * in @a pool. + * + * @note This is used by compatibility wrappers, which exist in more than + * Subversion core library. + * + * @note @c svn_file_rev_handler_old_t is a placeholder type for both + * @c svn_repos_file_rev_handler_t and @c svn_ra_file_rev_handler_t. It is + * reproduced here for dependency reasons. + * + * @since New in 1.5. + + + + The old file rev handler interface. + + @note @c svn_file_rev_handler_old_t is a placeholder type for both + @c svn_repos_file_rev_handler_t and @c svn_ra_file_rev_handler_t. It is + reproduced here for dependency reasons. + + @deprecated This type is provided for the svn_compat_wrap_file_rev_handler() + compatibilty wrapper, and should not be used for new development. + @since New in 1.5. + + + +@} + The callback invoked by file rev loopers, such as + svn_ra_plugin_t.get_file_revs2() and svn_repos_get_file_revs2(). + + @a baton is provided by the caller, @a path is the pathname of the file + in revision @a rev and @a rev_props are the revision properties. + + If @a delta_handler and @a delta_baton are non-NULL, they may be set to a + handler/baton which will be called with the delta between the previous + revision and this one after the return of this callback. They may be + left as NULL/NULL. + + @a result_of_merge will be @c TRUE if the revision being returned was + included as the result of a merge. + + @a prop_diffs is an array of svn_prop_t elements indicating the property + delta for this and the previous revision. + + @a pool may be used for temporary allocations, but you can't rely + on objects allocated to live outside of this particular call and + the immediately following calls to @a *delta_handler if any. (Pass + in a pool via @a baton if need be.) + + @since New in 1.5. + + + +Drive @a editor (with its @a edit_baton) in such a way that + * each path in @a paths is traversed in a depth-first fashion. As + * each path is hit as part of the editor drive, use @a + * callback_func and @a callback_baton to allow the caller to handle + * the portion of the editor drive related to that path. + * + * Use @a revision as the revision number passed to intermediate + * directory openings. + * + * Use @a pool for all necessary allocations. + + + +@} +Path-based editor drives. + * + * @defgroup svn_delta_path_delta_drivers Path-based delta drivers + * @{ + +Callback function type for svn_delta_path_driver(). + * + * The handler of this callback is given the callback baton @a + * callback_baton, @a path, and the @a parent_baton which represents + * path's parent directory as created by the editor passed to + * svn_delta_path_driver(). + * + * If @a path represents a directory, the handler must return a @a + * *dir_baton for @a path, generated from the same editor (so that the + * driver can later close that directory). + * + * If, however, @a path represents a file, the handler should NOT + * return any file batons. It can close any opened or added files + * immediately, or delay that close until the end of the edit when + * svn_delta_path_driver() returns. + * + * Finally, if @a parent_baton is @c NULL, then the root of the edit + * is also one of the paths passed to svn_delta_path_driver(). The + * handler of this callback must call the editor's open_root() + * function and return the top-level root dir baton in @a *dir_baton. + + + +Set @a *editor and @a *edit_baton to an depth-based filtering + * editor that wraps @a wrapped_editor and @a wrapped_baton. + * + * The @a editor will track the depth of this drive against the @a + * requested_depth, taking into account whether not the edit drive is + * making use of a target (via @a has_target), and forward editor + * calls which operate "within" the request depth range through to @a + * wrapped_editor. + * + * @a requested_depth must be one of the following depth values: + * @c svn_depth_infinity, @c svn_depth_empty, @c svn_depth_files, + * @c svn_depth_immediates, or @c svn_depth_unknown. + * + * If filtering is deemed unncessary (or if @a requested_depth is @c + * svn_depth_unknown), @a *editor and @a *edit_baton will be set to @a + * wrapped_editor and @a wrapped_baton, respectively; otherwise, + * they'll be set to new objects allocated from @a pool. + * + * @note Because the svn_delta_editor_t interface's @c delete_entry() + * function doesn't carry node kind information, a depth-based + * filtering editor being asked to filter for @c svn_depth_files but + * receiving a @c delete_entry() call on an immediate child of the + * editor's target is unable to know if that deletion should be + * allowed or filtered out -- a delete of a top-level file is okay in + * this case, a delete of a top-level subdirectory is not. As such, + * this filtering editor takes a conservative approach, and ignores + * top-level deletion requests when filtering for @c svn_depth_files. + * Fortunately, most non-depth-aware (pre-1.5) Subversion editor + * drivers can be told to drive non-recursively (where non-recursive + * means essentially @c svn_depth_files), which means they won't + * transmit out-of-scope editor commands anyway. + * + * @since New in 1.5. + + + +Set @a *editor and @a *edit_baton to a cancellation editor that + * wraps @a wrapped_editor and @a wrapped_baton. + * + * The @a editor will call @a cancel_func with @a cancel_baton when each of + * its functions is called, continuing on to call the corresponding wrapped + * function if @a cancel_func returns @c SVN_NO_ERROR. + * + * If @a cancel_func is @c NULL, set @a *editor to @a wrapped_editor and + * @a *edit_baton to @a wrapped_baton. + + + +A text-delta window handler which does nothing. + * + * Editors can return this handler from @c apply_textdelta if they don't + * care about text delta windows. + + + +Return a default delta editor template, allocated in @a pool. + * + * The editor functions in the template do only the most basic + * baton-swapping: each editor function that produces a baton does so + * by copying its incoming baton into the outgoing baton reference. + * + * This editor is not intended to be useful by itself, but is meant to + * be the basis for a useful editor. After getting a default editor, + * you substitute in your own implementations for the editor functions + * you care about. The ones you don't care about, you don't have to + * implement -- you can rely on the template's implementation to + * safely do nothing of consequence. + + + +The editor-driver has decided to bail out. Allow the editor to + * gracefully clean up things if it needs to. + + + +All delta processing is done. Call this, with the @a edit_baton for + * the entire edit. + + + +In the directory represented by @a parent_baton, indicate that + * @a path is present as a file in the edit source, but cannot be + * conveyed to the edit consumer (perhaps because of authorization + * restrictions). + + + +We are done processing a file, whose baton is @a file_baton (set by + * @c add_file or @c open_file). We won't be using the baton any + * more, so whatever resources it refers to may now be freed. + * + * @a text_checksum is the hex MD5 digest for the fulltext that + * resulted from a delta application, see @c apply_textdelta. The + * checksum is ignored if NULL. If not null, it is compared to the + * checksum of the new fulltext, and the error + * SVN_ERR_CHECKSUM_MISMATCH is returned if they do not match. If + * there is no new fulltext, @a text_checksum is ignored. + + + +Change the value of a file's property. + * - @a file_baton specifies the file whose property should change. + * - @a name is the name of the property to change. + * - @a value is the new (final) value of the property, or @c NULL if the + * property should be removed altogether. + * + * The callback is guaranteed to be called exactly once for each property + * whose value differs between the start and the end of the edit. + * + * All allocations should be performed in @a pool. + + + +Apply a text delta, yielding the new revision of a file. + * + * @a file_baton indicates the file we're creating or updating, and the + * ancestor file on which it is based; it is the baton set by some + * prior @c add_file or @c open_file callback. + * + * The callback should set @a *handler to a text delta window + * handler; we will then call @a *handler on successive text + * delta windows as we receive them. The callback should set + * @a *handler_baton to the value we should pass as the @a baton + * argument to @a *handler. + * + * @a base_checksum is the hex MD5 digest for the base text against + * which the delta is being applied; it is ignored if NULL, and may + * be ignored even if not NULL. If it is not ignored, it must match + * the checksum of the base text against which svndiff data is being + * applied; if it does not, @c apply_textdelta or the @a *handler call + * which detects the mismatch will return the error + * SVN_ERR_CHECKSUM_MISMATCH (if there is no base text, there may + * still be an error if @a base_checksum is neither NULL nor the hex + * MD5 checksum of the empty string). + + + +We are going to make change to a file named @a path, which resides + * in the directory identified by @a parent_baton. + * + * The callback can store a baton for this new file in @a **file_baton; + * whatever value it stores there should be passed through to + * @c apply_textdelta. If a valid revnum, @a base_revision is the + * current revision of the file. + * + * Allocations for the returned @a file_baton should be performed in + * @a file_pool. It is also typical to save this pool for later usage + * by @c apply_textdelta and possibly @c close_file. + + + +We are going to add a new file named @a path. The callback can + * store a baton for this new file in @a **file_baton; whatever value + * it stores there should be passed through to @c apply_textdelta. + * + * If @a copyfrom_path is non-@c NULL, this add has history (i.e., is a + * copy), and the origin of the copy may be recorded as + * @a copyfrom_path under @a copyfrom_revision. + * + * Allocations for the returned @a file_baton should be performed in + * @a file_pool. It is also typical to save this pool for later usage + * by @c apply_textdelta and possibly @c close_file. + + + +In the directory represented by @a parent_baton, indicate that + * @a path is present as a subdirectory in the edit source, but + * cannot be conveyed to the edit consumer (perhaps because of + * authorization restrictions). + + + +We are done processing a subdirectory, whose baton is @a dir_baton + * (set by @c add_directory or @c open_directory). We won't be using + * the baton any more, so whatever resources it refers to may now be + * freed. + + + +Change the value of a directory's property. + * - @a dir_baton specifies the directory whose property should change. + * - @a name is the name of the property to change. + * - @a value is the new (final) value of the property, or @c NULL if the + * property should be removed altogether. + * + * The callback is guaranteed to be called exactly once for each property + * whose value differs between the start and the end of the edit. + * + * All allocations should be performed in @a pool. + + + +We are going to make changes in a subdirectory (of the directory + * identified by @a parent_baton). The subdirectory is specified by + * @a path. The callback must store a value in @a *child_baton that + * should be used as the @a parent_baton for subsequent changes in this + * subdirectory. If a valid revnum, @a base_revision is the current + * revision of the subdirectory. + * + * Allocations for the returned @a child_baton should be performed in + * @a dir_pool. It is also typical to (possibly) save this pool for later + * usage by @c close_directory. + + + +We are going to add a new subdirectory named @a path. We will use + * the value this callback stores in @a *child_baton as the + * @a parent_baton for further changes in the new subdirectory. + * + * If @a copyfrom_path is non-@c NULL, this add has history (i.e., is a + * copy), and the origin of the copy may be recorded as + * @a copyfrom_path under @a copyfrom_revision. + * + * Allocations for the returned @a child_baton should be performed in + * @a dir_pool. It is also typical to (possibly) save this pool for later + * usage by @c close_directory. + + + +Remove the directory entry named @a path, a child of the directory + * represented by @a parent_baton. If @a revision is a valid + * revision number, it is used as a sanity check to ensure that you + * are really removing the revision of @a path that you think you are. + * + * All allocations should be performed in @a pool. + * + * @note The @a revision parameter is typically used only for + * client->server commit-type operations, allowing the server to + * verify that it is deleting what the client thinks it should be + * deleting. It only really makes sense in the opposite direction + * (during server->client update-type operations) when the trees + * whose delta is being described are ancestrally related (that is, + * one tree is an ancestor of the other). + + + +Set @a *root_baton to a baton for the top directory of the change. + * (This is the top of the subtree being changed, not necessarily + * the root of the filesystem.) As with any other directory baton, the + * producer should call @c close_directory on @a root_baton when done. + * And as with other @c open_* calls, the @a base_revision here is the + * current revision of the directory (before getting bumped up to the + * new target revision set with @c set_target_revision). + * + * Allocations for the returned @a root_baton should be performed in + * @a dir_pool. It is also typical to (possibly) save this pool for later + * usage by @c close_directory. + + + +Set the target revision for this edit to @a target_revision. This + * call, if used, should precede all other editor calls. + * + * @note This is typically used only for server->client update-type + * operations. It doesn't really make much sense for commit-type + * operations, because the revision of a commit isn't known until + * the commit is finalized. + + + +@} +Traversing tree deltas. + * + * In Subversion, we've got various producers and consumers of tree + * deltas. + * + * In processing a `commit' command: + * - The client examines its working copy data, and produces a tree + * delta describing the changes to be committed. + * - The client networking library consumes that delta, and sends them + * across the wire as an equivalent series of network requests (for + * example, to svnserve as an ra_svn protocol stream, or to an + * Apache httpd server as WebDAV commands) + * - The server receives those requests and produces a tree delta --- + * hopefully equivalent to the one the client produced above. + * - The Subversion server module consumes that delta and commits an + * appropriate transaction to the filesystem. + * + * In processing an `update' command, the process is reversed: + * - The Subversion server module talks to the filesystem and produces + * a tree delta describing the changes necessary to bring the + * client's working copy up to date. + * - The server consumes this delta, and assembles a reply + * representing the appropriate changes. + * - The client networking library receives that reply, and produces a + * tree delta --- hopefully equivalent to the one the Subversion + * server produced above. + * - The working copy library consumes that delta, and makes the + * appropriate changes to the working copy. + * + * The simplest approach would be to represent tree deltas using the + * obvious data structure. To do an update, the server would + * construct a delta structure, and the working copy library would + * apply that structure to the working copy; the network layer's job + * would simply be to get the structure across the net intact. + * + * However, we expect that these deltas will occasionally be too large + * to fit in a typical workstation's swap area. For example, in + * checking out a 200Mb source tree, the entire source tree is + * represented by a single tree delta. So it's important to handle + * deltas that are too large to fit in swap all at once. + * + * So instead of representing the tree delta explicitly, we define a + * standard way for a consumer to process each piece of a tree delta + * as soon as the producer creates it. The @c svn_delta_editor_t + * structure is a set of callback functions to be defined by a delta + * consumer, and invoked by a delta producer. Each invocation of a + * callback function describes a piece of the delta --- a file's + * contents changing, something being renamed, etc. + * + * @defgroup svn_delta_tree_deltas Tree deltas + * @{ + +A structure full of callback functions the delta source will invoke + * as it produces the delta. + * + * Note: Don't try to allocate one of these yourself. Instead, always + * use svn_delta_default_editor() or some other constructor, to ensure + * that unused slots are filled in with no-op functions. + * + *

Function Usage

+ * + * Here's how to use these functions to express a tree delta. + * + * The delta consumer implements the callback functions described in + * this structure, and the delta producer invokes them. So the + * caller (producer) is pushing tree delta data at the callee + * (consumer). + * + * At the start of traversal, the consumer provides @a edit_baton, a + * baton global to the entire delta edit. If there is a target + * revision that needs to be set for this operation, the producer + * should call the @c set_target_revision function at this point. + * + * Next, if there are any tree deltas to express, the producer should + * pass the @a edit_baton to the @c open_root function, to get a baton + * representing root of the tree being edited. + * + * Most of the callbacks work in the obvious way: + * + * @c delete_entry + * @c add_file + * @c add_directory + * @c open_file + * @c open_directory + * + * Each of these takes a directory baton, indicating the directory + * in which the change takes place, and a @a path argument, giving the + * path (relative to the root of the edit) of the file, + * subdirectory, or directory entry to change. Editors will usually + * want to join this relative path with some base stored in the edit + * baton (e.g. a URL, a location in the OS filesystem). + * + * Since every call requires a parent directory baton, including + * @c add_directory and @c open_directory, where do we ever get our + * initial directory baton, to get things started? The @c open_root + * function returns a baton for the top directory of the change. In + * general, the producer needs to invoke the editor's @c open_root + * function before it can get anything of interest done. + * + * While @c open_root provides a directory baton for the root of + * the tree being changed, the @c add_directory and @c open_directory + * callbacks provide batons for other directories. Like the + * callbacks above, they take a @a parent_baton and a relative path + * @a path, and then return a new baton for the subdirectory being + * created / modified --- @a child_baton. The producer can then use + * @a child_baton to make further changes in that subdirectory. + * + * So, if we already have subdirectories named `foo' and `foo/bar', + * then the producer can create a new file named `foo/bar/baz.c' by + * calling: + * + * - @c open_root () --- yielding a baton @a root for the top directory + * + * - @c open_directory (@a root, "foo") --- yielding a baton @a f for `foo' + * + * - @c open_directory (@a f, "foo/bar") --- yielding a baton @a b for + * `foo/bar' + * + * - @c add_file (@a b, "foo/bar/baz.c") + * + * When the producer is finished making changes to a directory, it + * should call @c close_directory. This lets the consumer do any + * necessary cleanup, and free the baton's storage. + * + * The @c add_file and @c open_file callbacks each return a baton + * for the file being created or changed. This baton can then be + * passed to @c apply_textdelta to change the file's contents, or + * @c change_file_prop to change the file's properties. When the + * producer is finished making changes to a file, it should call + * @c close_file, to let the consumer clean up and free the baton. + * + * The @c add_file and @c add_directory functions each take arguments + * @a copyfrom_path and @a copyfrom_revision. If @a copyfrom_path is + * non-@c NULL, then @a copyfrom_path and @a copyfrom_revision indicate where + * the file or directory should be copied from (to create the file + * or directory being added). In that case, @a copyfrom_path must be + * either a path relative to the root of the edit, or a URI from the + * repository being edited. If @a copyfrom_path is @c NULL, then @a + * copyfrom_revision must be @c SVN_INVALID_REVNUM; it is invalid to + * pass a mix of valid and invalid copyfrom arguments. + * + * + *

Function Call Ordering

+ * + * There are six restrictions on the order in which the producer + * may use the batons: + * + * 1. The producer may call @c open_directory, @c add_directory, + * @c open_file, @c add_file at most once on any given directory + * entry. @c delete_entry may be called at most once on any given + * directory entry and may later be followed by @c add_directory or + * @c add_file on the same directory entry. @c delete_entry may + * not be called on any directory entry after @c open_directory, + * @c add_directory, @c open_file or @c add_file has been called on + * that directory entry. + * + * 2. The producer may not close a directory baton until it has + * closed all batons for its subdirectories. + * + * 3. When a producer calls @c open_directory or @c add_directory, + * it must specify the most recently opened of the currently open + * directory batons. Put another way, the producer cannot have + * two sibling directory batons open at the same time. + * + * 4. A producer must call @c change_dir_prop on a directory either + * before opening any of the directory's subdirs or after closing + * them, but not in the middle. + * + * 5. When the producer calls @c open_file or @c add_file, either: + * + * (a) The producer must follow with any changes to the file + * (@c change_file_prop and/or @c apply_textdelta, as applicable), + * followed by a @c close_file call, before issuing any other file + * or directory calls, or + * + * (b) The producer must follow with a @c change_file_prop call if + * it is applicable, before issuing any other file or directory + * calls; later, after all directory batons including the root + * have been closed, the producer must issue @c apply_textdelta + * and @c close_file calls. + * + * 6. When the producer calls @c apply_textdelta, it must make all of + * the window handler calls (including the @c NULL window at the + * end) before issuing any other @c svn_delta_editor_t calls. + * + * So, the producer needs to use directory and file batons as if it + * is doing a single depth-first traversal of the tree, with the + * exception that the producer may keep file batons open in order to + * make @c apply_textdelta calls at the end. + * + * + *

Pool Usage

+ * + * Many editor functions are invoked multiple times, in a sequence + * determined by the editor "driver". The driver is responsible for + * creating a pool for use on each iteration of the editor function, + * and clearing that pool between each iteration. The driver passes + * the appropriate pool on each function invocation. + * + * Based on the requirement of calling the editor functions in a + * depth-first style, it is usually customary for the driver to similarly + * nest the pools. However, this is only a safety feature to ensure + * that pools associated with deeper items are always cleared when the + * top-level items are also cleared. The interface does not assume, nor + * require, any particular organization of the pools passed to these + * functions. In fact, if "postfix deltas" are used for files, the file + * pools definitely need to live outside the scope of their parent + * directories' pools. + * + * Note that close_directory can be called *before* a file in that + * directory has been closed. That is, the directory's baton is + * closed before the file's baton. The implication is that + * @c apply_textdelta and @c close_file should not refer to a parent + * directory baton UNLESS the editor has taken precautions to + * allocate it in a pool of the appropriate lifetime (the @a dir_pool + * passed to @c open_directory and @c add_directory definitely does not + * have the proper lifetime). In general, it is recommended to simply + * avoid keeping a parent directory baton in a file baton. + * + * + *

Errors

+ * + * At least one implementation of the editor interface is + * asynchronous; an error from one operation may be detected some + * number of operations later. As a result, an editor driver must not + * assume that an error from an editing function resulted from the + * particular operation being detected. Moreover, once an editing + * function returns an error, the edit is dead; the only further + * operation which may be called on the editor is abort_edit. + +
+ +Return a writable generic stream which will parse svndiff-format + * data into a text delta, invoking @a handler with @a handler_baton + * whenever a new window is ready. If @a error_on_early_close is @c + * TRUE, attempting to close this stream before it has handled the entire + * svndiff data set will result in @c SVN_ERR_SVNDIFF_UNEXPECTED_END, + * else this error condition will be ignored. + + + +Similar to svn_txdelta_to_svndiff2, but always using svndiff + * version 0. + * + * @deprecated Provided for backward compatibility with the 1.3 API. + + + +Prepare to produce an svndiff-format diff from text delta windows. + * @a output is a writable generic stream to write the svndiff data to. + * Allocation takes place in a sub-pool of @a pool. On return, @a *handler + * is set to a window handler function and @a *handler_baton is set to + * the value to pass as the @a baton argument to @a *handler. The svndiff + * version is @a svndiff_version. + * + * @since New in 1.4. + + + +Prepare to apply a text delta. @a source is a readable generic stream + * yielding the source data, @a target is a writable generic stream to + * write target data to, and allocation takes place in a sub-pool of + * @a pool. On return, @a *handler is set to a window handler function and + * @a *handler_baton is set to the value to pass as the @a baton argument to + * @a *handler. + * + * If @a result_digest is non-NULL, it points to APR_MD5_DIGESTSIZE bytes + * of storage, and the final call to @a handler populates it with the + * MD5 digest of the resulting fulltext. + * + * If @a error_info is non-NULL, it is inserted parenthetically into + * the error string for any error returned by svn_txdelta_apply() or + * @a *handler. (It is normally used to provide path information, + * since there's nothing else in the delta application's context to + * supply a path for error messages.) + * + * @note To avoid lifetime issues, @a error_info is copied into + * @a pool or a subpool thereof. + + + +Send the contents of @a txstream to window-handler @a handler/@a baton. + * Windows will be extracted from the stream and delivered to the handler. + * + * All temporary allocation is performed in @a pool. + + + +Send the contents of @a stream to window-handler @a handler/@a baton. + * This is effectively a 'copy' operation, resulting in delta windows that + * make the target equivalent to the stream. + * + * If @a digest is non-NULL, populate it with the md5 checksum for the + * fulltext that was deltified (@a digest must be at least + * @c APR_MD5_DIGESTSIZE bytes long). + * + * All temporary allocation is performed in @a pool. + + + +Send the contents of @a string to window-handler @a handler/@a baton. + * This is effectively a 'copy' operation, resulting in delta windows that + * make the target equivalent to the value of @a string. + * + * All temporary allocation is performed in @a pool. + + + + Return a writable stream which, when fed target data, will send + delta windows to @a handler/@a handler_baton which transform the + data in @a source to the target data. As usual, the window handler + will receive a NULL window to signify the end of the window stream. + The stream handler functions will read data from @a source as + necessary. + + @since New in 1.1. + + + +Set @a *stream to a pointer to a delta stream that will turn the byte + * string from @a source into the byte stream from @a target. + * + * @a source and @a target are both readable generic streams. When we call + * svn_txdelta_next_window() on @a *stream, it will read from @a source and + * @a target to gather as much data as it needs. + * + * Do any necessary allocation in a sub-pool of @a pool. + + + +Return the md5 digest for the complete fulltext deltified by + * @a stream, or @c NULL if @a stream has not yet returned its final + * @c NULL window. The digest is allocated in the same memory as @a + * STREAM. + + + +Set @a *window to a pointer to the next window from the delta stream + * @a stream. When we have completely reconstructed the target string, + * set @a *window to zero. + * + * The window will be allocated in @a pool. + + + +Create and return a generic text delta stream with @a baton, @a + * next_window and @a md5_digest. Allocate the new stream in @a + * pool. + * + * @since New in 1.4. + + + +A typedef for a function that will return the md5 checksum of the + * fulltext deltified by a @c svn_txdelta_stream_t object. Will + * return NULL if the final null window hasn't yet been returned by + * the stream. The returned value will be allocated in the same pool + * as the stream. @a baton is the baton specified when the stream was + * created. + * + * @since New in 1.4. + + + +A typedef for a function that will set @a *window to the next + * window from a @c svn_txdelta_stream_t object. If there are no more + * delta windows, NULL will be used. The returned window, if any, + * will be allocated in @a pool. @a baton is the baton specified + * when the stream was created. + * + * @since New in 1.4. + + + +A delta stream --- this is the hat from which we pull a series of + * svn_txdelta_window_t objects, which, taken in order, describe the + * entire target string. This type is defined within libsvn_delta, and + * opaque outside that library. + + + +This function will generate delta windows that turn @a source into + * @a target, and pushing these windows into the @a handler window handler + * callback (passing @a handler_baton to each invocation). + * + * If @a checksum is not NULL, then a checksum (of kind @a checksum_kind) + * will be computed for the target stream, and placed into *checksum. + * + * If @a cancel_func is not NULL, then it should refer to a cancellation + * function (along with @a cancel_baton). + * + * Results (the checksum) will be allocated from @a result_pool, and all + * temporary allocations will be performed in @a scratch_pool. + * + * Note: this function replaces the combination of svn_txdelta() and + * svn_txdelta_send_txstream(). + * + * @since New in 1.6. + + + +A typedef for functions that consume a series of delta windows, for + * use in caller-pushes interfaces. Such functions will typically + * apply the delta windows to produce some file, or save the windows + * somewhere. At the end of the delta window stream, you must call + * this function passing zero for the @a window argument. + + + + Apply the instructions from @a window to a source view @a sbuf to + produce a target view @a tbuf. + + @a sbuf is assumed to have @a window->sview_len bytes of data and + @a tbuf is assumed to have room for @a tlen bytes of output. @a + tlen may be more than @a window->tview_len, so return the actual + number of bytes written. @a sbuf is not touched and may be NULL if + @a window contains no source-copy operations. This is purely a + memory operation; nothing can go wrong as long as we have a valid + window. + + @since New in 1.4 + + + + + Compose two delta windows, yielding a third, allocated in @a pool. + + @since New in 1.4 + + + + + Return a deep copy of @a window, allocated in @a pool. + + @since New in 1.3. + + + +New data, for use by any `svn_txdelta_new' instructions. + + +The instructions for this window. + + +The number of svn_txdelta_source instructions in this window. If + * this number is 0, we don't need to read the source in order to + * reconstruct the target view. + + + +The number of instructions in this window. + + +The length of the target view for this window, i.e. the number of + * bytes which will be reconstructed by the instruction stream. + + +The length of the source view for this window. + + +The offset of the source view for this window. + + +An @c svn_txdelta_window_t object describes how to reconstruct a + * contiguous section of the target string (the "target view") using a + * specified contiguous region of the source string (the "source + * view"). It contains a series of instructions which assemble the + * new target string text by pulling together substrings from: + * + * - the source view, + * + * - the previously constructed portion of the target view, + * + * - a string of new data contained within the window structure + * + * The source view must always slide forward from one window to the + * next; that is, neither the beginning nor the end of the source view + * may move to the left as we read from a window stream. This + * property allows us to apply deltas to non-seekable source streams + * without making a full copy of the source stream. + + + +Number of bytes of delta, see #svn_delta_action for more details. + + +Offset of delta, see #svn_delta_action for more details. + + +A single text delta instruction. + + + @defgroup delta_support Delta generation and handling + + @{ + +Text deltas. +* +* A text delta represents the difference between two strings of +* bytes, the `source' string and the `target' string. Given a source +* string and a target string, we can compute a text delta; given a +* source string and a delta, we can reconstruct the target string. +* However, note that deltas are not reversible: you cannot always +* reconstruct the source string given the target string and delta. +* +* Since text deltas can be very large, the interface here allows us +* to produce and consume them in pieces. Each piece, represented by +* an @c svn_txdelta_window_t structure, describes how to produce the +* next section of the target string. +* +* To compute a new text delta: +* +* - We call svn_txdelta() on the streams we want to compare. That +* returns us an @c svn_txdelta_stream_t object. +* +* - We then call svn_txdelta_next_window() on the stream object +* repeatedly. Each call returns a new @c svn_txdelta_window_t +* object, which describes the next portion of the target string. +* When svn_txdelta_next_window() returns zero, we are done building +* the target string. +* +* @defgroup svn_delta_txt_delta Text deltas +* @{ + +Action codes for text delta instructions. + +Action code of delta instruction + + + @copyright + ==================================================================== + Copyright (c) 2008 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_checksum.h + @brief Subversion checksum routines + + Get libsvn_delta version information. + + @since New in 1.1. + + + + Get libsvn_subr version information. + + @since New in 1.1. + + + + Type of function returning library version. + + @since New in 1.6. + + + + Perform a series of version compatibility checks. Checks if @a + my_version is compatible with each entry in @a checklist. @a + checklist must end with an entry whose label is @c NULL. + + @see svn_ver_compatible() + + @since New in 1.1. + + + +Version query function for this entry + + + An entry in the compatibility checklist. + @see svn_ver_check_list() + + @since New in 1.1. + + + + Check if @a my_version and @a lib_version encode the same version number. + + @since New in 1.2. + + + + Define a static svn_version_t object. + + @since New in 1.1. + + Generate the implementation of a version query function. + + @since New in 1.1. + + Check library version compatibility. Return #TRUE if the client's + version, given in @a my_version, is compatible with the library + version, provided in @a lib_version. + + This function checks for version compatibility as per our + guarantees, but requires an exact match when linking to an + unreleased library. A development client is always compatible with + a previous released library. + + @since New in 1.1. + + + +The version tag (#SVN_VER_NUMTAG).\ Must always point to a +statically allocated string. + + + + @copyright + ==================================================================== + Copyright (c) 2000-2008 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_delta.h + @brief Delta-parsing + + @copyright + ==================================================================== + Copyright (c) 2000-2008 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_types.h + @brief Subversion's data types + + @copyright + ==================================================================== + Copyright (c) 2000-2006 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_string.h + @brief Counted-length strings for Subversion, plus some C string goodies. + + There are two string datatypes: @c svn_string_t and @c svn_stringbuf_t. + The former is a simple pointer/length pair useful for passing around + strings (or arbitrary bytes) with a counted length. @c svn_stringbuf_t is + buffered to enable efficient appending of strings without an allocation + and copy for each append operation. + + @c svn_string_t contains a const char * for its data, so it is + most appropriate for constant data and for functions which expect constant, + counted data. Functions should generally use const @c svn_string_t + * as their parameter to indicate they are expecting a constant, + counted string. + + @c svn_stringbuf_t uses a plain char * for its data, so it is + most appropriate for modifiable data. + +

Invariants

+ + 1. Null termination: + + Both structures maintain a significant invariant: + + s->data[s->len] == '\\0' + + The functions defined within this header file will maintain + the invariant (which does imply that memory is + allocated/defined as @c len+1 bytes). If code outside of the + @c svn_string.h functions manually builds these structures, + then they must enforce this invariant. + + Note that an @c svn_string(buf)_t may contain binary data, + which means that strlen(s->data) does not have to equal @c + s->len. The NULL terminator is provided to make it easier to + pass @c s->data to C string interfaces. + + + 2. Non-NULL input: + + All the functions assume their input data is non-NULL, + unless otherwise documented, and may seg fault if passed + NULL. The input data may *contain* null bytes, of course, just + the data pointer itself must not be NULL. + +

Memory allocation

+ + All the functions make a deep copy of all input data, and never store + a pointer to the original input data. + + @copyright + ==================================================================== + Copyright (c) 2000-2008 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_io.h + @brief General file I/O for Subversion + + @copyright + ==================================================================== + Copyright (c) 2001-2008 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_version.h + @brief Version information. + + @copyright + ==================================================================== + Copyright (c) 2000-2008 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_types.h + @brief Subversion's data types + +Major version number. + * + * Modify when incompatible changes are made to published interfaces. + +Minor version number. + * + * Modify when new functionality is added or new interfaces are + * defined, but all changes are backward compatible. + + Patch number. + + Modify for every released patch. + + @since New in 1.1. + +@deprecated Provided for backward compatibility with the 1.0 API. +@deprecated Provided for backward compatibility with the 1.0 API. +Version tag: a string describing the version. + * + * This tag remains " (dev build)" in the repository so that we can + * always see from "svn --version" that the software has been built + * from the repository rather than a "blessed" distribution. + * + * When rolling a tarball, we automatically replace this text with " (r1234)" + * (where 1234 is the last revision on the branch prior to the release) + * for final releases; in prereleases, it becomes " (Alpha 1)", + * " (Beta 1)", etc., as appropriate. + * + * Always change this at the same time as SVN_VER_NUMTAG. + +Number tag: a string describing the version. + * + * This tag is used to generate a version number string to identify + * the client and server in HTTP requests, for example. It must not + * contain any spaces. This value remains "-dev" in the repository. + * + * When rolling a tarball, we automatically replace this text with "" + * for final releases; in prereleases, it becomes "-alpha1, "-beta1", + * etc., as appropriate. + * + * Always change this at the same time as SVN_VER_TAG. + +Revision number: The repository revision number of this release. + * + * This constant is used to generate the build number part of the Windows + * file version. Its value remains 0 in the repository. + * + * When rolling a tarball, we automatically replace it with what we + * guess to be the correct revision number. + +Version number +Version number with tag (contains no whitespace) +Complete version string + Version information. Each library contains a function called + svn_libname_version() that returns a pointer to a statically + allocated object of this type. + + @since New in 1.1. + +
+ +Create (or overwrite) the file at @a path with new contents, + * formatted as a non-negative integer @a version followed by a single + * newline. On successful completion the file will be read-only. Use + * @a pool for all allocations. + + + +Version/format files. + * + * @defgroup svn_io_format_files Version/format files + * @{ + +Set @a *version to the integer that starts the file at @a path. If the + * file does not begin with a series of digits followed by a newline, + * return the error @c SVN_ERR_BAD_VERSION_FILE_FORMAT. Use @a pool for + * all allocations. + + + +Wrapper for apr_dir_read(). Ensures that @a finfo->name is + * utf8-encoded, which means allocating @a finfo->name in @a pool, + * which may or may not be the same as @a finfo's pool. Use @a pool + * for error allocation as well. + + + +Wrapper for apr_dir_remove(). @a dirname is utf8-encoded. + * @note This function has this name to avoid confusion with + * svn_io_remove_dir2(), which is recursive. + + + +Wrapper for apr_dir_open(). @a dirname is utf8-encoded. + + + Same as svn_io_dir_make(), but attempts to set the sgid on the + directory on systems that support it. Does not return an error if + the attempt to set the sgid bit fails. On Unix filesystems, + setting the sgid bit on a directory ensures that files and + subdirectories created within inherit group ownership from the + parent instead of from the primary gid. + + @since New in 1.1. + + + +Same as svn_io_dir_make(), but sets the hidden attribute on the + directory on systems that support it. + + +Wrapper for apr_dir_make(). @a path is utf8-encoded. + + +Move the file from @a from_path to @a to_path, even across device + * boundaries. Overwrite @a to_path if it exists. + * + * @note This function is different from svn_io_file_rename in that the + * latter fails in the 'across device boundaries' case. + * + * @since New in 1.3. + + + +Wrapper for apr_file_rename(). @a from_path and @a to_path are + * utf8-encoded. + + + +Wrapper for apr_stat(). @a fname is utf8-encoded. + + +Wrapper for apr_file_trunc(). + * @since New in 1.6. + + + Open a unique file in @a dirpath, and write @a nbytes from @a buf to + the file before closing it. Return the name of the newly created file + in @a *tmp_path, allocated in @a pool. + + If @a dirpath is @c NULL, use the path returned from svn_io_temp_dir(). + (Note that when using the system-provided temp directory, it may not + be possibly to atomically rename the resulting file due to cross-device + issues.) + + The file will be deleted according to @a delete_when. + + @since New in 1.6. + + + +Wrapper for apr_file_write_full(). + + +Wrapper for apr_file_write(). + + +Wrapper for apr_file_seek(). + + +Wrapper for apr_file_read_full(). + + +Wrapper for apr_file_read(). + + +Wrapper for apr_file_info_get(). + + +Wrapper for apr_file_getc(). + + +Wrapper for apr_file_close(). + + +Wrapper for apr_file_open(). @a fname is utf8-encoded. + + +Like svn_io_detect_mimetype2, but with @a mimetypes_map set to + * @c NULL. + * + * @deprecated Provided for backward compatibility with the 1.4 API + + + +Examine utf8-encoded @a file to determine if it can be described by a + * known (as in, known by this function) Multipurpose Internet Mail + * Extension (MIME) type. If so, set @a *mimetype to a character string + * describing the MIME type, else set it to @c NULL. + * + * If not @c NULL, @a mimetype_map is a hash mapping const char * + * filename extensions to const char * MIME types, and is the + * first source consulted regarding @a file's MIME type. + * + * Use @a pool for any necessary allocations. + * + * @since New in 1.5. + + + +Parse utf8-encoded @a mimetypes_file as a MIME types file (such as + * is provided with Apache HTTP Server), and set @a *type_map to a + * hash mapping const char * filename extensions to + * const char * MIME types. + * + * @since New in 1.5. + + + +Similar to svn_io_run_diff3_2(), but with @a user_args set to @c NULL. + * + * @deprecated Provided for backwards compatibility with the 1.3 API. + + + +Similar to svn_io_run_diff3_3(), but with @a diff3_cmd encoded in + * internal encoding used by APR. + * + * @deprecated Provided for backwards compatibility with the 1.5 API. + * @since New in 1.4. + + + +Invoke the configured @c diff3 program, in utf8-encoded @a dir + * like this: + * + * diff3 -E -m @a mine @a older @a yours > @a merged + * + * (See the diff3 documentation for details.) + * + * If @a user_args is non-NULL, replace "-E" with the const char* + * elements that @a user_args contains. + * + * @a mine, @a older and @a yours are utf8-encoded paths (relative to + * @a dir or absolute) to three files that already exist. + * + * @a merged is an open file handle, and is left open after the merge + * result is written to it. (@a merged should *not* be the same file + * as @a mine, or nondeterministic things may happen!) + * + * @a mine_label, @a older_label, @a yours_label are utf8-encoded label + * parameters for diff3's -L option. Any of them may be @c NULL, in + * which case the corresponding @a mine, @a older, or @a yours parameter is + * used instead. + * + * Set @a *exitcode to diff3's exit status. If @a *exitcode is anything + * other than 0 or 1, then return @c SVN_ERR_EXTERNAL_PROGRAM. (Note the + * following from the diff3 info pages: "An exit status of 0 means + * `diff3' was successful, 1 means some conflicts were found, and 2 + * means trouble.") + * + * @a diff3_cmd must be non-NULL. + * + * Do all allocation in @a pool. + * + * @since New in 1.4. + + + +Similar to svn_io_run_diff2() but with @diff_cmd encoded in internal + * encoding used by APR. + * + * @deprecated Provided for backwards compatibility with the 1.5 API. + + +Invoke the configured @c diff program, with @a user_args (an array + * of utf8-encoded @a num_user_args arguments) if they are specified + * (that is, if @a user_args is non-NULL), or "-u" if they are not. + * If @a user_args is NULL, the value of @a num_user_args is ignored. + * + * Diff runs in utf8-encoded @a dir, and its exit status is stored in + * @a exitcode, if it is not @c NULL. + * + * If @a label1 and/or @a label2 are not NULL they will be passed to the diff + * process as the arguments of "-L" options. @a label1 and @a label2 are also + * in utf8, and will be converted to native charset along with the other args. + * + * @a from is the first file passed to diff, and @a to is the second. The + * stdout of diff will be sent to @a outfile, and the stderr to @a errfile. + * + * @a diff_cmd must be non-NULL. + * + * Do all allocation in @a pool. + * @since New in 1.6.0. + + + +Run a command to completion, by first calling svn_io_start_cmd() and + * then calling svn_io_wait_for_cmd(). The parameters correspond to + * the same-named parameters of those two functions. + + + + Wait for the process @a *cmd_proc to complete and optionally retrieve + its exit code. @a cmd is used only in error messages. + + If @a exitcode is not NULL, @a *exitcode will contain the exit code + of the process upon return, and if @a exitwhy is not NULL, @a + *exitwhy will indicate why the process terminated. If @a exitwhy is + NULL, and the exit reason is not @c APR_PROC_CHECK_EXIT(), or if + @a exitcode is NULL and the exit code is non-zero, then an + @c SVN_ERR_EXTERNAL_PROGRAM error will be returned. + + @since New in 1.3. + + + + Start @a cmd with @a args, using utf8-encoded @a path as working + directory. Connect @a cmd's stdin, stdout, and stderr to @a infile, + @a outfile, and @a errfile, except where they are NULL. Return the + process handle for the invoked program in @a *cmd_proc. + + @a args is a list of utf8-encoded const char * arguments, + terminated by @c NULL. @a args[0] is the name of the program, though it + need not be the same as @a cmd. + + If @a inherit is TRUE, the invoked program inherits its environment from + the caller and @a cmd, if not absolute, is searched for in PATH. + Otherwise, the invoked program runs with an empty environment and @a cmd + must be an absolute path. + + @note On some platforms, failure to execute @a cmd in the child process + will result in error output being written to @a errfile, if non-NULL, and + a non-zero exit status being returned to the parent process. + + @since New in 1.3. + + + +This function will recursively walk over the files and directories + * rooted at @a dirname, a utf8-encoded path. For each file or directory, + * @a walk_func is invoked, passing in the @a walk_baton, the utf8-encoded + * full path to the entry, an @c apr_finfo_t structure, and a temporary + * pool for allocations. For any directory, @a walk_func will be invoked + * on the directory itself before being invoked on any subdirectories or + * files within the directory. + * + * The set of information passed to @a walk_func is specified by @a wanted, + * and the items specified by @c APR_FINFO_TYPE and @c APR_FINFO_NAME. + * + * All allocations will be performed in @a pool. + + + +Callback function type for svn_io_dir_walk() + + +Similar to svn_io_get_dirents2(), but @a *dirents is a hash table + * with @c svn_node_kind_t values. + * + * @deprecated Provided for backwards compatibility with the 1.2 API. + + + +Read all of the disk entries in directory @a path, a utf8-encoded + * path. Set @a *dirents to a hash mapping dirent names (char *) to + * @c svn_io_dirent_t structures, allocated in @a pool. + * + * @note The `.' and `..' directories normally returned by + * apr_dir_read() are NOT returned in the hash. + * + * @note The kind field in the @a dirents is set according to the mapping + * as documented for svn_io_check_path() + * + * @since New in 1.3. + + + +Read all of the disk entries in directory @a path, a utf8-encoded + * path. Set @a *dirents to a hash mapping dirent names (char *) to + * undefined non-NULL values, allocated in @a pool. + * + * @note The `.' and `..' directories normally returned by + * apr_dir_read() are NOT returned in the hash. + * + * @since New in 1.4. + + + +Similar to svn_io_remove_dir2(), but with @a ignore_enoent set to + * @c FALSE and @a cancel_func and @a cancel_baton set to @c NULL. + * + * @deprecated Provided for backward compatibility with the 1.4 API + + + +Recursively remove directory @a path. @a path is utf8-encoded. + * If @a ignore_enoent is @c TRUE, don't fail if the target directory + * doesn't exist. Use @a pool for temporary allocations. + * + * Because recursive delete of a directory tree can be a lengthy operation, + * provide @a cancel_func and @a cancel_baton for interruptability. + * + * @since New in 1.5. + + + +Remove file @a path, a utf8-encoded path. This wraps apr_file_remove(), + * converting any error to a Subversion error. + + + +Sets @a *result to a string containing the contents of the already opened + * @a file. Reads from the current position in file to the end. Does not + * close the file or reset the cursor position. + * + * @note due to memory pseudo-reallocation behavior (due to pools), this + * can be a memory-intensive operation for large files. + + + +Similar to svn_stringbuf_from_file2(), except that if @a filename + * is "-", return the error @c SVN_ERR_UNSUPPORTED_FEATURE and don't + * touch @a *result. + * + * @deprecated Provided for backwards compatibility with the 1.4 API. + + + +@} +Set @a *result to a string containing the contents of @a + * filename, which is either "-" (indicating that stdin should be + * read) or the utf8-encoded path of a real file. + * + * @warning Callers should be aware of possible unexpected results + * when using this function to read from stdin where additional + * stdin-reading processes abound. For example, if a program tries + * both to invoke an external editor and to read from stdin, stdin + * could be trashed and the editor might act funky or die outright. + * + * @note due to memory pseudo-reallocation behavior (due to pools), this + * can be a memory-intensive operation for large files. + * + * @since New in 1.5. + + + +Read the contents of @a stream into memory, returning the data in + * @a result. The stream will be closed when it has been successfully and + * completely read. + * + * The returned memory is allocated in @a result_pool, and any temporary + * allocations are performed in @a scratch_pool. + * + * @note due to memory pseudo-reallocation behavior (due to pools), this + * can be a memory-intensive operation for large files. + * + * @since New in 1.6 + + + +Set @a *same to TRUE if @a stream1 and @a stream2 have the same + * contents, else set it to FALSE. Use @a pool for temporary allocations. + * + * @since New in 1.4. + + + + Same as svn_stream_copy3(), but without the cancellation function + or stream closing. + + @since New in 1.1. + @deprecated Provided for backward compatibility with the 1.4 API. + + + + Same as svn_stream_copy3() but the streams are not closed. + + @since New in 1.5. + @deprecated Provided for backward compatibility with the 1.5 API. + + + + Read the contents of the readable stream @a from and write them to the + writable stream @a to calling @a cancel_func before copying each chunk. + + @a cancel_func may be @c NULL. + + @note both @a from and @a to will be closed upon successful completion of + the copy (but an error may still be returned, based on trying to close + the two streams). If the closure is not desired, then you can use + svn_stream_disown() to protect either or both of the streams from + being closed. + ### TODO: should close the streams ALWAYS, even on error exit + + @since New in 1.6. + + + +Allocate @a *stringbuf in @a pool, and read into it one line (terminated + * by @a eol) from @a stream. The line-terminator is read from the stream, + * but is not added to the end of the stringbuf. Instead, the stringbuf + * ends with a usual '\\0'. + * + * If @a stream runs out of bytes before encountering a line-terminator, + * then set @a *eof to @c TRUE, otherwise set @a *eof to FALSE. + + + +Write to @a stream using a printf-style @a fmt specifier, passed through + * apr_psprintf() using memory from @a pool. The resulting string + * will be translated to @a encoding before it is sent to @a stream. + * + * @note Use @c APR_LOCALE_CHARSET to translate to the encoding of the + * current locale. + * + * @since New in 1.3. + + + +Write to @a stream using a printf-style @a fmt specifier, passed through + * apr_psprintf() using memory from @a pool. + + + +Close a generic stream. @see svn_stream_t. + + +Write to a generic stream. @see svn_stream_t. + + +Read from a generic stream. @see svn_stream_t. + + + Similar to svn_stream_checksummed2(), but always returning the MD5 + checksum in @a read_digest and @a write_digest. + + @since New in 1.4. + @deprecated Provided for backward compatibility with the 1.5 API. + + + +Return a stream that calculates checksums for all data read + * and written. The stream @a stream is used to read and write all data. + * The stream and the resulting digests are allocated in @a pool. + * + * When the stream is closed, @a *read_checksum and @a *write_checksum + * are set to point to the resulting checksums, of type @a read_checksum_kind + * and @a write_checksum_kind, respectively. + * + * Both @a read_checksum and @a write_checksum can be @c NULL, in which case + * the respective checksum isn't calculated. + * + * If @a read_all is TRUE, make sure that all data available on @a + * stream is read (and checksummed) when the stream is closed. + * + * Read and write operations can be mixed without interfering. + * + * The @a stream passed into this function is closed when the created + * stream is closed. + * + * @since New in 1.6. + + + +Return a stream that decompresses all data read and compresses all + * data written. The stream @a stream is used to read and write all + * compressed data. All compression data structures are allocated on + * @a pool. If compression support is not compiled in then + * svn_stream_compressed() returns @a stream unmodified. Make sure you + * call svn_stream_close() on the stream returned by this function, + * so that all data are flushed and cleaned up. + * + * @note From 1.4, compression support is always compiled in. + + + +Return a generic read-only stream connected to string @a str. + * Allocate the stream in @a pool. + + + +Return a generic stream connected to stringbuf @a str. Allocate the + * stream in @a pool. + + + +Set @a *out to a generic stream connected to stdout, allocated in + * @a pool. The stream and its underlying APR handle will be closed + * when @a pool is cleared or destroyed. + + + +Similar to svn_stream_from_aprfile2(), except that the file will + * always be disowned. + * + * @note The stream returned is not considered to "own" the underlying + * file, meaning that svn_stream_close() on the stream will not + * close the file. + * + * @deprecated Provided for backward compatibility with the 1.3 API. + + + +Create a stream from an APR file. For convenience, if @a file is + * @c NULL, an empty stream created by svn_stream_empty() is returned. + * + * This function should normally be called with @a disown set to FALSE, + * in which case closing the stream will also close the underlying file. + * + * If @a disown is TRUE, the stream will disown the underlying file, + * meaning that svn_stream_close() will not close the file. + * + * @since New in 1.4. + + + +Create a writable stream to a file in the directory @a dirpath. + * The file will have an arbitrary and unique name, and the full path + * will be returned in @a temp_path. The stream will be returned in + * @a stream. Both will be allocated from @a result_pool. + * + * If @a dirpath is @c NULL, use the path returned from svn_io_temp_dir(). + * (Note that when using the system-provided temp directory, it may not + * be possibly to atomically rename the resulting file due to cross-device + * issues.) + * + * The file will be deleted according to @a delete_when. + * + * Temporary allocations will be performed in @a scratch_pool. + * + * @since New in 1.6 + * @see svn_io_open_unique_file3() + + + +Create a stream to write a file at @a path. The file will be *created* + * using the APR_BUFFERED and APR_BINARY flag, and APR_OS_DEFAULT for the + * perms. The file will be created "exclusively", so if it already exists, + * then an error will be thrown. If you'd like to use different values, or + * open an existing file, then open the file yourself, and use the + * svn_stream_from_aprfile2() interface. + * + * The stream will be returned in @a stream, and allocated from @a result_pool. + * Temporary allocations will be performed in @a scratch_pool. + * + * @since New in 1.6 + + + +Create a stream to read the file at @a path. It will be opened using + * the APR_BUFFERED and APR_BINARY flag, and APR_OS_DEFAULT for the perms. + * If you'd like to use different values, then open the file yourself, and + * use the svn_stream_from_aprfile2() interface. + * + * The stream will be returned in @a stream, and allocated from @a result_pool. + * Temporary allocations will be performed in @a scratch_pool. + * + * @since New in 1.6 + + + +Return a stream allocated in @a pool which forwards all requests + * to @a stream. Destruction is explicitly excluded from forwarding. + * + * @see notes/destruction-of-stacked-resources + * + * @since New in 1.4. + + + +Create a stream that is empty for reading and infinite for writing. + + +Set @a stream's close function to @a close_fn + + +Set @a stream's write function to @a write_fn + + +Set @a stream's read function to @a read_fn + + +Set @a stream's baton to @a baton + + +Create a generic stream. @see svn_stream_t. + + +Close handler function for a generic stream. @see svn_stream_t. + + +Write handler function for a generic stream. @see svn_stream_t. + + +Read handler function for a generic stream. @see svn_stream_t. + + +Generic byte-streams + * + * @defgroup svn_io_byte_streams Generic byte streams + * @{ + +An abstract stream of bytes--either incoming or outgoing or both. + * + * The creator of a stream sets functions to handle read and write. + * Both of these handlers accept a baton whose value is determined at + * stream creation time; this baton can point to a structure + * containing data associated with the stream. If a caller attempts + * to invoke a handler which has not been set, it will generate a + * runtime assertion failure. The creator can also set a handler for + * close requests so that it can flush buffered data or whatever; + * if a close handler is not specified, a close request on the stream + * will simply be ignored. Note that svn_stream_close() does not + * deallocate the memory used to allocate the stream structure; free + * the pool you created the stream in to free that memory. + * + * The read and write handlers accept length arguments via pointer. + * On entry to the handler, the pointed-to value should be the amount + * of data which can be read or the amount of data to write. When the + * handler returns, the value is reset to the amount of data actually + * read or written. Handlers are obliged to complete a read or write + * to the maximum extent possible; thus, a short read with no + * associated error implies the end of the input stream, and a short + * write should never occur without an associated error. + + + +Copy file @a file from location @a src_path to location @a dest_path. + * Use @a pool for memory allocations. + + + + Flush any unwritten data from @a file to disk. Use @a pool for + memory allocations. + + @since New in 1.1. + + + + Lock file at @a lock_file. If @a exclusive is TRUE, + obtain exclusive lock, otherwise obtain shared lock. + + If @a nonblocking is TRUE, do not wait for the lock if it + is not available: throw an error instead. + + Lock will be automatically released when @a pool is cleared or destroyed. + Use @a pool for memory allocations. + + @since New in 1.1. + + + + Lock file at @a lock_file. If @a exclusive is TRUE, + obtain exclusive lock, otherwise obtain shared lock. + Lock will be automatically released when @a pool is cleared or destroyed. + Use @a pool for memory allocations. + + @deprecated Provided for backward compatibility with the 1.0 API. + + + +Create file at utf8-encoded @a file with contents @a contents. + * @a file must not already exist. + * Use @a pool for memory allocations. + + + +Set @a *same to TRUE if @a file1 and @a file2 have the same + * contents, else set it to FALSE. Use @a pool for temporary allocations. + + + +Put the md5 checksum of @a file into @a digest. + * @a digest points to @c APR_MD5_DIGESTSIZE bytes of storage. + * Use @a pool only for temporary allocations. + * + * @deprecated Provided for backward compatibility with the 1.5 API. + + + +Return in @a *checksum the checksum of type @a kind of @a file + * Use @a pool for temporary allocations and to allocate @a *checksum. + * + * @since New in 1.6. + + + +Set @a *different_p to non-zero if @a file1 and @a file2 have different + * sizes, else set to zero. Both @a file1 and @a file2 are utf8-encoded. + * + * Setting @a *different_p to zero does not mean the files definitely + * have the same size, it merely means that the sizes are not + * definitely different. That is, if the size of one or both files + * cannot be determined, then the sizes are not known to be different, + * so @a *different_p is set to 0. + + + +Sleep to ensure that any files modified after we exit have a different + * timestamp than the one we recorded. If @a path is not NULL, check if we + * can determine how long we should wait for a new timestamp on the filesystem + * containing @a path, an existing file or directory. If @a path is NULL or we + * can't determine the timestamp resolution, sleep until the next second. + * + * Use @a pool for any necessary allocations. @a pool can be null if @a path + * is NULL. + * + * Errors while retrieving the timestamp resolution will result in sleeping + * to the next second, to keep the working copy stable in error conditions. + * + * @since New in 1.6. + + + +Set the timestamp of file @a path to @a apr_time. @a path is + * utf8-encoded. + * + * @note This is the APR mtime which corresponds to the traditional mtime + * on Unix, and the last write time on Windows. + + + +Set @a *apr_time to the time of last modification of the contents of the + * file @a path. @a path is utf8-encoded. + * + * @note This is the APR mtime which corresponds to the traditional mtime + * on Unix, and the last write time on Windows. + + + +Read a line from @a file into @a buf, but not exceeding @a *limit bytes. + * Does not include newline, instead '\\0' is put there. + * Length (as in strlen) is returned in @a *limit. + * @a buf should be pre-allocated. + * @a file should be already opened. + * + * When the file is out of lines, @c APR_EOF will be returned. + + + +Determine whether a file is executable by the current user. + * Set @a *executable to @c TRUE if the file @a path is executable by the + * current user, otherwise set it to @c FALSE. + * + * On Windows and on platforms without userids, always returns @c FALSE. + + + +Set @a path's "executability" (but do nothing if it is a symlink). + * + * @a path is the utf8-encoded path to the file. If @a executable + * is @c TRUE, then make the file executable. If @c FALSE, make it + * non-executable. If @a ignore_enoent is @c TRUE, don't fail if the target + * file doesn't exist. + * + * When making the file executable on operating systems with unix style + * permissions, never add an execute permission where there is not + * already a read permission: that is, only make the file executable + * for the user, group or world if the corresponding read permission + * is already set for user, group or world. + * + * When making the file non-executable on operating systems with unix style + * permissions, remove all execute permissions. + * + * On other operating systems, toggle the file's "executability" as much as + * the operating system allows. + * + * @note If @a path is a directory, act on it as though it were a + * file, as described above, but note that you probably don't want to + * call this function on directories. We have left it effective on + * directories for compatibility reasons, but as its name implies, it + * should be used only for files. + + + +Similar to svn_io_set_file_read_* functions. + * Change the read-write permissions of a file. + * @since New in 1.1. + * + * When making @a path read-write on operating systems with unix style + * permissions, set the permissions on @a path to the permissions that + * are set when a new file is created (effectively honoring the user's + * umask). + * + * When making the file read-only on operating systems with unix style + * permissions, remove all write permissions. + * + * On other operating systems, toggle the file's "writability" as much as + * the operating system allows. + * + * @a path is the utf8-encoded path to the file. If @a enable_write + * is @c TRUE, then make the file read-write. If @c FALSE, make it + * read-only. If @a ignore_enoent is @c TRUE, don't fail if the target + * file doesn't exist. + * + * @deprecated Provided for backward compatibility with the 1.3 API. + + + +Make a file as writable as the operating system allows. + * @a path is the utf8-encoded path to the file. If @a ignore_enoent is + * @c TRUE, don't fail if the target file doesn't exist. + * @warning On Unix this function will do the equivalent of chmod a+w path. + * If this is not what you want you should not use this function, but rather + * use apr_file_perms_set(). + * + * If @a path is a symlink, do nothing. + * + * @note If @a path is a directory, act on it as though it were a + * file, as described above, but note that you probably don't want to + * call this function on directories. We have left it effective on + * directories for compatibility reasons, but as its name implies, it + * should be used only for files. + + + +Make a file as read-only as the operating system allows. + * @a path is the utf8-encoded path to the file. If @a ignore_enoent is + * @c TRUE, don't fail if the target file doesn't exist. + * + * If @a path is a symlink, do nothing. + * + * @note If @a path is a directory, act on it as though it were a + * file, as described above, but note that you probably don't want to + * call this function on directories. We have left it effective on + * directories for compatibility reasons, but as its name implies, it + * should be used only for files. + + + +Append @a src to @a dst. @a dst will be appended to if it exists, else it + * will be created. Both @a src and @a dst are utf8-encoded. + + + +Set @a *is_empty_p to @c TRUE if directory @a path is empty, else to + * @c FALSE if it is not empty. @a path must be a directory, and is + * utf8-encoded. Use @a pool for temporary allocation. + + + +Create directory @a path on the file system, creating intermediate + * directories as required, like mkdir -p. Report no error if @a + * path already exists. @a path is utf8-encoded. + * + * This is essentially a wrapper for apr_dir_make_recursive(), passing + * @c APR_OS_DEFAULT as the permissions. + + + +Recursively copy directory @a src into @a dst_parent, as a new entry named + * @a dst_basename. If @a dst_basename already exists in @a dst_parent, + * return error. @a copy_perms will be passed through to svn_io_copy_file() + * when any files are copied. @a src, @a dst_parent, and @a dst_basename are + * all utf8-encoded. + * + * If @a cancel_func is non-NULL, invoke it with @a cancel_baton at + * various points during the operation. If it returns any error + * (typically @c SVN_ERR_CANCELLED), return that error immediately. + + + + Copy symbolic link @a src to @a dst atomically. Overwrite @a dst + if it exists, else create it. Both @a src and @a dst are + utf8-encoded filenames. After copying, the @a dst link will point + to the same thing @a src does. + + @since New in 1.1. + + + +Copy permission flags from @a src onto the file at @a dst. Both + * filenames are utf8-encoded filenames. + + + +Copy @a src to @a dst atomically, in a "byte-for-byte" manner. + * Overwrite @a dst if it exists, else create it. Both @a src and @a dst + * are utf8-encoded filenames. If @a copy_perms is TRUE, set @a dst's + * permissions to match those of @a src. + + + +Set @a *dir to a directory path (allocated in @a pool) deemed + * usable for the creation of temporary files and subdirectories. + + + + Set @a *dest to the path that the symlink at @a path references. + Allocate the string from @a pool. + + @since New in 1.1. + + + + Like svn_io_open_unique_file(), except that instead of creating a + file, a symlink is generated that references the path @a dest. + + @since New in 1.1. + + + +Like svn_io_open_unique_file2, but can't delete on pool cleanup. + * + * @deprecated Provided for backward compatibility with the 1.0 API + * + * @note In 1.4 the API was extended to require either @a f or + * @a unique_name_p (the other can be NULL). Before that, both were + * required. + + + +Like svn_io_open_uniquely_named(), but takes a joined dirpath and + * filename, and a single pool. + * + * @since New in 1.4 + * + * @deprecated Provided for backward compatibility with the 1.5 API + + + +Create a writable file in the directory @a dirpath. The file will have + * an arbitrary and unique name, and the full path will be returned in + * @a temp_path. The file will be returned in @a file. Both will be + * allocated from @a result_pool. + * + * If @a dirpath is @c NULL, use the path returned from svn_io_temp_dir(). + * (Note that when using the system-provided temp directory, it may not + * be possibly to atomically rename the resulting file due to cross-device + * issues.) + * + * The file will be deleted according to @a delete_when. + * + * Temporary allocations will be performed in @a scratch_pool. + * + * @since New in 1.6 + * @see svn_stream_open_unique() + + + +Like svn_io_check_path(), but resolve symlinks. This returns the + same varieties of @a kind as svn_io_check_path(). + + + Like svn_io_check_path(), but also set *is_special to @c TRUE if + the path is not a normal file. + + @since New in 1.1. + + + +Determine the @a kind of @a path. @a path should be UTF-8 encoded. + * + * If @a path is a file, set @a *kind to @c svn_node_file. + * + * If @a path is a directory, set @a *kind to @c svn_node_dir. + * + * If @a path does not exist, set @a *kind to @c svn_node_none. + * + * If @a path exists but is none of the above, set @a *kind to @c + * svn_node_unknown. + * + * If unable to determine @a path's kind, return an error, with @a *kind's + * value undefined. + * + * Use @a pool for temporary allocations. + * + * @see svn_node_kind_t + + + +If @c kind is @c svn_node_file, whether this entry is a special file; + * else FALSE. + * + * @see svn_io_check_special_path(). + + + +The kind of this entry. + + +Represents the kind and special status of a directory entry. + * + * @since New in 1.3. + + + +Remove when the associated pool is cleared + + +Remove when the file is closed + + +No deletion ever + + + Internal function for creating a checksum from a binary digest. + + @since New in 1.6 + + + + Return the digest size of @a checksum. + + @since New in 1.6. + + + + Finalize the checksum used when creating @a ctx, and put the resultant + checksum in @a *checksum, allocated in @a pool. + + @since New in 1.6. + + + + Update the checksum represented by @a ctx, with @a len bytes starting at + @a data. + + @since New in 1.6. + + + + Create a new @c svn_checksum_ctx_t structure, allocated from @a pool for + calculating checksums of type @a kind. @see svn_checksum_final() + + @since New in 1.6. + + + + Return in @a pool a newly allocated checksum populated with the checksum + of type @a kind for the empty string. + + @since New in 1.6. + + + + Return in @a *checksum the checksum of type @a kind for the bytes beginning + at @a data, and going for @a len. @a *checksum is allocated in @a pool. + + @since New in 1.6. + + + +Parse the hex representation @a hex of a checksum of kind @a kind and + * set @a *checksum to the result, allocating in @a pool. + * + * If @a hex is @c NULL or is the all-zeros checksum, then set @a *checksum + * to @c NULL. + * + * @since New in 1.6. + + + +Return the hex representation of @a checksum, allocating the + * string in @a pool. If @a checksum->digest is all zeros (that is, + * 0, not '0'), then return NULL. + * + * @since New in 1.6. + + + +Return the hex representation of @a checksum, allocating the string + * in @a pool. + * + * @since New in 1.6. + + + + Return a deep copy of @a checksum, allocated in @a pool. + + @since New in 1.6. + + + +Compare checksums @a checksum1 and @a checksum2. If their kinds do not + * match or if neither is all zeros, and their content does not match, then + * return FALSE; else return TRUE. + * + * @since New in 1.6. + + + +Set @c checksum->digest to all zeros, which, by convention, matches + * all other checksums. + * + * @since New in 1.6. + + + +Return a new checksum structure of type @a kind, initialized to the all- + * zeros value, allocated in @a pool. + * + * @since New in 1.6. + + + +Opaque type for creating checksums of data. + + + +The type of the checksum. This should never be changed by consumers + of the APIs. + + +The bytes of the checksum. + + + A generic checksum representation. + + @since New in 1.6. + + + +The checksum is (or should be set to) a SHA1 checksum. + + +The checksum is (or should be set to) an MD5 checksum. + + + Compare two strings @a atr1 and @a atr2, treating case-equivalent + unaccented Latin (ASCII subset) letters as equal. + + Returns in integer greater than, equal to, or less than 0, + according to whether @a str1 is considered greater than, equal to, + or less than @a str2. + + @since New in 1.5. + + + + Return a cstring which is the concatenation of @a strings (an array + of char *) each followed by @a separator (that is, @a separator + will also end the resulting string). Allocate the result in @a pool. + If @a strings is empty, then return the empty string. + + @since New in 1.2. + + + + Return the number of line breaks in @a msg, allowing any kind of newline + termination (CR, LF, CRLF, or LFCR), even inconsistent. + + @since New in 1.2. + + + +Return @c TRUE iff @a str matches any of the elements of @a list, a list + * of zero or more glob patterns. + + + +Like svn_cstring_split(), but append to existing @a array instead of + * creating a new one. Allocate the copied substrings in @a pool + * (i.e., caller decides whether or not to pass @a array->pool as @a pool). + + + +@} +C strings. + * + * @defgroup svn_string_cstrings c string functions + * @{ + +Divide @a input into substrings along @a sep_chars boundaries, return an + * array of copies of those substrings, allocating both the array and + * the copies in @a pool. + * + * None of the elements added to the array contain any of the + * characters in @a sep_chars, and none of the new elements are empty + * (thus, it is possible that the returned array will have length + * zero). + * + * If @a chop_whitespace is TRUE, then remove leading and trailing + * whitespace from the returned strings. + + + +Return @c TRUE iff @a str1 and @a str2 have identical length and data. + + +Return position of last occurrence of @a ch in @a str, or return + * @a str->len if no occurrence. + + + +Strip whitespace from both sides of @a str (modified in place). + + +Return offset of first non-whitespace character in @a str, or return + * @a str->len if none. + + + +Return @c TRUE iff @a str1 and @a str2 have identical length and data. + + +Return a duplicate of @a original_string. + + +Append a C string onto @a targetstr. + * + * reallocs if necessary. @a targetstr is affected, nothing else is. + + + +Append an @c svn_stringbuf_t onto @a targetstr. + * + * reallocs if necessary. @a targetstr is affected, nothing else is. + + + +Append an array of bytes onto @a targetstr. + * + * reallocs if necessary. @a targetstr is affected, nothing else is. + + + +Fill bytestring @a str with character @a c. + + +Chop @a nbytes bytes off end of @a str, but not more than @a str->len. + + +Return @c TRUE if a bytestring is empty (has length zero). + + +Set a bytestring @a str to empty (0 length). + + +Set a bytestring @a str to @a value + + +Make sure that the string @a str has at least @a minimum_size bytes of + * space available in the memory block. + * + * (@a minimum_size should include space for the terminating NULL character.) + + + +Create a new bytestring by formatting @a cstring (NULL-terminated) + * from a @c va_list (see svn_stringbuf_createf()). + + + +Create a new bytestring by formatting @a cstring (NULL-terminated) + * from varargs, which are as appropriate for apr_psprintf(). + + + +Create a new stringbuf with the contents of the given string + + +Create a new empty bytestring with at least @a minimum_size bytes of + * space available in the memory block. + * + * The allocated string buffer will be one byte larger then @a size to account + * for a final '\0'. + * + * @since New in 1.6. + + + +Create a new bytestring containing a generic string of bytes + * (NON-NULL-terminated) + + + +@} +svn_stringbuf_t functions. + * + * @defgroup svn_string_svn_stringbuf_t svn_stringbuf_t functions + * @{ + +Create a new bytestring containing a C string (NULL-terminated). + + +Return position of last occurrence of @a ch in @a str, or return + * @a str->len if no occurrence. + + + +Return offset of first non-whitespace character in @a str, or return + * @a str->len if none. + + + +Return @c TRUE iff @a str1 and @a str2 have identical length and data. + + +Return a duplicate of @a original_string. + + +Return TRUE if a bytestring is empty (has length zero). + + +Create a new bytestring by formatting @a cstring (NULL-terminated) + * from a @c va_list (see svn_stringbuf_createf()). + + + +Create a new bytestring by formatting @a cstring (NULL-terminated) + * from varargs, which are as appropriate for apr_psprintf(). + + + +Create a new string with the contents of the given stringbuf + + +Create a new bytestring containing a generic string of bytes + * (NOT NULL-terminated) + + +svn_string_t functions. + * + * @defgroup svn_string_svn_string_t svn_string_t functions + * @{ + +Create a new bytestring containing a C string (NULL-terminated). + + +total size of buffer allocated + + +length of bytestring + + +pointer to the bytestring + + +a pool from which this string was originally allocated, and is not + * necessarily specific to this string. This is used only for allocating + * more memory from when the string needs to grow. + + + +A buffered string, capable of appending without an allocation and copy + * for each append. + + + @copyright + ==================================================================== + Copyright (c) 2000-2006 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_string.h + @brief Counted-length strings for Subversion, plus some C string goodies. + + There are two string datatypes: @c svn_string_t and @c svn_stringbuf_t. + The former is a simple pointer/length pair useful for passing around + strings (or arbitrary bytes) with a counted length. @c svn_stringbuf_t is + buffered to enable efficient appending of strings without an allocation + and copy for each append operation. + + @c svn_string_t contains a const char * for its data, so it is + most appropriate for constant data and for functions which expect constant, + counted data. Functions should generally use const @c svn_string_t + * as their parameter to indicate they are expecting a constant, + counted string. + + @c svn_stringbuf_t uses a plain char * for its data, so it is + most appropriate for modifiable data. + +

Invariants

+ + 1. Null termination: + + Both structures maintain a significant invariant: + + s->data[s->len] == '\\0' + + The functions defined within this header file will maintain + the invariant (which does imply that memory is + allocated/defined as @c len+1 bytes). If code outside of the + @c svn_string.h functions manually builds these structures, + then they must enforce this invariant. + + Note that an @c svn_string(buf)_t may contain binary data, + which means that strlen(s->data) does not have to equal @c + s->len. The NULL terminator is provided to make it easier to + pass @c s->data to C string interfaces. + + + 2. Non-NULL input: + + All the functions assume their input data is non-NULL, + unless otherwise documented, and may seg fault if passed + NULL. The input data may *contain* null bytes, of course, just + the data pointer itself must not be NULL. + +

Memory allocation

+ + All the functions make a deep copy of all input data, and never store + a pointer to the original input data. + + @copyright + ==================================================================== + Copyright (c) 2000-2008 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_types.h + @brief Subversion's data types + +@defgroup svn_string String handling +@{ + +A simple counted string. +
+ +Handle a malfunction by printing a message to stderr and aborting. + * + * This function implements @c svn_error_malfunction_handler_t. + * + * @since New in 1.6. + + + +Handle a malfunction by returning an error object that describes it. + * + * When @a can_return is false, abort() + * + * This function implements @c svn_error_malfunction_handler_t. + * + * @since New in 1.6. + + + +Cause subsequent malfunctions to be handled by @a func. + * Return the handler that was previously in effect. + * + * @a func may not be null. + * + * @note The default handler is svn_error_abort_on_malfunction(). + * + * @note This function must be called in a single-threaded context. + * + * @since New in 1.6. + + + +A type of function that handles an assertion failure or other internal + * malfunction detected within the Subversion libraries. + * + * The error occurred in the source file @a file at line @a line, and was an + * assertion failure of the expression @a expr, or, if @a expr is null, an + * unconditional error. + * + * If @a can_return is false a function of this type must never return. + * + * If @a can_return is true a function of this type must do one of: + * - Return an error object describing the error, using an error code in + * the category SVN_ERR_MALFUNC_CATEGORY_START. + * - Never return. + * + * The function may alter its behaviour according to compile-time + * and run-time and even interactive conditions. + * + * @since New in 1.6. + + + +A statement macro for checking error values. + * + * Evaluate @a expr. If it yields an error, return that error from the + * current function. Otherwise, continue. + * + * The do { ... } while (0) wrapper has no semantic effect, + * but it makes this macro syntactically equivalent to the expression + * statement it resembles. Without it, statements like + * + * @code + * if (a) + * SVN_ERR (some operation); + * else + * foo; + * @endcode + * + * would not mean what they appear to. + +A statement macro, very similar to @c SVN_ERR. + * + * This macro will wrap the error with the specified text before + * returning the error. + +A statement macro, similar to @c SVN_ERR, but returns an integer. + * + * Evaluate @a expr. If it yields an error, handle that error and + * return @c EXIT_FAILURE. + +@} + Return TRUE if @a err is an error specifically related to locking a + path in the repository, FALSE otherwise. + + SVN_ERR_FS_OUT_OF_DATE is in here because it's a non-fatal error + that can be thrown when attempting to lock an item. + + @since New in 1.2. + + Return TRUE if @a err is an error specifically related to unlocking + a path in the repository, FALSE otherwise. + + @since New in 1.2. + +Report that an internal malfunction has occurred, and possibly terminate + * the program. + * + * Act as determined by the current "malfunction handler" which may have + * been specified by a call to svn_error_set_malfunction_handler() or else + * is the default handler as specified in that function's documentation. If + * the malfunction handler returns, then cause the function using this macro + * to return the error object that it generated. + * + * @note The intended use of this macro is where execution reaches a point + * that cannot possibly be reached unless there is a bug in the program. + * + * @since New in 1.6. + +Similar to SVN_ERR_MALFUNCTION(), but without the option of returning + * an error to the calling function. + * + * If possible you should use SVN_ERR_MALFUNCTION() instead. + * + * @since New in 1.6. + +Check that a condition is true: if not, report an error and possibly + * terminate the program. + * + * If the Boolean expression @a expr is true, do nothing. Otherwise, + * act as determined by the current "malfunction handler" which may have + * been specified by a call to svn_error_set_malfunction_handler() or else + * is the default handler as specified in that function's documentation. If + * the malfunction handler returns, then cause the function using this macro + * to return the error object that it generated. + * + * @note The intended use of this macro is to check a condition that cannot + * possibly be false unless there is a bug in the program. + * + * @note The condition to be checked should not be computationally expensive + * if it is reached often, as, unlike traditional "assert" statements, the + * evaluation of this expression is not compiled out in release-mode builds. + * + * @since New in 1.6. + +Similar to SVN_ERR_ASSERT(), but without the option of returning + * an error to the calling function. + * + * If possible you should use SVN_ERR_ASSERT() instead. + * + * @since New in 1.6. + +A helper function for the macros that report malfunctions. Handle a + * malfunction by calling the current "malfunction handler" which may have + * been specified by a call to svn_error_set_malfunction_handler() or else + * is the default handler as specified in that function's documentation. + * + * Pass all of the parameters to the handler. The error occurred in the + * source file @a file at line @a line, and was an assertion failure of the + * expression @a expr, or, if @a expr is null, an unconditional error. + * + * If @a can_return is true, the handler can return an error object + * that is returned by the caller. If @a can_return is false the + * method should never return. (The caller will call abort()) + * + * @since New in 1.6. + + + +Like svn_handle_warning2() but with @c prefix set to "svn: " + * + * @deprecated Provided for backward compatibility with the 1.1 API. + + + + Very basic default warning handler: print out the error @a error to the + stdio stream @a stream, prefixed by @a prefix. Allocations are + performed in the error's pool. + + @since New in 1.2. + + + +Like svn_handle_error2() but with @c prefix set to "svn: " + * + * @deprecated Provided for backward compatibility with the 1.1 API. + + + + Very basic default error handler: print out error stack @a error to the + stdio stream @a stream, with each error prefixed by @a prefix; quit and + clear @a error iff the @a fatal flag is set. Allocations are performed + in the @a error's pool. + + If you're not sure what prefix to pass, just pass "svn: ". That's + what code that used to call svn_handle_error() and now calls + svn_handle_error2() does. + + @since New in 1.2. + + + +Free the memory used by @a error, as well as all ancestors and + * descendants of @a error. + * + * Unlike other Subversion objects, errors are managed explicitly; you + * MUST clear an error if you are ignoring it, or you are leaking memory. + * For convenience, @a error may be @c NULL, in which case this function does + * nothing; thus, svn_error_clear(svn_foo(...)) works as an idiom to + * ignore errors. + + + +Create a new error that is a deep copy of @a err and return it. + * + * @since New in 1.2. + + + +Return the root cause of @a err by finding the last error in its + * chain (e.g. it or its children). @a err may be @c SVN_NO_ERROR, in + * which case @c SVN_NO_ERROR is returned. + * + * @since New in 1.5. + + + +Add @a new_err to the end of @a chain's chain of errors. The @a new_err + * chain will be copied into @a chain's pool and destroyed, so @a new_err + * itself becomes invalid after this function. + + + +Wrapper macro to collect file and line information +Compose two errors, returning the composition as a brand new error + * and consuming the original errors. Either or both of @a err1 and + * @a err2 may be @c SVN_NO_ERROR. If both are not @c SVN_NO_ERROR, + * @a err2 will follow @a err1 in the chain of the returned error. + * + * @since New in 1.6. + + + +Wrapper macro to collect file and line information +A quick n' easy way to create a wrapped exception with your own + * message, before throwing it up the stack. (It uses all of the + * @a child's fields.) + + + +Wrapper macro to collect file and line information +Wrap a @a status from an APR function. If @a fmt is NULL, this is + * equivalent to svn_error_create(status,NULL,NULL). Otherwise, + * the error message is constructed by formatting @a fmt and the + * following arguments according to apr_psprintf(), and then + * appending ": " and the error message corresponding to @a status. + * (If UTF-8 translation of the APR error message fails, the ": " and + * APR error are not appended to the error message.) + + + +Wrapper macro to collect file and line information +Create an error structure with the given @a apr_err and @a child, + * with a printf-style error message produced by passing @a fmt, using + * apr_psprintf(). + + + +SVN error creation and destruction. + * + * @defgroup svn_error_error_creation_destroy Error creation and destruction + * @{ + +Create a nested exception structure. + * + * Input: an APR or SVN custom error code, + * a "child" error to wrap, + * a specific message + * + * Returns: a new error structure (containing the old one). + * + * @note Errors are always allocated in a subpool of the global pool, + * since an error's lifetime is generally not related to the + * lifetime of any convenient pool. Errors must be freed + * with svn_error_clear(). The specific message should be @c NULL + * if there is nothing to add to the general message associated + * with the error code. + * + * If creating the "bottommost" error in a chain, pass @c NULL for + * the child argument. + + + +If @a err has a custom error message, return that, otherwise + * store the generic error string associated with @a err->apr_err into + * @a buf (terminating with NULL) and return @a buf. + * + * @since New in 1.4. + * + * @note @a buf and @a bufsize are provided in the interface so that + * this function is thread-safe and yet does no allocation. + + + +Put an English description of @a statcode into @a buf and return @a buf, + * NULL-terminated. @a statcode is either an svn error or apr error. + + + +Set the error location for debug mode. + + + @copyright + ==================================================================== + Copyright (c) 2000-2004, 2008 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_error.h + @brief Common exception handling for Subversion. + + @copyright + ==================================================================== + Copyright (c) 2000-2008 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_types.h + @brief Subversion's data types + +the best kind of (@c svn_error_t *) ! + @copyright + ==================================================================== + Copyright (c) 2000-2009 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_error_codes.h + @brief Subversion error codes. + +Collection of Subversion error code values, located within the + * APR user error space. + + + Return a deep copy of @a segment, allocated in @a pool. + + @since New in 1.5. + + + +A callback invoked by generators of @c svn_location_segment_t +objects, used to report information about a versioned object's +history in terms of its location in the repository filesystem over +time. + + + +The absolute (sans leading slash) path for this segment. May be + NULL to indicate gaps in an object's history. + + +The beginning (oldest) and ending (youngest) revisions for this + segment. + + +@defgroup node_location_seg_reporting Node location segment reporting. + * @{ + A representation of a segment of a object's version history with an + emphasis on the object's location in the repository as of various + revisions. + + @since New in 1.5. + + + + Returns true if the changeset committed in revision @a rev is one + of the changesets in the range @a range. + + @since New in 1.5. + + + + Return a copy of @a range, allocated in @a pool. + + @since New in 1.5. + + + +Whether this merge range should be inherited by treewise +descendants of the path to which the range applies. + + +If the 'start' field is less than the 'end' field then 'start' is +exclusive and 'end' inclusive of the range described. This is termed +a forward merge range. If 'start' is greater than 'end' then the +opposite is true. This is termed a reverse merge range. If 'start' +equals 'end' the meaning of the range is not defined. + + + + Mergeinfo representing a merge of a range of revisions. + + @since New in 1.5 + + + + Return a formatted Universal Unique IDentifier (UUID) string. + + @since New in 1.4. + + + + Return a deep copy of @a lock, allocated in @a pool. + + @since New in 1.2. + + + + Returns an @c svn_lock_t, allocated in @a pool with all fields initialized + to NULL values. + + @note To allow for extending the @c svn_lock_t structure in the future + releases, this function should always be used to allocate the structure. + + @since New in 1.2. + + + +A user defined callback that subversion will call with a user defined + * baton to see if the current operation should be continued. If the operation + * should continue, the function should return @c SVN_NO_ERROR, if not, it + * should return @c SVN_ERR_CANCELLED. + + + +Return FALSE iff @a mime_type is a textual type. + * + * All mime types that start with "text/" are textual, plus some special + * cases (for example, "image/x-xbitmap"). + + + +A buffer size that may be used when processing a stream of data. + * + * @note We don't use this constant any longer, since it is considered to be + * unnecessarily large. + * + * @deprecated Provided for backwards compatibility with the 1.3 API. + +The maximum amount we can ever hold in memory. +Validate @a mime_type. + * + * If @a mime_type does not contain a "/", or ends with non-alphanumeric + * data, return @c SVN_ERR_BAD_MIME_TYPE, else return success. + * + * Use @a pool only to find error allocation. + * + * Goal: to match both "foo/bar" and "foo/bar; charset=blah", without + * being too strict about it, but to disallow mime types that have + * quotes, newlines, or other garbage on the end, such as might be + * unsafe in an HTTP header. + + + +Same as @c svn_commit_callback2_t, but uses individual + * data elements instead of the @c svn_commit_info_t structure + * + * @deprecated Provided for backward compatibility with the 1.3 API. + + + +Callback function type for commits. + * + * When a commit succeeds, an instance of this is invoked with the + * @a commit_info, along with the @a baton closure. + * @a pool can be used for temporary allocations. + * + * @since New in 1.4. + + + + Similar to @c svn_log_entry_receiver_t, except this uses separate + parameters for each part of the log entry. + + @deprecated Provided for backward compatibility with the 1.4 API. + + + +The callback invoked by log message loopers, such as + * @c svn_ra_plugin_t.get_log() and svn_repos_get_logs(). + * + * This function is invoked once on each log message, in the order + * determined by the caller (see above-mentioned functions). + * + * @a baton is what you think it is, and @a log_entry contains relevent + * information for the log message. Any of @a log_entry->author, + * @a log_entry->date, or @a log_entry->message may be @c NULL. + * + * If @a log_entry->date is neither NULL nor the empty string, it was + * generated by svn_time_to_cstring() and can be converted to + * @c apr_time_t with svn_time_from_cstring(). + * + * If @a log_entry->changed_paths is non-@c NULL, then it contains as keys + * every path committed in @a log_entry->revision; the values are + * (@c svn_log_changed_path_t *) structures. + * + * If @a log_entry->has_children is @c TRUE, the message will be followed + * immediately by any number of merged revisions (child messages), which are + * terminated by an invocation with SVN_INVALID_REVNUM. This usage may + * be recursive. + * + * Use @a pool for temporary allocation. If the caller is iterating + * over log messages, invoking this receiver on each, we recommend the + * standard pool loop recipe: create a subpool, pass it as @a pool to + * each call, clear it after each iteration, destroy it after the loop + * is done. (For allocation that must last beyond the lifetime of a + * given receiver call, use a pool in @a baton.) + * + * @since New in 1.5. + + + +Return a deep copy of @a log_entry, allocated in @a pool. + * + * The resulting svn_log_entry_t has @c changed_paths set to the same + * value as @c changed_path2. @c changed_paths will be @c NULL if + * @c changed_paths2 was @c NULL. + * + * @since New in 1.6. + + + + Returns an @c svn_log_entry_t, allocated in @a pool with all fields + initialized to NULL values. + + @note To allow for extending the @c svn_log_entry_t structure in future + releases, this function should always be used to allocate the structure. + + @since New in 1.5. + + + +A hash containing as keys every path committed in @a revision; the + * values are (@c svn_log_changed_path2_t *) stuctures. + * + * If this value is not @c NULL, it MUST have the same value as + * changed_paths or svn_log_entry_dup() will not create an identical copy. + * + * The subversion core libraries will always set this field to the same + * value as changed_paths for compatibity with users assuming an older + * version. + * + * @since New in 1.6. + + + + Whether or not this message has children. + + When a log operation requests additional merge information, extra log + entries may be returned as a result of this entry. The new entries, are + considered children of the original entry, and will follow it. When + the HAS_CHILDREN flag is set, the receiver should increment its stack + depth, and wait until an entry is provided with SVN_INVALID_REVNUM which + indicates the end of the children. + + For log operations which do not request additional merge information, the + HAS_CHILDREN flag is always FALSE. + + For more information see: + http://subversion.tigris.org/merge-tracking/design.html#commutative-reporting + + + +The hash of requested revision properties, which may be NULL if it + * would contain no revprops. + + +The revision of the commit. + + +A hash containing as keys every path committed in @a revision; the + * values are (@c svn_log_changed_path_t *) stuctures. + * + * The subversion core libraries will always set this field to the same + * value as changed_paths2 for compatibity reasons. + * + * @deprecated Provided for backward compatibility with the 1.5 API. + + + + A structure to represent all the information about a particular log entry. + + @note To allow for extending the @c svn_log_entry_t structure in future + releases, always use svn_log_entry_create() to allocate the structure. + + @since New in 1.5. + + + + Return a deep copy of @a changed_path, allocated in @a pool. + + @since New in 1.3. + @deprecated Provided for backward compatibility with the 1.5 API. + + + +Source revision of copy (if any). + + +Source path of copy (if any). + + +'A'dd, 'D'elete, 'R'eplace, 'M'odify + + + A structure to represent a path that changed for a log entry. Same as + @c svn_log_changed_path2_t, but without the node kind. + + @deprecated Provided for backward compatibility with the 1.5 API. + + + + Return a deep copy of @a changed_path, allocated in @a pool. + + @since New in 1.6. + + + + Returns an @c svn_log_changed_path2_t, allocated in @a pool with all fields + initialized to NULL, None or empty values. + + @note To allow for extending the @c svn_log_changed_path2_t structure in + future releases, this function should always be used to allocate the + structure. + + @since New in 1.6. + + + +The type of the node, may be svn_node_unknown. + + +Source revision of copy (if any). + + +Source path of copy (if any). + + +'A'dd, 'D'elete, 'R'eplace, 'M'odify + + + A structure to represent a path that changed for a log entry. + + @note To allow for extending the @c svn_log_changed_path2_t structure in + future releases, always use svn_log_changed_path2_create() to allocate + the structure. + + @since New in 1.6. + + + + Return a deep copy @a src_commit_info allocated in @a pool. + + @since New in 1.4. + + + + Allocate an object of type @c svn_commit_info_t in @a pool and + return it. + + The @c revision field of the new struct is set to @c + SVN_INVALID_REVNUM. All other fields are initialized to @c NULL. + + @note Any object of the type @c svn_commit_info_t should + be created using this function. + This is to provide for extending the svn_commit_info_t in + the future. + + @since New in 1.3. + + + +error message from post-commit hook, or NULL. + + +author of the commit. + + +server-side date of the commit. + + +just-committed revision. + + +Return a deep copy of @a dirent, allocated in @a pool. + * + * @since New in 1.4. + + + +author of created_rev + + +time of created_rev (mod-time) + + +last rev in which this node changed + + +does the node have props? + + +length of file text, or 0 for directories + + +node kind + + + It is sometimes convenient to indicate which parts of an @c svn_dirent_t + object you are actually interested in, so that calculating and sending + the data corresponding to the other fields can be avoided. These values + can be used for that purpose. + + @defgroup svn_dirent_fields Dirent fields + @{ + +An indication that you are interested in the @c kind field +An indication that you are interested in the @c size field +An indication that you are interested in the @c has_props field +An indication that you are interested in the @c created_rev field +An indication that you are interested in the @c time field +An indication that you are interested in the @c last_author field +A combination of all the dirent fields +@} +A general subversion directory entry. + + +Return the appropriate depth for @a depth_str. @a word is as + * returned from svn_depth_to_word(). If @a depth_str does not + * represent a recognized depth, return @c svn_depth_unknown. + * + * @since New in 1.5. + + + +An enum to indicate whether recursion is needed. + + +The 'official' invalid file size constant. +In printf()-style functions, format file sizes using this. +YABT: Yet Another Boolean Type + + +Originally intended to be used in printf()-style functions to format + * revision numbers. Deprecated due to incompatibilities with language + * translation tools (e.g. gettext). + * + * New code should use a bare "%ld" format specifier for formatting revision + * numbers. + * + * @deprecated Provided for backward compatibility with the 1.0 API. + +The size of a file in the Subversion FS. + + +Valid revision numbers begin at 0 +The 'official' invalid revision num +Not really invalid...just unimportant -- one day, this can be its + * own unique value, for now, just make it the same as + * @c SVN_INVALID_REVNUM. + +Convert NULL-terminated C string @a str to a revision number. + Parse NULL-terminated C string @a str as a revision number and + store its value in @a rev. If @a endptr is non-NULL, then the + address of the first non-numeric character in @a str is stored in + it. If there are no digits in @a str, then @a endptr is set (if + non-NULL), and the error @c SVN_ERR_REVNUM_PARSE_FAILURE error is + returned. Negative numbers parsed from @a str are considered + invalid, and result in the same error. + + @since New in 1.5. + + + +About Special Files in Subversion + * + * Subversion denotes files that cannot be portably created or + * modified as "special" files (svn_node_special). It stores these + * files in the repository as a plain text file with the svn:special + * property set. The file contents contain: a platform-specific type + * string, a space character, then any information necessary to create + * the file on a supported platform. For example, if a symbolic link + * were being represented, the repository file would have the + * following contents: + * + * "link /path/to/link/target" + * + * Where 'link' is the identifier string showing that this special + * file should be a symbolic link and '/path/to/link/target' is the + * destination of the symbolic link. + * + * Special files are stored in the text-base exactly as they are + * stored in the repository. The platform specific files are created + * in the working copy at EOL/keyword translation time using + * svn_subst_copy_and_translate2(). If the current platform does not + * support a specific special file type, the file is copied into the + * working copy as it is seen in the repository. Because of this, + * users of other platforms can still view and modify the special + * files, even if they do not have their unique properties. + * + * New types of special files can be added by: + * 1. Implementing a platform-dependent routine to create a uniquely + * named special file and one to read the special file in + * libsvn_subr/io.c. + * 2. Creating a new textual name similar to + * SVN_SUBST__SPECIAL_LINK_STR in libsvn_subr/subst.c. + * 3. Handling the translation/detranslation case for the new type in + * create_special_file and detranslate_special_file, using the + * routines from 1. + +A revision number. + + +Return the appropriate node_kind for @a word. @a word is as + * returned from svn_node_kind_to_word(). If @a word does not + * represent a recognized kind or is @c NULL, return @c svn_node_unknown. + * + * @since New in 1.6. + + + +something's here, but we don't know what + + +directory + + +regular file + + +absent + + +Source line where the error originated. Only used iff @c SVN_DEBUG. + + +Source file where the error originated. Only used iff @c SVN_DEBUG. + + +The pool holding this error and any child errors it wraps + + +ptr to the error we "wrap" + + +details from producer of error + + +APR error value, possibly SVN_ custom err + + +The FilePath character encoding is unknown +The FilePath character encoding is locale-dependent +The FilePath character encoding is UTF-8 +Determine the encoding used internally by the FilePath functions +@param style points to a variable which receives the encoding style flag +@param p the pool to allocate any working storage +@remark Use @c apr_os_locale_encoding and/or @c apr_os_default_encoding +to get the name of the path encoding if it's not UTF-8. + + + +Set the default file path (for relative file names) +@param path the default path returned +@param p the pool to allocate any working storage + + + +Return the default file path (for relative file names) +@param path the default path string returned +@param flags optional flag APR_FILEPATH_NATIVE to retrieve the + default file path in os-native format. +@param p the pool to allocate the default path string from + + + +Merge a list of search path components into a single search path +@param liststr the returned search path; may be NULL if @a pathelts is empty +@param pathelts the components of the search path +@param p the pool to allocate the search path from +@remark emtpy strings in the source array are ignored. +@remark the path separator in @a liststr is system specific; +e.g., ':' on Unix, ';' on Windows, etc. + + + +Split a search path into separate components +@param pathelts the returned components of the search path +@param liststr the search path (e.g., getenv("PATH")) +@param p the pool to allocate the array and path components from +@remark empty path componenta do not become part of @a pathelts. +@remark the path separator in @a liststr is system specific; +e.g., ':' on Unix, ';' on Windows, etc. + + + +Merge additional file path onto the previously processed rootpath +@param newpath the merged paths returned +@param rootpath the root file path (NULL uses the current working path) +@param addpath the path to add to the root path +@param flags the desired APR_FILEPATH_ rules to apply when merging +@param p the pool to allocate the new path string from +@remark if the flag APR_FILEPATH_TRUENAME is given, and the addpath +contains wildcard characters ('*', '?') on platforms that don't support +such characters within filenames, the paths will be merged, but the +result code will be APR_EPATHWILD, and all further segments will not +reflect the true filenames including the wildcard and following segments. + + + +@} +@defgroup apr_filepath Filepath Manipulation Functions +@{ + +Cause apr_filepath_merge to fail if addpath is above rootpath + * @bug in APR 0.9 and 1.x, this flag's behavior is undefined + * if the rootpath is NULL or empty. In APR 2.0 this should be + * changed to imply NOTABSOLUTE if the rootpath is NULL or empty. + +internal: Only meaningful with APR_FILEPATH_NOTABOVEROOT +Cause apr_filepath_merge to fail if addpath is above rootpath, + * even given a rootpath /foo/bar and an addpath ../bar/bash + +Fail apr_filepath_merge if the merged path is relative +Fail apr_filepath_merge if the merged path is absolute +Return the file system's native path format (e.g. path delimiters + * of ':' on MacOS9, '\' on Win32, etc.) +Resolve the true case of existing directories and file elements + * of addpath, (resolving any aliases on Win32) and append a proper + * trailing slash if a directory + +Extract the rootpath from the given filepath +@param rootpath the root file path returned with APR_SUCCESS or APR_EINCOMPLETE +@param filepath the pathname to parse for its root component +@param flags the desired rules to apply, from +
+     APR_FILEPATH_NATIVE    Use native path seperators (e.g. '\' on Win32)
+     APR_FILEPATH_TRUENAME  Tests that the root exists, and makes it proper
+
+@param p the pool to allocate the new path string from +@remark on return, filepath points to the first non-root character in the +given filepath. In the simplest example, given a filepath of "/foo", +returns the rootpath of "/" and filepath points at "foo". This is far +more complex on other platforms, which will canonicalize the root form +to a consistant format, given the APR_FILEPATH_TRUENAME flag, and also +test for the validity of that root (e.g., that a drive d:/ or network +share //machine/foovol/). +The function returns APR_ERELATIVE if filepath isn't rooted (an +error), APR_EINCOMPLETE if the root path is ambigious (but potentially +legitimate, e.g. "/" on Windows is incomplete because it doesn't specify +the drive letter), or APR_EBADPATH if the root is simply invalid. +APR_SUCCESS is returned if filepath is an absolute path. + +
+ +Rewind the directory to the first entry. +@param thedir the directory descriptor to rewind. + + + + * Read the next entry from the specified directory. + * @param finfo the file info structure and filled in by apr_dir_read + * @param wanted The desired apr_finfo_t fields, as a bit flag of APR_FINFO_ + values + * @param thedir the directory descriptor returned from apr_dir_open + * @remark No ordering is guaranteed for the entries read. + * + * @note If @c APR_INCOMPLETE is returned all the fields in @a finfo may + * not be filled in, and you need to check the @c finfo->valid bitmask + * to verify that what you're looking for is there. + + + +close the specified directory. +@param thedir the directory descriptor to close. + + + +@} +@defgroup apr_dir Directory Manipulation Functions +@{ + +Open the specified directory. +@param new_dir The opened directory descriptor. +@param dirname The full path to the directory (use / on all systems) +@param pool The pool to use. + + + + * get the specified file's stats. The file is specified by filename, + * instead of using a pre-opened file. + * @param finfo Where to store the information about the file, which is + * never touched if the call fails. + * @param fname The name of the file to stat. + * @param wanted The desired apr_finfo_t fields, as a bit flag of APR_FINFO_ + values + * @param pool the pool to use to allocate the new file. + * + * @note If @c APR_INCOMPLETE is returned all the fields in @a finfo may + * not be filled in, and you need to check the @c finfo->valid bitmask + * to verify that what you're looking for is there. + + + +The file's handle, if accessed (can be submitted to apr_duphandle) + + +The file's name (no path) in filesystem case + + +The pathname of the file (possibly unrooted) + + +The time the file was created, or the inode was last changed + + +The time the file was last modified + + +The time the file was last accessed + + +The storage size consumed by the file + + +The size of the file + + +The number of hard links to the file. + + +The id of the device the file is on. + + +The inode of the file. + + +The group id that owns the file + + +The user id that owns the file + + +The type of file. One of APR_REG, APR_DIR, APR_CHR, APR_BLK, APR_PIPE, + * APR_LNK or APR_SOCK. If the type is undetermined, the value is APR_NOFILE. + * If the type cannot be determined, the value is APR_UNKFILE. + + + +The access permissions of the file. Mimics Unix access rights. + + +The bitmask describing valid fields of this apr_finfo_t structure + * including all available 'wanted' fields and potentially more + + +Allocates memory and closes lingering handles in the specified pool + + +@defgroup apr_file_stat Stat Functions +@{ + +file info structure + +The file information structure. This is analogous to the POSIX +stat structure. + + + +Structure for determining the device the file is on. + + + +Structure for determining file permissions. + + + +@defgroup apr_file_permissions File Permissions flags +@{ + +@} +Structure for referencing directories. + + + + Eliminate redundant entries in a table by either overwriting + or merging duplicates + + @param t Table. + @param flags APR_OVERLAP_TABLES_MERGE to merge, or + APR_OVERLAP_TABLES_SET to overwrite + + + + Iterate over a table running the provided function once for every + element in the table. The @param vp varargs paramater must be a + list of zero or more (char *) keys followed by a NULL pointer. If + zero keys are given, the @param comp function will be invoked for + every element in the table. Otherwise, the function is invoked + only for those elements matching the keys specified. + + If an invocation of the @param comp function returns zero, + iteration will continue using the next specified key, if any. + + @param comp The function to run + @param rec The data to pass as the first argument to the function + @param t The table to iterate over + @param vp List of zero or more (char *) keys followed by NULL + @return FALSE if one of the comp() iterations returned zero; TRUE if all + iterations returned non-zero + @see apr_table_do_callback_fn_t + + + + Iterate over a table running the provided function once for every + element in the table. The varargs array must be a list of zero or + more (char *) keys followed by a NULL pointer. If zero keys are + given, the @param comp function will be invoked for every element + in the table. Otherwise, the function is invoked only for those + elements matching the keys specified. + + If an invocation of the @param comp function returns zero, + iteration will continue using the next specified key, if any. + + @param comp The function to run + @param rec The data to pass as the first argument to the function + @param t The table to iterate over + @param ... A varargs array of zero or more (char *) keys followed by NULL + @return FALSE if one of the comp() iterations returned zero; TRUE if all + iterations returned non-zero + @see apr_table_do_callback_fn_t + + + +Declaration prototype for the iterator callback function of apr_table_do() +and apr_table_vdo(). +@param rec The data passed as the first argument to apr_table_[v]do() +@param key The key from this iteration of the table +@param value The value from this iteration of the table +@remark Iteration continues while this callback function returns non-zero. +To export the callback function for apr_table_[v]do() it must be declared +in the _NONSTD convention. + + + +Merge two tables into one new table +@param p The pool to use for the new table +@param overlay The first table to put in the new table +@param base The table to add at the end of the new table +@return A new table containing all of the data from the two passed in + + + +Add data to a table, regardless of whether there is another element with the +same key. +@param t The table to add to +@param key The key to use +@param val The value to add. +@remark When adding data, this function does not make a copy of the key or the + value, so care should be taken to ensure that the values will not + change after they have been added.. + + + +Add data to a table, regardless of whether there is another element with the +same key. +@param t The table to add to +@param key The key to use +@param val The value to add. +@remark When adding data, this function makes a copy of both the key and the + value. + + + +Add data to a table by merging the value with data that has already been +stored +@param t The table to search for the data +@param key The key to merge data for +@param val The data to add +@remark If the key is not found, then this function acts like apr_table_addn + + + +Add data to a table by merging the value with data that has already been +stored +@param t The table to search for the data +@param key The key to merge data for +@param val The data to add +@remark If the key is not found, then this function acts like apr_table_add + + + +Remove data from the table +@param t The table to remove data from +@param key The key of the data being removed + + + +Add a key/value pair to a table, if another element already exists with the +same key, this will over-write the old data. +@param t The table to add the data to. +@param key The key to use +@param val The value to add +@warning When adding data, this function does not make a copy of the key or + the value, so care should be taken to ensure that the values will + not change after they have been added.. + + + +Add a key/value pair to a table, if another element already exists with the +same key, this will over-write the old data. +@param t The table to add the data to. +@param key The key fo use +@param val The value to add +@remark When adding data, this function makes a copy of both the key and the + value. + + + +Get the value associated with a given key from the table. After this call, +The data is still in the table +@param t The table to search for the key +@param key The key to search for +@return The value associated with the key, or NULL if the key does not exist. + + + +Delete all of the elements from a table +@param t The table to clear + + + +Create a new table whose contents are deep copied from the given +table. A deep copy operation copies all fields, and makes copies +of dynamically allocated memory pointed to by the fields. +@param p The pool to allocate the new table out of +@param t The table to clone +@return A deep copy of the table passed in + + + +Create a new table and copy another table into it +@param p The pool to allocate the new table out of +@param t The table to copy +@return A copy of the table passed in +@warning The table keys and respective values are not copied + + + +Make a new table +@param p The pool to allocate the pool out of +@param nelts The number of elements in the initial table. +@return The new table. +@warning This table can only store text data + + + +Generates a new string from the apr_pool_t containing the concatenated +sequence of substrings referenced as elements within the array. The string +will be empty if all substrings are empty or null, or if there are no +elements in the array. If sep is non-NUL, it will be inserted between +elements as a separator. +@param p The pool to allocate the string out of +@param arr The array to generate the string from +@param sep The separator to use +@return A string containing all of the data in the array. + + + +Append one array to the end of another, creating a new array in the process. +@param p The pool to allocate the new array out of +@param first The array to put first in the new array. +@param second The array to put second in the new array. +@return A new array containing the data from the two arrays passed in. + + + +Copy the headers of the array, and arrange for the elements to be copied if +and only if the code subsequently does a push or arraycat. +@param p The pool to allocate the copy of the array out of +@param arr The array to copy +@return An exact copy of the array passed in +@remark The alternate apr_array_copy copies the *entire* array. + + + +Copy the entire array +@param p The pool to allocate the copy of the array out of +@param arr The array to copy +@return An exact copy of the array passed in +@remark The alternate apr_array_copy_hdr copies only the header, and arranges + for the elements to be copied if (and only if) the code subsequently + does a push or arraycat. + + + +Concatenate two arrays together +@param dst The destination array, and the one to go first in the combined + array +@param src The source array to add to the destination array + + + +Remove all elements from an array. +@param arr The array to remove all elements from. +@remark As the underlying storage is allocated from a pool, no +memory is freed by this operation, but is available for reuse. + + + +A helper macro for accessing a member of an APR array. + * + * @param ary the array + * @param i the index into the array to return + * @param type the type of the objects stored in the array + * + * @return the item at index i + +A helper macro for pushing elements into an APR array. + * + * @param ary the array + * @param type the type of the objects stored in the array + * + * @return the location where the new object should be placed + +Remove an element from an array (as a first-in, last-out stack) +@param arr The array to remove an element from. +@return Location of the element in the array. +@remark If there are no elements in the array, NULL is returned. + + + +Add a new element to an array (as a first-in, last-out stack) +@param arr The array to add an element to. +@return Location for the new element in the array. +@remark If there are no free spots in the array, then this function will + allocate new space for the new element. + + + +Create an array +@param p The pool to allocate the memory out of +@param nelts the number of elements in the initial array +@param elt_size The size of each element in the array. +@return The new array + + + +Determine if the array is empty (either NULL or having no elements) +@param a The array to check +@return True if empty, False otherwise + + + +Determine if the table is empty (either NULL or having no elements) +@param t The table to check +@return True if empty, False otherwise + + + +Get the elements from a table +@param t The table +@return An array containing the contents of the table + + + +A checksum for the key, for use by the apr_table internals + + +The value for the current table entry + + +The key for the current table entry + + +The (opaque) structure for string-content tables. + + +The type for each entry in a string-content table + + +The elements in the array + + +The number of elements allocated in the array + + +The number of active elements in the array + + +The amount of memory allocated for each element of the array + + +The pool the array is allocated out of + + +@see apr_array_header_t + +An opaque array type + + +@file apr_tables.h +@brief APR Table library + +@defgroup apr_tables Table and Array Functions +@ingroup APR +Tables are used to store entirely opaque structures +for applications, while Arrays are usually used to +deal with string lists. +@{ + +the table abstract data type + + +Compare two group identifiers for equality. +@param left One gid to test +@param right Another gid to test +@return APR_SUCCESS if the apr_gid_t strutures identify the same group, +APR_EMISMATCH if not, APR_BADARG if an apr_gid_t is invalid. +@remark This function is available only if APR_HAS_USER is defined. + + + +Get the groupid for a specified group name +@param groupid Pointer to the group id (on output) +@param groupname The group name to look up +@param p The pool from which to allocate the string +@remark This function is available only if APR_HAS_USER is defined. + + + +Get the group name for a specified groupid +@param groupname Pointer to new string containing group name (on output) +@param groupid The groupid +@param p The pool from which to allocate the string +@remark This function is available only if APR_HAS_USER is defined. + + + +Compare two user identifiers for equality. +@param left One uid to test +@param right Another uid to test +@return APR_SUCCESS if the apr_uid_t strutures identify the same user, +APR_EMISMATCH if not, APR_BADARG if an apr_uid_t is invalid. +@remark This function is available only if APR_HAS_USER is defined. + + + +Get the home directory for the named user +@param dirname Pointer to new string containing directory name (on output) +@param username The named user +@param p The pool from which to allocate the string +@remark This function is available only if APR_HAS_USER is defined. + + + +Get the userid (and groupid) for the specified username +@param userid Returns the user id +@param groupid Returns the user's group id +@param username The username to lookup +@param p The pool from which to allocate working space +@remark This function is available only if APR_HAS_USER is defined. + + + +Get the user name for a specified userid +@param username Pointer to new string containing user name (on output) +@param userid The userid +@param p The pool from which to allocate the string +@remark This function is available only if APR_HAS_USER is defined. + + + +Get the userid (and groupid) of the calling process +@param userid Returns the user id +@param groupid Returns the user's group id +@param p The pool from which to allocate working space +@remark This function is available only if APR_HAS_USER is defined. + + + +Structure for determining group ownership. + + + +@file apr_file_info.h +@brief APR File Information + +@file apr_user.h +@brief APR User ID Services + +@defgroup apr_user User and Group ID Services +@ingroup APR +@{ + +Structure for determining user ownership. + + + +Improve the clock resolution for the lifetime of the given pool. +Generally this is only desireable on benchmarking and other very +time-sensitive applications, and has no impact on most platforms. +@param p The pool to associate the finer clock resolution + + + +formats the exploded time according to the format specified +@param s string to write to +@param retsize The length of the returned string +@param max The maximum length of the string +@param format The format for the time string +@param tm The time to convert + + + +length of a CTIME date +apr_ctime formats dates in the ctime() format +in an efficient manner. it is a fixed length format +and requires the indicated amount of storage including +the trailing NUL terminator. +Unlike ANSI/ISO C ctime(), apr_ctime() does not include +a \n at the end of the string. +@param date_str String to write to. +@param t the time to convert + + + +length of a RFC822 Date +apr_rfc822_date formats dates in the RFC822 +format in an efficient manner. It is a fixed length +format which requires the indicated amount of storage, +including the trailing NUL terminator. +@param date_str String to write to. +@param t the time to convert + + + +Sleep for the specified number of micro-seconds. +@param t desired amount of time to sleep. +@warning May sleep for longer than the specified time. + + + +Convert time value from human readable format to a numeric apr_time_t that +always represents GMT +@param result the resulting imploded time +@param input the input exploded time + + + +Convert time value from human readable format to a numeric apr_time_t +e.g. elapsed usec since epoch +@param result the resulting imploded time +@param input the input exploded time + + + +convert a time to its human readable components in local timezone +@param result the exploded time +@param input the time to explode + + + +convert a time to its human readable components in GMT timezone +@param result the exploded time +@param input the time to explode + + + +convert a time to its human readable components using an offset +from GMT +@param result the exploded time +@param input the time to explode +@param offs the number of seconds offset to apply + + + +convert an ansi time_t to an apr_time_t +@param result the resulting apr_time_t +@param input the time_t to convert + + + +seconds east of UTC + + +daylight saving time + + +(0-365) days since jan 1 + + +(0-6) days since sunday + + +year since 1900 + + +(0-11) month of the year + + +(1-31) day of the month + + +(0-23) hours past midnight + + +(0-59) minutes past tm_hour + + +(0-61) seconds past tm_min + + +microseconds past tm_sec + + +@see apr_time_exp_t + +a structure similar to ANSI struct tm with the following differences: + - tm_usec isn't an ANSI field + - tm_gmtoff isn't an ANSI field (it's a bsdism) + + + +number of microseconds per second +@return apr_time_t as a second +@return apr_time_t as a usec +@return apr_time_t as a msec +@return apr_time_t as a msec +@return a second as an apr_time_t +@return a second and usec combination as an apr_time_t +@return the current time + + + +short interval for I/O timeouts, in microseconds + + +mechanism to properly type apr_time_t literals +mechanism to properly print apr_time_t values +intervals for I/O timeouts, in microseconds + + +number of microseconds since 00:00:00 january 1, 1970 UTC + + +day names + + +@file apr_time.h +@brief APR Time Library + +@defgroup apr_time Time Routines +@ingroup APR +@{ + +month names + + +Run all registered child cleanups, in preparation for an exec() +call in a forked child -- close files, etc., but *don't* flush I/O +buffers, *don't* wait for subprocesses, and *don't* free any +memory. + + + + An empty cleanup function. + + Passed to apr_pool_cleanup_register() when no cleanup is required. + + @param data The data to cleanup, will not be used by this function. + + + + Run the specified cleanup function immediately and unregister it. + + The cleanup most recently registered with @a p having the same values of + @a data and @a cleanup will be removed and @a cleanup will be called + with @a data as the argument. + + @param p The pool to remove the cleanup from + @param data The data to remove from cleanup + @param cleanup The function to remove from cleanup + + + + Replace the child cleanup function of a previously registered cleanup. + + The cleanup most recently registered with @a p having the same values of + @a data and @a plain_cleanup will have the registered child cleanup + function replaced with @a child_cleanup. + + @param p The pool of the registered cleanup + @param data The data of the registered cleanup + @param plain_cleanup The plain cleanup function of the registered cleanup + @param child_cleanup The function to register as the child cleanup + + + + Remove a previously registered cleanup function. + + The cleanup most recently registered with @a p having the same values of + @a data and @a cleanup will be removed. + + @param p The pool to remove the cleanup from + @param data The data of the registered cleanup + @param cleanup The function to remove from cleanup + @remarks For some strange reason only the plain_cleanup is handled by this + function + + + + Register a function to be called when a pool is cleared or destroyed. + + Unlike apr_pool_cleanup_register which register a cleanup + that is called AFTER all subpools are destroyed this function register + a function that will be called before any of the subpool is destoryed. + + @param p The pool register the cleanup with + @param data The data to pass to the cleanup function. + @param plain_cleanup The function to call when the pool is cleared + or destroyed + + + + @defgroup PoolCleanup Pool Cleanup Functions + + Cleanups are performed in the reverse order they were registered. That is: + Last In, First Out. A cleanup function can safely allocate memory from + the pool that is being cleaned up. It can also safely register additional + cleanups which will be run LIFO, directly after the current cleanup + terminates. Cleanups have to take caution in calling functions that + create subpools. Subpools, created during cleanup will NOT automatically + be cleaned up. In other words, cleanups are to clean up after themselves. + + @{ + +Register a function to be called when a pool is cleared or destroyed +@param p The pool register the cleanup with +@param data The data to pass to the cleanup function. +@param plain_cleanup The function to call when the pool is cleared + or destroyed +@param child_cleanup The function to call when a child process is about + to exec - this function is called in the child, obviously! + + + +Return the data associated with the current pool. +@param data The user data associated with the pool. +@param key The key for the data to retrieve +@param pool The current pool. + + + + Set the data associated with the current pool + @param data The user data associated with the pool. + @param key The key to use for association + @param cleanup The cleanup program to use to cleanup the data (NULL if none) + @param pool The current pool + @note same as apr_pool_userdata_set(), except that this version doesn't + make a copy of the key (this function is useful, for example, when + the key is a string literal) + @warning This should NOT be used if the key could change addresses by + any means between the apr_pool_userdata_setn() call and a + subsequent apr_pool_userdata_get() on that key, such as if a + static string is used as a userdata key in a DSO and the DSO could + be unloaded and reloaded between the _setn() and the _get(). You + MUST use apr_pool_userdata_set() in such cases. + @warning More generally, the key and the data to be attached to the + pool should have a life span at least as long as the pool itself. + + + + + Set the data associated with the current pool + @param data The user data associated with the pool. + @param key The key to use for association + @param cleanup The cleanup program to use to cleanup the data (NULL if none) + @param pool The current pool + @warning The data to be attached to the pool should have a life span + at least as long as the pool it is being attached to. + + Users of APR must take EXTREME care when choosing a key to + use for their data. It is possible to accidentally overwrite + data by choosing a key that another part of the program is using. + Therefore it is advised that steps are taken to ensure that unique + keys are used for all of the userdata objects in a particular pool + (the same key in two different pools or a pool and one of its + subpools is okay) at all times. Careful namespace prefixing of + key names is a typical way to help ensure this uniqueness. + + + + +Tag a pool (give it a name) +@param pool The pool to tag +@param tag The tag + + + +Determine if pool a is an ancestor of pool b. +@param a The pool to search +@param b The pool to search for +@return True if a is an ancestor of b, NULL is considered an ancestor + of all pools. +@remark if compiled with APR_POOL_DEBUG, this function will also +return true if A is a pool which has been guaranteed by the caller +(using apr_pool_join) to have a lifetime at least as long as some +ancestor of pool B. + + + +Get the parent pool of the specified pool. +@param pool The pool for retrieving the parent pool. +@return The parent of the given pool. + + + +Get the abort function associated with the specified pool. +@param pool The pool for retrieving the abort function. +@return The abort function for the given pool. + + + +Set the function to be called when an allocation failure occurs. +@remark If the program wants APR to exit on a memory allocation error, + then this function can be called to set the callback to use (for + performing cleanup and then exiting). If this function is not called, + then APR will return an error and expect the calling program to + deal with the error accordingly. + + + +Allocate a block of memory from a pool and set all of the memory to 0 +@param p The pool to allocate from +@param size The amount of memory to allocate +@return The allocated memory + +Debug version of apr_pcalloc +@param p See: apr_pcalloc +@param size See: apr_pcalloc +@param file_line Where the function is called from. + This is usually APR_POOL__FILE_LINE__. +@return See: apr_pcalloc + + + +Debug version of apr_palloc +@param p See: apr_palloc +@param size See: apr_palloc +@param file_line Where the function is called from. + This is usually APR_POOL__FILE_LINE__. +@return See: apr_palloc + + + +Allocate a block of memory from a pool +@param p The pool to allocate from +@param size The amount of memory to allocate +@return The allocated memory + + + +Debug version of apr_pool_destroy. +@param p See: apr_pool_destroy. +@param file_line Where the function is called from. + This is usually APR_POOL__FILE_LINE__. +@remark Only available when APR_POOL_DEBUG is defined. + Call this directly if you have you apr_pool_destroy + calls in a wrapper function and wish to override + the file_line argument to reflect the caller of + your wrapper function. If you do not have + apr_pool_destroy in a wrapper, trust the macro + and don't call apr_pool_destroy_debug directly. + + + +Destroy the pool. This takes similar action as apr_pool_clear() and then +frees all the memory. +@param p The pool to destroy +@remark This will actually free the memory + + + +Debug version of apr_pool_clear. +@param p See: apr_pool_clear. +@param file_line Where the function is called from. + This is usually APR_POOL__FILE_LINE__. +@remark Only available when APR_POOL_DEBUG is defined. + Call this directly if you have you apr_pool_clear + calls in a wrapper function and wish to override + the file_line argument to reflect the caller of + your wrapper function. If you do not have + apr_pool_clear in a wrapper, trust the macro + and don't call apr_pool_destroy_clear directly. + + + +Clear all memory in the pool and run all the cleanups. This also destroys all +subpools. +@param p The pool to clear +@remark This does not actually free the memory, it just allows the pool + to re-use this memory for the next allocation. +@see apr_pool_destroy() + + + +Create a new pool. +@param newpool The pool we have just created. +@param parent The parent pool. If this is NULL, the new pool is a root + pool. If it is non-NULL, the new pool will inherit all + of its parent pool's attributes, except the apr_pool_t will + be a sub-pool. + +Create a new pool. +@param newpool The pool we have just created. + +Find the pools allocator +@param pool The pool to get the allocator from. + + + +Debug version of apr_pool_create_unmanaged_ex. +@param newpool @see apr_pool_create_unmanaged. +@param abort_fn @see apr_pool_create_unmanaged. +@param allocator @see apr_pool_create_unmanaged. +@param file_line Where the function is called from. + This is usually APR_POOL__FILE_LINE__. +@remark Only available when APR_POOL_DEBUG is defined. + Call this directly if you have you apr_pool_create_unmanaged_ex + calls in a wrapper function and wish to override + the file_line argument to reflect the caller of + your wrapper function. If you do not have + apr_pool_create_core_ex in a wrapper, trust the macro + and don't call apr_pool_create_core_ex_debug directly. + + + +Debug version of apr_pool_create_core_ex. +@deprecated @see apr_pool_create_unmanaged_ex_debug. + + + +Debug version of apr_pool_create_ex. +@param newpool @see apr_pool_create. +@param parent @see apr_pool_create. +@param abort_fn @see apr_pool_create. +@param allocator @see apr_pool_create. +@param file_line Where the function is called from. + This is usually APR_POOL__FILE_LINE__. +@remark Only available when APR_POOL_DEBUG is defined. + Call this directly if you have you apr_pool_create_ex + calls in a wrapper function and wish to override + the file_line argument to reflect the caller of + your wrapper function. If you do not have + apr_pool_create_ex in a wrapper, trust the macro + and don't call apr_pool_create_ex_debug directly. + + + +Create a new unmanaged pool. +@param newpool The pool we have just created. +@param abort_fn A function to use if the pool cannot allocate more memory. +@param allocator The allocator to use with the new pool. If NULL a + new allocator will be crated with newpool as owner. +@remark An unmanaged pool is a special pool without a parent; it will + NOT be destroyed upon apr_terminate. It must be explicitly + destroyed by calling apr_pool_destroy, to prevent memory leaks. + Use of this function is discouraged, think twice about whether + you really really need it. + + + +Create a new pool. +@deprecated @see apr_pool_create_unmanaged_ex. + + + +Create a new pool. +@param newpool The pool we have just created. +@param parent The parent pool. If this is NULL, the new pool is a root + pool. If it is non-NULL, the new pool will inherit all + of its parent pool's attributes, except the apr_pool_t will + be a sub-pool. +@param abort_fn A function to use if the pool cannot allocate more memory. +@param allocator The allocator to use with the new pool. If NULL the + allocator of the parent pool will be used. + + + +Get the mutex currently set for the allocator +@param allocator The allocator + + + +Set a mutex for the allocator to use +@param allocator The allocator to set the mutex for +@param mutex The mutex + + + +Get the pool used by this thread_mutex. +@return apr_pool_t the pool + + + +Destroy the mutex and free the memory associated with the lock. +@param mutex the mutex to destroy. + + + +Release the lock for the given mutex. +@param mutex the mutex from which to release the lock. + + + +Attempt to acquire the lock for the given mutex. If the mutex has already +been acquired, the call returns immediately with APR_EBUSY. Note: it +is important that the APR_STATUS_IS_EBUSY(s) macro be used to determine +if the return value was APR_EBUSY, for portability reasons. +@param mutex the mutex on which to attempt the lock acquiring. + + + +Acquire the lock for the given mutex. If the mutex is already locked, +the current thread will be put to sleep until the lock becomes available. +@param mutex the mutex on which to acquire the lock. + + + +Create and initialize a mutex that can be used to synchronize threads. +@param mutex the memory address where the newly created mutex will be + stored. +@param flags Or'ed value of: +
+          APR_THREAD_MUTEX_DEFAULT   platform-optimal lock behavior.
+          APR_THREAD_MUTEX_NESTED    enable nested (recursive) locks.
+          APR_THREAD_MUTEX_UNNESTED  disable nested locks (non-recursive).
+
+@param pool the pool from which to allocate the mutex. +@warning Be cautious in using APR_THREAD_MUTEX_DEFAULT. While this is the +most optimial mutex based on a given platform's performance charateristics, +it will behave as either a nested or an unnested lock. + +
+ +@file apr_thread_mutex.h +@brief APR Thread Mutex Routines + +@defgroup apr_thread_mutex Thread Mutex Routines +@ingroup APR +@{ + +Opaque thread-local mutex structure + + +Set the current threshold at which the allocator should start +giving blocks back to the system. +@param allocator The allocator the set the threshold on +@param size The threshold. 0 == unlimited. + + + +Get the current owner of the allocator +@param allocator The allocator to get the owner from + + + +Set the owner of the allocator +@param allocator The allocator to set the owner for +@param pool The pool that is to own the allocator +@remark Typically pool is the highest level pool using the allocator + + + +Free a list of blocks of mem, giving them back to the allocator. +The list is typically terminated by a memnode with its next field +set to NULL. +@param allocator The allocator to give the mem back to +@param memnode The memory node to return + + + +Allocate a block of mem from the allocator +@param allocator The allocator to allocate from +@param size The size of the mem to allocate (excluding the + memnode structure) + + + +Destroy an allocator +@param allocator The allocator to be destroyed +@remark Any memnodes not given back to the allocator prior to destroying + will _not_ be free()d. + + + +The base size of a memory node - aligned. +Symbolic constants + Create a new allocator + @param allocator The allocator we have just created. + + + + +the structure which holds information about the allocation + +basic memory node structure + * @note The next, ref and first_avail fields are available for use by the + * caller of apr_allocator_alloc(), the remaining fields are read-only. + * The next field has to be used with caution and sensibly set when the + * memnode is passed back to apr_allocator_free(). See apr_allocator_free() + * for details. + * The ref and first_avail fields will be properly restored by + * apr_allocator_free(). + + + +Tear down all of the internal structures required to use pools +@remark Programs do NOT need to call this directly. APR will call this + automatically from apr_terminate. +@internal + + + +Setup all of the internal structures required to use pools +@remark Programs do NOT need to call this directly. APR will call this + automatically from apr_initialize. +@internal + + + + Declaration helper macro to construct apr_foo_pool_get()s. + + This standardized macro is used by opaque (APR) data types to return + the apr_pool_t that is associated with the data type. + + APR_POOL_DECLARE_ACCESSOR() is used in a header file to declare the + accessor function. A typical usage and result would be: +
+    APR_POOL_DECLARE_ACCESSOR(file);
+ becomes:
+    APR_DECLARE(apr_pool_t *) apr_file_pool_get(apr_file_t *ob);
+ 
+ @remark Doxygen unwraps this macro (via doxygen.conf) to provide + actual help for each specific occurance of apr_foo_pool_get. + @remark the linkage is specified for APR. It would be possible to expand + the macros to support other linkages. + + Implementation helper macro to provide apr_foo_pool_get()s. + + In the implementation, the APR_POOL_IMPLEMENT_ACCESSOR() is used to + actually define the function. It assumes the field is named "pool". + + Pool debug levels + +
+ | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+ ---------------------------------
+ |   |   |   |   |   |   |   | x |  General debug code enabled (useful in
+                                    combination with --with-efence).
+
+ |   |   |   |   |   |   | x |   |  Verbose output on stderr (report
+                                    CREATE, CLEAR, DESTROY).
+
+ |   |   |   | x |   |   |   |   |  Verbose output on stderr (report
+                                    PALLOC, PCALLOC).
+
+ |   |   |   |   |   | x |   |   |  Lifetime checking. On each use of a
+                                    pool, check its lifetime.  If the pool
+                                    is out of scope, abort().
+                                    In combination with the verbose flag
+                                    above, it will output LIFE in such an
+                                    event prior to aborting.
+
+ |   |   |   |   | x |   |   |   |  Pool owner checking.  On each use of a
+                                    pool, check if the current thread is the
+                                    pools owner.  If not, abort().  In
+                                    combination with the verbose flag above,
+                                    it will output OWNER in such an event
+                                    prior to aborting.  Use the debug
+                                    function apr_pool_owner_set() to switch
+                                    a pools ownership.
+
+ When no debug level was specified, assume general debug mode.
+ If level 0 was specified, debugging is switched off
+ 
+ +the place in the code where the particular function was called +A function that is called when allocation fails. +
+ +@} +@defgroup apr_random Random Functions +@{ + +Generate random bytes. +@param buf Buffer to fill with random bytes +@param length Length of buffer in bytes + + + +Tear down any APR internal data structures which aren't torn down +automatically, same as apr_terminate +@remark An APR program must call either the apr_terminate or apr_terminate2 + function once it it has finished using APR services. The APR + developers suggest using atexit(apr_terminate) to ensure this is done. + apr_terminate2 exists to allow non-c language apps to tear down apr, + while apr_terminate is recommended from c language applications. + + + +Tear down any APR internal data structures which aren't torn down +automatically. +@remark An APR program must call this function at termination once it + has stopped using APR services. The APR developers suggest using + atexit to ensure this is called. When using APR from a language + other than C that has problems with the calling convention, use + apr_terminate2() instead. + + + +Set up an application with normalized argc, argv (and optionally env) in +order to deal with platform-specific oddities, such as Win32 services, +code pages and signals. This must be the first function called for any +APR program. +@param argc Pointer to the argc that may be corrected +@param argv Pointer to the argv that may be corrected +@param env Pointer to the env that may be corrected, may be NULL +@remark See apr_initialize if this is a library consumer of apr. +Otherwise, this call is identical to apr_initialize, and must be closed +with a call to apr_terminate at the end of program execution. + + + +Finding offsets of elements within structures. +Taken from the X code... they've sweated portability of this stuff +so we don't have to. Sigh... +@param p_type pointer type name +@param field data field within the structure pointed to +@return offset + +Finding offsets of elements within structures. +@param s_type structure type name +@param field data field within the structure +@return offset + +Alignment macros + +Default alignment +String and memory functions + +Properly quote a value as a string in the C preprocessor +Helper macro for APR_STRINGIFY +@} +@defgroup apr_library Library initialization and termination +@{ + +Setup any APR internal data structures. This MUST be the first function +called for any APR library. +@remark See apr_app_initialize if this is an application, rather than +a library consumer of apr. + + + +@defgroup apr_general Miscellaneous library routines +@ingroup APR +This is collection of oddballs that didn't fit anywhere else, +and might move to more appropriate headers with the release +of APR 1.0. +@{ + +FALSE +TRUE +a space +a carrige return +a line feed +a tab +signal numbers typedef + + + @file apr_pools.h + @brief APR memory allocation + + Resource allocation routines... + + designed so that we don't have to keep track of EVERYTHING so that + it can be explicitly freed later (a fundamentally unsound strategy --- + particularly in the presence of die()). + + Instead, we maintain pools, and allocate items (both memory and I/O + handlers) from the pools --- currently there are two, one for per + transaction info, and one for config info. When a transaction is over, + we can delete everything in the per-transaction apr_pool_t without fear, + and without thinking too hard about it either. + +@file apr_general.h +This is collection of oddballs that didn't fit anywhere else, +and might move to more appropriate headers with the release +of APR 1.0. +@brief APR Miscellaneous library routines + + + +Return a human readable string describing the specified error. +@param statcode The error code the get a string for. +@param buf A buffer to hold the error string. +@param bufsize Size of the buffer to hold the string. + + + +@defgroup apr_errno Error Codes +@ingroup APR +@{ + +Type for specifying an error or status code. + + + + Gets the list of changelist-names + + + Extended Parameter container for SvnClient.PropertyList + + + + Gets the list of properties to retrieve. Only SVN 1.5+ repositories allow adding custom properties to this list + + + Gets or sets a boolean indicating whether the paths changed in the revision should be provided + + + + + + Gets the list of changelist-names + + + Extended Parameter container of SvnClient.Info + + + + Gets the list of changelist-names + + + Extended Parameter container of 's Diff command + + + + Extended Parameter container of + + + + If Force is not set then this operation will fail if any path contains locally modified +and/or unversioned items. If Force is set such items will be deleted. + + + Extended Parameter container of and + + + +Set @a *dest to a natively-encoded C string from utf8 string @a src; + * allocate @a *dest in @a pool. + + + +Set @a *dest to a natively-encoded C string from utf8 stringbuf @a src; + * allocate @a *dest in @a pool. + + + +Return a fuzzily native-encoded C string from utf8 C string @a src, + * allocated in @a pool. A fuzzy recoding leaves all 7-bit ascii + * characters the same, and substitutes "?\\XXX" for others, where XXX + * is the unsigned decimal code for that character. + * + * This function cannot error; it is guaranteed to return something. + * First it will recode as described above and then attempt to convert + * the (new) 7-bit UTF-8 string to native encoding. If that fails, it + * will return the raw fuzzily recoded string, which may or may not be + * meaningful in the client's locale, but is (presumably) better than + * nothing. + * + * ### Notes: + * + * Improvement is possible, even imminent. The original problem was + * that if you converted a UTF-8 string (say, a log message) into a + * locale that couldn't represent all the characters, you'd just get a + * static placeholder saying "[unconvertible log message]". Then + * Justin Erenkrantz pointed out how on platforms that didn't support + * conversion at all, "svn log" would still fail completely when it + * encountered unconvertible data. + * + * Now for both cases, the caller can at least fall back on this + * function, which converts the message as best it can, substituting + * "?\\XXX" escape codes for the non-ascii characters. + * + * Ultimately, some callers may prefer the iconv "//TRANSLIT" option, + * so when we can detect that at configure time, things will change. + * Also, this should (?) be moved to apr/apu eventually. + * + * See http://subversion.tigris.org/issues/show_bug.cgi?id=807 for + * details. + + + +Like svn_utf_cstring_from_utf8_ex2() but with @a convset_key which is + * ignored. + * + * @deprecated Provided for backward compatibility with the 1.3 API. + + + +Set @a *dest to a @a topage encoded C string from utf8 encoded C string + * @a src; allocate @a *dest in @a pool. + * + * @since New in 1.4. + + + +Set @a *dest to a natively-encoded C string from utf8 C string @a src; + * allocate @a *dest in @a pool. + + + +Set @a *dest to a natively-encoded string from utf8 string @a src; + * allocate @a *dest in @a pool. + + + +Set @a *dest to a natively-encoded stringbuf from utf8 stringbuf @a src; + * allocate @a *dest in @a pool. + + + +Like svn_utf_cstring_to_utf8_ex2() but with @a convset_key which is + * ignored. + * + * @deprecated Provided for backward compatibility with the 1.3 API. + + + +Set @a *dest to a utf8 encoded C string from @a frompage encoded C + * string @a src; allocate @a *dest in @a pool. + * + * @since New in 1.4. + + + +Set @a *dest to a utf8-encoded C string from native C string @a src; + * allocate @a *dest in @a pool. + + + +Set @a *dest to a utf8-encoded string from native string @a src; allocate + * @a *dest in @a pool. + + + +Set @a *dest to a utf8-encoded stringbuf from native stringbuf @a src; + * allocate @a *dest in @a pool. + + + + @copyright + ==================================================================== + Copyright (c) 2000-2004, 2008 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_utf.h + @brief UTF-8 conversion routines + Whenever a conversion routine cannot convert to or from UTF-8, the + error returned has code @c APR_EINVAL. + +@defgroup APR_Util APR Utility Functions +@{ + + APU_DECLARE_EXPORT is defined when building the APR-UTIL dynamic library, + so that all public symbols are exported. + + APU_DECLARE_STATIC is defined when including the APR-UTIL public headers, + to provide static linkage when the dynamic library may be unavailable. + + APU_DECLARE_STATIC and APU_DECLARE_EXPORT are left undefined when + including the APR-UTIL public headers, to import and link the symbols from + the dynamic APR-UTIL library and assure appropriate indirection and calling + conventions at compile time. + +@} + + + Attempt to load @a libname, returning it in @a dso. + + If @a libname cannot be loaded set @a dso to NULL and return + @c SVN_NO_ERROR. + + @note Due to pool lifetime issues DSOs are all loaded into a global + pool, so you must be certain that there is a bounded number of + them that will ever be loaded by the system, otherwise you will + leak memory. + + @since New in 1.4. + + + + Initialize the DSO loading routines. + + @note This should be called prior to the creation of any pool that + is passed to a function that comes from a DSO, otherwise you + risk having the DSO unloaded before all pool cleanup callbacks + that live in the DSO have been executed. If it is not called + prior to @c svn_dso_load being used for the first time there + will be a best effort attempt made to initialize the subsystem, + but it will not be entirely thread safe and it risks running + into the previously mentioned problems with DSO unloading and + pool cleanup callbacks. + + Calls svn_dso_initialize2(void) upon error aborts. + + @deprecated Provided for backwards compatibility with the 1.5 API. + + @since New in 1.4. + + + + @copyright + ==================================================================== + Copyright (c) 2006, 2008 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_dso.h + @brief DSO loading routines + + + + Gets the list of properties to retrieve. Only SVN 1.5+ repositories allow adding custom properties to this list + + + Gets or sets a boolean indicating whether the paths changed in the revision should be provided + + + + + + Extended Parameter container of + + + + Extended Parameter container of + + + + Tries to parse a single SvnExternalItem + + + Tries to parse a single SvnExternalItem + + + Writes the value to the specified + + + Creates a string containing the external in string format. Optionally preferring formats compatible with older clients + + + Creates a string containing the external in string format. Preferring formats compatible with older clients + + + Gets the absolute or relative url of the external (What to insert) + + + Gets the target path of the external (Where to place the external) + + + Extended Parameter container of + + + + Extended Parameter container of 's Changed method + + + + Extended Parameter container of 's CreateRepository method + + + + If @a allow_unver_obstructions is true then the update tolerates +existing unversioned items that obstruct added paths from @a URL + +Only obstructions of the same type (file or dir) as the added item are +tolerated. The text of obstructing files is left as-is, effectively +treating it as a user modification after the update. Working +properties of obstructing items are set equal to the base properties. +If AllowUnversionedObstructions is false then the update will abort +if there are any unversioned obstructing items. + + + + The revision to update to; None by default + +Revision must be of kind Number, Head or Date. If Revision +does not meet these requirements, Updated returns the error +SVN_ERR_CLIENT_BAD_REVISION. + + + + Gets or sets a value indicating whether to ignore externals +definitions as part of this operation. + + + +Gets or sets whether in addition to updating paths also the +sticky ambient depth value must be set to depth + + + + Gets or sets the depth of the update + + If Depth is Infinity, update fully recursively. Else if it +is Immediates or Files, update each target and its file +entries, but not its subdirectories. Else if Empty, update +exactly each target, nonrecursively (essentially, update the +target's properties). + If Depth is Unknown, take the working depth from the specified paths + + + + + Extended Parameter container of + + + + Extended Parameter container of + + + + Extended Parameter container of + + + + Gets or sets a boolean indicating whether the paths changed in the revision should be provided + Defaults to true + + + Extended Parameter container of 's ChangeInfo command + + + + Gets the list of changelist-names + + + Extended Parameter container of + + + + Extended Parameter container of 's GetRevisionPropertyList + + + + Extended parameter container for Cleanup + + + + Extended Parameter container of 's GetRevisionProperty + + + + Extended Parameter container of 's Property method + + + + Gets or sets a value indicating how to translate line endings ( = no translation + + + Gets or sets a directory to receive all file versions + The directory to place the versions in or null to only delegate the files to the event handler + + + Gets or sets the blame range as + + + Extended Parameter container of + + + + Extended Parameter container of 's RecoverRepository method + + + +Adds the certificate @a cert to the list of trusted certificates in +@a ssl_ctx that will be used for verification. +See also @a serf_ssl_load_cert_file. + + + +Load a CA certificate file from a path @a file_path. If the file was loaded +and parsed correctly, a certificate @a cert will be created and returned. +This certificate object will be alloced in @a pool. + + + +Export a certificate to base64-encoded, zero-terminated string. +The returned string is allocated in @a pool. Returns NULL on failure. + + + +Extract the fields of the certificate in a table with keys (sha1, notBefore, +notAfter). The returned table will be allocated in @a pool. + + + +Extract the fields of the subject in a table with keys (E, CN, OU, O, L, +ST and C). The returned table will be allocated in @a pool. + + + +Extract the fields of the issuer in a table with keys (E, CN, OU, O, L, +ST and C). The returned table will be allocated in @a pool. + + + +Return the depth of the certificate. + + + +Use the default root CA certificates as included with the OpenSSL library. + + + +Set a callback to override the default SSL server certificate validation +algorithm. + + + + Iterates over all headers of the message and invokes the callback + function with header key and value. Stop iterating when no more + headers are available or when the callback function returned a + non-0 value. + + @param headers_bucket headers to iterate over + @param func callback routine to invoke for every header in the bucket + @param baton baton to pass on each invocation to func + + + +@param baton opaque baton as passed to @see serf_bucket_headers_do +@param key The header key from this iteration through the table +@param value The header value from this iteration through the table + + + + Set, extended: fine grained copy control of header and value. + + Set the specified @a header, with length @a header_size with the + @a value, and length @a value_size, into the bucket. The header will + be copied if @a header_copy is set, and the value is copied if + @a value_copy is set. If the values are not copied, then they should + remain in scope at least as long as the bucket. + + If @a headers_bucket already contains a header with the same name + as @a header, then append @a value to the existing value, + separating with a comma (as per RFC 2616, section 4.2). In this + case, the new value must be allocated and the header re-used, so + behave as if @a value_copy were true and @a header_copy false. + + + + Set, no copies. + + Set the specified @a header and @a value into the bucket, without + copying either attribute. Both attributes should remain in scope at + least as long as the bucket. + + @note In the case where a header already exists this will result + in a reallocation and copy, @see serf_bucket_headers_setn. + + + + Set, copies: header and value copied. + + Copy the specified @a header and @a value into the bucket, using space + from this bucket's allocator. + + + + Set, default: value copied. + + Set the specified @a header within the bucket, copying the @a value + into space from this bucket's allocator. The header is NOT copied, + so it should remain in scope at least as long as the bucket. + + + +Equivalent to serf_bucket_simple_create, except that the bucket takes +ownership of a private copy of the data. + + + +Transform @a bucket in-place into an aggregate bucket. + + +Advise the response @a bucket that this was from a HEAD request and +that it should not expect to see a response body. + + + +Get the headers bucket for @a response. + + + + Wait for the HTTP headers to be processed for a @a response. + + If the headers are available, APR_SUCCESS is returned. + If the headers aren't available, APR_EAGAIN is returned. + + + +Return the Status-Line information, if available. This function +works like other bucket read functions: it may return APR_EAGAIN or +APR_EOF to signal the state of the bucket for reading. A return +value of APR_SUCCESS will always indicate that status line +information was returned; for other return values the caller must +check the version field in @a sline. A value of 0 means that the +data is not (yet) present. + + + +Sets the root url of the remote host. If this request contains a relative +url, it will be prefixed with the root url to form an absolute url. +@a bucket is the request bucket. @a root_url is the absolute url of the +root of the remote host, without the closing '/'. + + + +@file serf_bucket_types.h +@brief serf-supported bucket types + + + +@defgroup APR_Util APR Utility Functions +@{ + + APU_DECLARE_EXPORT is defined when building the APR-UTIL dynamic library, + so that all public symbols are exported. + + APU_DECLARE_STATIC is defined when including the APR-UTIL public headers, + to provide static linkage when the dynamic library may be unavailable. + + APU_DECLARE_STATIC and APU_DECLARE_EXPORT are left undefined when + including the APR-UTIL public headers, to import and link the symbols from + the dynamic APR-UTIL library and assure appropriate indirection and calling + conventions at compile time. + +@} + + + Gets or sets a boolean indication whether to retrieve all revision properties + Default value: false + + + Gets the list of properties to retrieve. Only SVN 1.5+ repositories allow adding custom properties to this list + This list defaults to the author, date, logmessage properties. Clear the list to retrieve no properties, +or set RetrieveAllProperties to true to retrieve all properties. + + + + Gets or sets the base uri to which relative Uri's are relative + + + Gets or sets a boolean indicating whether the merged revisions should be fetched instead of the node changes + + + Gets or sets a boolean indicating whether only the history of this exact node should be fetched (Aka stop on copying) + If @a StrictNodeHistory is set, copy history (if any exists) will +not be traversed while harvesting revision logs for each target. + + + Gets or sets a boolean indicating whether the paths changed in the revision should be provided + + + Gets or sets the limit on the number of log items fetched + + + Gets or sets the range specified by - wrapped as a + New code should either use and or + + + Gets the revision in which the Url's are evaluated (Aka peg revision) + + + Initializes a new instance with the specified range + + + Initializes a new instance with default properties + + + Extended Parameter container of SvnClient.Log + + + + @copyright + ==================================================================== + Copyright (c) 2000-2008 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_types.h + @brief Subversion's data types + + @copyright + ==================================================================== + Copyright (c) 2000-2008 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_opt.h + @brief Option and argument parsing for Subversion command lines + + @copyright + ==================================================================== + Copyright (c) 2000-2006 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_string.h + @brief Counted-length strings for Subversion, plus some C string goodies. + + There are two string datatypes: @c svn_string_t and @c svn_stringbuf_t. + The former is a simple pointer/length pair useful for passing around + strings (or arbitrary bytes) with a counted length. @c svn_stringbuf_t is + buffered to enable efficient appending of strings without an allocation + and copy for each append operation. + + @c svn_string_t contains a const char * for its data, so it is + most appropriate for constant data and for functions which expect constant, + counted data. Functions should generally use const @c svn_string_t + * as their parameter to indicate they are expecting a constant, + counted string. + + @c svn_stringbuf_t uses a plain char * for its data, so it is + most appropriate for modifiable data. + +

Invariants

+ + 1. Null termination: + + Both structures maintain a significant invariant: + + s->data[s->len] == '\\0' + + The functions defined within this header file will maintain + the invariant (which does imply that memory is + allocated/defined as @c len+1 bytes). If code outside of the + @c svn_string.h functions manually builds these structures, + then they must enforce this invariant. + + Note that an @c svn_string(buf)_t may contain binary data, + which means that strlen(s->data) does not have to equal @c + s->len. The NULL terminator is provided to make it easier to + pass @c s->data to C string interfaces. + + + 2. Non-NULL input: + + All the functions assume their input data is non-NULL, + unless otherwise documented, and may seg fault if passed + NULL. The input data may *contain* null bytes, of course, just + the data pointer itself must not be NULL. + +

Memory allocation

+ + All the functions make a deep copy of all input data, and never store + a pointer to the original input data. + + @copyright + ==================================================================== + Copyright (c) 2000-2004, 2008 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_error.h + @brief Common exception handling for Subversion. + + @copyright + ==================================================================== + Copyright (c) 2000-2008 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_ra.h + @brief Repository Access + + @copyright + ==================================================================== + Copyright (c) 2000-2008 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_client.h + @brief Subversion's client library + + Requires: The working copy library and repository access library. + Provides: Broad wrappers around working copy library functionality. + Used By: Client programs. + +
+ + Extended Parameter container for SvnClient.Blame + + + + Extended Parameter container of 's CreateRepository method + + + + Gets the of the command + + + Extended Parameter container of + + + + Gets the list of changelist-names + + + Extended Parameter container for SvnClient.ListChangeList + + + + Extended Parameter container of 's Write method + + + + Gets the list of changelist-names + + + Extended Parameter container of + + + + Extended Parameter container of + + + + Factory function to create a new SvnDeltaNode instance for the specified file + + + Factory function to creates a new SvnDeltaNode instance for the specified directory + + + Called when a delta run is aborted + + + Called when a delta run is complete + + + Called to specify that information on a file won't be provided (e.g. Authorization) + + + Called to close a directory opened with or + + + Called to change a property on a file + + + Called when a file is about to receive content changes + The actual changes are not passed to this function, but are streamed to the target +specified by the property of the + + + Raised when a file is about to receive content changes + The actual changes are not passed to this event, but are streamed to the target +specified by the property of the + + + Called to open a file receiving changes + + + Called instead of when a new file is added to a directory + + + Called to specify that information on a directory won't be provided (e.g. Authorization) + + + Called to close a directory opened with or + + + Called to change a property on a directory + + + Called to open a directory receiving changes + + + Called instead of OnDirectoryOpen when a new directory is added + + + Called when an entry (directory or file) is removed from a directory + + + Called before the first directory operations + + + Called before open root to specify the target settings + + + The SvnDeltaEditor is a generic receiver of Subversion changes. +Hook events on this class or override methods on descendants of this class to +receive changes + + + Raised when is not null and completes its processing + + + Gets or sets the that receives the actual differences +after this event returns + + + Called when a delta window is ready for processing + + + Creates a new instance to transform +, into while optionally verifying + if is true and +verification data is available. + + + Called after the last delta window was successfully received + + + Called when a new delta window is ready for processing + + + Called before the first invocation to allow initializing + + + Detaches the SvnEventArgs from the unmanaged storage; optionally keeping the property values for later use + After this method is called all properties are either stored managed, or are no longer readable + + + Detaches the SvnEventArgs from the unmanaged storage; optionally keeping the property values for later use + After this method is called all properties are either stored managed, or are no longer readable + + + Gets a instance for the current hook request + + + Extended Parameter container of + + + + Gets or sets the AllowObsstructions value + + If AllowObstructions is TRUE then the update tolerates +existing unversioned items that obstruct added paths from @a URL. Only +obstructions of the same type (file or dir) as the added item are +tolerated. The text of obstructing files is left as-is, effectively +treating it as a user modification after the update. Working +properties of obstructing items are set equal to the base properties. + If AllowObstructions is FALSE then the update will abort +if there are any unversioned obstructing items + + + + + Gets or sets the revision to load. Defaults to the peg revision or Head + + + Extended Parameter container of + + + + Gets the list of changelist-names + + + Extended Parameter container for SvnClient.DiffSummary + + + + Console based SslClientCertificatePassword implementation + + + Console based SslClientCertificate implementation + + + Console based SslServerTrust implementation + + + Console based UserNamePasswordHandler implementation + + + Console based UserNameHandler implementation + + + Subversion CryptoApi Ssl Trust handler + + + Subversion SslClientCertificatePassword file backend using Windows CryptoStore (managed representation) + + + Subversion SslClientCertificatePassword file backend (managed representation) + + + Subversion SslClientCertificate file backend (managed representation) + + + Subversion SslServerTrust file backend (managed representation) + + + Subversion UserNameHandler file backend using Windows CryptoStore (managed representation) + Should be added after + + + Subversion UserNamePasswordHandler file backend (managed representation) + + + Subversion UserNameHandler file backend (managed representation) + + + Simple credential handler to provide a static credential + When set implements a and +instance over the specified credential instance + + + Gets a list of subversion cached credentials of the specified type + The type of credentials to retrieve + This list only contains credentials cached by Subversion; not by external authentication stores + + + Adds all default console handlers + + + Adds all default subversion-configuration-based handlers + + + Removes all currently registered providers and caching data + + + Clears the in-memory authentication cache of this client + + + Copies the in-memory cache from the specified client to this client; merging and overwriting existing credentials + + + Retrieves an authorization baton allocated in the specified pool; containing the current authorization settings + Retrieves an authorization baton allocated in the specified pool; containing the current authorization settings + + + Container for all subversion authentication settings on a client + + + The password to authorize with + + + Text version of the certificate + + + Issuer value of the certificate + + + Text valid-until value of the certificate + + + Text valid-from value of the certificate + + + Fingerprint name of the certificate + + + Common name of the certificate + + + The username to authorize with + + + The password to authorize with + + + The username to authorize with + + + Default username; can be NULL + + + If realm is non-null, maybe use it in the prompt string + + + If MaySave is false, the auth system does not allow the credentials +to be saved (to disk). A prompt function shall not ask the user if the +credentials shall be saved if may_save is FALSE. For example, a GUI client +with a remember password checkbox would grey out the checkbox if may_save +is false + + + Deletes the externally cached credentials + Does /not/ delete in memory credentials. You should call ClearAuthenticationCache() to clear the in memory cache + + + Gets a boolean indicating whether the credentials were deleted since creating this instance + + + Gets the Uri part of the Realm string + + + Gets the realm of the cached item + + + Gets the type of the cached item + + + SharpSvn configuration loader exception + + + SharpSvn SvnClient exception + + + Gets the root cause of the exception; commonly the most + + + Gets the raw subversion error code casted to a + + + Gets the operating system error code when there is one +(Only valid if SvnErrorCategory returns ) + + + + Gets the raw subversion error code + + + Writes the content of the specified path to a stream directly from a repository + + + Writes the content of the specified path to a stream directly from a repository + Writes the content of the specified path to a stream directly from a repository + + + Gets the specified revision property directly from the repository + + + Gets the specified revision property directly from the repository + + + Gets the specified revision property directly from the repository + + + Gets a revision property directly from a repository + Gets the specified revision property directly from the repository + + + Equivalent to svnlook changed + + + Gets the changed paths directly from a repository + Equivalent to svnlook changed + + + Equivalent to svnlook changed + + + Gets the changed paths directly from a repository + Equivalent to svnlook changed + + + Gets the change information (author, date, log, paths, etc.) of a change in a repository + + + Gets the change information of a change directly from a repository + Gets the change information (author, date, log, paths, etc.) of the last change in a repository + + + Gets the change information (author, date, log, paths, etc.) of a change in a repository + + + Gets the change information of a change directly from a repository + Gets the change information (author, date, log, paths, etc.) of the last change in a repository + + + Initializes a new instance with default properties + + + +Managed wrapper of some of the most common svnlook functions + + +At this time this class is a limited subset of svnlook functionality and +is experimental + + + + Initializes a new SvnLookOrigin instance for a transaction in repositoryPath + + + Initializes a new SvnLookOrigin instance for a specific revision of repositoryPath + + + Initializes a new SvnLookOrigin + Initializes a new SvnLookOrigin instance for the head revision of repositoryPath + + + Container for the location to use with the commands + + + Base Extended Parameter container of commands + + + + Gets the working copy version (svnversion) + + + Gets the working copy version (svnversion) + + + Gets a list of entries contained in the specified working copy path + Helper method used by AnkhSVN to detect nested working copies + Only the entry structures representing files and SVN_WC_ENTRY_THIS_DIR contain complete information. The entry +structures representing subdirs have only the `kind' and `state' fields filled in. If you want info on a subdir, you must use this +routine to open its @a path and read the @c SVN_WC_ENTRY_THIS_DIR structure, or call svn_wc_entry() on its @a path. + + + + Gets a list of entries contained in the specified working copy path + Helper method used by AnkhSVN to detect nested working copies + Only the entry structures representing files and SVN_WC_ENTRY_THIS_DIR contain complete information. The entry +structures representing subdirs have only the `kind' and `state' fields filled in. If you want info on a subdir, you must use this +routine to open its @a path and read the @c SVN_WC_ENTRY_THIS_DIR structure, or call svn_wc_entry() on its @a path. + + + + Enumerates through the list of entries contained in the specified working copy path + Only the entry structures representing files and SVN_WC_ENTRY_THIS_DIR contain complete information. The entry +structures representing subdirs have only the `kind' and `state' fields filled in. If you want info on a subdir, you must use this +routine to open its @a path and read the @c SVN_WC_ENTRY_THIS_DIR structure, or call svn_wc_entry() on its @a path. + + + + Enumerates through the list of entries contained in the specified working copy path + Only the entry structures representing files and SVN_WC_ENTRY_THIS_DIR contain complete information. The entry +structures representing subdirs have only the `kind' and `state' fields filled in. If you want info on a subdir, you must use this +routine to open its @a path and read the @c SVN_WC_ENTRY_THIS_DIR structure, or call svn_wc_entry() on its @a path. + + + + Gets the text file status of a working copy path + + + Gets the text file status of a working copy path + + + In-Place Upgrades a repository to a later version + + NOTE: This functionality is provided as a convenience for +administrators wishing to make use of new Subversion functionality +without a potentially costly full repository dump/load. As such, +the operation performs only the minimum amount of work needed to +accomplish this while maintaining the integrity of the repository. +It does *not* guarantee the most optimized repository state as a +dump and subsequent load would. + + + + In-Place Upgrades a repository to a later version + In-Place Upgrades a repository to a later version + + NOTE: This functionality is provided as a convenience for +administrators wishing to make use of new Subversion functionality +without a potentially costly full repository dump/load. As such, +the operation performs only the minimum amount of work needed to +accomplish this while maintaining the integrity of the repository. +It does *not* guarantee the most optimized repository state as a +dump and subsequent load would. + + + + Dumps a repository to a file (svnadmin dump) + + + Dumps a repository to a file (svnadmin dump) + Dumps a repository to a file (svnadmin dump) + + + Loads a repository from a file (svnadmin load) + + + Loads a repository from a file (svnadmin load) + Loads a repository from a file (svnadmin load) + + + Recovers the repository at the specified local path + + + Recovers the repository at the specified local path + + + Deletes the repository at the specified local path + + + Deletes the repository at the specified local path + + + Creates a default repository at the specified local path + + + Creates a default repository at the specified local path + + + Helper which allows splitting file:/// uri's in the repository root and the file within + + + Initializes a new instance with default properties + + + +Managed wrapper of some of the most common repository management functions. + + +At this time this class is just included to enable a standalone test framework +over the SvnClient api; without depending on external tools) + + + + Raises the event + + + +Raised on conflict. The event is first +raised on the object and +then on the + + + Base class of all arguments which allow handling conflicts + + + + Gets a list of 'extra' revision properties to set on commit + + + Gets or sets the logmessage applied to the commit + + + Applies the and raises the event + + + Raised just before committing to allow modifying the log message + + + Base class of all arguments which allow committing + + + + Adds error categories to the list of errors not to throw exceptions for + + + Adds an error category to the list of errors not to throw exceptions for + + + Adds error codes to the list of errors not to throw exceptions for + + + Adds an error code to the list of errors not to throw exceptions for + + + Gets a collection of warnings issued by the last command invocation + + + +Gets the last exception thrown by a Subversion api command to which this argument was provided + + + + +Gets or sets a boolean indicating whether the call must throw an error if the operation is cancelled + is true and the returnvalue false if the operation was canceled. +(The property is set to the cancel exception). Defaults to true + + + + +Gets or sets a boolean indicating whether the call must throw an error if a non fatal error occurs. +(E.g. locking or updating an external failed). Defaults to false + + + + +Gets or sets a boolean indicating whether the call must throw an error if an error occurs. +If an exception would occur, the method returns false and the property +is set to the exception which would have been throw. Defaults to true. + + + + Gets the of the command + + + Called when handling a + + + Raises the event + + + Raises the event + + + Raises the event + + + Raised to notify errors from an command + + + Raised to notify changes by an in-progress command + + + Raised to notify of progress by an in-progress command + + + Raised to allow canceling an in-progress command + + + Base class of all arguments + + + + Gets all revision properties on a a specific revision (svn proplist --revision) + + + Gets all revision properties on a a specific revision (svn proplist --revision) + Gets all revision properties on a a specific revision (svn proplist --revision) + + + Gets the value of a revision property on files or dirs in a specific revision (svn propget --revision) + + + Gets the value of a revision property on files or dirs in a specific revision (svn propget --revision) + + + Gets the value of a revision property on files or dirs in a specific revision (svn propget --revision) + + + Gets the value of a revision property on files or dirs in a specific revision (svn propget --revision) + + + Deletes the value of a revision property on files, dirs in a specific revision(svn propdel --revision) + + + Deletes the value of a revision property on files, dirs in a specific revision(svn propdel --revision) + + + Sets the value of a revision property on files, dirs in a specific revision (svn propset --revision) + + + Sets the value of a revision property on files, dirs in a specific revision (svn propset --revision) + + + Sets the value of a revision property on files, dirs in a specific revision (svn propset --revision) + + + Sets the value of a revision property on files, dirs in a specific revision (svn propset --revision) + Sets the value of a revision property on files, dirs in a specific revision (svn propset --revision) + + + Gets the Uuid of a Path, or if path is not versioned + true if successfull, otherwise false + + + Gets the Uuid of a Uri, or if path is not versioned + true if successfull, otherwise false + + + Gets the repository root from the specified path + The repository root or null if the uri is not a working copy path + SharpSvn makes sure the uri ends in a '/' + + + Gets the repository root from the specified uri or path + Gets the repository root from the specified uri + The repository root or null if the uri is not a repository uri + SharpSvn makes sure the uri ends in a '/' + + + Gets the repository Uri of a path, or null if path is not versioned + See also + + + Replays the specified revisions on the specified target to the editory + + + Replays the specified revisions on the specified target to the editor + Replays the specified revisions on the specified target to the editor + + + Gets a list of versions of the specified file + This function allows access to the raw data used to create a Blame report + + + Gets a lists of versions of the specified file + Gets a list of versions of the specified file + This function allows access to the raw data used to create a Blame report + + + Lists the versions of the specified file + This function allows access to the raw data used to create a Blame report + + + Lists the versions of the specified file + Lists the versions of the specified file + This function allows access to the raw data used to create a Blame report + + + Checks whether the repository of the specified target has the specified capabilities + + + Checks whether the repository of the specified target has the specified capabilities + Checks whether the repository of the specified target has the specified capabilities + + + Retrieve the content of specified files or URLs with revision and author information per-line (svn blame) + + + Retrieve the content of specified files or URLs with revision and author information per-line (svn blame) + + + Streamingly retrieve the content of specified files or URLs with revision and author information per-line (svn blame) + + + Streamingly retrieve the content of specified files or URLs with revision and author information per-line (svn blame) + Streamingly retrieve the content of specified files or URLs with revision and author information per-line (svn blame) + + + Retrieves a list of previously merged revisions from the specified source + + + Retrieves a list of previously merged revisions from the specified source + + + Retrieves previously merged revisions from the specified source + + + Retrieves a list of previously merged revisions from the specified source + Retrieves previously merged revisions from the specified source + + + Retrieves a list of revisions of source that are available for merging + + + Retrieves a list of revisions of source that are available for merging + + + Retrieves revisions of source that are available for merging + + + Retrieves a list of revisions of source that are available for merging + Retrieves revisions of source that are available for merging + + + Gets the merges which are applied on the specified target + + + Gets the merges which are applied on the specified target (svn mergeinfo) + Gets the merges which are applied on the specified target + + + Gets a list of Uri's which might be valid merge sources + The list contains copy-from locations and previous merge locations + + + Gets a list of Uri's which might be valid merge sources (svn mergeinfo) + Gets a list of Uri's which might be valid merge sources + The list contains copy-from locations and previous merge locations + + + Gets the contents of the specified changelist below a specified directory (svn changelist) + + + Gets the contents of the specified changelist below a specified directory (svn changelist) + Gets the contents of the specified changelist below a specified directory (svn changelist) + + + Streamingly gets the contents of the specified changelist below a specified directory (svn changelist) + + + Streamingly gets the contents of the specified changelist below a specified directory (svn changelist) + Streamingly gets the contents of the specified changelist below a specified directory (svn changelist) + + + Deassociate the specified path(s) from the specified changelist (svn changelist) + + + Deassociate the specified path(s) from the specified changelist (svn changelist) + + + Deassociate the specified path(s) from the specified changelist (svn changelist) + + + Deassociate the specified path(s) from the specified changelist (svn changelist) + Deassociate the specified path(s) from the specified changelist (svn changelist) + + + Associate the specified path(s) with the specified changelist (svn changelist) + + + Associate the specified path(s) with the specified changelist (svn changelist) + + + Associate the specified path(s) with the specified changelist (svn changelist) + + + Associate the specified path(s) with the specified changelist (svn changelist) + Associate the specified path(s) with the specified changelist (svn changelist) + + + Streamingly retrieves the differences between two revisions or paths (svn diff --summarize) + Subversion limitation: Currently only works over Uri targets + + + Retrieves the differences between two revisions or paths (svn diff --summarize) + Streamingly retrieves the differences between two revisions or paths (svn diff --summarize) + Subversion limitation: Currently only works over Uri targets + + + Streamingly retrieves the differences between two revisions or paths (svn diff --summarize) + Subversion limitation: Currently only works over Uri targets + + + Streamingly retrieves the differences between two revisions or paths (svn diff --summarize) + Streamingly retrieves the differences between two revisions or paths (svn diff --summarize) + Subversion limitation: Currently only works over Uri targets + + + Retrieves the differences between two revisions or paths (svn diff) + + + Retrieves the differences between two revisions or paths (svn diff) + + + Retrieves the differences between two revisions or paths (svn diff) + + + Retrieves the differences between two revisions or paths (svn diff) + Retrieves the differences between two revisions or paths (svn diff) + + + Perform a reintegration merge of source into targetPath + + + Perform a reintegration merge of source into targetPath + Perform a reintegration merge of source into targetPath + + + Merges the changes in the specified revisions from source to targetPath (svn merge) + + + Merges the changes in the specified revisions from source to targetPath (svn merge) + + + Merges the changes in the specified revisions from source to targetPath (svn merge) + + + Merges the changes in the specified revisions from source to targetPath (svn merge) + Merges the changes in the specified revisions from source to targetPath (svn merge) + + + +Merges the changes from to into + + + Merges the differences between two sources to a working copy path (svn merge) + +Merges the changes from to into + + + Gets all revision properties on a a specific revision (svn proplist --revision) + + + Gets all revision properties on a a specific revision (svn proplist --revision) + Gets all revision properties on a a specific revision (svn proplist --revision) + + + Gets the value of a revision property on files or dirs in a specific revision (svn propget --revision) + + + Gets the value of a revision property on files or dirs in a specific revision (svn propget --revision) + + + Gets the value of a revision property on files or dirs in a specific revision (svn propget --revision) + + + Gets the value of a revision property on files or dirs in a specific revision (svn propget --revision) + Gets the value of a revision property on files or dirs in a specific revision (svn propget --revision) + + + Deletes the value of a revision property on files, dirs in a specific revision(svn propdel --revision) + + + Deletes the value of a revision property on files, dirs in a specific revision(svn propdel --revision) + Deletes the value of a revision property on files, dirs in a specific revision(svn propdel --revision) + + + Sets the value of a revision property on files, dirs in a specific revision (svn propset --revision) + + + Sets the value of a revision property on files, dirs in a specific revision (svn propset --revision) + + + Sets the value of a revision property on files, dirs in a specific revision (svn propset --revision) + + + Sets the value of a revision property on files, dirs in a specific revision (svn propset --revision) + Sets the value of a revision property on files, dirs in a specific revision (svn propset --revision) + + + Gets all properties on files or dirs (svn proplist) + + + Gets all properties on files or dirs (svn proplist) + Gets all properties on files or dirs (svn proplist) + + + Streamingly lists all properties on files or dirs (svn proplist) + + + Streamingly lists all properties on files or dirs (svn proplist) + Streamingly lists all properties on files or dirs (svn proplist) + + + Tries to get a property from the specified path (svn propget) + Eats all (non-argument) exceptions + True if the property is fetched, otherwise false + Equivalent to GetProperty with 's ThrowOnError set to false + + + Sets the specified property on the specfied path to value + Use to remove an existing property + + + Gets the specified property from the specfied path + true if property is set, otherwise false + path is not a valid workingcopy path + + + Retrieves the value of a property on files, dirs, or revisions (svn propget) + Gets the specified property from the specfied path + true if property is set, otherwise false + path is not a valid workingcopy path + + + Removes the specified property from the specfied path + + + Removes the specified property from the specfied path + + + Removes the specified property from the specfied path + + + Deletes a property from files, dirs (svn propdel) + Removes the specified property from the specfied path + + + Sets the specified property on the specfied path to value + Use to remove an existing property + + + Sets the specified property on the specfied path to value + Use to remove an existing property + + + Sets the specified property on the specfied path to value + Use to remove an existing property + + + Set the value of a property on files, dirs (svn propset) + Sets the specified property on the specfied path to value + Use to remove an existing property + + + Sets the specified property on the specfied path to value + Use to remove an existing property + + + Sets the specified property on the specfied path to value + Use to remove an existing property + + + Sets the specified property on the specfied path to value + Use to remove an existing property + + + Set the value of a property on files, dirs (svn propset) + Sets the specified property on the specfied path to value + Use to remove an existing property + + + UnlockURLs (svn unlock) + + + UnlockURLs (svn unlock) + + + UnlockURLs (svn unlock) + + + UnlockURLs (svn unlock) + UnlockURLs (svn unlock) + + + Unlock working copy paths (svn unlock) + + + Unlock working copy paths (svn unlock) + + + Unlock working copy paths (svn unlock) + + + Unlock working copy paths (svn unlock) + Unlock working copy paths (svn unlock) + + + LockURLs in the repository, so that no other user can commit changes to them (svn lock) + + + LockURLs in the repository, so that no other user can commit changes to them (svn lock) + + + LockURLs in the repository, so that no other user can commit changes to them (svn lock) + + + LockURLs in the repository, so that no other user can commit changes to them (svn lock) + LockURLs in the repository, so that no other user can commit changes to them (svn lock) + + + Lock working copy paths in the repository, so that no other user can commit changes to them (svn lock) + + + Lock working copy paths in the repository, so that no other user can commit changes to them (svn lock) + + + Lock working copy paths in the repository, so that no other user can commit changes to them (svn lock) + + + Lock working copy paths in the repository, so that no other user can commit changes to them (svn lock) + Lock working copy paths in the repository, so that no other user can commit changes to them (svn lock) + + + Move and/or rename something in repository, remembering history (svn move) + + + Move and/or rename something in repository, remembering history (svn move) + + + Move and/or rename something in repository, remembering history (svn move) + + + Move and/or rename something in repository, remembering history (svn move) + + + Move and/or rename something in repository, remembering history (svn move) + + + Move and/or rename something in repository, remembering history (svn move) + + + Move and/or rename something in repository, remembering history (svn move) + + + Move and/or rename something in repository, remembering history (svn move) + Move and/or rename something in repository, remembering history (svn move) + + + Move and/or rename something in working copy, remembering history (svn move) + + + Move and/or rename something in working copy, remembering history (svn move) + + + Move and/or rename something in working copy, remembering history (svn move) + + + Move and/or rename something in working copy, remembering history (svn move) + Move and/or rename something in working copy, remembering history (svn move) + + + Duplicate something in repository, remembering history (svn copy) + Can be called with either a list of , or . +All members must be of the same type. + + + Duplicate something in repository, remembering history (svn copy) + + + Duplicate something in repository, remembering history (svn copy) + Can be called with either a list of , or . +All members must be of the same type. + + + Duplicate something in repository, remembering history (svn copy) + + + Duplicate something in repository, remembering history (svn copy) + Can be called with either a list of , or . +All members must be of the same type. + + + Duplicate something in repository, remembering history (svn copy) + + + Duplicate something in repository, remembering history (svn copy) + Can be called with either a list of , or . +All members must be of the same type. + + + Duplicate something in repository, remembering history (svn copy) + + + Duplicate something in working copy, remembering history (svn copy) + Can be called with either a list of , or . +All members must be of the same type. + + + Duplicate something in working copy, remembering history (svn copy) + Can be called with either a list of , or . +All members must be of the same type. + + + Duplicate something in working copy, remembering history (svn copy) + Can be called with either a list of , or . +All members must be of the same type. + + + Duplicate something in working copy, remembering history (svn copy) + Duplicate something in working copy, remembering history (svn copy) + + + Cleans up the specified path, removing all workingcopy locks left behind by crashed clients + true if the operation succeeded; false if it did not + Operation failed and args.ThrowOnError = true + Parameters invalid + + + Recursively clean up the working copy, removing locks, resuming unfinished operations, etc.(svn cleanup) + Cleans up the specified path, removing all workingcopy locks left behind by crashed clients + Operation failed + Parameters invalid + + + Remove 'conflicted' state on a working copy file or directory using the specified choice + + + Remove 'conflicted' state on a working copy file or directory using the specified choice + + + Remove 'conflicted' state on a working copy file or directory using the specified choice + Remove 'conflicted' state on a working copy file or directory using the specified choice + Calls with SvnAccept.Merged + + + Restore pristine working copy file (undo most local edits) (svn revert) + + + Restore pristine working copy file (undo most local edits) (svn revert) + + + Restore pristine working copy file (undo most local edits) (svn revert) + + + Restore pristine working copy file (undo most local edits) (svn revert) + Restore pristine working copy file (undo most local edits) (svn revert) + + + Send changes from your working copy to the repository (svn commit) + + + Send changes from your working copy to the repository (svn commit) + + + Send changes from your working copy to the repository (svn commit) + + + Send changes from your working copy to the repository (svn commit) + + + Send changes from your working copy to the repository (svn commit) + + + Send changes from your working copy to the repository (svn commit) + + + Send changes from your working copy to the repository (svn commit) + + + Send changes from your working copy to the repository (svn commit) + Send changes from your working copy to the repository (svn commit) + + + Importing as the subversion api does; without creating a working directory + + + Importing as the subversion api does; without creating a working directory + + + Importing as the subversion api does; without creating a working directory + + + Commit an unversioned file or tree into the repository (svn import) + Importing as the subversion api does; without creating a working directory + + + Performs a working copy import to the specified Uri, +by importing the root remotely, checking that out and then adding the files locally + Implemented as an Add follwed by an obstructed checkout + + + Performs a working copy import to the specified Uri, +by importing the root remotely, checking that out and then adding the files locally + Implemented as an Add follwed by an obstructed checkout + + + Performs a working copy import to the specified Uri, +by importing the root remotely, checking that out and then adding the files locally + Implemented as an Add follwed by an obstructed checkout + + + Commit an unversioned file or tree into the repository (svn import followed by svn checkout) + Performs a working copy import to the specified Uri, +by importing the root remotely, checking that out and then adding the files locally + Implemented as an Add follwed by an obstructed checkout + + + Remove files and directories from version control at the repository (svn delete|remove) + + + Remove files and directories from version control at the repository (svn delete|remove) + + + Remove files and directories from version control at the repository (svn delete|remove) + + + Remove files and directories from version control at the repository (svn delete|remove) + + + Remove files and directories from version control at the repository (svn delete|remove) + + + Remove files and directories from version control at the repository (svn delete|remove) + Remove files and directories from version control at the repository (svn delete|remove) + + + Remove files and directories from version control, scheduling (svn delete|remove) + + + Remove files and directories from version control, scheduling (svn delete|remove) + + + Remove files and directories from version control, scheduling (svn delete|remove) + + + Remove files and directories from version control, scheduling (svn delete|remove) + Remove files and directories from version control, scheduling (svn delete|remove) + + + Create a new directory under version control at the repository (svn mkdir) + + + Create a new directory under version control at the repository (svn mkdir) + + + Create a new directory under version control at the repository (svn mkdir) + + + Create a new directory under version control at the repository (svn mkdir) + + + Create a new directory under version control at the repository (svn mkdir) + Create a new directory under version control at the repository (svn mkdir) + + + Create a new directory under version control, scheduling (svn mkdir) + + + Create a new directory under version control, scheduling (svn mkdir) + + + Create a new directory under version control, scheduling (svn mkdir) + + + Create a new directory under version control, scheduling (svn mkdir) + Create a new directory under version control, scheduling (svn mkdir) + + + Gets information about the specified target + + + Gets information about the specified target + + + Gets information about the specified target + + + Streamingly retrieves information about a local or remote item (svn info) + Gets information about the specified target + + + Streamingly lists directory entries in the repository. (svn list) + + + Gets a list of directory entries in the repository. (svn list) + Streamingly lists directory entries in the repository. (svn list) + + + Streamingly lists directory entries in the repository. (svn list) + + + Streamingly lists directory entries in the repository. (svn list) + Streamingly lists directory entries in the repository. (svn list) + + + Writes the content of specified files or URLs to a stream. (svn cat) + + + Writes the content of specified files or URLs to a stream. (svn cat) + Writes the content of specified files or URLs to a stream. (svn cat) + + + Gets log messages of the specified target + + + Gets log messages of the specified target + + + Gets log messages of the specified target + + + Gets log messages of the specified target + + + Gets log messages of the specified target + + + Retrieve the log messages for a set of revision(s) and/or file(s). (svn log) + Gets log messages of the specified target + + + Gets log messages of the specified target path + + + Gets log messages of the specified target path + + + Gets log messages of the specified target + A pegrevision applied on the target overrides one set on the args object + + + Gets log messages of the specified target + + + Gets log messages of the specified target + + + Streamingly retrieve the log messages for a set of revision(s) and/or file(s). (svn log) + Gets log messages of the specified target + + + Gets a list of status data for the specified path + + + Recursively gets a list of 'interesting' status data for the specified path + + + Gets status data for the specified path + + + Retrieve the status of working copy files and directories (svn status) + Recursively gets 'interesting' status data for the specified path + + + Adds the specified path + true if the operation succeeded; false if it did not + Operation failed and args.ThrowOnError = true + Parameters invalid + + + Adds the specified path + Operation failed + Parameters invalid + + + Put files and directories under version control, scheduling them for addition to repository. +They will be added in next commit(svn add) + Recursively adds the specified path + Operation failed + Parameters invalid + + + Update the working copy to a different repository (svn switch --relocate) + + + Update the working copy to a different repository (svn switch --relocate) + Update the working copy to a different repository (svn switch --relocate) + + + Switches a path recursively to the specified target + Operation failed + Parameters invalid + + + Switches a path recursively to the specified target + Operation failed + Parameters invalid + + + Switches a path recursively to the specified target + Operation failed + Parameters invalid + + + Update the working copy to a different URL (svn switch) + Switches a path recursively to the specified target + Operation failed + Parameters invalid + + + Exports the specified target to the specified path + Subversion optimizes this call if you specify a workingcopy file instead of an url + + + Exports the specified target to the specified path + Subversion optimizes this call if you specify a workingcopy file instead of an url + + + Recursively exports the specified target to the specified path + Subversion optimizes this call if you specify a workingcopy file instead of an url + + + Create an unversioned copy of a tree (svn export) + Recursively exports the specified target to the specified path + Subversion optimizes this call if you specify a workingcopy file instead of an url + + + Updates the specified paths to the specified revision + Operation failed and args.ThrowOnError = true + Parameters invalid + true if the operation succeeded; false if it did not + + + Updates the specified paths to the specified revision + Operation failed and args.ThrowOnError = true + Parameters invalid + true if the operation succeeded; false if it did not + + + Recursively updates the specified paths to the latest (HEAD) revision + Operation failed + Parameters invalid + + + Recursively updates the specified paths to the latest (HEAD) revision + Operation failed + Parameters invalid + + + Recursively updates the specified path to the latest (HEAD) revision + Operation failed and args.ThrowOnError = true + Parameters invalid + + + Recursively updates the specified path + Operation failed and args.ThrowOnError = true + Parameters invalid + + + Recursively updates the specified path to the latest (HEAD) revision + Operation failed and args.ThrowOnError = true + Parameters invalid + + + Bring changes from the repository into the working copy (svn update) + Recursively updates the specified path to the latest (HEAD) revision + Operation failed + Parameters invalid + + + Performs a checkout of to to the specified param + Operation failed and args.ThrowOnError = true + Parameters invalid + true if the operation succeeded; false if it did not + + + Performs a checkout of to to the specified param + Operation failed and args.ThrowOnError = true + Parameters invalid + true if the operation succeeded; false if it did not + + + Performs a recursive checkout of to + Operation failed + Parameters invalid + + + Check out a working copy from a repository. (svn checkout) + Performs a recursive checkout of to + Operation failed + Parameters invalid + + + Raises the event. + + + Raises the event. + + + Raises the event. + + + Raises the event. + + + Raises the event. + + + Raises the event. + + + Raises the event. + + + +Raised just before a command is executed. This allows a listener +to cleanup before a new command is started + + + + +Raised when a subversion exception occurs. +Set to true to cancel +throwing the exception + + + + +Raised on conflict. The event is first +raised on the object and +then on the + + + +Raised on progress. The event is first +raised on the object and +then on the + + + +Raised on notifications. The event is first +raised on the object and +then on the + + + +Raised on progress. The event is first +raised on the object and +then on the + + + +Raised to allow canceling operations. The event is first +raised on the object and +then on the + + + Gets the instance of this + + + +Gets the name of the subversion administrative directories. Most commonly ".svn" + + +An internal implementation of a setter is available on this property. Users should read +the subversion implementation of svn_wc_set_adm_dir before invoking the setter of this property +via reflection + + + + Enables the subversion localization engine. (Costs +- 400 KByte ram/language used and slows error handling within the subversion engine) + By default the subversion layer uses english messages for everything. After this method is called all messages are routed via +the managed resource handler + + + Adds the specified client name to web requests' UserAgent string + The name is filtered to be unique and conformant for the webrequest. Clients should use only alphanumerical ascii characters + + + Gets the version of the SharpSvn library + + + Gets the version number of SharpSvn's encapsulated subversion library + + + Initializes a new instance with default properties + + + Subversion client instance; main entrance to the Subversion Client api + + + + Gets the the applies to; +null if it applies to a revision property + + + Gets or sets a boolean indicating whether to always use the subversion integrated diff library +instead of the user configured diff tools + The default value of this property is true; to allow parsing the output of the diff library + true if subversions internal diff must be used, otherwise false + + + Gets or sets a boolean indicating whether to enable the SharpPlink handler when no other valid +handler for svn+ssh:// is registered + The default value of this property is true; this matches the behaviour of TortoiseSvn + true if enabling SharpPlink on the first repository request, otherwise false + + + Gets or sets a boolean indicating whether to load the svn mimetypes file when calling Add or Import the first time + The default value of this property is true; this matches the behaviour of the svn commandline client + true if loading the mimetypes file on the initial import, otherwise false + + + Gets or sets a boolean indicating whether commits will fail if no log message is provided + The default value of this property is true + + + Gets the file contents of the current version as readable stream (Only valid in EventHandler) + Not in the EventHandler + The stream will be closed when the eventhandler returns. It is not seekabel but you can reset the stream to position 0 + + + Gets the file contents of the current version as readable stream (Only valid in EventHandler) + Not in the EventHandler + The stream will be closed when the eventhandler returns. It is not seekabel but you can reset the stream to position 0 + + + Write the file contents to the specified file/stream (Only valid in EventHandler) + Not in the EventHandler + + + Write the file contents to the specified file/stream (Only valid in EventHandler) + Not in the EventHandler + + + Write the file contents to the specified file/stream (Only valid in EventHandler) + Not in the EventHandler + + + Write the file contents to the specified file/stream (Only valid in EventHandler) + Write the file contents to the specified file/stream (Only valid in EventHandler) + Not in the EventHandler + + + Gets the revision the change is based on + + + Serves as a hashcode for the specified type + + + Gets the raw property status of the node when available + + + Gets the raw content status of the node when available + + + Gets a boolean indicating whether the node is a file external + + + Gets the tree conflict data of this node or null if this node doesn't have a tree conflict + + + Gets the recorded node type of this node + + + Gets an object containing detailed workingcopy information of this node + + + Out of Date: Gets the node kind of the OutOfDate commit + + + Out of Date: Gets the author of the OutOfDate commit + + + Out of Date: Last commit date of the item + + + Out of Date: Last commit version of the item + + + Gets the out of date status of the item; if true the RemoteUpdate* properties are set + + + Gets a boolean indicating whether the file is switched in the working copy + + + Gets a boolean indicating whether the file is copied in the working copy + A file or directory can be 'copied' if it's scheduled for addition-with-history +(or part of a subtree that is scheduled as such.). + + + Gets a boolean indicating whether the workingcopy is locked + + + Gets a boolean indicating whether the workingcopy is locked + + + Property status in working copy + + + Content status in working copy + + + The path the notification is about, translated via + The property contains the path in normalized format; while returns the exact path from the subversion api + + + Serves as a hashcode for the specified type + + + The entry is a intra-repository file external and this is the +repository root relative path to the file specified in the +externals definition, otherwise NULL if the entry is not a file +external. + + + Gets a boolean indicating whether the node is in a copied state +(possibly because the entry is a child of a path that is +scheduled for addition or replacement when the entry itself is +normal + + + Gets the node scheduling (add, delete, replace) + + + Gets the node kind + + + Gets the repository id as String + + + Gets the repository id as Guid + + + The repository Uri including a final '/' + + + Url in repository, including final '/' if the entry specifies a directory + + + Base revision + + + The entries name + + + Serves as a hashcode for the specified type + + + Serves as a hashcode for the specified type + + + Serves as a hashcode for the specified type + + + Gets the merge source passed to the SvnClient call + + + Gets the specified SourceUri or null if the source was a local path + + + Gets the merge source passed to the SvnClient call + + + Gets the specified SourceUri or null if the source was a local path + + + Gets a list of applied merges + + + ConsiderInheritance is ignored at this time + + + ConsiderInheritance is ignored at this time + + + Initializes a new instance of the class with the values from the specified collection + + + Initializes a new instance of the class with default properties + + + Serves as a hashcode for the specified type + + + Creates a SvnRevision from {revision-1:revision} + + + Gets the nesting level of the logs via merges + + + Set to true when the following items are merged-child items of this item. + + + Gets the log origin SharpSvn used for retrieving the logfile + + + Serves as a hashcode for the specified type + + + Gets the list of custom properties retrieved with the log + Properties must be listed in SvnLogArgs.RetrieveProperties to be available here + + + Serves as a hashcode for the specified type + + + Gets the node kind of the changed path (Only available when committed to a 1.6+ repository) + + + Gets the relative uri of the path inside the repository + Does not include an initial '/'. Ends with a '/' if is . + + + Gets the path inside rooted at the repository root (including initial '/') + + + Serves as a hashcode for the specified type + + + Gets the information specified in RetrieveEntries on the args object + + + Gets lock information if RetrieveLocks is set on the args object + + + When retrieving a listing using an Uri target: contains the uri from which Path is relative + The Base Uri or null when the repository root is not available + + + When retrieving a listing using an Uri target: contains the repository root + The Repository root or null when the repository root is not available + + + Gets the filename of the item + + + Gets the origin path of the item + + + Gets the path of the item + + + Serves as a hashcode for the specified type + + + Gets the author of the last revision of this file + + + Gets the time of the last change + + + Gets the last revision in which this node changed + + + Gets a boolean indicating whether this node has svn properties + + + Gets the length of the file text or 0 for directories + + + Serves as a hashcode for the specified type + + + Gets a boolean indicating whether working copy information is available in this instance + + + Gets information about the current lock on node + + + Gets the author of the last revision in which node (or one of its descendants) changed + + + Gets the timestamp of the last revision in which node (or one of its descendants) changed + + + Gets the last revision in which node (or one of its descendants) changed + + + Gets the repository uuid or null if not available + + + Gets the uuid of the repository (if available). Otherwise Guid.Empty + + + Gets the repository root Uri; ending in a '/' + The unmanaged api does not add the '/' at the end, but this makes using hard + + + Gets the node kind of the specified node + + + Gets the queried revision + + + Gets the full Uri of the node + + + The path the notification is about, translated via + The property contains the path in normalized format; while returns the exact path from the subversion api + + + Gets the path of the file. The local path if requisting WORKING version, otherwise the name of the file +at the specified version + + + Serves as a hashcode for the specified type + + + Serves as a hashcode for the specified type + + + Detaches the SvnEventArgs from the unmanaged storage; optionally keeping the property values for later use + After this method is called all properties are either stored managed, or are no longer readable + + + Serves as a hashcode for the specified type + + + If action is svn_wc_notify_blame_revision, contains a list of revision properties for the specified revision + + + If action relates to properties, specifies the name of the property. + + + When @c action is @c svn_wc_notify_merge_begin, and both the left and right sides +of the merge are from the same URL. In all other cases, it is NULL + + + When action is svn_wc_notify_changelist_add or name. In all other +cases, it is NULL + + + Points to the lock structure received from the repository when +action is @c svn_wc_notify_locked. For other actions, it is +NULL. + + + [[[ The base revision before updating (Not guaranteed compatible with future Subversion versions!)]]] + + + When action is svn_wc_notify_update_completed, target revision +of the update, or @c SVN_INVALID_REVNUM if not available; when action is +c svn_wc_notify_blame_revision, processed revision. In all other cases, +it is @c SVN_INVALID_REVNUM. + + + Reflects the addition or removal of a lock token in the working copy. + + + The type of notification that is occurring about node properties. + + + The type of notification that is occurring about node content. + + + Points to an error describing the reason for the failure when +action is one of the following: @c svn_wc_notify_failed_lock, svn_wc_notify_failed_unlock, +svn_wc_notify_failed_external. Is @c NULL otherwise. + + + If MimeType is not null, a boolean indicating whether this mime type is interpreted as binary + + + If non-NULL, indicates the mime-type of @c path. It is always @c NULL for directories. + + + Node kind of path/url + + + Action that describes what happened to path/url + + + Gets the commandtype of the command responsible for calling the notify + + + Gets a boolean indicating whether the path is a Uri + + + The path the notification is about, translated via + The property contains the path in normalized format; while returns the exact path from the subversion api + + + Gets the (relative or absolute uri) Uri the notification is about + + + The path the notification is about + The property contains the path in normalized format; while returns the exact path from the subversion api + + + Serves as a hashcode for the specified type + + + Gets a boolean indicating whether the Comment was generated by a Generic WebDav client + + + The path the notification is about, translated via + The property contains the path in normalized format; while returns the exact path from the subversion api + + + + + + + + + + + + + + + + + + Gets the operation creating the tree conflict + + + Gets the of + + + Gets the revision of + + + Gets the relative uri of the path inside the repository + Does not include an initial '/'. Ends with a '/' if is . + + + Serves as a hashcode for the specified type + + + Serves as a hashcode for the specified type + + + error message from post-commit hook, or NULL + + + Serves as a hashcode for the specified type + + + Gets the SvnTarget as string + + + Gets the target name in normalized format + + + Gets the operational revision + + + (Optional) The node kind of + + + (Required) The repository root of + + + The target specified + + + (Required) The Uri of . Only differs from target if +specifies a + + + Generic encapsulation of a specific revision of a node in subversion + + + Gets a boolean whether the revision specifies an explicit repository revision + Explicit: Is set, doesn't require a workingcopy and is repository wide applyable + + + Gets a boolean indicating whether the revisionnumber requires a workingcopy to make any sense + + + Serves as a hashcode for the specified type + + + Gets the instance managing authentication on behalf of this client + + + Gets the path to SharpSvn's plink. The path is encoded to be safe for subversion configuration settings + + + Merges configuration from the specified path into the existing configuration + + + Loads the standard subversion configuration and ensures the subversion config dir by creating default files + + + Loads the subversion configuration from the specified path and optionally ensures the path is a subversion config dir by creating default files + + + Loads the subversion configuration from the specified path + + + Subversion Client Context wrapper; base class of objects using client context + + + + Detaches the SvnEventArgs from the unmanaged storage; optionally keeping the property values for later use + After this method is called all properties are either stored managed, or are no longer readable + + + Detaches the SvnEventArgs from the unmanaged storage; optionally keeping the property values for later use + After this method is called all properties values are stored in managed code + + + Long path capable version of + + + Gets the normalized directory name of path (Long path enabled version of , always returning full paths) + + + Gets the filename of the specified target + + + +Converts a local relative path to a valid relative Uri + + + + +Converts a string from a Uri path to a local path name; unescaping when necessary + + + + +Appends the specified path suffix to the given Uri + + + + +Checks whether the specified path is an absolute path + + + + +Normalizes the Uri to a full absolute Uri + + + + +Checks whether normalization is required + + This method does not verify the casing of invariant parts + + + +Normalizes the path to a full path + + This normalizes drive letters to upper case and hostnames to lowercase to match Subversion 1.6 behavior + + + Gets a boolean indicating whether at least one of the +parent paths or the path (file/directory) itself is a working copy. + + + + Gets a boolean indicating whether the path could contain a Subversion Working Copy + Assumes path is a directory + + + Gets the pathname exactly like it is on disk + + + Gets the pathname exactly like it is on disk + + + Gets the repository Uri of a path, or null if path is not versioned + + + Gets the error category of the SvnException + + + @copyright + ==================================================================== + Copyright (c) 2000-2009 CollabNet. All rights reserved. + + This software is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at http://subversion.tigris.org/license-1.html. + If newer versions of this license are posted there, you may use a + newer version instead, at your option. + + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision + history and logs, available at http://subversion.tigris.org/. + ==================================================================== + @endcopyright + + @file svn_error_codes.h + @brief Subversion error codes. + +Collection of Subversion error code values, located within the + * APR user error space. + + +@since New in 1.6. + + +@since New in 1.6. + + +@since New in 1.6. + + +@since New in 1.6. + + +@since New in 1.6. + + +@since New in 1.6. + + +@since New in 1.5. + + +@since New in 1.5. + + +@since New in 1.5. + + +@since New in 1.5. + + +@since New in 1.5. + + +@since New in 1.5. + + +@since New in 1.5. + + +@since New in 1.1. + + +@since New in 1.6. + + +@since New in 1.5. + + +@since New in 1.5. + + +@since New in 1.5. + + +@since New in 1.2. + + +@since New in 1.1. + + +@since New in 1.3 + + +@since New in 1.1. + + +@since New in 1.1. + + +@since New in 1.5. + + +@since New in 1.5. + + +@since New in 1.5. + + +@since New in 1.5. + + +@since New in 1.6 + + +@since New in 1.5 + + +@since New in 1.3 + + +@since New in 1.2. + + +@deprecated To improve consistency between ra layers, this error code + is replaced in ra_{neon|serf} by SVN_ERR_FS_NOT_FOUND. + Slated for removal in the next major release. + + +@deprecated To improve consistency between ra layers, this error code + is replaced by SVN_ERR_BAD_CONFIG_VALUE. + Slated for removal in the next major release. + + +@since New in 1.6. + + +@since New in 1.5. + + +@since New in 1.5. + + +@since New in 1.2. + + +@since New in 1.5. + + +@since New in 1.2. + + +@since New in 1.2. + + +@since New in 1.6. + + +@since New in 1.5. + + +@since New in 1.5. + + +@since New in 1.5. + + +@since New in 1.5. + + +@since New in 1.2. + * + * This is analogous to SVN_ERR_REPOS_UNSUPPORTED_VERSION. To avoid + * confusion with "versions" (i.e., releases) of Subversion, we've + * started calling this the "format" number instead. The old + * SVN_ERR_REPOS_UNSUPPORTED_VERSION error predates this and so + * retains its name. + + + +@since New in 1.2. + + +@since New in 1.2. + + +@since New in 1.2. + + +@since New in 1.2. + + +@since New in 1.2. + + +@since New in 1.2. + + +@since New in 1.2. + + +@since New in 1.2. + + +@since New in 1.2. + + +@since New in 1.1. + + +@since New in 1.6. + + +@since New in 1.6. + + +@since New in 1.5. + + +@since New in 1.5. + + +@since New in 1.5. + + +@since New in 1.3. + + +@since New in 1.3. + + +@since New in 1.2. + + +@deprecated Unused, slated for removal in the next major release. + + +@deprecated Unused, slated for removal in the next major release. + + +@deprecated Unused, slated for removal in the next major release. + + +@deprecated Unused, slated for removal in the next major release. + + +@deprecated Unused, slated for removal in the next major release. + + +@deprecated Unused, slated for removal in the next major release. + + +@deprecated Unused, slated for removal in the next major release. + + +@since New in 1.6. + + +@since New in 1.5. + * + * Note that there was an unused slot sitting here at + * SVN_ERR_BAD_CATEGORY_START + 5, so error codes after this aren't + * necessarily "New in 1.5" just because they come later. + + + + Ignore all whitespace characters + + + Ignore changes in sequences of whitespace characters, treating each +sequence of whitespace characters as a single space + + + Ignore no whitespace + + + Attempting to delete object + + + Attempting to add object + + + Attempting to change text or props + + + object is unversioned + + + object is unknown or missing + + + object is already added or schedule-add + + + object is already schedule-delete + + + another object is in the way + + + local edits are already present + + + tree conflict (on a dir) + + + property conflict (on a file or dir) + + + textual conflict (on a file) + + + Choose the 'merged file'. The result file of the automatic merging; possibly with local edits + + + Choose local version on all conflicts; further use auto-merged + + + Choose their on all conflicts; further use auto-merged + + + Choose the local file + + + Choose the incoming file + + + Choose the base file + + + Don't resolve the conflict now. Let subversion mark the path +'conflicted', so user can run 'svn resolved' later + + + A deleted item + + + An item with text modifications + + + An added item + + + An item with no text modifications + + + Create a repository in Subversion 1.6 compatible format + + + Create a repository in Subversion 1.5 compatible format + + + Create a repository in Subversion 1.4 compatible format + + + Create a repository in a Subversion 1.0-1.3 compatible format + + + Create a repository with the latest available format + + + The fields loaded if no other value is specified + + + A combination of all the dirent fields at Subversion 1.5 + + + An indication that you are interested in the @c last_author field + + + An indication that you are interested in the @c time field + + + An indication that you are interested in the @c created_rev field + + + An indication that you are interested in the @c has_props field + + + An indication that you are interested in the @c size field + + + An indication that you are interested in the Kind field + + + Slated for replacement (delete + add) + + + Slated for deletion + + + Slated for addition + + + Nothing special here + + + a directory doesn't contain a complete entries list + + + an unversioned path populated by an svn:externals property + + + an unversioned resource is in the way of the versioned resource + + + is unversioned but configured to be ignored + + + local mods received conflicting repos mods + + + local mods received repos mods + + + text or props have been modified + + + was deleted and then re-added + + + scheduled for deletion + + + under v.c., but is missing + + + is scheduled for addition + + + exists, but uninteresting + + + is not a versioned thing in this wc + + + does not exist + + + Zero value. Never used by Subversion + + + +D + all descendants (full recursion from D). Updates will pull in any +files or subdirectories not already present; those subdirectories' +this_dir entries will have depth-infinity. Equivalent to the pre-1.5 +default update behavior. + + + + +D + immediate children (D and its entries). Updates will pull in any +files or subdirectories not already present; those subdirectories' +this_dir entries will have depth-empty. + + + + +D + its file children, but not subdirs. Updates will pull in any files +not already present, but not subdirectories. + + + + +Just the named directory D, no entries. Updates will not pull in any +files or subdirectories not already present + + + + Exclude (remove, whatever) directory D (Currently unused on the client layer) + + + Depth undetermined or ignored + + + Attaches to the specified pool + + + Creates a new root pool + + + Creates a childpool within the specified parent pool + + + Gets a boolean indicating whether the path is a file path (and not a Uri) + + + Gets a small thread-local pool usable for small one shot actions + The memory allocated by the pool is only freed after the thread is closed; so use with care + + + Main class of Subversion api. This class is responsible for loading the unmanaged api + + + + + + + + + + + + + + + + + + + + + + + +
+
\ No newline at end of file diff --git a/src/Setup/Files.wxs b/src/Setup/Files.wxs index 160b89202c..162b800507 100644 --- a/src/Setup/Files.wxs +++ b/src/Setup/Files.wxs @@ -1483,16 +1483,8 @@ - - - - - - - - - - + + diff --git a/src/Tools/SVNChangeLogToXml/Main.cs b/src/Tools/SVNChangeLogToXml/Main.cs index 81ef8fd93c..a27c434816 100644 --- a/src/Tools/SVNChangeLogToXml/Main.cs +++ b/src/Tools/SVNChangeLogToXml/Main.cs @@ -1,14 +1,15 @@ using System; -using System.Text.RegularExpressions; using System.ComponentModel; +using System.Globalization; +using System.IO; +using System.Reflection; using System.Text; +using System.Text.RegularExpressions; +using System.Windows.Forms; using System.Xml; using System.Xml.Xsl; -using System.Reflection; -using System.Windows.Forms; -using System.IO; -using PumaCode.SvnDotNet.AprSharp; -using PumaCode.SvnDotNet.SubversionSharp; + +using SharpSvn; class MainClass { @@ -52,21 +53,13 @@ class MainClass { Console.Write("Writing revision to file: "); - SvnClient client = new SvnClient(); + long rev = 0; string filename = Path.GetFullPath("."); - int rev = 0; - client.Status2( - filename, Svn.Revision.Working, - delegate (IntPtr baton, SvnPath path, SvnWcStatus2 status) { - if (StringComparer.InvariantCultureIgnoreCase.Equals(filename, path.Value)) { - rev = status.Entry.Revision; - } - }, - IntPtr.Zero, - false, true, false, false, false - ); - client.GlobalPool.Destroy(); - + SvnWorkingCopyClient client = new SvnWorkingCopyClient(); + SvnWorkingCopyVersion version; + if (client.GetVersion(filename, out version)) { + rev = version.Start; + } Console.WriteLine(rev); using (StreamWriter writer = new StreamWriter("../REVISION")) { writer.Write(rev.ToString()); @@ -78,9 +71,6 @@ class MainClass Console.WriteLine("Reading SVN changelog, this might take a while..."); SvnClient client = new SvnClient(); - client.AddUsernameProvider(); - client.AddSimpleProvider(); - client.OpenAuth(); StringWriter writer = new StringWriter(); XmlTextWriter xmlWriter = new XmlTextWriter(writer); @@ -88,24 +78,26 @@ class MainClass xmlWriter.WriteStartDocument(); xmlWriter.WriteStartElement("log"); int progressCount = 0; - client.Log2( - new SvnPath[] { new SvnPath("..", client.Pool)}, - Svn.Revision.Base, new SvnRevision(startRevision), - int.MaxValue, false, false, - delegate(IntPtr baton, AprHash changed_paths, int revision, AprString author, AprString date, AprString message, AprPool pool) { + client.Log( + "..", + new SvnLogArgs { + // retrieve log in reverse order + Start = SvnRevision.Base, + End = new SvnRevision(startRevision) + }, + delegate(object sender, SvnLogEventArgs e) { if (++progressCount == 10) { Console.Write("."); progressCount = 0; } xmlWriter.WriteStartElement("logentry"); - xmlWriter.WriteAttributeString("revision", revision.ToString(System.Globalization.CultureInfo.InvariantCulture)); - xmlWriter.WriteElementString("author", author.Value); - xmlWriter.WriteElementString("date", DateTime.Parse(date.Value).ToUniversalTime().ToString("MM/dd/yyyy", System.Globalization.CultureInfo.InvariantCulture)); - xmlWriter.WriteElementString("msg", message.Value); + xmlWriter.WriteAttributeString("revision", e.Revision.ToString(CultureInfo.InvariantCulture)); + xmlWriter.WriteElementString("author", e.Author); + xmlWriter.WriteElementString("date", e.Time.ToUniversalTime().ToString("MM/dd/yyyy", System.Globalization.CultureInfo.InvariantCulture)); + xmlWriter.WriteElementString("msg", e.LogMessage); xmlWriter.WriteEndElement(); - return SvnError.NoError; - }, - IntPtr.Zero); + } + ); xmlWriter.WriteEndDocument(); Console.WriteLine(); @@ -122,7 +114,7 @@ class MainClass xmlWriter.Close(); tw.Close(); - client.GlobalPool.Destroy(); + client.Dispose(); Console.WriteLine("Finished"); } diff --git a/src/Tools/SVNChangeLogToXml/SVNChangelogToXml.csproj b/src/Tools/SVNChangeLogToXml/SVNChangelogToXml.csproj index 5af4bc76ee..7ccf775d79 100644 --- a/src/Tools/SVNChangeLogToXml/SVNChangelogToXml.csproj +++ b/src/Tools/SVNChangeLogToXml/SVNChangelogToXml.csproj @@ -1,4 +1,4 @@ - + Debug AnyCPU @@ -19,6 +19,8 @@ 4 1607 --REVISION --START 100 + C:\Users\Daniel\AppData\Roaming\ICSharpCode/SharpDevelop3.0\Settings.SourceAnalysis + v2.0 true @@ -38,11 +40,8 @@ true - - ..\..\AddIns\Misc\SubversionAddIn\RequiredLibraries\AprSharp.dll - - - ..\..\AddIns\Misc\SubversionAddIn\RequiredLibraries\SubversionSharp.dll + + ..\..\Libraries\SharpSvn\SharpSvn.dll @@ -52,38 +51,6 @@ - - intl3_svn.dll - PreserveNewest - - - libapr.dll - PreserveNewest - - - libapriconv.dll - PreserveNewest - - - libaprutil.dll - PreserveNewest - - - libdb44.dll - PreserveNewest - - - libeay32.dll - PreserveNewest - - - ssleay32.dll - PreserveNewest - - - svn_client-1.dll - PreserveNewest - \ No newline at end of file diff --git a/src/Tools/SVNChangeLogToXml/SVNChangelogToXml.sln b/src/Tools/SVNChangeLogToXml/SVNChangelogToXml.sln index ceecb0a34d..ef94ebc75f 100644 --- a/src/Tools/SVNChangeLogToXml/SVNChangelogToXml.sln +++ b/src/Tools/SVNChangeLogToXml/SVNChangelogToXml.sln @@ -1,7 +1,7 @@  -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -# SharpDevelop 3.0.0.2967 +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +# SharpDevelop 3.1.0.3932 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SVNChangelogToXml", "SVNChangelogToXml.csproj", "{c6159c5e-f6ef-4a63-b152-0e49159b6059}" EndProject Global diff --git a/src/Tools/UpdateAssemblyInfo/Main.cs b/src/Tools/UpdateAssemblyInfo/Main.cs index 3e149a7a9b..39eb7ec05a 100644 --- a/src/Tools/UpdateAssemblyInfo/Main.cs +++ b/src/Tools/UpdateAssemblyInfo/Main.cs @@ -5,15 +5,17 @@ * Time: 12:00 */ using System; +using System.Collections.Specialized; using System.Diagnostics; +using System.Globalization; using System.IO; using System.Reflection; +using System.Runtime.CompilerServices; using System.Text; using System.Text.RegularExpressions; -using System.Collections.Specialized; -using System.Runtime.CompilerServices; -using PumaCode.SvnDotNet.AprSharp; -using PumaCode.SvnDotNet.SubversionSharp; + +using SharpSvn; +using System.Threading; namespace UpdateAssemblyInfo { @@ -25,25 +27,42 @@ namespace UpdateAssemblyInfo const string configTemplateFile = "Main/StartUp/Project/app.template.config"; const string configFile = "Main/StartUp/Project/SharpDevelop.exe.config"; const string configFile2 = "Main/ICSharpCode.SharpDevelop.Sda/ICSharpCode.SharpDevelop.Sda.dll.config"; + const string subversionLibraryDir = "Libraries/SharpSvn"; public static int Main(string[] args) { try { - if (!File.Exists("SharpDevelop.sln")) { - string mainDir = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(typeof(MainClass).Assembly.Location), "../../../..")); - if (File.Exists(mainDir + "\\SharpDevelop.sln")) { - Directory.SetCurrentDirectory(mainDir); + string exeDir = Path.GetDirectoryName(typeof(MainClass).Assembly.Location); + bool createdNew; + using (Mutex mutex = new Mutex(true, "SharpDevelopUpdateAssemblyInfo" + exeDir.GetHashCode(), out createdNew)) { + if (!createdNew) { + // multiple calls in parallel? + // it's sufficient to let one call run, so just wait for the other call to finish + try { + mutex.WaitOne(10000); + } catch (AbandonedMutexException) { + } + return 0; } + if (!File.Exists("SharpDevelop.sln")) { + string mainDir = Path.GetFullPath(Path.Combine(exeDir, "../../../..")); + if (File.Exists(mainDir + "\\SharpDevelop.sln")) { + Directory.SetCurrentDirectory(mainDir); + } + } + if (!File.Exists("SharpDevelop.sln")) { + Console.WriteLine("Working directory must be SharpDevelop\\src!"); + return 2; + } + File.Copy(Path.Combine(subversionLibraryDir, "SharpSvn.dll"), + Path.Combine(exeDir, "SharpSvn.dll"), + true); + RetrieveRevisionNumber(); + string versionNumber = GetMajorVersion() + "." + revisionNumber; + UpdateStartup(); + UpdateRedirectionConfig(versionNumber); + return 0; } - if (!File.Exists("SharpDevelop.sln")) { - Console.WriteLine("Working directory must be SharpDevelop\\src!"); - return 2; - } - RetrieveRevisionNumber(); - string versionNumber = GetMajorVersion() + "." + revisionNumber; - UpdateStartup(); - UpdateRedirectionConfig(versionNumber); - return 0; } catch (Exception ex) { Console.WriteLine(ex); return 3; @@ -152,14 +171,14 @@ namespace UpdateAssemblyInfo Console.WriteLine(); Console.WriteLine("The revision number of the SharpDevelop version being compiled could not be retrieved."); Console.WriteLine(); - Console.WriteLine("Build continues with revision number '9999'..."); + Console.WriteLine("Build continues with revision number '0'..."); try { Process[] p = Process.GetProcessesByName("msbuild"); if (p != null && p.Length > 0) { System.Threading.Thread.Sleep(3000); } } catch {} - return "9999"; + return "0"; } } static void RetrieveRevisionNumber() @@ -168,21 +187,15 @@ namespace UpdateAssemblyInfo string oldWorkingDir = Environment.CurrentDirectory; try { // Change working dir so that the subversion libraries can be found - Environment.CurrentDirectory = Path.Combine(oldWorkingDir, "AddIns\\Misc\\SubversionAddIn\\RequiredLibraries"); + Environment.CurrentDirectory = Path.Combine(Environment.CurrentDirectory, subversionLibraryDir); - SvnClient client = new SvnClient(); - try { - client.Info(oldWorkingDir, new SvnRevision(Svn.Revision.Unspecified), new SvnRevision(Svn.Revision.Unspecified), - delegate(IntPtr baton, SvnPath path, SvnInfo info, AprPool pool) { - revisionNumber = info.Rev.ToString(); - return SvnError.NoError; - }, - IntPtr.Zero, false); - } finally { - client.Clear(); + SvnWorkingCopyClient client = new SvnWorkingCopyClient(); + SvnWorkingCopyVersion version; + if (client.GetVersion(oldWorkingDir, out version)) { + revisionNumber = version.Start.ToString(CultureInfo.InvariantCulture); } } catch (Exception e) { - Console.WriteLine("Reading revision number with Svn.Net failed: " + e.ToString()); + Console.WriteLine("Reading revision number with SharpSvn failed: " + e.ToString()); } finally { Environment.CurrentDirectory = oldWorkingDir; } diff --git a/src/Tools/UpdateAssemblyInfo/UpdateAssemblyInfo.csproj b/src/Tools/UpdateAssemblyInfo/UpdateAssemblyInfo.csproj index 7d9e1f6118..799d4d846e 100644 --- a/src/Tools/UpdateAssemblyInfo/UpdateAssemblyInfo.csproj +++ b/src/Tools/UpdateAssemblyInfo/UpdateAssemblyInfo.csproj @@ -9,7 +9,7 @@ False False False - None + PdbOnly False Auto 4194304 @@ -21,6 +21,7 @@ 1607 v2.0 app.manifest + C:\Users\Daniel\AppData\Roaming\ICSharpCode/SharpDevelop3.0\Settings.SourceAnalysis bin\Debug\ @@ -33,13 +34,9 @@ TRACE - - ..\..\AddIns\Misc\SubversionAddIn\RequiredLibraries\AprSharp.dll - True - - - ..\..\AddIns\Misc\SubversionAddIn\RequiredLibraries\SubversionSharp.dll - True + + ..\..\Libraries\SharpSvn\SharpSvn.dll + False diff --git a/src/Tools/UpdateAssemblyInfo/bin/Debug/AprSharp.dll b/src/Tools/UpdateAssemblyInfo/bin/Debug/AprSharp.dll deleted file mode 100755 index 1a351c29f8..0000000000 Binary files a/src/Tools/UpdateAssemblyInfo/bin/Debug/AprSharp.dll and /dev/null differ diff --git a/src/Tools/UpdateAssemblyInfo/bin/Debug/SubversionSharp.dll b/src/Tools/UpdateAssemblyInfo/bin/Debug/SubversionSharp.dll deleted file mode 100755 index c7a71494f8..0000000000 Binary files a/src/Tools/UpdateAssemblyInfo/bin/Debug/SubversionSharp.dll and /dev/null differ diff --git a/src/Tools/UpdateAssemblyInfo/bin/Debug/UpdateAssemblyInfo.exe b/src/Tools/UpdateAssemblyInfo/bin/Debug/UpdateAssemblyInfo.exe index 1580980c5d..47f0a4681e 100755 Binary files a/src/Tools/UpdateAssemblyInfo/bin/Debug/UpdateAssemblyInfo.exe and b/src/Tools/UpdateAssemblyInfo/bin/Debug/UpdateAssemblyInfo.exe differ diff --git a/src/Tools/UpdateSetupInfo/Main.cs b/src/Tools/UpdateSetupInfo/Main.cs index f54afac46a..72e4417013 100644 --- a/src/Tools/UpdateSetupInfo/Main.cs +++ b/src/Tools/UpdateSetupInfo/Main.cs @@ -6,16 +6,16 @@ // using System; +using System.Globalization; using System.IO; -using System.Reflection; using System.Text; -using PumaCode.SvnDotNet.AprSharp; -using PumaCode.SvnDotNet.SubversionSharp; + +using SharpSvn; namespace UpdateSetupInfo { /// - /// Creates the SharpDevelop.Setup.wixproj.user file based on the + /// Creates the SharpDevelop.Setup.wixproj.user file based on the /// SharpDevelop.Setup.wixproj.user.template. /// class UpdateApplication @@ -42,7 +42,7 @@ namespace UpdateSetupInfo /// The full filename including path to the setup template file. ///
string setupTemplateFullFileName; - + /// /// The full filename including path to the setup project user file that /// will be generated. @@ -61,7 +61,7 @@ namespace UpdateSetupInfo string previousRevisionFileName; /// - /// The folder that contains the last revision number used to update the + /// The folder that contains the last revision number used to update the /// template. /// string previousRevisionFolder; @@ -78,6 +78,9 @@ namespace UpdateSetupInfo previousRevisionFolder = Path.Combine(setupProjectFolder, @"bin"); previousRevisionFileName = Path.Combine(previousRevisionFolder, "REVISION"); + File.Copy(Path.Combine(Path.Combine(applicationFolder, subversionLibraryDir), "SharpSvn.dll"), + Path.Combine(applicationFolder, "SharpSvn.dll"), true); + // Set current directory to a folder that is in the repository. Environment.CurrentDirectory = setupProjectFolder; } @@ -94,14 +97,14 @@ namespace UpdateSetupInfo } public int Run() - { + { // Read setup template contents. if (!SetupTemplateFileExists) { Console.WriteLine(String.Concat(SetupTemplateFileName, " not found. Unable to update setup information.")); return SetupTemplateFileNotFoundReturnCode; } string template = ReadSetupTemplate(); - + // Get current revision. string currentRevision = GetCurrentRevision(); @@ -144,7 +147,9 @@ namespace UpdateSetupInfo writer.Write(contents); } } - + + const string subversionLibraryDir = @"..\..\..\Libraries\SharpSvn"; + /// /// Code taken directly from UpdateAssemblyInfo and the paths slightly modified. /// @@ -157,17 +162,12 @@ namespace UpdateSetupInfo string oldWorkingDir = Environment.CurrentDirectory; try { // Set working directory so msvcp70.dll and msvcr70.dll can be found - Environment.CurrentDirectory = Path.Combine(applicationFolder, @"..\..\..\AddIns\Misc\SubversionAddIn\RequiredLibraries"); - SvnClient client = new SvnClient(); - try { - client.Info(oldWorkingDir, new SvnRevision(Svn.Revision.Unspecified), new SvnRevision(Svn.Revision.Unspecified), - delegate(IntPtr baton, SvnPath path, SvnInfo info, AprPool pool) { - revisionNumber = info.Rev.ToString(); - return SvnError.NoError; - }, - IntPtr.Zero, false); - } finally { - client.Clear(); + Environment.CurrentDirectory = Path.Combine(applicationFolder, subversionLibraryDir); + + SvnWorkingCopyClient client = new SvnWorkingCopyClient(); + SvnWorkingCopyVersion version; + if (client.GetVersion(oldWorkingDir, out version)) { + revisionNumber = version.Start.ToString(CultureInfo.InvariantCulture); } } catch (Exception e) { Console.WriteLine("Reading revision number with Svn.Net failed: " + e.ToString()); diff --git a/src/Tools/UpdateSetupInfo/UpdateSetupInfo.csproj b/src/Tools/UpdateSetupInfo/UpdateSetupInfo.csproj index b962dd2b76..0702beeb4c 100644 --- a/src/Tools/UpdateSetupInfo/UpdateSetupInfo.csproj +++ b/src/Tools/UpdateSetupInfo/UpdateSetupInfo.csproj @@ -1,4 +1,4 @@ - + Exe UpdateSetupInfo @@ -16,9 +16,10 @@ 4 false bin + C:\Users\Daniel\AppData\Roaming\ICSharpCode/SharpDevelop3.0\Settings.SourceAnalysis + v2.0 - obj\ obj\Debug\ False DEBUG;TRACE @@ -36,11 +37,9 @@ False - - ..\..\AddIns\Misc\SubversionAddIn\RequiredLibraries\AprSharp.dll - - - ..\..\AddIns\Misc\SubversionAddIn\RequiredLibraries\SubversionSharp.dll + + ..\..\Libraries\SharpSvn\SharpSvn.dll + False @@ -49,9 +48,6 @@ - - Always - \ No newline at end of file diff --git a/src/Tools/UpdateSetupInfo/UpdateSetupInfo.exe.manifest b/src/Tools/UpdateSetupInfo/UpdateSetupInfo.exe.manifest deleted file mode 100644 index 1341c3ae58..0000000000 --- a/src/Tools/UpdateSetupInfo/UpdateSetupInfo.exe.manifest +++ /dev/null @@ -1,14 +0,0 @@ - - - Updates the setup version, product and package code guids in SharpDevelop.Setup.wixproj.user - - - - - - - - - - - diff --git a/src/Tools/UpdateSetupInfo/UpdateSetupInfo.sln b/src/Tools/UpdateSetupInfo/UpdateSetupInfo.sln index 292530c10f..4c9a4ced8d 100644 --- a/src/Tools/UpdateSetupInfo/UpdateSetupInfo.sln +++ b/src/Tools/UpdateSetupInfo/UpdateSetupInfo.sln @@ -1,5 +1,7 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# SharpDevelop 2.1.0.1717 + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +# SharpDevelop 3.1.0.3932 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UpdateSetupInfo", "UpdateSetupInfo.csproj", "{75E6D78C-DC66-40F1-90AC-F9F97ADE3506}" EndProject Global