╭ changed ──────╮ │src/command.zig│ ╰───────────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │19 \\a long-running server forwarding receive-pack and upload-pack. │ │20 , │ │21 .example = │ │22 - \\haxy serve --http-listen 127.0.0.1:8080 --ssh-listen 127.0.0.1:8022 --wui-listen 127.0.0.1:8000 --data-dir /srv/git│ │23 - \\use "none" for --http-listen or --ssh-listen to disable that service. │ │22 + \\haxy serve --web-listen 127.0.0.1:8080 --ssh-listen 127.0.0.1:8022 --data-dir /srv/git │ │23 + \\use "none" for --ssh-listen to disable ssh. git clones over HTTP share the web UI's listener. │ │24 + \\--web-url and --ssh-url set the public urls shown to users, like https://example.com and ssh://example.com. │ │25 , │ │26 }, │ │27 }; │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────╮ │84 // flags that can have a value associated with them │ │85 // must be included here │ │86 const value_flags = std.StaticStringMap(void).initComptime(.{│ │86 - .{"--http-listen"}, │ │87 + .{"--web-listen"}, │ │88 .{"--ssh-listen"}, │ │88 - .{"--wui-listen"}, │ │89 + .{"--web-url"}, │ │90 + .{"--ssh-url"}, │ │91 .{"--data-dir"}, │ │92 }); │ │93 │ ╰─────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │203 if (cmd_args.positional_args.len != 0) return null; │ │204 │ │205 var options: srv.Options = .{}; │ │204 - if (cmd_args.get("--http-listen")) |value_maybe| { │ │205 - const value = value_maybe orelse return error.HttpListenNeedsValue; │ │206 - options.http_listen = if (std.mem.eql(u8, value, "none")) null else value; │ │207 - } │ │206 + if (cmd_args.get("--web-listen")) |value_maybe| options.web_listen = value_maybe orelse return error.WebListenNeedsValue;│ │207 if (cmd_args.get("--ssh-listen")) |value_maybe| { │ │208 const value = value_maybe orelse return error.SshListenNeedsValue; │ │209 options.ssh_listen = if (std.mem.eql(u8, value, "none")) null else value; │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │210 } │ │212 - if (cmd_args.get("--wui-listen")) |value_maybe| options.wui_listen = value_maybe orelse return error.WuiListenNeedsValue; │ │211 + // urls are joined with "/" + a path │ │212 + if (cmd_args.get("--web-url")) |value_maybe| options.web_url = std.mem.trimEnd(u8, value_maybe orelse return error.WebUrlNeedsValue, "/");│ │213 + if (cmd_args.get("--ssh-url")) |value_maybe| options.ssh_url = std.mem.trimEnd(u8, value_maybe orelse return error.SshUrlNeedsValue, "/");│ │214 if (cmd_args.get("--data-dir")) |value_maybe| options.data_dir = value_maybe orelse return error.DataDirNeedsValue; │ │215 return options; │ │216 } │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯