git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* [PATCH v5] commit-graph: remove a duplicate assignment
@ 2019-10-01  2:29 Alex Henrie
  2019-10-01  2:29 ` [PATCH v5] diffcore-break: use a goto instead of a redundant if statement Alex Henrie
  2019-10-01  2:29 ` [PATCH v5] wrapper: use a loop instead of repetitive statements Alex Henrie
  0 siblings, 2 replies; 5+ messages in thread
From: Alex Henrie @ 2019-10-01  2:29 UTC (permalink / raw)
  To: git, dstolee, gitster, cb; +Cc: Alex Henrie, Derrick Stolee

Leave the variable 'g' uninitialized before it is set just before its
first use in front of a loop, which is a much more appropriate place to
indicate what it is used for.

Also initialize the variable 'num_commits' just before the loop instead
of at the beginning of the function for the same reason.

Reviewed-by: Derrick Stolee <stolee@gmail.com>
Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
---
 commit-graph.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/commit-graph.c b/commit-graph.c
index 9b02d2c426..4028508e9c 100644
--- a/commit-graph.c
+++ b/commit-graph.c
@@ -1522,8 +1522,8 @@ static int write_commit_graph_file(struct write_commit_graph_context *ctx)
 
 static void split_graph_merge_strategy(struct write_commit_graph_context *ctx)
 {
-	struct commit_graph *g = ctx->r->objects->commit_graph;
-	uint32_t num_commits = ctx->commits.nr;
+	struct commit_graph *g;
+	uint32_t num_commits;
 	uint32_t i;
 
 	int max_commits = 0;
@@ -1535,6 +1535,7 @@ static void split_graph_merge_strategy(struct write_commit_graph_context *ctx)
 	}
 
 	g = ctx->r->objects->commit_graph;
+	num_commits = ctx->commits.nr;
 	ctx->num_commit_graphs_after = ctx->num_commit_graphs_before + 1;
 
 	while (g && (g->num_commits <= size_mult * num_commits ||
-- 
2.23.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v5] diffcore-break: use a goto instead of a redundant if statement
  2019-10-01  2:29 [PATCH v5] commit-graph: remove a duplicate assignment Alex Henrie
@ 2019-10-01  2:29 ` Alex Henrie
  2019-10-01  2:29 ` [PATCH v5] wrapper: use a loop instead of repetitive statements Alex Henrie
  1 sibling, 0 replies; 5+ messages in thread
From: Alex Henrie @ 2019-10-01  2:29 UTC (permalink / raw)
  To: git, dstolee, gitster, cb; +Cc: Alex Henrie

The condition "if (q->nr <= j)" checks whether the loop exited normally
or via a break statement. Avoid this check by replacing the jump out of
the inner loop with a jump to the end of the outer loop, which makes it
obvious that diff_q is not executed when the peer survives.

Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
---
 diffcore-break.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/diffcore-break.c b/diffcore-break.c
index 875aefd3fe..9d20a6a6fc 100644
--- a/diffcore-break.c
+++ b/diffcore-break.c
@@ -286,17 +286,17 @@ void diffcore_merge_broken(void)
 					/* Peer survived.  Merge them */
 					merge_broken(p, pp, &outq);
 					q->queue[j] = NULL;
-					break;
+					goto next;
 				}
 			}
-			if (q->nr <= j)
-				/* The peer did not survive, so we keep
-				 * it in the output.
-				 */
-				diff_q(&outq, p);
+			/* The peer did not survive, so we keep
+			 * it in the output.
+			 */
+			diff_q(&outq, p);
 		}
 		else
 			diff_q(&outq, p);
+next:;
 	}
 	free(q->queue);
 	*q = outq;
-- 
2.23.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v5] wrapper: use a loop instead of repetitive statements
  2019-10-01  2:29 [PATCH v5] commit-graph: remove a duplicate assignment Alex Henrie
  2019-10-01  2:29 ` [PATCH v5] diffcore-break: use a goto instead of a redundant if statement Alex Henrie
@ 2019-10-01  2:29 ` Alex Henrie
  2019-10-02  6:06   ` Junio C Hamano
  1 sibling, 1 reply; 5+ messages in thread
From: Alex Henrie @ 2019-10-01  2:29 UTC (permalink / raw)
  To: git, dstolee, gitster, cb
  Cc: Alex Henrie, Derrick Stolee, Johannes Schindelin, Jeff King

A check into the history of this code revealed no particular reason for
the code to be written in this way. All popular compilers are capable of
unrolling loops if it benefits performance, and once this code is
replaced with a loop, the magic number 6 used in multiple places in this
function can be replaced with a named constant.

Reviewed-by: Derrick Stolee <stolee@gmail.com>
Reviewed-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
---
 wrapper.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/wrapper.c b/wrapper.c
index c55d7722d7..c23ac6adcd 100644
--- a/wrapper.c
+++ b/wrapper.c
@@ -469,13 +469,12 @@ int git_mkstemps_mode(char *pattern, int suffix_len, int mode)
 	filename_template = &pattern[len - 6 - suffix_len];
 	for (count = 0; count < TMP_MAX; ++count) {
 		uint64_t v = value;
+		int i;
 		/* Fill in the random bits. */
-		filename_template[0] = letters[v % num_letters]; v /= num_letters;
-		filename_template[1] = letters[v % num_letters]; v /= num_letters;
-		filename_template[2] = letters[v % num_letters]; v /= num_letters;
-		filename_template[3] = letters[v % num_letters]; v /= num_letters;
-		filename_template[4] = letters[v % num_letters]; v /= num_letters;
-		filename_template[5] = letters[v % num_letters]; v /= num_letters;
+		for (i = 0; i < 6; i++) {
+			filename_template[i] = letters[v % num_letters];
+			v /= num_letters;
+		}
 
 		fd = open(pattern, O_CREAT | O_EXCL | O_RDWR, mode);
 		if (fd >= 0)
-- 
2.23.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v5] wrapper: use a loop instead of repetitive statements
  2019-10-01  2:29 ` [PATCH v5] wrapper: use a loop instead of repetitive statements Alex Henrie
@ 2019-10-02  6:06   ` Junio C Hamano
  2019-10-02 15:32     ` Jeff King
  0 siblings, 1 reply; 5+ messages in thread
From: Junio C Hamano @ 2019-10-02  6:06 UTC (permalink / raw)
  To: Alex Henrie
  Cc: git, dstolee, cb, Derrick Stolee, Johannes Schindelin, Jeff King

All three patches looked sensible.

Even though there is no dependency or relationships among them
(beyond that they got written at the same time by the same person),
I'll just queue them on a single ah/cleanups topic and get them
advance together, as I do not expect any one of them to be blocking
the other two.

THanks.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v5] wrapper: use a loop instead of repetitive statements
  2019-10-02  6:06   ` Junio C Hamano
@ 2019-10-02 15:32     ` Jeff King
  0 siblings, 0 replies; 5+ messages in thread
From: Jeff King @ 2019-10-02 15:32 UTC (permalink / raw)
  To: Junio C Hamano
  Cc: Alex Henrie, git, dstolee, cb, Derrick Stolee,
	Johannes Schindelin

On Wed, Oct 02, 2019 at 03:06:10PM +0900, Junio C Hamano wrote:

> All three patches looked sensible.
> 
> Even though there is no dependency or relationships among them
> (beyond that they got written at the same time by the same person),
> I'll just queue them on a single ah/cleanups topic and get them
> advance together, as I do not expect any one of them to be blocking
> the other two.

Just re-posting this follow-on from the earlier thread (it goes on top
of the third one):

-- >8 --
Subject: git_mkstemps_mode(): replace magic numbers with computed value

The magic number "6" appears several times in the function, and is
related to the size of the "XXXXXX" string we expect to find in the
template. Let's pull that "XXXXXX" into a constant array, whose size we
can get at compile time with ARRAY_SIZE().

Note that we probably can't just change this value, since callers will
be feeding us a certain number of X's, but it hopefully makes the
function itself easier to follow.

While we're here, let's do the same with the "letters" array (which we
_could_ modify if we wanted to include more characters).

Signed-off-by: Jeff King <peff@peff.net>
---
 wrapper.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/wrapper.c b/wrapper.c
index 54541386c1..75992cff02 100644
--- a/wrapper.c
+++ b/wrapper.c
@@ -478,7 +478,9 @@ int git_mkstemps_mode(char *pattern, int suffix_len, int mode)
 		"abcdefghijklmnopqrstuvwxyz"
 		"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 		"0123456789";
-	static const int num_letters = 62;
+	static const int num_letters = ARRAY_SIZE(letters) - 1;
+	static const char x_pattern[] = "XXXXXX";
+	static const int num_x = ARRAY_SIZE(x_pattern) - 1;
 	uint64_t value;
 	struct timeval tv;
 	char *filename_template;
@@ -487,12 +489,12 @@ int git_mkstemps_mode(char *pattern, int suffix_len, int mode)
 
 	len = strlen(pattern);
 
-	if (len < 6 + suffix_len) {
+	if (len < num_x + suffix_len) {
 		errno = EINVAL;
 		return -1;
 	}
 
-	if (strncmp(&pattern[len - 6 - suffix_len], "XXXXXX", 6)) {
+	if (strncmp(&pattern[len - num_x - suffix_len], x_pattern, num_x)) {
 		errno = EINVAL;
 		return -1;
 	}
@@ -503,12 +505,12 @@ int git_mkstemps_mode(char *pattern, int suffix_len, int mode)
 	 */
 	gettimeofday(&tv, NULL);
 	value = ((uint64_t)tv.tv_usec << 16) ^ tv.tv_sec ^ getpid();
-	filename_template = &pattern[len - 6 - suffix_len];
+	filename_template = &pattern[len - num_x - suffix_len];
 	for (count = 0; count < TMP_MAX; ++count) {
 		uint64_t v = value;
 		int i;
 		/* Fill in the random bits. */
-		for (i = 0; i < 6; i++) {
+		for (i = 0; i < num_x; i++) {
 			filename_template[i] = letters[v % num_letters];
 			v /= num_letters;
 		}
-- 
2.23.0.926.g3dc922fbbc


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2019-10-02 15:32 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-01  2:29 [PATCH v5] commit-graph: remove a duplicate assignment Alex Henrie
2019-10-01  2:29 ` [PATCH v5] diffcore-break: use a goto instead of a redundant if statement Alex Henrie
2019-10-01  2:29 ` [PATCH v5] wrapper: use a loop instead of repetitive statements Alex Henrie
2019-10-02  6:06   ` Junio C Hamano
2019-10-02 15:32     ` Jeff King

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).