public UpdateAndParseResult UpdateAndParse(int sourceControlVersionId)
        {
            AspNetDeployEntities entities             = new AspNetDeployEntities();
            SourceControlVersion sourceControlVersion = entities.SourceControlVersion
                                                        .Include("Properties")
                                                        .Include("Revisions")
                                                        .Include("SourceControl.Properties")
                                                        .First(svc => svc.Id == sourceControlVersionId);

            SourceControl sourceControl = sourceControlVersion.SourceControl;

            string            sourcesFolder     = this.pathServices.GetSourceControlVersionPath(sourceControl.Id, sourceControlVersion.Id);
            LoadSourcesResult loadSourcesResult = this.LoadSources(sourceControlVersion, sourcesFolder);

            if (loadSourcesResult.RevisionId == sourceControlVersion.GetStringProperty("Revision"))
            {
                return(new UpdateAndParseResult());
            }

            sourceControlVersion.SetStringProperty("Revision", loadSourcesResult.RevisionId);

            Revision previousRevision = sourceControlVersion.Revisions.OrderByDescending(r => r.CreatedDate).FirstOrDefault();

            Revision newRevision = new Revision
            {
                CreatedDate    = DateTime.UtcNow,
                Name           = loadSourcesResult.RevisionId,
                ParentRevision = previousRevision
            };

            sourceControlVersion.Revisions.Add(newRevision);

            LoadSourcesInfoResult loadSourcesInfoResult = this.LoadSourcesInfo(sourceControlVersion, sourcesFolder);

            newRevision.RevisionInfos = loadSourcesInfoResult.SourcesInfos.Select(i => new RevisionInfo
            {
                Author      = i.Author,
                CreatedDate = i.CreatedDate,
                Message     = i.Message
            }).ToList();

            entities.SaveChanges();

            this.projectParsingService.UpdateProjects(sourceControlVersionId);

            return(new UpdateAndParseResult
            {
                HasChanges = true,
                Projects = entities.Project.Where(p => p.SourceControlId == sourceControlVersion.Id).Select(p => p.Id).ToList()
            });
        }
        public ActionResult AddSvn(AddSvnModel model)
        {
            this.CheckPermission(UserRoleAction.SourceVersionsManage);

            if (!this.ModelState.IsValid)
            {
                return(this.View(model));
            }

            SourceControl sourceControl = new SourceControl
            {
                Type       = SourceControlType.Svn,
                Name       = model.Name,
                IsDeleted  = false,
                OrderIndex = this.Entities.SourceControl.Count()
            };

            sourceControl.SetStringProperty("URL", model.Url.Trim());
            sourceControl.SetStringProperty("Login", model.Login.Trim());
            sourceControl.SetStringProperty("Password", model.Password.Trim());

            SourceControlVersion sourceControlVersion = new SourceControlVersion();

            sourceControlVersion.SourceControl = sourceControl;
            sourceControlVersion.SetStringProperty("URL", "/");

            TestSourceResult testSourceResult = this.sourceControlManager.TestConnection(sourceControlVersion);

            if (!testSourceResult.IsSuccess)
            {
                this.ModelState.AddModelError("URL", testSourceResult.ErrorMessage);
                return(this.View(model));
            }

            sourceControlVersion.SourceControl = null;

            this.Entities.SourceControl.Add(sourceControl);
            this.Entities.SaveChanges();

            return(this.RedirectToAction("List"));
        }