@@ -77,30 +77,33 @@ def get_pack_kind(pack: CodeQLPack) -> CodeQLPackKind:
77
77
return kind
78
78
79
79
def resolve (pack : CodeQLPack ) -> ResolvedCodeQLPack :
80
- logger .debug (f"Resolving pack { pack .config .name } @{ pack .config .version } " )
81
- if pack in resolved_packs :
82
- logger .debug (f"Resolved pack { pack .config .name } @{ pack .config .version } , already resolved." )
83
- return resolved_packs [pack ]
84
- else :
85
- resolved_deps : List [ResolvedCodeQLPack ] = []
86
- for dep_name , dep_version in pack .config .dependencies .items ():
87
- logger .debug (f"Resolving dependency { dep_name } :{ dep_version } ." )
88
- resolved_dep = None
89
- for candidate_pack in candidates [dep_name ]:
90
- logger .debug (f"Considering candidate pack { candidate_pack .config .name } @{ candidate_pack .config .version } ." )
91
- if dep_version .match (candidate_pack .config .version ):
92
- logger .debug (f"Found candidate pack { candidate_pack .config .name } @{ candidate_pack .config .version } ." )
93
- resolved_dep = resolve (candidate_pack )
94
-
95
- if not resolved_dep :
96
- raise PackResolverException (f"Could not resolve dependency { dep_name } for pack { pack .config .name } !" )
97
- resolved_deps .append (resolved_dep )
98
-
99
-
100
- resolved_pack = ResolvedCodeQLPack (path = pack .path , config = pack .config , kind = get_pack_kind (pack ), dependencies = resolved_deps )
101
- resolved_packs [pack ] = resolved_pack
102
- return resolved_pack
103
-
80
+ def inner (pack_to_be_resolved : CodeQLPack ) -> ResolvedCodeQLPack :
81
+ logger .debug (f"Resolving pack { pack_to_be_resolved .config .name } @{ pack_to_be_resolved .config .version } " )
82
+ if pack_to_be_resolved in resolved_packs :
83
+ logger .debug (f"Resolved pack { pack_to_be_resolved .config .name } @{ pack_to_be_resolved .config .version } , already resolved." )
84
+ return resolved_packs [pack_to_be_resolved ]
85
+ else :
86
+ resolved_deps : List [ResolvedCodeQLPack ] = []
87
+ for dep_name , dep_version in pack_to_be_resolved .config .dependencies .items ():
88
+ logger .debug (f"Resolving dependency { dep_name } :{ dep_version } ." )
89
+ resolved_dep = None
90
+ for candidate_pack in candidates [dep_name ]:
91
+ logger .debug (f"Considering candidate pack { candidate_pack .config .name } @{ candidate_pack .config .version } ." )
92
+ if candidate_pack == pack :
93
+ raise PackResolverException (f"Pack { pack .config .name } @{ str (pack .config .version )} (transitively) depends on itself via { pack_to_be_resolved .config .name } @{ str (pack_to_be_resolved .config .version )} !" )
94
+ if dep_version .match (candidate_pack .config .version ):
95
+ logger .debug (f"Found candidate pack { candidate_pack .config .name } @{ candidate_pack .config .version } ." )
96
+ resolved_dep = inner (candidate_pack )
97
+
98
+ if not resolved_dep :
99
+ raise PackResolverException (f"Could not resolve dependency { dep_name } for pack { pack_to_be_resolved .config .name } !" )
100
+ resolved_deps .append (resolved_dep )
101
+
102
+
103
+ resolved_pack = ResolvedCodeQLPack (path = pack_to_be_resolved .path , config = pack_to_be_resolved .config , kind = get_pack_kind (pack_to_be_resolved ), dependencies = resolved_deps )
104
+ resolved_packs [pack_to_be_resolved ] = resolved_pack
105
+ return resolved_pack
106
+ return inner (pack )
104
107
return resolve
105
108
106
109
return builder ()
0 commit comments