void UpdateResult() { var relType = cbType.Text; var relName = txtName.Text; CompleteName = relType + "/" + relName; PinType = ReleaseTypeToPinType(relType); txtComplateName.Text = CompleteName; }
static bool ModifyExternal(SvnClient client, ref SvnExternalItem ei, Exter.EPinType newType, string hostUrl, string releaseName = null) { switch (newType) { case Exter.EPinType.Head: { if (!MakeHead(client, ref ei, hostUrl)) { return(false); } break; } case Exter.EPinType.Peg: { if (!MakePeg(client, ref ei, hostUrl)) { return(false); } break; } case Exter.EPinType.Branch: { if (!MakeBranch(client, ref ei, hostUrl, releaseName)) { return(false); } break; } case Exter.EPinType.Tag: { if (!MakeTag(client, ref ei, hostUrl, releaseName)) { return(false); } break; } } return(true); }
/// <summary> /// Creates a release by copying an existing one and changing the externals type /// Only the root externals are changed. All in repository, no WC involved. /// </summary> /// <param name="srcUrl"> /// svn://server/releases/head /// svn://server/releases/candidate/2.0.1 /// svn://server/releases/final/2.0.1 /// </param> /// <param name="destUrl">new url /// svn://server/releases/head /// svn://server/releases/candidate/2.0.1 /// svn://server/releases/final/2.0.1 /// </param> /// <param name="pinType">the resulting type of externals</param> /// <param name="releaseName">name of the release Can contain sub-folders like 'sub1/sub2/version'</param> /// <returns></returns> public static bool Copy(SvnClient client, string srcUrl, string destUrl, Exter.EPinType pinType, string releaseName = null) { /* * - udělá svn copy (to zkopíruje externalsy jak jsou) * - pozmění kořenové externalsy tak, že každý z nich napinuje (pokud ještě není) na konkrétní revizi */ // args check if (pinType == Exter.EPinType.Branch || pinType == Exter.EPinType.Tag) { if (String.IsNullOrEmpty(releaseName)) { throw new ArgumentException("release Name can't be empty", "releaseName"); } } // read externals from the root directory and parse them string externalsHostUrl = srcUrl; SvnExternalItem[] extItems; if (!Exter.ReadExternals(client, externalsHostUrl, out extItems)) { return(false); } // modify each of them (will create new tags if needed on referenced shared resources!) { for (int i = 0; i < extItems.Length; i++) { if (!ModifyExternal(client, ref extItems[i], pinType, externalsHostUrl, releaseName)) { return(false); } } } long dstRevision; if (srcUrl != destUrl) { // make svn copy Head Candidate/2.0.1 (copies the externals as they are) try { SvnCommitResult copyResult; var args = new SvnCopyArgs(); args.LogMessage = ""; args.CreateParents = true; if (!client.RemoteCopy(new SvnUriTarget(srcUrl, SvnRevision.Head), new Uri(destUrl), args, out copyResult)) { return(false); } dstRevision = copyResult.Revision; } catch (SvnException ex) { Logger.Error(ex, $"Failed creating '{destUrl}'"); return(false); } } else { SvnInfoEventArgs info; if (!client.GetInfo(new Uri(srcUrl), out info)) { return(false); } dstRevision = info.Revision; } // update its root externals if (!Exter.WriteExternals(client, destUrl, extItems, dstRevision)) { return(false); } return(true); }