╭ changed ──────╮ │src/command.zig│ ╰───────────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭─────────────────────────────────╮ │3 │ │4 pub const CommandKind = enum {│ │5 serve, │ │6 + delete_user, │ │7 }; │ │8 │ │9 const Help = struct { │ ╰─────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │24 \\use "none" for --ssh-listen to disable ssh. git clones over HTTP share the web UI's listener. │ │25 \\--web-url and --ssh-url set the public urls shown to users, like https://example.com and ssh://example.com.│ │26 \\--max-repo-size caps each repo's on-disk size, like 1G, rejecting pushes past it. no limit by default. │ │27 + , │ │28 + }, │ │29 + .delete_user => .{ │ │30 + .name = "delete-user", │ │31 + .descrip = │ │32 + \\delete a user and everything they own, without their password. │ │33 + , │ │34 + .example = │ │35 + \\haxy delete-user alice --data-dir /srv/git │ │36 + \\safe to run while the server is up. │ │37 , │ │38 }, │ │39 }; │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────╮ │193 /// if any additional allocation needs to be done, the arena inside the cmd args will be used.│ │194 pub const Command = union(CommandKind) { │ │195 serve: srv.Options, │ │196 + delete_user: srv.DeleteUserOptions, │ │197 │ │198 pub fn initMaybe(cmd_args: *CommandArgs) !?Command { │ │199 const command_kind = cmd_args.command_kind orelse return null; │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │201 .serve => { │ │202 return .{ .serve = try serveOptions(cmd_args) orelse return null }; │ │203 }, │ │204 + .delete_user => { │ │205 + if (cmd_args.positional_args.len != 1) return null; │ │206 + var options: srv.DeleteUserOptions = .{ .name = cmd_args.positional_args[0] }; │ │207 + if (cmd_args.get("--data-dir")) |value_maybe| options.data_dir = value_maybe orelse return error.DataDirNeedsValue;│ │208 + return .{ .delete_user = options }; │ │209 + }, │ │210 } │ │211 } │ │212 }; │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯