@@ -861,6 +861,64 @@ static enum ssh_variant determine_ssh_variant(const char *ssh_command,
861
861
return ssh_variant ;
862
862
}
863
863
864
+ /*
865
+ * Open a connection using Git's native protocol.
866
+ *
867
+ * The caller is responsible for freeing hostandport, but this function may
868
+ * modify it (for example, to truncate it to remove the port part).
869
+ */
870
+ static struct child_process * git_connect_git (int fd [2 ], char * hostandport ,
871
+ const char * path , const char * prog ,
872
+ int flags )
873
+ {
874
+ struct child_process * conn ;
875
+ struct strbuf request = STRBUF_INIT ;
876
+ /*
877
+ * Set up virtual host information based on where we will
878
+ * connect, unless the user has overridden us in
879
+ * the environment.
880
+ */
881
+ char * target_host = getenv ("GIT_OVERRIDE_VIRTUAL_HOST" );
882
+ if (target_host )
883
+ target_host = xstrdup (target_host );
884
+ else
885
+ target_host = xstrdup (hostandport );
886
+
887
+ transport_check_allowed ("git" );
888
+
889
+ /* These underlying connection commands die() if they
890
+ * cannot connect.
891
+ */
892
+ if (git_use_proxy (hostandport ))
893
+ conn = git_proxy_connect (fd , hostandport );
894
+ else
895
+ conn = git_tcp_connect (fd , hostandport , flags );
896
+ /*
897
+ * Separate original protocol components prog and path
898
+ * from extended host header with a NUL byte.
899
+ *
900
+ * Note: Do not add any other headers here! Doing so
901
+ * will cause older git-daemon servers to crash.
902
+ */
903
+ strbuf_addf (& request ,
904
+ "%s %s%chost=%s%c" ,
905
+ prog , path , 0 ,
906
+ target_host , 0 );
907
+
908
+ /* If using a new version put that stuff here after a second null byte */
909
+ if (get_protocol_version_config () > 0 ) {
910
+ strbuf_addch (& request , '\0' );
911
+ strbuf_addf (& request , "version=%d%c" ,
912
+ get_protocol_version_config (), '\0' );
913
+ }
914
+
915
+ packet_write (fd [1 ], request .buf , request .len );
916
+
917
+ free (target_host );
918
+ strbuf_release (& request );
919
+ return conn ;
920
+ }
921
+
864
922
/*
865
923
* This returns the dummy child_process `no_fork` if the transport protocol
866
924
* does not need fork(2), or a struct child_process object if it does. Once
@@ -892,50 +950,7 @@ struct child_process *git_connect(int fd[2], const char *url,
892
950
printf ("Diag: path=%s\n" , path ? path : "NULL" );
893
951
conn = NULL ;
894
952
} else if (protocol == PROTO_GIT ) {
895
- struct strbuf request = STRBUF_INIT ;
896
- /*
897
- * Set up virtual host information based on where we will
898
- * connect, unless the user has overridden us in
899
- * the environment.
900
- */
901
- char * target_host = getenv ("GIT_OVERRIDE_VIRTUAL_HOST" );
902
- if (target_host )
903
- target_host = xstrdup (target_host );
904
- else
905
- target_host = xstrdup (hostandport );
906
-
907
- transport_check_allowed ("git" );
908
-
909
- /* These underlying connection commands die() if they
910
- * cannot connect.
911
- */
912
- if (git_use_proxy (hostandport ))
913
- conn = git_proxy_connect (fd , hostandport );
914
- else
915
- conn = git_tcp_connect (fd , hostandport , flags );
916
- /*
917
- * Separate original protocol components prog and path
918
- * from extended host header with a NUL byte.
919
- *
920
- * Note: Do not add any other headers here! Doing so
921
- * will cause older git-daemon servers to crash.
922
- */
923
- strbuf_addf (& request ,
924
- "%s %s%chost=%s%c" ,
925
- prog , path , 0 ,
926
- target_host , 0 );
927
-
928
- /* If using a new version put that stuff here after a second null byte */
929
- if (get_protocol_version_config () > 0 ) {
930
- strbuf_addch (& request , '\0' );
931
- strbuf_addf (& request , "version=%d%c" ,
932
- get_protocol_version_config (), '\0' );
933
- }
934
-
935
- packet_write (fd [1 ], request .buf , request .len );
936
-
937
- free (target_host );
938
- strbuf_release (& request );
953
+ conn = git_connect_git (fd , hostandport , path , prog , flags );
939
954
} else {
940
955
struct strbuf cmd = STRBUF_INIT ;
941
956
const char * const * var ;
0 commit comments