public void Reset(IssueMigration migration)
 {
     migration.TempWorkItemId = default;
     migration.WorkItemId     = default;
     migration.IssueImported  = false;
     migration.Attachments.ForEach(a => a.Imported = false);
     Save(migration);
 }
        public void Save(IssueMigration migration)
        {
            var file = _localDirs.GetIssueMigrationStatusFile(migration.IssueId);
            var json = JsonConvert.SerializeObject(migration, Formatting.Indented);

            // Intentionally not passing _cancellationToken.
            // I don't want to risk leaving file in a bad state.
            // small files should write quickly anyway.
            File.WriteAllText(file.FullName, json);
        }
Esempio n. 3
0
        private void UpdateAttachmentMigrationMetaData(IssueMigration migration, List <Attachment> attachments)
        {
            var attachmentsById =
                migration.Attachments.ToDictionary(a =>
                                                   Int64.Parse(_jiraContext.LocalDirs.GetAttachmentIdFromPath(a.File)));

            foreach (var attachment in attachments)
            {
                var attachmentMigration = attachmentsById.GetOrAdd(attachment.Id, key => new AttachmentMigration());
                if (!attachmentMigration.Imported || !attachmentMigration.File.EndsWith(attachment.Filename))
                {
                    // if the item wasn't imported OR if a different file name is used
                    // ... I don't think can happen, but... just in case
                    attachmentMigration.Imported = false;
                    var attachmentFile = _jiraContext.Api.GetAttachment(attachment).Result;
                    var relativePath   = _jiraContext.LocalDirs.GetRelativePath(attachmentFile);
                    attachmentMigration.File = relativePath;
                }
            }
        }
Esempio n. 4
0
        public void UpdateMigrationMetaData(IssueMigration migration)
        {
            IssueId issueId = migration.IssueId;

            try
            {
                // waiting on results prevents overwhelming Jira API resulting in 503's
                var issueData = _jiraContext.Api.GetIssue(issueId).Result;

                if (issueData == null)
                {
                    Logger.Error($"Failed to retrieve json data for {issueId}", issueId);
                    return;
                }

                var issue = issueData.ToObject <Issue>();
                migration.IssueType      = issue.Fields.IssueType.Name;
                migration.Status         = issue.Fields.Status.Name;
                migration.StatusCategory = issue.Fields.Status.StatusCategory.Name;
                var attachments = issue.Fields.Attachments;

                if (!issue.ChangeLog.Histories.Any())
                {
                    Logger.Warn("History missing for {issueId}", issueId);
                }

                UpdateAttachmentMigrationMetaData(migration, attachments);

                migration.ExportCompleted = true;
                _migrationRepository.Save(migration);

                AlertIfPartialPagedData(issueId, issueData);
            }
            catch (Exception e)
            {
                e.Data["IssueId"] = issueId.ToString();
                throw;
            }
        }