@@ -113,99 +113,114 @@ pub fn main() !void {
113
113
try dep_name .appendSlice (package );
114
114
115
115
for (subdeps .items ) | p | {
116
- if (dep .hash ) | hash | {
117
- var package_dir = global_cache .openDir (hash , .{}) catch | e | switch (e ) {
118
- error .FileNotFound = > fatal ("{s} is not in the global cache (hash: {s})" , .{
119
- dep_name .items , hash ,
120
- }),
121
- else = > | err | return err ,
122
- };
123
- defer package_dir .close ();
124
-
125
- const sub_manifest , _ = try std .zig .loadManifest (arena , arena , .{
126
- .root_name = null ,
127
- .dir = package_dir ,
128
- .color = color ,
129
- });
116
+ var package_dir = try getDepDir (
117
+ dep ,
118
+ dep_name .items ,
119
+ global_cache ,
120
+ build_root ,
121
+ );
122
+ defer package_dir .close ();
130
123
131
- dep = sub_manifest .dependencies .get (p ) orelse {
132
- fatal ("{s} has no dependency named '{s}' in its manifest" , .{
133
- dep_name .items , p ,
134
- });
135
- };
136
- try dep_name .append ('.' );
137
- try dep_name .appendSlice (p );
138
- } else switch (dep .location ) {
139
- .url = > fatal ("the hash for {s} is missing from the manifest." , .{
140
- dep_name .items ,
141
- }),
142
- .path = > | path | fatal ("{s} is a local dependency located at {s}" , .{
143
- dep_name .items , path ,
144
- }),
145
- }
124
+ const sub_manifest , _ = try std .zig .loadManifest (arena , arena , .{
125
+ .root_name = null ,
126
+ .dir = package_dir ,
127
+ .color = color ,
128
+ });
129
+
130
+ dep = sub_manifest .dependencies .get (p ) orelse {
131
+ fatal ("{s} has no dependency named '{s}' in its manifest" , .{
132
+ dep_name .items , p ,
133
+ });
134
+ };
135
+ try dep_name .append ('.' );
136
+ try dep_name .appendSlice (p );
146
137
}
147
138
148
139
break :dep dep ;
149
140
};
150
141
151
142
const stdout = std .io .getStdOut ().writer ();
152
143
153
- if (dep .hash ) | hash | {
154
- if (list ) {
155
- var package_dir = global_cache .openDir (hash , .{}) catch | e | switch (e ) {
156
- error .FileNotFound = > fatal ("{s} is not in the global cache (hash: {s})" , .{
157
- dep_name .items , hash ,
158
- }),
159
- else = > | err | return err ,
160
- };
161
- defer package_dir .close ();
144
+ if (list ) {
145
+ var package_dir = try getDepDir (
146
+ dep ,
147
+ dep_name .items ,
148
+ global_cache ,
149
+ build_root ,
150
+ );
151
+ defer package_dir .close ();
152
+
153
+ var sub_manifest , var sub_ast = std .zig .loadManifest (gpa , arena , .{
154
+ .root_name = null ,
155
+ .dir = package_dir ,
156
+ .color = color ,
157
+ }) catch | err | switch (err ) {
158
+ error .FileNotFound = > fatal ("no manifest found in build root" , .{}),
159
+ else = > | e | return e ,
160
+ };
161
+ defer {
162
+ sub_manifest .deinit (gpa );
163
+ sub_ast .deinit (gpa );
164
+ }
162
165
163
- var sub_manifest , var sub_ast = std .zig .loadManifest (gpa , arena , .{
164
- .root_name = null ,
165
- .dir = package_dir ,
166
- .color = color ,
167
- }) catch | err | switch (err ) {
168
- error .FileNotFound = > fatal ("no manifest found in build root" , .{}),
169
- else = > | e | return e ,
170
- };
171
- defer {
172
- sub_manifest .deinit (gpa );
173
- sub_ast .deinit (gpa );
166
+ const prefix = prefix : {
167
+ var prefix_len : usize = package .len + 1 ;
168
+ for (subdeps .items ) | subdep | {
169
+ prefix_len += subdep .len + 1 ;
174
170
}
175
171
176
- const prefix = prefix : {
177
- var prefix_len : usize = package .len + 1 ;
178
- for (subdeps .items ) | subdep | {
179
- prefix_len += subdep .len + 1 ;
180
- }
181
-
182
- const buffer = try arena .alloc (u8 , prefix_len );
172
+ const buffer = try arena .alloc (u8 , prefix_len );
183
173
184
- @memcpy (buffer [0.. package .len ], package );
185
- buffer [package .len ] = '.' ;
174
+ @memcpy (buffer [0.. package .len ], package );
175
+ buffer [package .len ] = '.' ;
186
176
187
- var i : usize = package .len + 1 ;
188
- for (subdeps .items ) | subdep | {
189
- @memcpy (buffer [i .. ][0.. subdep .len ], subdep );
190
- buffer [i + subdep .len ] = '.' ;
191
- i += subdep .len + 1 ;
192
- }
193
- break :prefix buffer ;
194
- };
177
+ var i : usize = package .len + 1 ;
178
+ for (subdeps .items ) | subdep | {
179
+ @memcpy (buffer [i .. ][0.. subdep .len ], subdep );
180
+ buffer [i + subdep .len ] = '.' ;
181
+ i += subdep .len + 1 ;
182
+ }
183
+ break :prefix buffer ;
184
+ };
195
185
196
- try listDepHashes (prefix , sub_manifest );
197
- } else {
186
+ try listDepHashes (prefix , sub_manifest );
187
+ } else {
188
+ if (dep .hash ) | hash | {
198
189
try stdout .print ("{s}\n " , .{hash });
190
+ } else switch (dep .location ) {
191
+ .url = > fatal ("the hash for {s} is missing from the manifest" , .{dep_name .items }),
192
+ .path = > fatal ("{s} is a local dependency" , .{dep_name .items }),
199
193
}
200
- } else switch (dep .location ) {
201
- .url = > fatal ("the hash for {s} is missing from the manifest." , .{package }),
202
- .path = > | path | fatal ("{s} is a local dependency located at {s}" , .{ package , path }),
203
194
}
204
195
} else {
205
196
try listDepHashes ("" , manifest );
206
197
}
207
198
}
208
199
200
+ fn getDepDir (
201
+ dep : std.zig.Manifest.Dependency ,
202
+ dep_name : []const u8 ,
203
+ global_cache_package_directory : std.fs.Dir ,
204
+ build_root : std.zig.BuildRoot ,
205
+ ) ! std.fs.Dir {
206
+ if (dep .hash ) | hash | {
207
+ return global_cache_package_directory .openDir (hash , .{}) catch | e | switch (e ) {
208
+ error .FileNotFound = > fatal ("{s} is not in the global cache (hash: {s})" , .{
209
+ dep_name , hash ,
210
+ }),
211
+ else = > | err | return err ,
212
+ };
213
+ } else switch (dep .location ) {
214
+ .url = > fatal ("the hash for {s} is missing from the manifest.\n " , .{
215
+ dep_name ,
216
+ }),
217
+ .path = > | path | return build_root .directory .handle .openDir (path , .{}) catch | e | switch (e ) {
218
+ error .FileNotFound = > fatal ("local dependency {s} does not exist" , .{dep_name }),
219
+ else = > | err | return err ,
220
+ },
221
+ }
222
+ }
223
+
209
224
fn listDepHashes (parent_prefix : []const u8 , manifest : std.zig.Manifest ) ! void {
210
225
assert (parent_prefix .len != 1 );
211
226
if (manifest .dependencies .count () == 0 ) {
0 commit comments