PERFORCE change 180784 for review

Ivan Voras ivoras at FreeBSD.org
Sun Jul 11 22:24:30 UTC 2010


http://p4web.freebsd.org/@@180784?ac=10

Change 180784 by ivoras at betelgeuse on 2010/07/11 22:24:03

	Patch download step completed

Affected files ...

.. //depot/projects/soc2010/pkg_patch/src/patch/Makefile#26 edit
.. //depot/projects/soc2010/pkg_patch/src/patch/applypatch.c#16 edit
.. //depot/projects/soc2010/pkg_patch/src/patch/applypatch.h#16 edit
.. //depot/projects/soc2010/pkg_patch/src/patch/hashjob.c#25 edit
.. //depot/projects/soc2010/pkg_patch/src/patch/hashjob.h#25 edit
.. //depot/projects/soc2010/pkg_patch/src/patch/main.c#26 edit
.. //depot/projects/soc2010/pkg_patch/src/patch/mkpatch.c#24 edit
.. //depot/projects/soc2010/pkg_patch/src/patch/mkpatch.h#24 edit
.. //depot/projects/soc2010/pkg_patch/src/patch/mkpatchdir.c#9 edit
.. //depot/projects/soc2010/pkg_patch/src/patch/mkpatchdir.h#8 edit
.. //depot/projects/soc2010/pkg_patch/src/patch/pkg_patch.h#24 edit
.. //depot/projects/soc2010/pkg_patch/src/patch/support.c#23 edit
.. //depot/projects/soc2010/pkg_patch/src/patch/updateweb.c#4 edit
.. //depot/projects/soc2010/pkg_patch/src/patch/updateweb.h#4 edit

Differences ...

==== //depot/projects/soc2010/pkg_patch/src/patch/Makefile#26 (text+ko) ====


==== //depot/projects/soc2010/pkg_patch/src/patch/applypatch.c#16 (text+ko) ====


==== //depot/projects/soc2010/pkg_patch/src/patch/applypatch.h#16 (text+ko) ====


==== //depot/projects/soc2010/pkg_patch/src/patch/hashjob.c#25 (text+ko) ====


==== //depot/projects/soc2010/pkg_patch/src/patch/hashjob.h#25 (text+ko) ====


==== //depot/projects/soc2010/pkg_patch/src/patch/main.c#26 (text+ko) ====


==== //depot/projects/soc2010/pkg_patch/src/patch/mkpatch.c#24 (text+ko) ====


==== //depot/projects/soc2010/pkg_patch/src/patch/mkpatch.h#24 (text+ko) ====


==== //depot/projects/soc2010/pkg_patch/src/patch/mkpatchdir.c#9 (text+ko) ====


==== //depot/projects/soc2010/pkg_patch/src/patch/mkpatchdir.h#8 (text+ko) ====


==== //depot/projects/soc2010/pkg_patch/src/patch/pkg_patch.h#24 (text+ko) ====


==== //depot/projects/soc2010/pkg_patch/src/patch/support.c#23 (text+ko) ====

@@ -634,7 +634,7 @@
 void
 baton_twirl()
 {
-	static char bpos[4] = { '-', '\\', '|', '/' };
+	static const char bpos[4] = { '-', '\\', '|', '/' };
 	static unsigned int counter = 0;
 	
 	fprintf(stdout, "%c\b", bpos[counter++ % 4]);

==== //depot/projects/soc2010/pkg_patch/src/patch/updateweb.c#4 (text+ko) ====

@@ -41,6 +41,7 @@
 	char 	target[PKGNAME_MAX];
 	char 	patch_name[PATH_MAX];
 	time_t 	patch_timestamp;
+	Boolean	match;
 	STAILQ_ENTRY(patchrec)	linkage;
 };
 
@@ -135,11 +136,11 @@
 		return (-1);
 	buf = malloc(bs);
 	while (bs > 0) {
+		if (Verbose)
+			baton_twirl();
 		bs = fread(buf, 1, bs, fin);
 		if (bs > 0)
 			fwrite(buf, 1, bs, fout);
-		if (Verbose)
-			baton_twirl();
 	}
 	free(buf);
 	er = ferror(fin);
@@ -160,6 +161,8 @@
 	char local_index[PATH_MAX];
 	struct patchrec_list prlist;
 	struct patchrec *pr;
+	char **instpkg;
+	int er, i, pcount = 0;
 	
 	if (in_url == NULL)
 		in_url = PKGPATCH_SITE_URL;
@@ -209,5 +212,56 @@
 			printf("Available: %s to %s via %s\n", pr->source,
 			    pr->target, pr->patch_name);
 	
+	instpkg = matchinstalled(MATCH_ALL, NULL, &er);
+	if (instpkg == NULL || er != 0)
+		err(1, "Error getting a list of installed packages");
+	for (i = 0; instpkg[i] != NULL; i++) {
+		if (Verbose > 2)
+			printf("Installed: %s\n", instpkg[i]);
+		STAILQ_FOREACH(pr, &prlist, linkage)
+			if (strncmp(instpkg[i], pr->source, PKGNAME_MAX) == 0) {
+				pr->match = TRUE;
+				pcount++;
+				break;
+			}
+	}
+	if (pcount == 0) {
+		if (Verbose)
+			printf("No package update candidates.\n");
+		return;
+	}
+	printf("Patch candidates:\n");
+	STAILQ_FOREACH(pr, &prlist, linkage) {
+		if (pr->match)
+			printf("%s\t", pr->source);
+	}
+	printf("\n");
+	if (!Force) {
+		if (!y_or_n(FALSE, "Continue with patching %d packages", pcount))
+			return;
+	}
 	
+	/* Ok now, fetch the patches */
+	if (Verbose)
+		printf("Downloading: ");
+	STAILQ_FOREACH(pr, &prlist, linkage) {
+		char local_file[PATH_MAX], remote_file[PATH_MAX];
+		
+		if (pr->match) {
+			if (Verbose) {
+				printf("%s\t", pr->patch_name);
+				fflush(stdout);
+			}
+			snprintf(local_file, PATH_MAX, "%s/%s", my_tmp,
+			    pr->patch_name);
+			snprintf(remote_file, PATH_MAX, "%s/%s",
+			    url_base, pr->patch_name);
+			if (Verbose > 3)
+				printf("%s to %s", remote_file, local_file);
+			if (download_file(remote_file, local_file) != 0)
+				err(1, "Cannot download %s", remote_file);
+		}
+	}
+	if (Verbose)
+		printf(".\n");
 }

==== //depot/projects/soc2010/pkg_patch/src/patch/updateweb.h#4 (text+ko) ====



More information about the p4-projects mailing list