Exemplo n.º 1
0
        void UpdateResult()
        {
            var relType = cbType.Text;
            var relName = txtName.Text;

            CompleteName = relType + "/" + relName;
            PinType      = ReleaseTypeToPinType(relType);

            txtComplateName.Text = CompleteName;
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        /// <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);
        }