From: Stefan Beller <sbeller@google.com>
To: git@vger.kernel.org, gitster@pobox.com, mhagger@alum.mit.edu,
peff@peff.net, loic@dachary.org
Cc: Stefan Beller <sbeller@google.com>
Subject: [PATCH 5/6] refs.c: write to a lock file only once
Date: Wed, 21 Jan 2015 15:23:44 -0800 [thread overview]
Message-ID: <1421882625-916-6-git-send-email-sbeller@google.com> (raw)
In-Reply-To: <1421882625-916-1-git-send-email-sbeller@google.com>
Instead of having to call write_in_full_to_lock_file twice get a formatted
string such that we only need to invoke writing to the lock file once.
This is helpful for the next patch when we only open the file descriptors
as needed. The lock file API has a reopen_lock_file which currently
doesn't open for appending.
No functional changes intended.
Signed-off-by: Stefan Beller <sbeller@google.com>
---
refs.c | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/refs.c b/refs.c
index 311599b..0161667 100644
--- a/refs.c
+++ b/refs.c
@@ -3078,8 +3078,8 @@ static ssize_t write_in_full_to_lockfile(struct lock_file *lock,
static int write_ref_sha1(struct ref_lock *lock,
const unsigned char *sha1, const char *logmsg)
{
- static char term = '\n';
struct object *o;
+ const char *sha1_lf;
if (!lock) {
errno = EINVAL;
@@ -3104,8 +3104,9 @@ static int write_ref_sha1(struct ref_lock *lock,
errno = EINVAL;
return -1;
}
- if (write_in_full_to_lockfile(lock->lk, sha1_to_hex(sha1), 40) != 40 ||
- write_in_full_to_lockfile(lock->lk, &term, 1) != 1 ||
+
+ sha1_lf = xstrfmt("%s\n", sha1_to_hex(sha1));
+ if (write_in_full_to_lockfile(lock->lk, sha1_lf, 41) != 41 ||
close_ref(lock) < 0) {
int save_errno = errno;
error("Couldn't write %s", lock->lk->filename.buf);
@@ -3113,6 +3114,7 @@ static int write_ref_sha1(struct ref_lock *lock,
errno = save_errno;
return -1;
}
+ free((void*)sha1_lf);
clear_loose_ref_cache(&ref_cache);
if (log_ref_write(lock->ref_name, lock->old_sha1, sha1, logmsg) < 0 ||
(strcmp(lock->ref_name, lock->orig_ref_name) &&
@@ -4081,13 +4083,13 @@ int reflog_expire(const char *refname, const unsigned char *sha1,
(*cleanup_fn)(cb.policy_cb);
if (!(flags & EXPIRE_REFLOGS_DRY_RUN)) {
+ const char *sha1_lf = xstrfmt("%s\n",
+ sha1_to_hex(cb.last_kept_sha1));
if (close_lock_file(&reflog_lock)) {
status |= error("couldn't write %s: %s", log_file,
strerror(errno));
} else if ((flags & EXPIRE_REFLOGS_UPDATE_REF) &&
- (write_in_full_to_lockfile(lock->lk,
- sha1_to_hex(cb.last_kept_sha1), 40) != 40 ||
- write_in_full_to_lockfile(lock->lk, "\n", 1) != 1 ||
+ (write_in_full_to_lockfile(lock->lk, sha1_lf, 41) != 41 ||
close_ref(lock) < 0)) {
status |= error("couldn't write %s",
lock->lk->filename.buf);
@@ -4098,6 +4100,7 @@ int reflog_expire(const char *refname, const unsigned char *sha1,
} else if ((flags & EXPIRE_REFLOGS_UPDATE_REF) && commit_ref(lock)) {
status |= error("couldn't set %s", lock->ref_name);
}
+ free((void*)sha1_lf);
}
free(log_file);
unlock_ref(lock);
--
2.2.1.62.g3f15098
next prev parent reply other threads:[~2015-01-21 23:24 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-21 23:23 [PATCHv1 0/6] Fix bug in large transactions Stefan Beller
2015-01-21 23:23 ` [PATCH 1/6] update-ref: Test handling large transactions properly Stefan Beller
2015-01-21 23:34 ` Jeff King
2015-01-21 23:23 ` [PATCH 2/6] refs.c: remove lock_fd from struct ref_lock Stefan Beller
2015-01-21 23:23 ` [PATCH 3/6] refs.c: replace write_str_in_full by write_in_full Stefan Beller
2015-01-21 23:38 ` Jeff King
2015-01-21 23:44 ` Stefan Beller
2015-01-21 23:52 ` Jeff King
2015-01-21 23:23 ` [PATCH 4/6] refs.c: Have a write_in_full_to_lock_file wrapping write_in_full Stefan Beller
2015-01-21 23:40 ` Jeff King
2015-01-21 23:23 ` Stefan Beller [this message]
2015-01-21 23:44 ` [PATCH 5/6] refs.c: write to a lock file only once Jeff King
2015-01-21 23:23 ` [PATCH 6/6] refs.c: enable large transactions Stefan Beller
2015-01-21 23:47 ` [PATCHv1 0/6] Fix bug in " Jeff King
2015-01-22 8:00 ` Junio C Hamano
2015-01-22 17:52 ` Stefan Beller
2015-01-22 17:58 ` Junio C Hamano
2015-01-22 18:29 ` Stefan Beller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1421882625-916-6-git-send-email-sbeller@google.com \
--to=sbeller@google.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=loic@dachary.org \
--cc=mhagger@alum.mit.edu \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).