Jonathan Nieder [off-list ref] writes:
The git_connect function is growing long. Split the
PROTO_GIT-specific portion to a separate function to make it easier to
read.
No functional change intended.
Signed-off-by: Jonathan Nieder <redacted>
Reviewed-by: Stefan Beller <redacted>
---
As before, except with sbeller's Reviewed-by.
I found this quite nice, except for one thing.
+/*
+ * Open a connection using Git's native protocol.
+ *
+ * The caller is responsible for freeing hostandport, but this function may
+ * modify it (for example, to truncate it to remove the port part).
+ */
+static struct child_process *git_connect_git(int fd[2], char *hostandport,
+ const char *path, const char *prog,
+ int flags)
+{
+ struct child_process *conn = &no_fork;
+ struct strbuf request = STRBUF_INIT;
As this one decides what "conn" to return, including the fallback
&no_fork instance,...
quoted hunk
+ ...
+ return conn;
+}
+
/*
* This returns a dummy child_process if the transport protocol does not
* need fork(2), or a struct child_process object if it does. Once done,
@@ -881,50 +939,7 @@ struct child_process *git_connect(int fd[2], const char *url,
Each of the if/elseif/ cascade, one of which calls the new helper,
now makes an explicit assignment to "conn" declared in
git_connect().
Which means the defaulting of git_connect::conn to &no_fork is now
unneeded. One of the things that made the original cascade a bit
harder to follow than necessary, aside from the physical length of
the PROTO_GIT part, was that the case where conn remains to point at
no_fork looked very special and it was buried in that long PROTO_GIT
part. Now the main source of that issue is fixed, it would make it
clear to leave conn uninitialized (or initialize to NULL---but leaving
it uninitialized would make the intention of the code more clear, I
would think, that each of the if/elseif/ cascade must assign to it).
printf("Diag: path=%s\n", path ? path : "NULL");
conn = NULL;
} else if (protocol == PROTO_GIT) {
- struct strbuf request = STRBUF_INIT;
-...
+ conn = git_connect_git(fd, hostandport, path, prog, flags);
} else {
struct strbuf cmd = STRBUF_INIT;
const char *const *var;