remote-curl: supports git-upload-archive service
Add new service (git-upload-archive) support in remote-curl, so we can
support remote archive over HTTP/HTTPS protocols. Differences between
git-upload-archive and other services:
 1. The git-archive program does not expect to see protocol version and
    capabilities when connecting to remote-helper, so do not send them
    in remote-curl for the git-upload-archive service.
 2. We need to detect protocol version by calling discover_refs().
    Fallback to use the git-upload-pack service (which, like
    git-upload-archive, is a read-only operation) to discover protocol
    version.
Signed-off-by: Jiang Xin <zhiyou.jx@alibaba-inc.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
			
			
				maint
			
			
		
							parent
							
								
									4a61faf75d
								
							
						
					
					
						commit
						23b7d59a82
					
				|  | @ -1447,7 +1447,13 @@ static int stateless_connect(const char *service_name) | ||||||
| 	 * establish a stateless connection, otherwise we need to tell the | 	 * establish a stateless connection, otherwise we need to tell the | ||||||
| 	 * client to fallback to using other transport helper functions to | 	 * client to fallback to using other transport helper functions to | ||||||
| 	 * complete their request. | 	 * complete their request. | ||||||
|  | 	 * | ||||||
|  | 	 * The "git-upload-archive" service is a read-only operation. Fallback | ||||||
|  | 	 * to use "git-upload-pack" service to discover protocol version. | ||||||
| 	 */ | 	 */ | ||||||
|  | 	if (!strcmp(service_name, "git-upload-archive")) | ||||||
|  | 		discover = discover_refs("git-upload-pack", 0); | ||||||
|  | 	else | ||||||
| 		discover = discover_refs(service_name, 0); | 		discover = discover_refs(service_name, 0); | ||||||
| 	if (discover->version != protocol_v2) { | 	if (discover->version != protocol_v2) { | ||||||
| 		printf("fallback\n"); | 		printf("fallback\n"); | ||||||
|  | @ -1486,8 +1492,10 @@ static int stateless_connect(const char *service_name) | ||||||
|  |  | ||||||
| 	/* | 	/* | ||||||
| 	 * Dump the capability listing that we got from the server earlier | 	 * Dump the capability listing that we got from the server earlier | ||||||
| 	 * during the info/refs request. | 	 * during the info/refs request. This does not work with the | ||||||
|  | 	 * "git-upload-archive" service. | ||||||
| 	 */ | 	 */ | ||||||
|  | 	if (strcmp(service_name, "git-upload-archive")) | ||||||
| 		write_or_die(rpc.in, discover->buf, discover->len); | 		write_or_die(rpc.in, discover->buf, discover->len); | ||||||
|  |  | ||||||
| 	/* Until we see EOF keep sending POSTs */ | 	/* Until we see EOF keep sending POSTs */ | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Jiang Xin
						Jiang Xin