╭ changed ────╮ │src/event.zig│ ╰─────────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1947 │ │1948 try writeRepoEvent(io, allocator, users_dir, &user_repo, owner_id, owner, &id_bytes, name, description, read_access); │ │1949 return .{ .owner_id = owner_id.*, .repo_id = id_bytes }; │ │1950 +} │ │1951 + │ │1952 +// change the name, description, and read access of the repo named │ │1953 +// `old_name` in its owner's user repo │ │1954 +pub fn updateRepo( │ │1955 + io: std.Io, │ │1956 + allocator: std.mem.Allocator, │ │1957 + users_dir: []const u8, │ │1958 + owner_id: *const [event_id_size]u8, │ │1959 + author: CommitAuthor, │ │1960 + old_name: []const u8, │ │1961 + name: []const u8, │ │1962 + description: []const u8, │ │1963 + read_access: Repo.Access, │ │1964 +) !void { │ │1965 + try Repo.validateName(name); │ │1966 + var user_repo = (try openUserRepo(io, allocator, users_dir, owner_id)) orelse return error.NotFound; │ │1967 + defer user_repo.deinit(io, allocator); │ │1968 + var arena = std.heap.ArenaAllocator.init(allocator); │ │1969 + defer arena.deinit(); │ │1970 + const moment = (try userMoment(&user_repo)) orelse return error.NotFound; │ │1971 + const found = (try Repo.readByName(UserDB, user_repo_opts.hash, moment, &arena, old_name)) orelse return error.NotFound; │ │1972 + if (try Repo.readByName(UserDB, user_repo_opts.hash, moment, &arena, name)) |taken| { │ │1973 + if (!std.mem.eql(u8, &taken.event_id, &found.event_id)) return error.NameTaken; │ │1974 + } │ │1975 + │ │1976 + var event = found.repo.event; │ │1977 + event.name = name; │ │1978 + event.description = description; │ │1979 + event.read_access = read_access; │ │1980 + try consume(.{ .server = .{ .users_dir = users_dir } }, .user, .xit, user_repo_opts, io, allocator, &user_repo, events_ref, &[_]EventWithId{.{│ │1981 + .id = std.fmt.bytesToHex(found.event_id, .lower), │ │1982 + .timestamp = @intCast(std.Io.Timestamp.now(io, .real).toSeconds()), │ │1983 + .author = author, │ │1984 + .event = .{ .repo = event }, │ │1985 + }}); │ │1986 } │ │1987 │ │1988 // create a user and their user repo, returning the new user's id │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯