Remove xdelta support: it never worked and wasn't fully implemented.
This commit is contained in:
		| @@ -1,6 +1,5 @@ | ||||
| /*- | ||||
|  * Copyright (c) 2008-2014 Juan Romero Pardines. | ||||
|  * Copyright (c) 2014 Enno Boland. | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
| @@ -62,7 +61,6 @@ usage(void) | ||||
| 	"    pkgmatch\t\t<pkg-version> <pkg-pattern>\n" | ||||
| 	"    version\t\t<pkgname>\n" | ||||
| 	"    real-version\t<pkgname>\n" | ||||
| 	"    xfetch\t\t<oldfile> <URL[>filename]>\n" | ||||
| 	"\n" | ||||
| 	"  Options shared by all actions:\n" | ||||
| 	"    -C\t\tPath to xbps.conf file.\n" | ||||
| @@ -140,7 +138,6 @@ main(int argc, char **argv) | ||||
|  | ||||
| 	if ((strcmp(argv[0], "version") == 0) || | ||||
| 	    (strcmp(argv[0], "real-version") == 0) || | ||||
| 	    (strcmp(argv[0], "xfetch") == 0) || | ||||
| 	    (strcmp(argv[0], "fetch") == 0)) { | ||||
| 		/* | ||||
| 		* Initialize libxbps. | ||||
| @@ -287,22 +284,6 @@ main(int argc, char **argv) | ||||
| 			} | ||||
| 			printf("%s\n", hash); | ||||
| 		} | ||||
| 	} else if (strcmp(argv[0], "xfetch") == 0) { | ||||
| 		/* apply a delta from specified URL */ | ||||
| 		if (argc != 3) | ||||
| 			usage(); | ||||
|  | ||||
| 		filename = fname(argv[2]); | ||||
| 		rv = xbps_fetch_delta(&xh, argv[1], argv[2], filename, "v"); | ||||
|  | ||||
| 		if (rv == -1) { | ||||
| 			printf("%s: %s\n", argv[2], | ||||
| 				xbps_fetch_error_string()); | ||||
| 		} else if (rv == 0) { | ||||
| 			printf("%s: file is identical than remote.\n", | ||||
| 				argv[3]); | ||||
| 		} else | ||||
| 			rv = 0; | ||||
| 	} else if (strcmp(argv[0], "fetch") == 0) { | ||||
| 		/* Fetch a file from specified URL */ | ||||
| 		if (argc < 2) | ||||
|   | ||||
| @@ -48,7 +48,7 @@ | ||||
|  * | ||||
|  * This header documents the full API for the XBPS Library. | ||||
|  */ | ||||
| #define XBPS_API_VERSION	"20141005" | ||||
| #define XBPS_API_VERSION	"20141024" | ||||
|  | ||||
| #ifndef XBPS_VERSION | ||||
|  #define XBPS_VERSION		"UNSET" | ||||
| @@ -706,7 +706,8 @@ int xbps_fetch_file(struct xbps_handle *xhp, const char *uri, | ||||
| 		    const char *flags); | ||||
|  | ||||
| /** | ||||
|  * Download a file from a remote URL to current working directory. | ||||
|  * Download a file from a remote URL to current working directory, | ||||
|  * and writing file to \a filename. | ||||
|  *  | ||||
|  * @param[in] xhp Pointer to an xbps_handle struct. | ||||
|  * @param[in] uri Remote URI string. | ||||
| @@ -719,22 +720,6 @@ int xbps_fetch_file(struct xbps_handle *xhp, const char *uri, | ||||
| int xbps_fetch_file_dest(struct xbps_handle *xhp, const char *uri, | ||||
| 		    const char *filename, const char *flags); | ||||
|  | ||||
| /** | ||||
|  * Download a vcdiff from a remote URL to current working directory. And apply | ||||
|  * it to a given file | ||||
|  *  | ||||
|  * @param[in] xhp Pointer to an xbps_handle struct. | ||||
|  * @param[in] uri Remote URI string. | ||||
|  * @param[in] basefile Local basefile to apply the delta to. | ||||
|  * @param[in] filename Local filename to safe the file. | ||||
|  * @param[in] flags Flags passed to libfetch's fetchXget(). | ||||
|  *  | ||||
|  * @return -1 on error, 0 if not downloaded (because local/remote size/mtime | ||||
|  * do not match) and 1 if downloaded successfully. | ||||
|  **/ | ||||
| int xbps_fetch_delta(struct xbps_handle *xhp, const char *basefile, | ||||
| 		const char *uri, const char *filename, const char *flags); | ||||
|  | ||||
| /** | ||||
|  * Returns last error string reported by xbps_fetch_file(). | ||||
|  * | ||||
|   | ||||
| @@ -296,89 +296,13 @@ fetch_file_out: | ||||
| int | ||||
| xbps_fetch_file(struct xbps_handle *xhp, const char *uri, const char *flags) | ||||
| { | ||||
| 	char *filename; | ||||
| 	const char *filename; | ||||
| 	/* | ||||
| 	 * Get the filename specified in URI argument. | ||||
| 	 */ | ||||
| 	filename = strrchr(uri, '/') + 1; | ||||
| 	if ((filename = strrchr(uri, '/')) == NULL) | ||||
| 		return -1; | ||||
|  | ||||
| 	filename++; | ||||
| 	return xbps_fetch_file_dest(xhp, uri, filename, flags); | ||||
| } | ||||
|  | ||||
|  | ||||
| int | ||||
| xbps_fetch_delta(struct xbps_handle *xhp, const char *basefile, const char *uri, const char *filename, const char *flags) | ||||
| { | ||||
| 	const char xdelta[] = "/usr/bin/xdelta3"; | ||||
| 	char *basehash = NULL, *dname = NULL, *durl = NULL, *tempfile = NULL; | ||||
| 	int status, exitcode; | ||||
| 	pid_t pid; | ||||
| 	int rv = 0; | ||||
| 	struct stat dummystat; | ||||
|  | ||||
| 	if (basefile == NULL || | ||||
| 	    stat(basefile, &dummystat) || | ||||
| 	    stat(xdelta, &dummystat)) { | ||||
| 		goto fetch_delta_fallback; | ||||
| 	} | ||||
| 	xbps_dbg_printf(xhp, "%s: found. Trying binary diff.\n", xdelta); | ||||
|  | ||||
| 	basehash = xbps_file_hash(basefile); | ||||
| 	assert(basehash); | ||||
|  | ||||
| 	dname = xbps_xasprintf("%s.%s.vcdiff", basename(__UNCONST(uri)), basehash); | ||||
| 	durl = xbps_xasprintf("%s.%s.vcdiff", uri, basehash); | ||||
| 	tempfile = xbps_xasprintf("%s.tmp", filename); | ||||
|  | ||||
| 	if (xbps_fetch_file_dest(xhp, durl, dname, flags) < 0) { | ||||
| 		xbps_dbg_printf(xhp, "error while downloading %s, fallback to full " | ||||
| 				"download\n", durl); | ||||
| 		goto fetch_delta_fallback; | ||||
| 	} | ||||
|  | ||||
| 	if ((pid = fork()) == 0) { | ||||
| 		execl(xdelta, xdelta, "-d", "-f", "-s", basefile, dname, tempfile, NULL); | ||||
| 		exit(127); | ||||
| 	} else if (pid < 0) { | ||||
| 		xbps_dbg_printf(xhp, "error while forking, fallback to full " | ||||
| 				"download\n"); | ||||
| 		goto fetch_delta_fallback; | ||||
| 	} | ||||
|  | ||||
| 	// wait for termination of background process | ||||
| 	waitpid(pid, &status, 0); | ||||
|  | ||||
| 	exitcode = WEXITSTATUS(status); | ||||
| 	unlink(dname); | ||||
| 	switch (exitcode) { | ||||
| 	case 0:    // success | ||||
| 		rv = 1; | ||||
| 		if (rename(tempfile, filename) == -1) { | ||||
| 			xbps_dbg_printf(xhp, "failed to rename %s to %s: %s", | ||||
| 				tempfile, filename, strerror(errno)); | ||||
| 			rv = -1; | ||||
| 		} | ||||
| 		goto fetch_delta_out; | ||||
| 	case 127:  // cannot execute binary | ||||
| 		xbps_dbg_printf(xhp, "failed to `%s`, fallback to full download\n", | ||||
| 				xdelta); | ||||
| 		goto fetch_delta_fallback; | ||||
| 	default:   // other error | ||||
| 		xbps_dbg_printf(xhp, "`%s` exited with code %d, fallback to full " | ||||
| 				"download\n", xdelta, exitcode); | ||||
| 		goto fetch_delta_fallback; | ||||
| 	} | ||||
|  | ||||
| fetch_delta_fallback: | ||||
| 	rv = xbps_fetch_file_dest(xhp, uri, filename, flags); | ||||
| fetch_delta_out: | ||||
| 	if (tempfile != NULL) | ||||
| 		free(tempfile); | ||||
| 	if (dname != NULL) | ||||
| 		free(dname); | ||||
| 	if (durl != NULL) | ||||
| 		free(durl); | ||||
| 	if (basehash != NULL) | ||||
| 		free(basehash); | ||||
|  | ||||
| 	return rv; | ||||
| } | ||||
|   | ||||
| @@ -75,7 +75,7 @@ int HIDDEN | ||||
| xbps_repo_sync(struct xbps_handle *xhp, const char *uri) | ||||
| { | ||||
| 	const char *arch, *fetchstr = NULL; | ||||
| 	char *repodata, *repofile, *lrepodir, *uri_fixedp; | ||||
| 	char *repodata, *lrepodir, *uri_fixedp; | ||||
| 	int rv = 0; | ||||
|  | ||||
| 	assert(uri != NULL); | ||||
| @@ -123,17 +123,14 @@ xbps_repo_sync(struct xbps_handle *xhp, const char *uri) | ||||
| 	/* | ||||
| 	 * Remote repository plist index full URL. | ||||
| 	 */ | ||||
| 	repofile = xbps_xasprintf("%s-repodata", arch); | ||||
| 	repodata = xbps_xasprintf("%s/%s", uri, repofile); | ||||
| 	repodata = xbps_xasprintf("%s-repodata", arch); | ||||
|  | ||||
| 	/* reposync start cb */ | ||||
| 	xbps_set_cb_state(xhp, XBPS_STATE_REPOSYNC, 0, repodata, NULL); | ||||
| 	/* | ||||
| 	 * Download plist index file from repository. | ||||
| 	 * XXX: replace xbps_fetch_file_dest() by xbps_fetch_delta() once delta | ||||
| 	 * generation works reliable. | ||||
| 	 */ | ||||
| 	if ((rv = xbps_fetch_file_dest(xhp, repodata, repofile, NULL)) == -1) { | ||||
| 	if ((rv = xbps_fetch_file(xhp, repodata, NULL)) == -1) { | ||||
| 		/* reposync error cb */ | ||||
| 		fetchstr = xbps_fetch_error_string(); | ||||
| 		xbps_set_cb_state(xhp, XBPS_STATE_REPOSYNC_FAIL, | ||||
| @@ -144,7 +141,6 @@ xbps_repo_sync(struct xbps_handle *xhp, const char *uri) | ||||
| 		rv = 0; | ||||
|  | ||||
| 	free(repodata); | ||||
| 	free(repofile); | ||||
|  | ||||
| 	return rv; | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user