Commits


got: further fetch tweaks to prevent unintended fetches Implement stsp's suggestion to only fetch remote's HEAD if the symref refs/remote/*/HEAD exists, and its target no longer matches the remote HEAD. This ensures users tracking a project won't miss a change in HEAD, while also fixing the issue reported by naddy where HEAD was fetched by default even though a specific, potentially less active, branch is cloned, resulting in a repository with more commits than necessary. In addition, unless 'got fetch -b <branch>' is used, the remote HEAD branch will be fetched if branches are not set in got.conf and there is no work tree to ascertain a branch, or said branches are not found on the server. ok stsp@


backout got: always fetch remote HEAD except when -b is used As pointed out by naddy, this behaviour is not ideal when users want to limit their repository to a particular branch which will diverge from HEAD over time, such as -stable branches. See https://marc.gameoftrees.org/mail/1676388048.8632_0.html


got: always fetch remote HEAD except when -b is used Rather than only fetch HEAD when there are no branches set in got.conf and there is no branch to be inferred from a work tree, or said branches don't exist on the server, always fetch HEAD unless 'got fetch -b branch' is used. ok stsp@


make 'got fetch -b branch' error reporting more helpful The patch to got-fetch-pack.c was written by stsp with only minor tweaks by me. Regress updated to account for the change in reporting. stsp's original got-fetch-pack.c diff ok op jamsek ok stsp@


special case 'got fetch -b <branch>' to only fetch <branch> As discussed on irc, this drops the implicit remote HEAD fetch when -b is used. got.1 has been updated to make the new fetch behaviour clear. ok stsp@


got: use intermediate pointers to plug leak on realloc And save worktree_branch_len for reuse. ok stsp@ and op@


fix interaction of 'got fetch -b', got.conf, and work tree Without branches in got.conf for a remote, and without -b/-R options, the fallback to HEAD would only work when not invoked in a work tree. With this fix 'got fetch' should behave as described in the man page. The -b option now overrides both got.conf and the fallback to the work tree's branch. And fallback to HEAD works as expected when invoked in a repository. Also, do not strictly require remote repositories to provide a branch from the refs/heads/ namespace. In such cases users should be able to use -R to select something to fetch. ok jamsek


got_imsg_fetch_ref: use struct instead of buffer for id ok stsp@


got_imsg_fetch_have_ref: use struct instead of buffer for id ok stsp@


replace malloc+memcpy with strndup. no functional change intended ok stsp@


got: minor refactor of got_pathlist_free() API Accept flag parameter to optionally specify which pointers to free. This saves callers looping through the list to free pointers. ok + fix stsp@


fix uninitialised fildes variables in libexec helpers Reviewed and uncovered as part of the diff in the forthcoming commit (pathlist API refactor). ok stsp@


always cast ctype' is*() arguments to unsigned char ok stsp@


make 'got clone -b' work for repositories which lack a HEAD reference ok op@


avoid looping over SHA1Update() in got-fetch-pack; suggested by millert@


got-fetch-pack: fix wrong memmove length leading to dubious checksum failures ok millert tracey


remove trailing whitespace; patch by Josiah Frentsos


fix snprintf error handling follow the "proper secure idiom" described in the CAVEATS section of printf(3). reminded by tb@ and millert@


convert two snprintf to strlcpy "looks good to me" millert@


imsg_add() frees its msg argument on error; avoid double-free in error paths


apply time-based rate-limiting to got-fetch-pack download progress output


plug memory leaks in got-fetch-pack and got-send-pack ok naddy


let 'got fetch' send all references to the server to avoid redundant downloads Problem reported by naddy. ok naddy


fix some integers that had a slightly wrong type; patch by Omar Polo


de-duplicate a constant used by both 'got fetch' and 'got send' Both GOT_FETCH_PKTMAX and GOT_SEND_PKTMAX had the same value. Declare this value as GOT_PKT_MAX in got_lib_pkt.h instead.