rally_workspace_utils 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -1
- data/lib/translate/copy/defect_copy.rb +1 -1
- data/lib/translate/copy/object_copy.rb +22 -18
- data/lib/translate/copy/story_copy.rb +1 -1
- data/lib/translate/translate.rb +6 -13
- data/lib/translate/translation_audit.rb +2 -2
- data/lib/translate/translation_store.rb +5 -0
- data/lib/translate/version.rb +1 -1
- metadata +3 -3
data/Rakefile
CHANGED
@@ -43,7 +43,7 @@ hoe = Hoe.new(GEM_NAME, VERS) do |p|
|
|
43
43
|
p.clean_globs = CLEAN #An array of file patterns to delete on clean.
|
44
44
|
|
45
45
|
p.extra_deps = []
|
46
|
-
p.extra_deps << ["rally_rest_api", ">= 0.6.
|
46
|
+
p.extra_deps << ["rally_rest_api", ">= 0.6.3"]
|
47
47
|
p.extra_deps << ["activesupport"]
|
48
48
|
|
49
49
|
|
@@ -65,7 +65,7 @@ class DefectCopy < ObjectCopy
|
|
65
65
|
# tangle the duplicate defects
|
66
66
|
unless @object.duplicates.nil?
|
67
67
|
dups = []
|
68
|
-
@object.duplicates.
|
68
|
+
@object.duplicates.each do |dup|
|
69
69
|
dups << fetch_object(:defect, dup.oid, new_workspace)
|
70
70
|
end
|
71
71
|
values[:duplicates] = dups
|
@@ -4,17 +4,20 @@ class ObjectCopy
|
|
4
4
|
end
|
5
5
|
|
6
6
|
def copy(new_workspace, additional_values = {})
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
unless TranslationStore[@object.oid]
|
8
|
+
values = shallow_copy(@object, new_workspace)
|
9
|
+
values.merge! additional_values
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
values[:workspace] = new_workspace
|
12
|
+
values[:project] = find_project_in_new_workspace(new_workspace)
|
13
13
|
|
14
|
-
|
15
|
-
|
14
|
+
@object.rally_rest.logger.info "Copying #{@object.type} -- #{@object.name}"
|
15
|
+
@new_object = create_object(new_workspace.rally_rest, values)
|
16
|
+
remember @object, @new_object
|
17
|
+
else
|
18
|
+
@new_object = fetch_object(@object.type_as_symbol, @object.oid, new_workspace)
|
19
|
+
end
|
16
20
|
copy_children(new_workspace)
|
17
|
-
|
18
21
|
@new_object
|
19
22
|
end
|
20
23
|
|
@@ -37,10 +40,10 @@ class ObjectCopy
|
|
37
40
|
end
|
38
41
|
|
39
42
|
def fetch_project(project_name, workspace)
|
40
|
-
|
41
|
-
return
|
43
|
+
cached_projects = TranslationStore.instance.projects
|
44
|
+
return cached_projects[project_name] if cached_projects.key? project_name
|
42
45
|
project = workspace.rally_rest.find(:project, :workspace => workspace) { equal :name, project_name }.first
|
43
|
-
|
46
|
+
cached_projects[project_name] = project
|
44
47
|
end
|
45
48
|
|
46
49
|
def shallow_copy(object, new_workspace)
|
@@ -70,26 +73,27 @@ class ObjectCopy
|
|
70
73
|
end
|
71
74
|
|
72
75
|
def user_exists?(username)
|
73
|
-
|
76
|
+
cached_users = TranslationStore.instance.users
|
74
77
|
|
75
78
|
return true if username.nil?
|
76
|
-
return
|
79
|
+
return cached_users[username] if cached_users.key? username
|
77
80
|
|
78
81
|
result = @object.rally_rest.find(:user) { equal :login_name, username }
|
79
82
|
if result.total_result_count > 0
|
80
|
-
|
83
|
+
cached_users[username] = true
|
81
84
|
else
|
82
|
-
|
85
|
+
cached_users[username] = false
|
83
86
|
end
|
84
87
|
end
|
85
88
|
|
86
89
|
def fetch_object(type, oid, workspace)
|
87
|
-
|
90
|
+
cached_objects = TranslationStore.instance.objects
|
88
91
|
new_oid = TranslationStore[oid]
|
89
|
-
return
|
92
|
+
return cached_objects[new_oid] if cached_objects.key? oid
|
90
93
|
|
91
94
|
object = @object.rally_rest.find(type, :workspace => workspace) { equal :object_i_d, new_oid }.first
|
92
|
-
|
95
|
+
cached_objects[new_oid] = object
|
93
96
|
end
|
97
|
+
|
94
98
|
end
|
95
99
|
|
@@ -37,7 +37,7 @@ class StoryCopy < ObjectCopy
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def copy_children(new_workspace)
|
40
|
-
@object.cards.first.tasks.
|
40
|
+
@object.cards.first.tasks.each do |task|
|
41
41
|
task.copy(new_workspace, :work_product => @new_object)
|
42
42
|
end if !@object.cards.nil? && !@object.cards.first.tasks.nil?
|
43
43
|
end
|
data/lib/translate/translate.rb
CHANGED
@@ -17,10 +17,10 @@ class Translate
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def run
|
20
|
-
@slm = RallyRestAPI.new(:base_url => @base_url, :username => @username, :password => @password, :logger => @logger)
|
20
|
+
@slm = RallyRestAPI.new(:base_url => @base_url, :username => @username, :password => @password, :logger => @logger, :parse_collections_as_hash => false)
|
21
21
|
|
22
|
-
@from_workspace = @slm.user.subscription.workspaces.
|
23
|
-
@to_workspace = @slm.user.subscription.workspaces.
|
22
|
+
@from_workspace = @slm.user.subscription.workspaces.find { |w| w.name == @from_workspace_name }
|
23
|
+
@to_workspace = @slm.user.subscription.workspaces.find { |w| w.name == @to_workspace_name }
|
24
24
|
|
25
25
|
raise "No such workspace #{@from_workspace_name}" unless @from_workspace
|
26
26
|
raise "No such workspace #{@to_workspace_name}" unless @to_workspace
|
@@ -30,9 +30,8 @@ class Translate
|
|
30
30
|
begin
|
31
31
|
# now do the copy
|
32
32
|
[:iteration, :release, :story, :defect, :test_case].each do |type|
|
33
|
-
|
34
|
-
|
35
|
-
o.copy(@to_workspace) unless TranslationStore[o.oid]
|
33
|
+
@slm.find_all(type, :workspace => @from_workspace, :order => [:creation_date, :desc]).each do |o|
|
34
|
+
o.copy(@to_workspace)
|
36
35
|
end
|
37
36
|
end unless store.copy_finished?
|
38
37
|
store.copy_finished!
|
@@ -46,15 +45,9 @@ class Translate
|
|
46
45
|
store.tangle_finished!
|
47
46
|
rescue Exception => e
|
48
47
|
@logger.info "Caught an exception #{e}. Remembering where we were."
|
48
|
+
@logger.info e.backtrace.join("\n")
|
49
49
|
# Remember where we were if there was a failure
|
50
50
|
store.dump
|
51
51
|
end
|
52
52
|
end
|
53
|
-
|
54
|
-
def dump_oids
|
55
|
-
File.open("TRANSLATED", "w+") do |f|
|
56
|
-
Marshal.dump($TRANSLATED, f)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
53
|
end
|
@@ -30,7 +30,7 @@ module TranslationAudit
|
|
30
30
|
compare_each :defect do |old, new|
|
31
31
|
if !old.requirement.nil? && old.requirement.type == "Story"
|
32
32
|
if new.requirement.children
|
33
|
-
if old.requirement.name != new.requirement.children.
|
33
|
+
if old.requirement.name != new.requirement.children.first.name
|
34
34
|
end
|
35
35
|
else
|
36
36
|
if old.requirement.name != new.requirement.name
|
@@ -42,7 +42,7 @@ module TranslationAudit
|
|
42
42
|
compare_each :test_case do |old, new|
|
43
43
|
if !old.work_product.nil? && old.work_product.type == "Story"
|
44
44
|
if new.work_product.children
|
45
|
-
if old.work_product.name != new.work_product.children.
|
45
|
+
if old.work_product.name != new.work_product.children.first.name
|
46
46
|
end
|
47
47
|
else
|
48
48
|
if old.work_product.name != new.work_product.name
|
@@ -1,5 +1,6 @@
|
|
1
1
|
|
2
2
|
class TranslationStore
|
3
|
+
attr_reader :projects, :users, :objects
|
3
4
|
private_class_method :new
|
4
5
|
|
5
6
|
def TranslationStore.instance(from_workspace = nil, to_workspace = nil)
|
@@ -22,6 +23,9 @@ class TranslationStore
|
|
22
23
|
@w1 = w1.oid
|
23
24
|
@w2 = w2.oid
|
24
25
|
@store = {}
|
26
|
+
@projects = {}
|
27
|
+
@users = {}
|
28
|
+
@objects = {}
|
25
29
|
@store[:copy] = false
|
26
30
|
@store[:tangle] = false
|
27
31
|
load
|
@@ -71,6 +75,7 @@ class TranslationStore
|
|
71
75
|
|
72
76
|
def cleanup
|
73
77
|
File.delete(filename) if File.exists? filename
|
78
|
+
self.class.send(:remove_class_variable, :@@instance) if defined? @@instance
|
74
79
|
end
|
75
80
|
|
76
81
|
end
|
data/lib/translate/version.rb
CHANGED
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
|
|
3
3
|
specification_version: 1
|
4
4
|
name: rally_workspace_utils
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0.
|
7
|
-
date:
|
6
|
+
version: 0.0.4
|
7
|
+
date: 2007-01-03 00:00:00 -07:00
|
8
8
|
summary: A utility to translate a UseCase workspace to a UserStory workspace
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -69,7 +69,7 @@ dependencies:
|
|
69
69
|
requirements:
|
70
70
|
- - ">="
|
71
71
|
- !ruby/object:Gem::Version
|
72
|
-
version: 0.6.
|
72
|
+
version: 0.6.3
|
73
73
|
version:
|
74
74
|
- !ruby/object:Gem::Dependency
|
75
75
|
name: activesupport
|