| 
									
										
										
										
											2012-12-11 23:13:46 -08:00
										 |  |  | 2.1.0 behaviour: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | __git foo | 
					
						
							|  |  |  |     __package git --state present | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | __git bar | 
					
						
							|  |  |  |     __package git --state present | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-16 13:13:45 +01:00
										 |  |  | require="__git/foo" __git bar: | 
					
						
							| 
									
										
										
										
											2012-12-11 23:13:46 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     __git bar | 
					
						
							|  |  |  |         __git foo | 
					
						
							|  |  |  |             __package git --state present | 
					
						
							|  |  |  |         __package git --state present | 
					
						
							| 
									
										
										
										
											2013-01-16 13:13:45 +01:00
										 |  |  |             __git foo                        <---| | 
					
						
							|  |  |  |                 __package git --state present ---| | 
					
						
							| 
									
										
										
										
											2012-12-11 23:13:46 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     -> detects circular dependency | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-16 13:13:45 +01:00
										 |  |  | -------------------------------------------------------------------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require="__apt_repository/somewhere-where-you-can-find-package-git __git/foo" __git bar | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     __git bar | 
					
						
							|  |  |  |         __apt_repository somewhere-where-you-can-find-package-git | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         __git foo | 
					
						
							|  |  |  |             __package git --state present | 
					
						
							|  |  |  |                 __package_apt git depends nachher auf __apt_repository | 
					
						
							|  |  |  |         __package git --state present | 
					
						
							|  |  |  |             __git foo                        <---| | 
					
						
							|  |  |  |                 __package git --state present ---| | 
					
						
							|  |  |  |             __apt_repository somewhere-where-you-can-find-package-git | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | possible solutions: | 
					
						
							|  |  |  |     - __package git does not depend on __git foo (clear dependency) | 
					
						
							|  |  |  |         - because it DOES NOT depend on it! | 
					
						
							|  |  |  |             - but we don't know whether this is always true :-/ | 
					
						
							|  |  |  |     - multiple instances of __package git exist, with | 
					
						
							|  |  |  |         - different required BY | 
					
						
							|  |  |  |         - different requirements | 
					
						
							|  |  |  |     - define non inheritent dependencies (?) | 
					
						
							|  |  |  |         - because __git bar really depends only on __git foo | 
					
						
							|  |  |  |         - proposal: introduce require_non_recursive and require_recursive (previously: require) | 
					
						
							| 
									
										
										
										
											2013-01-19 18:24:17 +01:00
										 |  |  |     - recording the source of the dependency and use it to assist resolving (?) | 
					
						
							|  |  |  |         __package git:  | 
					
						
							|  |  |  |             inherited require: __git foo von __git bar | 
					
						
							|  |  |  |         __git foo: | 
					
						
							|  |  |  |             inherited autorequire: __package git durch Nutzung | 
					
						
							|  |  |  |     - break out circular references (?) | 
					
						
							|  |  |  |         - if either of both parties is only locked by the other, allow execution of this one? | 
					
						
							| 
									
										
										
										
											2013-01-16 13:13:45 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | -------------------------------------------------------------------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | __package foo | 
					
						
							|  |  |  |     __package_apt foo | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | __package bar | 
					
						
							|  |  |  |     __package_apt bar | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require="__package/foo" __package bar | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     __package bar | 
					
						
							|  |  |  |         __package foo | 
					
						
							|  |  |  |             __package_apt foo | 
					
						
							|  |  |  |         __package_apt bar | 
					
						
							|  |  |  |             __package foo | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-11 23:13:46 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | -------------------------------------------------------------------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-16 13:13:45 +01:00
										 |  |  | __type1 var1 | 
					
						
							|  |  |  |     __type2 FIX | 
					
						
							| 
									
										
										
										
											2012-12-11 23:13:46 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-16 13:13:45 +01:00
										 |  |  | __type1 var2 | 
					
						
							|  |  |  |     __type2 FIX | 
					
						
							| 
									
										
										
										
											2012-12-11 23:13:46 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-16 13:13:45 +01:00
										 |  |  | -------------------------------------------------------------------------------- | 
					
						
							|  |  |  | facts: | 
					
						
							|  |  |  |     - use is different from require="", as use makes USED depend on parent deps | 
					
						
							|  |  |  |     - use = called/defined in the manifest of a type | 
					
						
							|  |  |  |     - it is currently not recorded, where an object gained its requirements and autorequirements | 
					
						
							|  |  |  | -------------------------------------------------------------------------------- | 
					
						
							|  |  |  | requirements: | 
					
						
							|  |  |  |     - a type should be a black box:  | 
					
						
							|  |  |  |         I can require an object and it is ensured, | 
					
						
							|  |  |  |         everything it needs is executed before me. | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  | -------------------------------------------------------------------------------- | 
					
						
							|  |  |  | possible implementations | 
					
						
							|  |  |  | - requiring it should include everything it USES | 
					
						
							|  |  |  | -------------------------------------------------------------------------------- | 
					
						
							|  |  |  | solutions: | 
					
						
							|  |  |  |     __type1 DEPENDS but does not use __type2 FIX | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-11 23:13:46 -08:00
										 |  |  | -------------------------------------------------------------------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Change proposal: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Each object only depends on the objects it directly requires, tree build to | 
					
						
							|  |  |  | ensure correct running behaviour: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | __git bar | 
					
						
							|  |  |  |     __git foo | 
					
						
							|  |  |  |     __package git --state present | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | __git foo | 
					
						
							|  |  |  |     __package git --state present | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Order: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 1) | 
					
						
							|  |  |  |     __package/git (leaf node!) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 2) | 
					
						
							|  |  |  |     __git/foo (new leaf node!) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 3) | 
					
						
							|  |  |  |     __git/bar (new leaf node!) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For __package: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-16 13:13:45 +01:00
										 |  |  | __sometype bar | 
					
						
							|  |  |  |     __package foo | 
					
						
							| 
									
										
										
										
											2012-12-11 23:13:46 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-16 13:13:45 +01:00
										 |  |  | __package foo | 
					
						
							|  |  |  |     __package_apt foo | 
					
						
							| 
									
										
										
										
											2012-12-11 23:13:46 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-16 13:13:45 +01:00
										 |  |  | 1) __package_apt/foo (leaf node) | 
					
						
							| 
									
										
										
										
											2012-12-11 23:13:46 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-16 13:13:45 +01:00
										 |  |  | 2) __package/foo (new leaf node) | 
					
						
							| 
									
										
										
										
											2012-12-11 23:13:46 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-16 13:13:45 +01:00
										 |  |  | 3) __sometype/bar (new leaf node) |