Re: [PATCH v3] refs.c: add a function to append a reflog entry to a fd

2014-11-20 Thread Junio C Hamano
Jonathan Nieder  writes:

> In this case, it is about readability.  It's perhaps irrational, but I
> find text much more readable and the intent to be clearer when
> paragraphs are wrapped to a consistent width instead of lines breaking
> at arbitrary points.

Yeah I agree with that.

Also a blank line between paragraphs, but that goes without saying
once you accept that we do not do a single line per paragraph.

> Perhaps a nice way to make this a non-issue in the future would be an
> option to "git am" to rewrap.

No.  There are cases where you do need to have a single oddball long
line that you cannot flow.  In a project that employs "am", the
users of "am" are much more likely to become bottleneck than the
senders of patches, and it does not make sense to have them spend
cycles to decide if they want to let "am" do such wrapping.

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3] refs.c: add a function to append a reflog entry to a fd

2014-11-20 Thread Jonathan Nieder
Stefan Beller wrote:

> From 4bec12b878ca02a1e80af3c265e7e7ab52ba17ce Mon Sep 17 00:00:00 2001

The above line causes "git am" to be unable to parse the message
downloaded as an mbox, if I remember correctly.

[...]
>  * break lines of commit message again to appease the taste of Jonathan ;)

I hope it's not just to appease me.  If the rationale behind a comment I
make isn't clear, always feel free to ask.

In this case, it is about readability.  It's perhaps irrational, but I
find text much more readable and the intent to be clearer when
paragraphs are wrapped to a consistent width instead of lines breaking
at arbitrary points.

Perhaps a nice way to make this a non-issue in the future would be an
option to "git am" to rewrap.
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3] refs.c: add a function to append a reflog entry to a fd

2014-11-20 Thread Stefan Beller
>From 4bec12b878ca02a1e80af3c265e7e7ab52ba17ce Mon Sep 17 00:00:00 2001
From: Ronnie Sahlberg 
Date: Thu, 20 Nov 2014 13:48:14 -0800
Subject: [PATCH v4] refs.c: add a function to append a reflog entry to a fd

Move code to create the string for a ref and write it to a file descriptor
from log_ref_write and add it into a new dedicated function
log_ref_write_fd.

For now the new function is only used from log_ref_write, but later
on we will call this function from reflog transactions too. That means
that we will end up with only a single place, where we write a reflog
entry to a file instead of the current two places (log_ref_write and
builtin/reflog.c).

Signed-off-by: Ronnie Sahlberg 
Signed-off-by: Stefan Beller 
---
 
Changes in version 3:
 * reword the commit message to make it more understandable.
 * no changes in code
 * wait for the follow up to address any changes in the code.

Changes in version 4:
 * fix arguments of sprintf, (note to self: compile testing helps)
 * break lines of commit message again to appease the taste of Jonathan ;)
 * take the simplification for
   
   result = log_ref_write_fd(...);
   
   if (result) {
   ...
   
   and omit the result variable in there to just become

   if (log_ref_write_fd(...)) {
   ...
   
 refs.c | 48 ++--
 1 file changed, 30 insertions(+), 18 deletions(-)

diff --git a/refs.c b/refs.c
index 5ff457e..a6088e3 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) {
+
+   if (log_ref_write_fd(logfd, old_sha1, new_sha1,
+git_committer_info(0), msg)) {
int save_errno = errno;
close(logfd);
error("Unable to append to %s", log_file);
-- 
2.2.0.rc2.23.gca0107e


--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3] refs.c: add a function to append a reflog entry to a fd

2014-11-20 Thread Junio C Hamano
Stefan Beller  writes:

> From: Ronnie Sahlberg 
>
> Move code to create the string for a ref and write it to a file descriptor
> from log_ref_write and add it into a new dedicated function
> log_ref_write_fd.
>
> For now the new function is only used from log_ref_write, but later
> on we will call this function from reflog transactions too. That means
> that we will end up with only a single place, where we write a
> reflog entry to a file instead of the current two places
> (log_ref_write and builtin/reflog.c).
>
> Signed-off-by: Ronnie Sahlberg 
> Signed-off-by: Stefan Beller 
> ---
>
> Changes in version 3:
> * reword the commit message to make it more understandable.
> * no changes in code
> * wait for the follow up to address any changes in the code.
>
>  refs.c | 48 ++--
>  1 file changed, 30 insertions(+), 18 deletions(-)
>
> diff --git a/refs.c b/refs.c
> index 5ff457e..9948841 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, maxlen, "%s %s %s\n",

You cannot have maxlen here ;-)

> +   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);
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3] refs.c: add a function to append a reflog entry to a fd

2014-11-20 Thread Jonathan Nieder
Stefan Beller wrote:
> On Thu, Nov 20, 2014 at 1:20 PM, Jonathan Nieder  wrote:

>> I don't understand why the above writes to a temporary variable and
>> checks it, never to read that temporary again.
>>
>> I don't think that alone is a reason to block the patch, but it
>> worries me in that the review comment seems to have been just lost.
>
> It wasn't lost as I think it should go in a follow up patch. Sorry for
> not stating that clearly.
> (This patch is about moving code around, not changing code)

Ah, sorry for the lack of clarity.

I agree completely with the above principle.  But the code that writes
to result and checks result is new code, not part of the code that
moved.
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3] refs.c: add a function to append a reflog entry to a fd

2014-11-20 Thread Stefan Beller
On Thu, Nov 20, 2014 at 1:20 PM, Jonathan Nieder  wrote:
>>
>> For now the new function is only used from log_ref_write, but later
>> on we will call this function from reflog transactions too. That means
>> that we will end up with only a single place, where we write a
>> reflog entry to a file instead of the current two places
>> (log_ref_write and builtin/reflog.c).
>
> Line-wrapping width is still inconsistent.  I don't think it's worth
> resending just for that, but something to look out for in the future.
>

ok, I'll care about that more in the future.


> I don't understand why the above writes to a temporary variable and
> checks it, never to read that temporary again.
>
> I don't think that alone is a reason to block the patch, but it
> worries me in that the review comment seems to have been just lost.

It wasn't lost as I think it should go in a follow up patch. Sorry for
not stating that clearly.
(This patch is about moving code around, not changing code)

I got interrupted preparing the follow up patch, which gets rid of the temporary
variable.
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3] refs.c: add a function to append a reflog entry to a fd

2014-11-20 Thread Jonathan Nieder
Stefan Beller wrote:

> From: Ronnie Sahlberg 
>
> Move code to create the string for a ref and write it to a file descriptor
> from log_ref_write and add it into a new dedicated function
> log_ref_write_fd.
>
> For now the new function is only used from log_ref_write, but later
> on we will call this function from reflog transactions too. That means
> that we will end up with only a single place, where we write a
> reflog entry to a file instead of the current two places
> (log_ref_write and builtin/reflog.c).

Line-wrapping width is still inconsistent.  I don't think it's worth
resending just for that, but something to look out for in the future.

> Signed-off-by: Ronnie Sahlberg 
> Signed-off-by: Stefan Beller 
[...]
> +++ b/refs.c
[...]
> @@ -3010,19 +3032,9 @@ static int log_ref_write(const char *refname, const 
> unsigned char *old_sha1,
[...]
> + result = log_ref_write_fd(logfd, old_sha1, new_sha1,
> +   git_committer_info(0), msg);
> + if (result) {
>   int save_errno = errno;

I don't understand why the above writes to a temporary variable and
checks it, never to read that temporary again.

I don't think that alone is a reason to block the patch, but it
worries me in that the review comment seems to have been just lost.
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html