diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2019-06-20 08:17:19 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2019-06-20 08:17:19 +0000 |
commit | 638dbbea95559852d00b4fe149a0ce19cd6c41d8 (patch) | |
tree | 25e2a0c3f2d3c68a428bf45ae01c662d7bae8275 /app/models/issue_import.rb | |
parent | d915e71d0fef4b7aac14ce37c7c4298b49e9ef8a (diff) | |
download | redmine-638dbbea95559852d00b4fe149a0ce19cd6c41d8.tar.gz redmine-638dbbea95559852d00b4fe149a0ce19cd6c41d8.zip |
Support external ID when importing issues (#28213).
Patch by Gregor Schmidt and Marius BALTEANU.
git-svn-id: http://svn.redmine.org/redmine/trunk@18285 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app/models/issue_import.rb')
-rw-r--r-- | app/models/issue_import.rb | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/app/models/issue_import.rb b/app/models/issue_import.rb index 5f99007fe..700d659ba 100644 --- a/app/models/issue_import.rb +++ b/app/models/issue_import.rb @@ -150,18 +150,30 @@ class IssueImport < Import end end if parent_issue_id = row_value(row, 'parent_issue_id') - if parent_issue_id =~ /\A(#)?(\d+)\z/ - parent_issue_id = $2.to_i - if $1 - attributes['parent_issue_id'] = parent_issue_id + if parent_issue_id.start_with? '#' + # refers to existing issue + attributes['parent_issue_id'] = parent_issue_id[1..-1] + elsif use_unique_id? + # refers to other row with unique id + issue_id = items.where(:unique_id => parent_issue_id).first.try(:obj_id) + + if issue_id + attributes['parent_issue_id'] = issue_id else - if parent_issue_id > item.position - add_callback(parent_issue_id, 'set_as_parent', item.position) - elsif issue_id = items.where(:position => parent_issue_id).first.try(:obj_id) - attributes['parent_issue_id'] = issue_id - end + add_callback(parent_issue_id, 'set_as_parent', item.position) end + elsif parent_issue_id =~ /\A\d+\z/ + # refers to other row by position + parent_issue_id = parent_issue_id.to_i + + if parent_issue_id > item.position + add_callback(parent_issue_id, 'set_as_parent', item.position) + elsif issue_id = items.where(:position => parent_issue_id).first.try(:obj_id) + attributes['parent_issue_id'] = issue_id + end + else + # Something is odd. Assign parent_issue_id to trigger validation error attributes['parent_issue_id'] = parent_issue_id end end |