From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michael Haggerty Subject: [PATCH v2 03/24] refs.c: add a function to append a reflog entry to a fd Date: Fri, 12 Dec 2014 09:56:42 +0100 Message-ID: <1418374623-5566-4-git-send-email-mhagger@alum.mit.edu> References: <1418374623-5566-1-git-send-email-mhagger@alum.mit.edu> Cc: Stefan Beller , Jonathan Nieder , Ronnie Sahlberg , git@vger.kernel.org, Ronnie Sahlberg , Michael Haggerty To: Junio C Hamano X-From: git-owner@vger.kernel.org Fri Dec 12 09:57:25 2014 Return-path: Envelope-to: gcvg-git-2@plane.gmane.org Received: from vger.kernel.org ([209.132.180.67]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1XzM2N-00042v-3O for gcvg-git-2@plane.gmane.org; Fri, 12 Dec 2014 09:57:24 +0100 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934674AbaLLI5T (ORCPT ); Fri, 12 Dec 2014 03:57:19 -0500 Received: from alum-mailsec-scanner-7.mit.edu ([18.7.68.19]:61199 "EHLO alum-mailsec-scanner-7.mit.edu" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934049AbaLLI5R (ORCPT ); Fri, 12 Dec 2014 03:57:17 -0500 X-AuditID: 12074413-f79f26d0000030e7-a0-548aadec0c51 Received: from outgoing-alum.mit.edu (OUTGOING-ALUM.MIT.EDU [18.7.68.33]) by alum-mailsec-scanner-7.mit.edu (Symantec Messaging Gateway) with SMTP id E0.1C.12519.CEDAA845; Fri, 12 Dec 2014 03:57:16 -0500 (EST) Received: from michael.fritz.box (p5DDB074C.dip0.t-ipconnect.de [93.219.7.76]) (authenticated bits=0) (User authenticated as mhagger@ALUM.MIT.EDU) by outgoing-alum.mit.edu (8.13.8/8.12.4) with ESMTP id sBC8v9nD023104 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=NOT); Fri, 12 Dec 2014 03:57:15 -0500 X-Mailer: git-send-email 2.1.3 In-Reply-To: <1418374623-5566-1-git-send-email-mhagger@alum.mit.edu> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrMIsWRmVeSWpSXmKPExsUixO6iqPtmbVeIwdU2HYuuK91MFg29V5gt 3t5cwmhxe8V8Zovevk+sFv8m1Fhs3tzO4sDu8ff9ByaPnbPusnss2FTqcfGSssfnTXIBrFHc NkmJJWXBmel5+nYJ3BkvFqxnLmgRq3h6+ihjA+MWwS5GTg4JAROJ5b/Xs0DYYhIX7q1n62Lk 4hASuMwoseHzBSaQhJDAMSaJpVf8QGw2AV2JRT3NYHERATWJiW2HWEAamAV+MEpMnH2EuYuR g0NYIFCioyMMpIZFQFXi+vbdzCA2r4CzxLoffUwgJRICchJb13mDhDkFXCQutjxhgVjlLLF1 RSfrBEbeBYwMqxjlEnNKc3VzEzNzilOTdYuTE/PyUot0zfVyM0v0UlNKNzFCAkx4B+Ouk3KH GAU4GJV4eF+kdoUIsSaWFVfmHmKU5GBSEuX9PhkoxJeUn1KZkVicEV9UmpNafIhRgoNZSYT3 bxRQjjclsbIqtSgfJiXNwaIkzqu2RN1PSCA9sSQ1OzW1ILUIJivDwaEkwXt0DVCjYFFqempF WmZOCUKaiYMTZDiXlEhxal5KalFiaUlGPCgu4ouBkQGS4gHaGwzSzltckJgLFIVoPcWoKCXO exokIQCSyCjNgxsLSxuvGMWBvhTmZQap4gGmHLjuV0CDmYAGL9/SATK4JBEhJdXAGGg6ryuO zzR6s9uspkNGPhO+frN7MjNf1XZqisHZLVapt62Zux84nA/dzfNm97T5U7jZw0QdHv2eaSW7 QuCKVf/OooNKkbfff3Fm3b+6p9W0yXVXodkO7w2OLl+kf2w0f9PMp3D23+31inxS Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Archived-At: From: Ronnie Sahlberg Break out the code to create the string and writing it to the file descriptor from log_ref_write and add it into a dedicated function log_ref_write_fd. It is a nice unit of work. For now this is only used from log_ref_write, but in the future it might have other callers. Signed-off-by: Ronnie Sahlberg Signed-off-by: Stefan Beller Reviewed-by: Jonathan Nieder Signed-off-by: Michael Haggerty --- refs.c | 48 ++++++++++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/refs.c b/refs.c index 05cb299..150c980 100644 --- a/refs.c +++ b/refs.c @@ -2990,15 +2990,37 @@ int log_ref_setup(const char *refname, char *logfile, int bufsize) return 0; } +static int log_ref_write_fd(int fd, const unsigned char *old_sha1, + const unsigned char *new_sha1, + const char *committer, const char *msg) +{ + int msglen, written; + unsigned maxlen, len; + char *logrec; + + msglen = msg ? strlen(msg) : 0; + maxlen = strlen(committer) + msglen + 100; + logrec = xmalloc(maxlen); + len = sprintf(logrec, "%s %s %s\n", + sha1_to_hex(old_sha1), + sha1_to_hex(new_sha1), + committer); + if (msglen) + len += copy_msg(logrec + len - 1, msg) - 1; + + written = len <= maxlen ? write_in_full(fd, logrec, len) : -1; + free(logrec); + if (written != len) + return -1; + + return 0; +} + static int log_ref_write(const char *refname, const unsigned char *old_sha1, const unsigned char *new_sha1, const char *msg) { - int logfd, result, written, oflags = O_APPEND | O_WRONLY; - unsigned maxlen, len; - int msglen; + int logfd, result, oflags = O_APPEND | O_WRONLY; char log_file[PATH_MAX]; - char *logrec; - const char *committer; if (log_all_ref_updates < 0) log_all_ref_updates = !is_bare_repository(); @@ -3010,19 +3032,9 @@ static int log_ref_write(const char *refname, const unsigned char *old_sha1, logfd = open(log_file, oflags); if (logfd < 0) return 0; - msglen = msg ? strlen(msg) : 0; - committer = git_committer_info(0); - maxlen = strlen(committer) + msglen + 100; - logrec = xmalloc(maxlen); - len = sprintf(logrec, "%s %s %s\n", - sha1_to_hex(old_sha1), - sha1_to_hex(new_sha1), - committer); - if (msglen) - len += copy_msg(logrec + len - 1, msg) - 1; - written = len <= maxlen ? write_in_full(logfd, logrec, len) : -1; - free(logrec); - if (written != len) { + result = log_ref_write_fd(logfd, old_sha1, new_sha1, + git_committer_info(0), msg); + if (result) { int save_errno = errno; close(logfd); error("Unable to append to %s", log_file); -- 2.1.3