| author | |
| committer | |
| log | 4ca5a1da9ec8b2fdb1dcdb04d2b3ac3dd50dfe15 |
| tree | abff0a92208bba81e90922bc98965a8771d5d27b |
| parent | bcdb68005ebf31399be9acf6b6897180d4efcaaf |
3 files changed, 91 insertions(+), 0 deletions(-)
src/cmd/aq.zig+2| ... | @@ -11,6 +11,8 @@ const u = @import("./../util/index.zig"); | ... | @@ -11,6 +11,8 @@ const u = @import("./../util/index.zig"); |
| 11 | 11 | ||
| 12 | pub const commands = struct { | 12 | pub const commands = struct { |
| 13 | pub const add = @import("./aquila/add.zig"); | 13 | pub const add = @import("./aquila/add.zig"); |
| 14 | pub const update = @import("./aquila/update.zig"); | ||
| 15 | pub const modfile = @import("./aquila/modfile.zig"); | ||
| 14 | }; | 16 | }; |
| 15 | 17 | ||
| 16 | pub const server_root = "https://aquila.red"; | 18 | pub const server_root = "https://aquila.red"; |
src/cmd/aquila/modfile.zig created+23| ... | @@ -0,0 +1,23 @@ | ||
| 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 | const pkg_id_v = args[0]; | ||
| 12 | |||
| 13 | const url = try std.mem.join(gpa, "/", &.{ aq.server_root, pkg_id_v }); | ||
| 14 | const val = try aq.server_fetch(url); | ||
| 15 | |||
| 16 | const v = val.get("vers").?; | ||
| 17 | const maj = v.get("real_major").?.Number; | ||
| 18 | const min = v.get("real_minor").?.Number; | ||
| 19 | const hash = v.get("tar_hash").?.String; | ||
| 20 | |||
| 21 | std.debug.print(" - src: http {s}/{s}.tar.gz _ {d} {d}\n", .{ aq.server_root, pkg_id_v, maj, min }); | ||
| 22 | std.debug.print(" version: {s}\n", .{hash}); | ||
| 23 | } | ||
src/cmd/aquila/update.zig created+66| ... | @@ -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 | } | ||