private void RaiseWorkflow(SVNServerRecord hostRecord, SvnLogEventArgs log)
        {
            var contentManager    = this.orchardServices.ContentManager;
            var svnLogContentItem = contentManager.New(SVNLogPart.ContentItemTypeName);
            var svnLogPart        = svnLogContentItem.As <SVNLogPart>();


            svnLogPart.LogMessage = log.LogMessage;
            svnLogPart.Author     = log.Author;
            svnLogPart.Revision   = log.Revision;
            svnLogPart.Time       = log.Time;
            svnLogPart.LogOrigin  = log.LogOrigin.AbsolutePath;

            contentManager.Create(svnLogContentItem);
            contentManager.Publish(svnLogContentItem);

            workflowManager.TriggerEvent(
                SVNLogReceivedActivity.ActivityName,
                svnLogContentItem,
                () => new Dictionary <string, object> {
                { "Content", svnLogContentItem }
            });

            hostRecord.LastRevision = log.Revision;
            this.svnServerRepository.Flush();
        }
示例#2
0
        protected override DriverResult Editor(SVNSettingsPart part, IUpdateModel updater, dynamic shapeHelper)
        {
            var previousPassword = part.Password;

            updater.TryUpdateModel(part, Prefix, null, null);

            // check whether the form is posted or not
            IsRenderedModel temp = new IsRenderedModel();

            updater.TryUpdateModel(temp, Prefix, null, null);
            if (!temp.IsRendered)
            {
                return(null);
            }

            if (!part.IsValid())
            {
                return(null);
            }

            part.Server = part.Server.Trim();
            var record = this.svnServerRepository.Table.FirstOrDefault(c => c.Server == part.Server);

            if (record == null)
            {
                record = new SVNServerRecord {
                    Server = part.Server, LastRevision = part.LastRevision, FromDate = DateTime.UtcNow
                };
                this.svnServerRepository.Create(record);
            }
            else
            {
                record.LastRevision = part.LastRevision;
            }

            part.LastSuccessfullConnectionTime = null;
            part.LatestError     = string.Empty;
            part.LatestErrorTime = null;

            return(ContentShape("Parts_SVNSettings_Edit", () =>
            {
                // restore password if the input is empty, meaning it has not been reseted
                if (string.IsNullOrEmpty(part.Password))
                {
                    part.Password = previousPassword;
                }
                return shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: part, Prefix: Prefix);
            })
                   .OnGroup("SVN Client"));
        }
        public void Process(ScheduledTaskContext context)
        {
            if (context.Task.TaskType == TaskType)
            {
                var settings = this.orchardServices.WorkContext.CurrentSite.As <SVNSettingsPart>();

                this.transactionManager.Demand();
                try
                {
                    if (!string.IsNullOrEmpty(settings.Server))
                    {
                        var client = new SvnClient();
                        client.Authentication.DefaultCredentials = new NetworkCredential(settings.Username, settings.Password);
                        var serverRecord = this.svnServerRepository.Table.FirstOrDefault(c => c.Server == settings.Server);

                        if (serverRecord == null)
                        {
                            serverRecord = new SVNServerRecord {
                                Server = settings.Server, LastRevision = settings.LastRevision, FromDate = DateTime.UtcNow
                            };
                            this.svnServerRepository.Create(serverRecord);
                            this.svnServerRepository.Flush();
                        }

                        Uri svnrepo = new Uri(settings.Server);
                        SvnInfoEventArgs info;
                        client.GetInfo(svnrepo, out info);
                        long lastRev    = info.LastChangeRevision;
                        long rangeStart = serverRecord.LastRevision;
                        Collection <SvnLogEventArgs> logs = new Collection <SvnLogEventArgs>();
                        client.GetLog(svnrepo, new SvnLogArgs(new SvnRevisionRange(rangeStart, lastRev)), out logs);

                        foreach (var svnLog in logs)
                        {
                            RaiseWorkflow(serverRecord, svnLog);
                        }

                        var settingContentItem = this.orchardServices.ContentManager.Get(settings.Id);
                        var svnSettingPart     = settingContentItem.As <SVNSettingsPart>();
                        svnSettingPart.LastSuccessfullConnectionTime = DateTime.UtcNow;
                        svnSettingPart.LatestError     = null;
                        svnSettingPart.LatestErrorTime = null;
                        this.transactionManager.Demand();
                    }
                }
                catch (Exception e)
                {
                    this.transactionManager.Cancel();

                    this.Logger.Error(e, e.Message);

                    // We need a new transaction for storing the data
                    this.transactionManager.RequireNew();
                    settings.LatestError     = e.Message;
                    settings.LatestErrorTime = DateTime.UtcNow;
                    var settingContentItem = this.orchardServices.ContentManager.Get(settings.Id);
                    var svnSettingPart     = settingContentItem.As <SVNSettingsPart>();
                    svnSettingPart.LatestError     = e.Message;
                    svnSettingPart.LatestErrorTime = settings.LatestErrorTime;
                    this.transactionManager.Demand();
                }
                finally
                {
                    DateTime nextTaskDate = DateTime.UtcNow.AddMinutes(PeriodInMinutes);
                    this.ScheduleNextTask(nextTaskDate);
                }
            }
        }