From: Junio C Hamano <gitster@pobox.com>
To: Paul Tan <pyokagan@gmail.com>
Cc: "SZEDER Gábor" <szeder@ira.uka.de>, git@vger.kernel.org
Subject: Re: [PATCH] am: terminate state files with a newline
Date: Sun, 23 Aug 2015 12:05:32 -0700 [thread overview]
Message-ID: <xmqqy4h16d1f.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: <20150823055053.GA15849@yoshi.chippynet.com> (Paul Tan's message of "Sun, 23 Aug 2015 13:50:53 +0800")
Paul Tan <pyokagan@gmail.com> writes:
> Did we ever explictly allow external programs to poke around the
> contents of the .git/rebase-apply directory?
We tell users to take a peek into it when "am" fails, don't we, by
naming $GIT_DIR/rebase-apply/patch?
> - write_file(am_path(state, "threeway"), 1, state->threeway ? "t" : "f");
> + write_file(am_path(state, "threeway"), 1, "%s\n", state->threeway ? "t" : "f");
Stepping back a bit, after realizing that "write_file()" is a
short-hand for "I have all information necessary to produce the full
contents of a file, now go ahead and create and write that and
close", I have to wonder what caller even wants to create a file
with an incomplete line at the end.
All callers outside builtin/am.c except one caller uses it to
produce a single line file. The oddball is "git branch" that uses
it to prepare a temporary file used to edit branch description.
builtin/branch.c: if (write_file(git_path(edit_description), 0, "%s", buf.buf)) {
The payload it prepares in buf.buf ends with a canned comment that
ends with LF. So in that sense it is not even an oddball.
The above analysis makes me wonder if this is a simpler and more
future proof approach.
Or did I miss any caller or a reasonable potential future use case
that wants to create a binary file or a text file that ends with an
incomplete line?
wrapper.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/wrapper.c b/wrapper.c
index e451463..7a92298 100644
--- a/wrapper.c
+++ b/wrapper.c
@@ -621,6 +621,13 @@ char *xgetcwd(void)
return strbuf_detach(&sb, NULL);
}
+/*
+ * Create a TEXT file by specifying its full contents via fmt and the
+ * remainder of args that are used like "printf". A terminating LF is
+ * added at the end of the file if it is missing (it is simpler for
+ * the callers because the function is often used to create a
+ * single-liner file).
+ */
int write_file(const char *path, int fatal, const char *fmt, ...)
{
struct strbuf sb = STRBUF_INIT;
@@ -634,6 +641,9 @@ int write_file(const char *path, int fatal, const char *fmt, ...)
va_start(params, fmt);
strbuf_vaddf(&sb, fmt, params);
va_end(params);
+ if (sb.len)
+ strbuf_complete_line(&sb);
+
if (write_in_full(fd, sb.buf, sb.len) != sb.len) {
int err = errno;
close(fd);
next prev parent reply other threads:[~2015-08-23 19:05 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-20 13:22 Minor builtin 'git am' side-effect SZEDER Gábor
2015-08-20 18:40 ` Junio C Hamano
2015-08-23 5:50 ` [PATCH] am: terminate state files with a newline Paul Tan
2015-08-23 12:30 ` SZEDER Gábor
2015-08-23 19:05 ` Junio C Hamano [this message]
2015-08-24 5:13 ` Jeff King
2015-08-24 6:48 ` Junio C Hamano
2015-08-24 6:50 ` Jeff King
2015-08-24 17:09 ` [PATCH 0/5] "am" state file fix with write_file() clean-up Junio C Hamano
2015-08-24 17:09 ` [PATCH 1/5] builtin/am: introduce write_state_*() helper functions Junio C Hamano
2015-08-24 17:09 ` [PATCH 2/5] builtin/am: make sure state files are text Junio C Hamano
2015-08-24 17:09 ` [PATCH 3/5] write_file(): introduce an explicit WRITE_FILE_GENTLY request Junio C Hamano
2015-08-24 18:41 ` Junio C Hamano
2015-08-25 10:08 ` Duy Nguyen
2015-08-25 10:30 ` [PATCH] setup: update the right file in multiple checkouts Nguyễn Thái Ngọc Duy
2015-08-25 16:38 ` Junio C Hamano
2015-08-31 10:29 ` Duy Nguyen
2015-08-24 17:09 ` [PATCH 4/5] write_file(): do not leave incomplete line at the end Junio C Hamano
2015-08-24 17:09 ` [PATCH 5/5] write_file(): clean up transitional mess of flag words and terminating LF Junio C Hamano
2015-08-24 17:41 ` [PATCH 0/5] "am" state file fix with write_file() clean-up Jeff King
2015-08-24 18:15 ` Junio C Hamano
2015-08-24 18:35 ` Jeff King
2015-08-24 19:57 ` Junio C Hamano
2015-08-24 20:58 ` [PATCH v2 0/6] " Junio C Hamano
2015-08-24 20:58 ` [PATCH v2 1/6] builtin/am: introduce write_state_*() helper functions Junio C Hamano
2015-08-24 20:58 ` [PATCH v2 2/6] builtin/am: make sure state files are text Junio C Hamano
2015-08-24 23:55 ` Jeff King
2015-08-25 16:19 ` Junio C Hamano
2015-08-25 16:47 ` Jeff King
2015-08-25 18:41 ` Junio C Hamano
2015-08-24 20:58 ` [PATCH v2 3/6] write_file(): drop "fatal" parameter Junio C Hamano
2015-08-24 20:58 ` [PATCH v2 4/6] write_file_v(): do not leave incomplete line at the end Junio C Hamano
2015-08-24 20:58 ` [PATCH v2 5/6] write_file(): drop caller-supplied LF from calls to create a one-liner file Junio C Hamano
2015-08-24 20:58 ` [PATCH v2 6/6] write_file(): drop caller-supplied LF from multi-line file Junio C Hamano
2015-08-25 0:02 ` [PATCH v2 0/6] "am" state file fix with write_file() clean-up Jeff King
2015-08-24 23:36 ` [PATCH] am: terminate state files with a newline brian m. carlson
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=xmqqy4h16d1f.fsf@gitster.dls.corp.google.com \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=pyokagan@gmail.com \
--cc=szeder@ira.uka.de \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.