PERFORCE change 185291 for review

David Forsythe dforsyth at FreeBSD.org
Mon Nov 1 03:10:40 UTC 2010


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

Change 185291 by dforsyth at skunk on 2010/11/01 03:10:07

	Drop add and validate from the build.  Add needs to be completely rewritten
	and validate needs to be deleted all together.

Affected files ...

.. //depot/projects/soc2010/dforsyth_libpkg/libpkg/pkg.h#10 edit
.. //depot/projects/soc2010/dforsyth_libpkg/pkg_install/Makefile#3 edit
.. //depot/projects/soc2010/dforsyth_libpkg/pkg_install/pkg_add/pkg_add.c#5 edit
.. //depot/projects/soc2010/dforsyth_libpkg/pkg_install/pkg_validate/validate.c#3 edit

Differences ...

==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/pkg.h#10 (text+ko) ====

@@ -19,6 +19,7 @@
 #define PKG_FATAL	       (-2)
 
 #include "pkg_types.h"
+#include <stdio.h>
 
 struct pkg_db;
 
@@ -65,10 +66,9 @@
 int			 pkg_db_remove(struct pkg_db *, struct pkg *);
 
 /* 
- * When you're done with a package, release its resources using pkg_finish.  The
- * db argument is the database in which this package exists.
+ * When you're done with a package, release its resources using pkg_finish.
  */
-int			 pkg_finish(struct pkg_db *, struct pkg *);
+int			 pkg_finish(struct pkg *);
 
 /*
  * Retrieve the name of a package.
@@ -153,13 +153,19 @@
 struct pkg		      *pkg_archive_open(struct pkg_archive *,
 					const char *);
 
-struct pkg_repo		 *pkg_repo_create(void);
+struct pkg_repo		*pkg_repo_create(void);
+
+int			 pkg_repo_open(struct pkg_repo *, const char *);
+
+FILE			*pkg_repo_fetch(struct pkg_repo *, const char *,
+				uint32_t *);
+
+int			 pkg_repo_close(struct pkg_repo *);
 
-int			      pkg_repo_open(struct pkg_repo *,
-					const char *);
+int			 pkg_repo_finish(struct pkg_repo *);
 
 /* I hope to make this disappear. */
-int			      pkg_parse(struct pkg *, char *,
-					const char *);
+int			 pkg_parse(struct pkg *, char *,
+				const char *);
 
 #endif 

==== //depot/projects/soc2010/dforsyth_libpkg/pkg_install/Makefile#3 (text+ko) ====

@@ -3,5 +3,5 @@
 # See LICENSE file for license details.
 #
 
-SUBDIR=	pkg_dump pkg_info pkg_delete pkg_add pkg_validate
+SUBDIR=	pkg_dump pkg_info pkg_delete 
 .include <bsd.subdir.mk>

==== //depot/projects/soc2010/dforsyth_libpkg/pkg_install/pkg_add/pkg_add.c#5 (text+ko) ====

@@ -34,10 +34,7 @@
 #define HAVE_URL 0x10000000
 
 const char *prefix;
-const char *ad; /* Archive directory. */
 
-struct pkg_database *db;
-struct pkg_repository *rp;
 uint32_t flags;
 
 struct pkg_target {
@@ -106,12 +103,13 @@
 	NULL
 };
 
-static void parse_arguments(int, char **);
-static int pkg_add(struct pkg_repository *, struct pkg_database *, 
-	struct target_queue *, const char *, uint32_t, 
-	void (*) (const char *, size_t, size_t));
-static void clean_up(int);
-static void usage(void);
+static void		 parse_arguments(int, char **);
+static int		 pkg_add(struct pkg_repo *, struct pkg_db *,
+				struct target_queue *, const char *, uint32_t,
+				void (*) (const char *, size_t, size_t));
+static void 		 clean_up(int);
+static void 		 usage(void);
+static void		 show_progress(const char *, size_t, size_t);
 
 static void
 usage(void)
@@ -191,28 +189,23 @@
 }
 
 static int
-check_installed(struct pkg_database *_db, struct pkg *p, const char *name)
+check_installed(struct pkg_db *db, const char *name)
 {
-	pkg_database_rewind(_db);
+	struct pkg *pkg;
 
 	printf("check: %s\n", name);
-	/* XXX: Fix skips. */
-	while (pkg_database_get_next_pkg(_db, p, 0) == PKG_OK) {
-		if (strcmp(pkg_freebsd_get_name(p), name) == 0) {
-			return (1);
-		}
+	
+	pkg = pkg_db_get(db, name);
+	if (pkg != NULL) {
+		pkg_finish(pkg);
+		return (1);
 	}
-	struct add_artifact *t;
-	LIST_FOREACH(t, &test_added, next) {
-		if (strcmp(t->name, name) == 0) {
-			return (1);
-		}
-	}
+
 	return (0);
 }
 
 static void
-progress(const char *name, size_t fetched, size_t total)
+show_progress(const char *name, size_t fetched, size_t total)
 {
 	printf("\r%s: %lu/%lu bytes", name, (long unsigned)fetched, 
 		(long unsigned)total);
@@ -223,15 +216,15 @@
 main(int argc, char **argv)
 {
 	int r;
+	struct pkg_db *db;
+	struct pkg_repo *rp;
 
 	parse_arguments(argc, argv);
 	
-	ad = "pkgdl";
+	db = pkg_db_create();
+	rp = pkg_repo_create();
 
-	db = pkg_freebsd_database_create();
-	rp = pkg_freebsd_repository_create();
-
-	r = pkg_add(rp, db, &targets, ad, flags, progress);
+	r = pkg_add(rp, db, &targets, "stage", flags, show_progress);
 	clean_up(r);
 
 	/* NOT REACHED. */
@@ -244,6 +237,10 @@
 add_package(const char *_pkg, struct pkg_repository *_rp, struct pkg_database *_db, 
 	const char *_ad, uint32_t _flags,
 	void (*_progress) (const char *, size_t, size_t))
+static int
+add_package(const char *name, struct pkg_repo *rp, struct pkg_db *db,
+	const char *stage, uint32_t flags,
+	void (*progress) (const char *, size_t, size_t));
 {
 	struct archive *ar;
 	struct archive_entry *ae;
@@ -387,7 +384,7 @@
 				if (buf == NULL) {
 					return (-1);
 				}
-				bufsz = archive_entry_size(ae);
+	bufsz = archive_entry_size(ae);
 			}
 			r = archive_read_data(ar, buf, archive_entry_size(ae));
 			r = pkg_parse(p, buf, archive_entry_pathname(ae));
@@ -436,9 +433,9 @@
  */
 
 static int
-pkg_add(struct pkg_repository *_rp, struct pkg_database *_db,
-	struct target_queue *_tq, const char *_ad, uint32_t _flags,
-	void (*_progress) (const char *, size_t, size_t))
+pkg_add(struct pkg_repo *rp, struct pkg_db *db, struct target_queue *tq,
+	const char *stage, uint32_t flags,
+	void (*progress) (const char *, size_t, size_t))
 {
 	int r;
 	struct pkg_target *t;
@@ -447,84 +444,51 @@
 	const char *repo_sub;
 	const char *repo_arch;
 
+	const char *dbloc;
+	const char *rploc;
+
 	/* 
 	 * XXX: To be clear: We could stream right to archive_open_FILE(), but
 	 * we want a bit of insurance against a lost connection.  So we pull
 	 * down the entire archive (even when we don't have keep set).
 	 */
 
-	/* TODO: Dummy repo. */
+	/* Open the pkg_db. */
+	dbloc = getenv("PKGDB_DIR");
+	if (dbloc == NULL) dbloc = "/var/db/pkg";
+
+	rploc = getenv("PACKAGEROOT")
+	if (rploc == NULL) rploc = "ftp://ftp.freebsd.FreeBSD.org";
 
-	if (FLAGGED(_flags, ADD_REMOTE)) {
-		repo_sub = get_repo_sub_path();
-		repo_arch = get_repo_arch();
-		if (repo_sub == NULL) {
-			errx(1, "Can't figure out relver");
-		}
-		/* XXX: We're lying for testing. */
-		repo_sub = "/packages-8.1-release";
-		rp = pkg_freebsd_repository_create();
-		r = 0;
-		for (int i = 0; repos[i] != NULL; ++i) {
-			/* O.O */
-			strcpy(repo_site, repos[i]);
-			strcat(repo_site, "/");
-			strcat(repo_site, repo_arch);
-			strcat(repo_site, "/");
-			strcat(repo_site, repo_sub);
-			strcat(repo_site, "/");
+	if (pkg_db_open(db, dbloc) != PKG_OK) return (-1); 
 			
-			r = pkg_repository_open(_rp, repo_site, 0);
-			if (r == PKG_OK) {
-				break;
-			}
-		}
-#if 0
-		"ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages-8.1-release/Latest/",
-		0);
-#endif
-	} else {
-		/* 
-		 * This is the 'dummy repo' situation.  Just set a path and use
-		 * the repository interface to fetch packages.
-		 */
-		rp = NULL;
-		r = 0;
-#if 0
-		rp = pkg_freebsd_repository_path_create();
-		r = 0;
-#endif
-	}
-#if 0
-	/* XXX: Something I want to play with. */
-	else if (FLAGGED(_a->flags, ADD_LOCAL_REPO)){
-		rp = pkg_freebsd_repository_local_create();
-		r = pkg_repository_open(rp, packages, 0);
-	}
+	repo_sub = get_repo_sub_path();
+	if (repo_sub == NULL) errx(1, "Can't figure out relver");
+
+	repo_arch = get_repo_arch();
+	if (repo_arch == NULL) errx(1, "Can't figure out arch");
 
-#endif
-	if (r != PKG_OK) {
-		errx(1, "Could not open repository.\n");
-	}
+	STAILQ_FOREACH(t, tq, next) {
+		/* TODO(dforsyth): Give this some output. */
+		if (check_installed(db, t->target))
+			if (flags & FORCE) continue;
+		
+		if (flags & ADD_REMOTE) {
+			/* XXX: We cheat for testing. */
+			repo_sub = "/packages-8.1-release";
+			
+			sprintf(rploc, "%s/%s/%s", rploc, repo_arch,
+				repo_sub);
+				
+			if (pkg_repo_open(rp, rploc) != PKG_OK)
+				continue;
 	
-	pkg_database_open(db, "/var/db/pkg", 0);
-	STAILQ_FOREACH(t, _tq, next) {
-#if 0
-		if (check_installed(db, p, t->target)) {
-			/* TODO: Act on installed. */
-			continue;
+				/* add_package. */
 		}
-#endif
-		strcpy(name, "Latest/");
-		strcat(name, t->name);
-		if (add_package(name, _rp, _db, _ad, _flags, _progress) < 0) {
-			warnx("error adding %s", t->name);
-			break;
-		}
 	}
 
-	pkg_repository_close(rp);
-	pkg_repository_release(rp);
+	pkg_db_close(db);
+	pkg_db_finish(db);
 
 	return (0);
 }

==== //depot/projects/soc2010/dforsyth_libpkg/pkg_install/pkg_validate/validate.c#3 (text+ko) ====

@@ -4,7 +4,6 @@
 #include <sys/stat.h>
 
 #include <pkg.h>
-#include <pkg_freebsd.h>
 
 int
 main(int argc, char **argv)


More information about the p4-projects mailing list