| ... | ... | @@ -0,0 +1,66 @@ |
| 1 | const std = @import("std"); |
| 2 | const gpa = std.heap.c_allocator; |
| 3 | |
| 4 | const u = @import("./../../util/index.zig"); |
| 5 | const aq = @import("./../aq.zig"); |
| 6 | |
| 7 | // |
| 8 | // |
| 9 | |
| 10 | pub fn execute(args: [][]u8) !void { |
| 11 | // |
| 12 | const mod = try u.ModFile.init(gpa, "zig.mod"); |
| 13 | |
| 14 | for (mod.deps) |d| { |
| 15 | try check_dep(d); |
| 16 | } |
| 17 | for (mod.devdeps) |d| { |
| 18 | try check_dep(d); |
| 19 | } |
| 20 | } |
| 21 | |
| 22 | fn check_dep(dep: u.Dep) !void { |
| 23 | if (dep.type != .http) { |
| 24 | return; |
| 25 | } |
| 26 | if (!std.mem.startsWith(u8, dep.path, aq.server_root)) { |
| 27 | return; |
| 28 | } |
| 29 | var pkg_id_v = std.mem.split(url_to_pkgid(dep.path), "/"); |
| 30 | const host = pkg_id_v.next().?; |
| 31 | const user = pkg_id_v.next().?; |
| 32 | const pkg = pkg_id_v.next().?; |
| 33 | const vers = try vers_get_pieces(pkg_id_v.next().?); |
| 34 | |
| 35 | const url = try std.mem.join(gpa, "/", &.{ aq.server_root, host, user, pkg }); |
| 36 | const val = try aq.server_fetch(url); |
| 37 | |
| 38 | const versions = val.get("versions").?.Array; |
| 39 | const latest = versions[versions.len - 1]; |
| 40 | |
| 41 | const rmaj = latest.get("real_major").?.Number; |
| 42 | const rmin = latest.get("real_minor").?.Number; |
| 43 | |
| 44 | if (rmaj == vers[0] and rmin == vers[1]) { |
| 45 | return; |
| 46 | } |
| 47 | |
| 48 | std.log.info("found new version: {s}/{s}/{s}/v{d}.{d}", .{ host, user, pkg, rmaj, rmin }); |
| 49 | } |
| 50 | |
| 51 | fn url_to_pkgid(url: []const u8) []const u8 { |
| 52 | var res = url; |
| 53 | res = std.mem.trimLeft(u8, res, aq.server_root); |
| 54 | res = std.mem.trimRight(u8, res, ".tar.gz"); |
| 55 | return res; |
| 56 | } |
| 57 | |
| 58 | fn vers_get_pieces(v: []const u8) ![2]f64 { |
| 59 | var it = std.mem.split(v[1..], "."); |
| 60 | const maj = it.next().?; |
| 61 | const min = it.next().?; |
| 62 | return [_]f64{ |
| 63 | try std.fmt.parseFloat(f64, maj), |
| 64 | try std.fmt.parseFloat(f64, min), |
| 65 | }; |
| 66 | } |