##// END OF EJS Templates
lfs: add a switch to `hg verify` to ignore the content of blobs...
lfs: add a switch to `hg verify` to ignore the content of blobs Trying to validate the fulltext of an external revision causes missing blobs to be downloaded and cached. Since the downloads aren't batch prefetched[1] and aren't compressed, this can be expensive both in terms of time and space. I made this a tri-state instead of a simple bool because there's an existing (undocumented) config to handle this, and it would be weird if `hg verify` were to suddenly start ignoring that config but an `hg recover` initiated verify honors it. Since this uses the same config setting, it too will skip rename verification (which requires fulltext, but not for LFS). [1] https://www.mercurial-scm.org/pipermail/mercurial-devel/2018-April/116118.html Differential Revision: https://phab.mercurial-scm.org/D7708

File last commit:

r40005:208cb7a9 default
r44528:34e8305f default
Show More
sendfds.c
51 lines | 1.3 KiB | text/x-c | CLexer
/*
* Utility to send fds via Unix domain socket
*
* Copyright 2011, 2018 Yuya Nishihara <yuya@tcha.org>
*
* This software may be used and distributed according to the terms of the
* GNU General Public License version 2 or any later version.
*/
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#define MAX_FD_LEN 10
/*
* Sends the given fds with 1-byte dummy payload.
*
* Returns the number of bytes sent on success, -1 on error and errno is set
* appropriately.
*/
ssize_t sendfds(int sockfd, const int *fds, size_t fdlen)
{
char dummy[1] = {0};
struct iovec iov = {dummy, sizeof(dummy)};
char fdbuf[CMSG_SPACE(sizeof(fds[0]) * MAX_FD_LEN)];
struct msghdr msgh;
struct cmsghdr *cmsg;
/* just use a fixed-size buffer since we'll never send tons of fds */
if (fdlen > MAX_FD_LEN) {
errno = EINVAL;
return -1;
}
memset(&msgh, 0, sizeof(msgh));
msgh.msg_iov = &iov;
msgh.msg_iovlen = 1;
msgh.msg_control = fdbuf;
msgh.msg_controllen = CMSG_SPACE(sizeof(fds[0]) * fdlen);
cmsg = CMSG_FIRSTHDR(&msgh);
cmsg->cmsg_level = SOL_SOCKET;
cmsg->cmsg_type = SCM_RIGHTS;
cmsg->cmsg_len = CMSG_LEN(sizeof(fds[0]) * fdlen);
memcpy(CMSG_DATA(cmsg), fds, sizeof(fds[0]) * fdlen);
msgh.msg_controllen = cmsg->cmsg_len;
return sendmsg(sockfd, &msgh, 0);
}