/// <summary>Move and/or rename something in repository, remembering history (<c>svn move</c>)</summary> public unsafe bool RemoteMove(ICollection <Uri> sourceUris, Uri toUri, SvnMoveArgs args, out SvnCommitResult result) { if (sourceUris == null) { throw new ArgumentNullException(nameof(sourceUris)); } if (toUri == null) { throw new ArgumentNullException(nameof(toUri)); } if (args == null) { throw new ArgumentNullException(nameof(args)); } if (!IsValidReposUri(toUri)) { throw new ArgumentException(SharpSvnStrings.ArgumentMustBeAValidRepositoryUri, nameof(toUri)); } var uris = new List <string>(sourceUris.Count); foreach (Uri u in sourceUris) { if (u == null) { throw new ArgumentException(SharpSvnStrings.ItemInListIsNull, nameof(sourceUris)); } if (!IsValidReposUri(u)) { throw new ArgumentException(SharpSvnStrings.ArgumentMustBeAValidRepositoryUri, nameof(sourceUris)); } uris.Add(UriToCanonicalString(u)); } EnsureState(SvnContextState.AuthorizationInitialized); using var pool = new AprPool(_pool); using var store = new ArgsStore(this, args, pool); using var crr = new CommitResultReceiver(this); svn_error_t r = svn_client.svn_client_move7( AllocArray(uris, pool), pool.AllocUri(toUri), args.AlwaysMoveAsChild || (sourceUris.Count > 1), args.CreateParents, args.AllowMixedRevisions, args.MetaDataOnly, CreateRevPropList(args.LogProperties, pool), crr.CommitCallback.Get(), crr.CommitBaton, CtxHandle, pool.Handle); result = crr.CommitResult; return(args.HandleResult(this, r, sourceUris)); }
/// <summary>Performs a checkout of <paramref name="url" /> to <paramref name="path" /> to the specified param</summary> /// <exception type="SvnException">Operation failed and args.ThrowOnError = true</exception> /// <exception type="ArgumentException">Parameters invalid</exception> /// <returns>true if the operation succeeded; false if it did not</returns> public unsafe bool CheckOut(SvnUriTarget url, string path, SvnCheckOutArgs args, out SvnUpdateResult result) { if (url == null) { throw new ArgumentNullException(nameof(url)); } if (string.IsNullOrEmpty(path)) { throw new ArgumentNullException(nameof(path)); } if (args == null) { throw new ArgumentNullException(nameof(args)); } if (args.Revision.RequiresWorkingCopy) { throw new ArgumentException(SharpSvnStrings.RevisionTypeMustBeHeadDateOrSpecific, nameof(args)); } if (url.Revision.RequiresWorkingCopy) { throw new ArgumentException(SharpSvnStrings.RevisionTypeMustBeHeadDateOrSpecific, nameof(url)); } EnsureState(SvnContextState.AuthorizationInitialized); using var pool = new AprPool(_pool); using var store = new ArgsStore(this, args, pool); int version = 0; svn_opt_revision_t pegRev = url.Revision.AllocSvnRevision(pool); svn_opt_revision_t coRev = args.Revision.Or(url.Revision).Or(SvnRevision.Head).AllocSvnRevision(pool); svn_error_t r = svn_client.svn_client_checkout3( ref version, pool.AllocUri(url.Uri), pool.AllocDirent(path), pegRev, coRev, (svn_depth_t)args.Depth, args.IgnoreExternals, args.AllowObstructions, CtxHandle, pool.Handle); result = SvnUpdateResult.Create(this, args, version); return(args.HandleResult(this, r, url)); }
/// <summary>Duplicate something in repository, remembering history (<c>svn copy</c>)</summary> /// <remarks>Can be called with either a list of <see cref="SvnTarget" />, <see cref="SvnUriTarget" /> or <see cref="SvnPathTarget" />. /// All members must be of the same type.</remarks> public unsafe bool RemoteCopy <TSvnTarget>(ICollection <TSvnTarget> sources, Uri toUri, SvnCopyArgs args, out SvnCommitResult result) where TSvnTarget : SvnTarget { if (sources == null) { throw new ArgumentNullException(nameof(sources)); } if (toUri == null) { throw new ArgumentNullException(nameof(toUri)); } if (args == null) { throw new ArgumentNullException(nameof(args)); } if (!SvnBase.IsValidReposUri(toUri)) { throw new ArgumentException(SharpSvnStrings.ArgumentMustBeAValidRepositoryUri, nameof(toUri)); } if (sources.Count == 0) { throw new ArgumentException(SharpSvnStrings.CollectionMustContainAtLeastOneItem, nameof(sources)); } bool isFirst = true; bool isLocal = false; foreach (SvnTarget target in sources) { if (target == null) { throw new ArgumentException(SharpSvnStrings.ItemInListIsNull, nameof(sources)); } SvnPathTarget pt = target as SvnPathTarget; if (isFirst) { isLocal = (null != pt); isFirst = false; } else if (isLocal != (null != pt)) { throw new ArgumentException(SharpSvnStrings.AllTargetsMustBeUriOrPath, nameof(sources)); } } EnsureState(SvnContextState.AuthorizationInitialized); using var pool = new AprPool(_pool); using var store = new ArgsStore(this, args, pool); using var crr = new CommitResultReceiver(this); apr_array_header_t copies = AllocCopyArray(sources, pool); if (copies != null && args.Revision.RevisionType != SvnRevisionType.None) { svn_opt_revision_t rev = args.Revision.AllocSvnRevision(pool); for (int i = 0; i < copies.nelts; i++) { var cp = ((svn_client_copy_source_t.__Internal * *)copies.elts)[i]; cp->revision = rev.__Instance; } } svn_error_t r = svn_client.svn_client_copy7( copies, pool.AllocUri(toUri), args.AlwaysCopyAsChild || (sources.Count > 1), args.CreateParents, args.IgnoreExternals, args.MetaDataOnly, args.PinExternals, null /* */, CreateRevPropList(args.LogProperties, pool), crr.CommitCallback.Get(), crr.CommitBaton, CtxHandle, pool.Handle); result = crr.CommitResult; return(args.HandleResult(this, r, sources)); }
internal override unsafe sbyte *AllocAsString(AprPool pool, bool absolute) { return(pool.AllocUri(Uri)); }