PERFORCE change 179508 for review

Ivan Voras ivoras at FreeBSD.org
Sat Jun 12 00:38:31 UTC 2010


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

Change 179508 by ivoras at betelgeuse on 2010/06/12 00:37:31

	Start parsing the +PKGPATCH file

Affected files ...

.. //depot/projects/soc2010/pkg_patch/src/patch/Makefile#12 edit
.. //depot/projects/soc2010/pkg_patch/src/patch/applypatch.c#2 edit
.. //depot/projects/soc2010/pkg_patch/src/patch/applypatch.h#2 edit
.. //depot/projects/soc2010/pkg_patch/src/patch/hashjob.c#11 edit
.. //depot/projects/soc2010/pkg_patch/src/patch/hashjob.h#11 edit
.. //depot/projects/soc2010/pkg_patch/src/patch/main.c#12 edit
.. //depot/projects/soc2010/pkg_patch/src/patch/mkpatch.c#10 edit
.. //depot/projects/soc2010/pkg_patch/src/patch/mkpatch.h#10 edit
.. //depot/projects/soc2010/pkg_patch/src/patch/pkg_patch.h#10 edit
.. //depot/projects/soc2010/pkg_patch/src/patch/support.c#9 edit

Differences ...

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


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

@@ -34,7 +34,89 @@
 #include "hashjob.h"
 
 
+enum PPACTION { PPACTION_UNKNOWN, PPACTION_ADD, PPACTION_REMOVE, 
+    PPACTION_RMDIR, PPACTION_PATCH };
+enum PPMETHOD { PPMETHOD_UNKNOWN, PPMETHOD_CP, PPMETHOD_BSDIFF };
+
+
+SLIST_HEAD(pplist_head, pplist);
+struct pplist {
+	char 			filename[PATH_MAX];
+	enum PPACTION		action;
+	enum PPMETHOD		method;
+	SLIST_ENTRY(pplist)	linkage;
+};
+
+
+struct pkgpatch {
+	short int		version_major;
+	short int		version_minor;
+	char			source[PATH_MAX];
+	char			target[PATH_MAX];
+	struct pplist_head	pplist;
+};
+
+
+static void
+read_pkgpatch_file(char *filename, struct pkgpatch *pp)
+{
+	FILE *fp;
+	char line[PATH_MAX], *p, *p2, *cmd;
+	
+	fp = fopen(filename, "r");
+	if (fp == NULL)
+		err(1, "Cannot open file: %s", filename);
+	memset(pp, 0, sizeof(*pp));
+	SLIST_INIT(&pp->pplist);
+	while (fgets(line, PATH_MAX, fp) != NULL) {
+		cmd = line;
+		p = strchr(line, ' ');
+		*p++ = '\0';
+		if (strcmp(cmd, "@version") == 0) {
+			p2 = strchr(p, '.');
+			*p2++ = '\0';
+			pp->version_major = atoi(p);
+			pp->version_minor = atoi(p2);
+		} else if (strcmp(cmd, "@source") == 0) {
+		} else if (strcmp(cmd, "@target") == 0) {
+		} else if (strcmp(cmd, "@add") == 0) {
+		} else if (strcmp(cmd, "@remove") == 0) {
+		} else if (strcmp(cmd, "@rmdir") == 0) {
+		} else if (strcmp(cmd, "@patch") == 0) {
+		} else
+			errx(1, "Unknown command: %s", cmd);
+		
+	}
+	fclose(fp);
+}
+
+
 void
 perform_applypatch()
 {
+	char fpatch[PATH_MAX], dpatch[PATH_MAX], tmp[PATH_MAX];
+	struct pkgxjob xpatch;
+	struct pkgpatch pp;
+	
+	if (argc < 1)
+		errx(1, "Expecting argument: patch filename");
+	if (realpath(argv[0], fpatch) == NULL)
+		err(1, "Error resolving path: %s", argv[0]);
+	if (access(fpatch, F_OK) != 0)
+		err(1, "File not found: %s", fpatch);
+	if (access(fpatch, R_OK) != 0)
+		err(1, "Access error reading file: %s", fpatch);
+	snprintf(dpatch, PATH_MAX, "%s/patch", my_tmp);
+	if (mkdir(dpatch, 0700) != 0)
+		err(1, "Cannot create directory: %s", dpatch);
+	if (pkgxjob_start(&xpatch, dpatch, fpatch) != 0)
+		err(1, "Canot extract package %s to %s (start)", fpatch,
+		    dpatch);
+	if (pkgxjob_finish(&xpatch) != 0)
+		err(1, "Cannot extract package %s to %s (finish)", fpatch,
+		    dpatch);
+
+	snprintf(tmp, PATH_MAX, "%s/%s", dpatch, PKGPATCH_FNAME);
+	read_pkgpatch_file(tmp, &pp);
+	
 }

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


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


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


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


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


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


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


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



More information about the p4-projects mailing list