From 09c5634a8c29bc40965a91f8db5bcc1a40c8455a Mon Sep 17 00:00:00 2001 From: Meghan Date: Sat, 14 Nov 2020 02:13:34 -0800 Subject: [PATCH] zig: add cmd_add --- src/cmd_add.zig | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ src/main.zig | 1 + 2 files changed, 50 insertions(+) create mode 100644 src/cmd_add.zig diff --git a/src/cmd_add.zig b/src/cmd_add.zig new file mode 100644 index 0000000000000000000000000000000000000000..f0958cbb0ed1b4a18199f265e325089c5b3f3683 --- /dev/null +++ b/src/cmd_add.zig @@ -0,0 +1,49 @@ +const std = @import("std"); +const gpa = std.heap.c_allocator; + +const u = @import("./util/index.zig"); + +// +// + +pub fn execute(args: [][]u8) !void { + // + u.assert(args.len >= 1, "missing package parameter", .{}); + u.assert(args.len >= 2, "missing package parameter", .{}); + + const dept = args[0]; + const path = args[1]; + + const dep_type = std.meta.stringToEnum(u.DepType, dept); + u.assert(dep_type != null, "provided parameter \"{}\" is not a valid dependency type", .{dept}); + + const m = try u.ModFile.init(gpa, "./zig.mod"); + for (m.deps) |d| { + u.assert(!(d.type == dep_type.? and std.mem.eql(u8, d.path, path)), "dependency already added, skipping!", .{}); + } + + const ndl = &std.ArrayList(u.Dep).init(gpa); + for (m.deps) |d| { + try ndl.append(d); + } + try ndl.append(u.Dep{ + .type = dep_type.?, + .path = path, + }); + + // + const f = try std.fs.cwd().createFile("./zig.mod", .{}); + defer f.close(); + + const w = f.writer(); + try w.print("name: {}\n", .{m.name}); + try w.print("main: {}\n", .{m.main}); + try w.print("dependencies:\n", .{}); + + for (ndl.items) |d| { + try w.print("- type: {}\n", .{@tagName(d.type)}); + try w.print(" path: {}\n", .{d.path}); + } + + u.print("Successfully added {}", .{path}); +} diff --git a/src/main.zig b/src/main.zig index ce257cc8a8db128bf7e085af1f89ad1deeda0d0e..e4e90d904fb2edf92d409a6fcd21165cf1d0cfac 100644 --- a/src/main.zig +++ b/src/main.zig @@ -8,6 +8,7 @@ const u = @import("./util/index.zig"); const commands = struct { const init = @import("./cmd_init.zig"); + const add = @import("./cmd_add.zig"); }; pub fn main() !void { -- 2.54.0