Module: Origen::PDM

Includes:
Attributes
Defined in:
lib/origen/pdm.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#pdm_bomObject

Set this attribute to include components in the BOM, it should be set to an array of objects, each of which must also include the Origen::PDM module and have the pdm_version_number attribute set.



37
38
39
# File 'lib/origen/pdm.rb', line 37

def pdm_bom
  @pdm_bom
end

#pdm_branch_version_numberObject

Set this attribute to create a branch point release from the given version. If this attribute is not set then all releases will simply supercede the last release.



27
28
29
# File 'lib/origen/pdm.rb', line 27

def pdm_branch_version_number
  @pdm_branch_version_number
end

#pdm_initial_version_numberObject

If you begin automating PDM releases on a component that already exists on PDM, then you must set this attribute to let Origen know what the latest part number is on PDM.

For example if the latest component is called C90TFS_NVM_tester_010 at the time of setting up the component in Origen then set this attribute to 10.

If the object does not exist on PDM yet then you can leave this blank and Origen will create and begin tracking the component from the initial version.



47
48
49
# File 'lib/origen/pdm.rb', line 47

def pdm_initial_version_number
  @pdm_initial_version_number
end

#pdm_meta_tagsObject

Returns the value of attribute pdm_meta_tags.



49
50
51
# File 'lib/origen/pdm.rb', line 49

def pdm_meta_tags
  @pdm_meta_tags
end

#pdm_supercedes_version_numberObject

Set this to specify which version the new release should supercede. If un-specified the new release will automatically supercede the last version on the trunk.



32
33
34
# File 'lib/origen/pdm.rb', line 32

def pdm_supercedes_version_number
  @pdm_supercedes_version_number
end

#pdm_use_test_systemObject

Set true to use the PDM test system rather than the live system. The test system can be found at: designpdmtest.freescale.net/Agile



13
14
15
# File 'lib/origen/pdm.rb', line 13

def pdm_use_test_system
  @pdm_use_test_system
end

#pdm_version_numberObject

This should be set to the PDM version number that the current object represents. For example if the object represents C90TFS_NVM_tester_010, then set this attribute to 10.

This attribute is required to be set when including a component in a BOM, otherwise it is not required to be set when releasing a new version.

It can also be set to :latest to pick up the latest version number for the component.



23
24
25
# File 'lib/origen/pdm.rb', line 23

def pdm_version_number
  @pdm_version_number
end

Class Method Details

.pdm_pi(_options = {}) ⇒ Object



55
56
57
# File 'lib/origen/pdm.rb', line 55

def self.pdm_pi(_options = {})
  @pdm_pi ||= PI.new(use_test_system: true)
end

.update_ticket(tkt) ⇒ Object



51
52
53
# File 'lib/origen/pdm.rb', line 51

def self.update_ticket(tkt)
  pdm_pi.update_ticket(tkt)
end

Instance Method Details

#_pdm_version_numberObject



134
135
136
137
138
139
140
141
# File 'lib/origen/pdm.rb', line 134

def _pdm_version_number
  if pdm_version_number && pdm_version_number != :latest
    pdm_version_number
  else
    pdm_latest_version_number ||
      fail("You must set the pdm_version_number attribute of #{self.class}")
  end
end

#freezeObject

This method is called before permanently saving a released component in the store, override it to set instance variables for anything you wish to save.

Normally it is best to assign the result of any pdm attributes that come from methods as instance variables so that the current state of the component can be reconstructed later.



206
207
# File 'lib/origen/pdm.rb', line 206

def freeze
end

#pdm_base_urlObject



59
60
61
62
63
64
65
# File 'lib/origen/pdm.rb', line 59

def pdm_base_url
  if pdm_use_test_system
    host = 'http://designpdmtest.freescale.net'
  else
    host = 'http://designpdm.freescale.net'
  end
end

#pdm_branch_part_numberObject



100
101
102
103
104
# File 'lib/origen/pdm.rb', line 100

def pdm_branch_part_number
  if pdm_branch_version_number
    pdm_part_name + '_%03d' % pdm_branch_version_number
  end
end

#pdm_component_bindingObject



173
174
175
# File 'lib/origen/pdm.rb', line 173

def pdm_component_binding
  binding
end

#pdm_item_group_urlObject

Returns the url for component’s item group on PDM, i.e. if the model represents pdm component C90TFS_NVM_tester_010 then the link to C90TFS_NVM_tester will be returned



77
78
79
# File 'lib/origen/pdm.rb', line 77

def pdm_item_group_url
  "#{pdm_base_url}/Agile/object/Item Group/#{pdm_part_name}"
end

#pdm_latest_part_numberObject

Returns the latest part number regardless of whether it is on a branch or not



107
108
109
110
111
# File 'lib/origen/pdm.rb', line 107

def pdm_latest_part_number
  if pdm_latest_version_number
    pdm_part_name + '_%03d' % pdm_latest_version_number
  end
end

#pdm_latest_trunk_part_numberObject

Returns the latest part number that is not on a branch



114
115
116
117
118
# File 'lib/origen/pdm.rb', line 114

def pdm_latest_trunk_part_number
  if pdm_latest_trunk_version_number
    pdm_part_name + '_%03d' % pdm_latest_trunk_version_number
  end
end

#pdm_latest_trunk_version_numberObject



156
157
158
159
160
161
162
163
164
165
166
167
# File 'lib/origen/pdm.rb', line 156

def pdm_latest_trunk_version_number
  if pdm_tracker.latest_trunk_version_number
    if pdm_initial_version_number &&
       pdm_initial_version_number > pdm_tracker.latest_trunk_version_number
      pdm_initial_version_number
    else
      pdm_tracker.latest_trunk_version_number
    end
  else
    pdm_initial_version_number
  end
end

#pdm_latest_version_numberObject



143
144
145
146
147
148
149
150
151
152
153
154
# File 'lib/origen/pdm.rb', line 143

def pdm_latest_version_number
  if pdm_tracker.latest_version_number
    if pdm_initial_version_number &&
       pdm_initial_version_number > pdm_tracker.latest_version_number
      pdm_initial_version_number
    else
      pdm_tracker.latest_version_number
    end
  else
    pdm_initial_version_number
  end
end

#pdm_part_numberObject

When talking to PDM we need to use the ‘Part Number’ which is comprised of the part name plus a numeric revision.

For example ‘C90TFS_NVM_tester’ is the part name, ‘C90TFS_NVM_tester_058’ is a possible part number.



96
97
98
# File 'lib/origen/pdm.rb', line 96

def pdm_part_number
  pdm_part_name + '_%03d' % _pdm_version_number
end

#pdm_piObject

The PI API, returns an instance of Origen::PDM::PI



82
83
84
# File 'lib/origen/pdm.rb', line 82

def pdm_pi
  @pdm_pi ||= PI.new(use_test_system: pdm_use_test_system)
end

#pdm_prepare_for_storeObject



209
210
211
212
213
214
215
216
# File 'lib/origen/pdm.rb', line 209

def pdm_prepare_for_store
  freeze
  # Clear these so as not to waste effort Marshalling them
  @pdm_pi = nil
  @pdm_web_service = nil
  @pdm_tracker = nil
  @pi_attributes = nil
end

#pdm_release!(options = {}) ⇒ Object

Release a new component version to PDM



191
192
193
194
195
196
197
198
# File 'lib/origen/pdm.rb', line 191

def pdm_release!(options = {})
  options = {
    release_bom: false
  }.merge(options)
  ret = pdm_pi.release!(self)
  pdm_tracker.release!
  ret
end

#pdm_remote_bomObject

Pulls the BOM from PDM into an array of hashes with the following keys:

  • :pdm_part_name (e.g. C90TFS_NVM_tester)

  • :pdm_version_number (e.g. 058 (actually returned as 58))

  • :pdm_version (e.g. Rel20121002)



186
187
188
# File 'lib/origen/pdm.rb', line 186

def pdm_remote_bom
  pdm_pi.catbom(self)
end

#pdm_supercedes_part_numberObject



120
121
122
123
124
# File 'lib/origen/pdm.rb', line 120

def pdm_supercedes_part_number
  if pdm_supercedes_version_number
    pdm_part_name + '_%03d' % pdm_supercedes_version_number
  end
end

#pdm_trackerObject



177
178
179
# File 'lib/origen/pdm.rb', line 177

def pdm_tracker
  @pdm_tracker ||= Tracker.new(component: self)
end

#pdm_urlObject

Returns the url for specific component version on PDM, i.e. if the model represents pdm component C90TFS_NVM_tester_010 then the link to that component version will be returned



70
71
72
# File 'lib/origen/pdm.rb', line 70

def pdm_url
  "#{pdm_base_url}/Agile/object/#{pdm_part_type}/#{pdm_part_number}"
end

#pdm_web_serviceObject

The PDM Web Service API, returns an instance of Origen::PDM::WebService



87
88
89
# File 'lib/origen/pdm.rb', line 87

def pdm_web_service
  @pdm_web_service ||= WebService.new
end