Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Fix some bugs in incremental update.
Vsevolod Stakhov committed 12 years ago
commit 79fc4287ea70f5588cc23df87ff0e23e015f6b45
parent 5231325
2 files changed +20 -9
modified libpkg/pkg_repo.c
@@ -307,8 +307,18 @@ pkg_create_repo(char *path, bool force, bool filelist,
			continue;
		}

+
		/* EPKG_END returned */
+

		if (progress != NULL)
			progress(r->pkg, data);
+
		retcode = pkgdb_repo_add_package(r->pkg, r->path, sqlite,
+
				manifest_digest, false, true);
+
		if (retcode == EPKG_END) {
+
			continue;
+
		}
+
		else if (retcode != EPKG_OK) {
+
			goto cleanup;
+
		}

		manifest_pos = ftell(psyml);
		pkg_emit_manifest_file(r->pkg, psyml, PKG_MANIFEST_EMIT_COMPACT, &manifest_digest);
@@ -328,15 +338,6 @@ pkg_create_repo(char *path, bool force, bool filelist,
		cur_dig->files_pos = files_pos;
		LL_PREPEND(dlist, cur_dig);

-
		retcode = pkgdb_repo_add_package(r->pkg, r->path, sqlite,
-
				manifest_digest, false, true);
-
		if (retcode == EPKG_END) {
-
			continue;
-
		}
-
		else if (retcode != EPKG_OK) {
-
			goto cleanup;
-
		}
-

		pkg_free(r->pkg);
		free(r);
	}
modified libpkg/update.c
@@ -529,14 +529,24 @@ pkg_update_incremental(const char *name, struct pkg_repo *repo, time_t *mtime)
			rc = EPKG_FATAL;
			goto cleanup;
		}
+
		processed++;
		HASH_FIND_STR(ldel, __DECONST(char *, origin), item);
		if (item == NULL) {
			added++;
			pkg_update_increment_item_new(&ladd, origin, digest, num_offset);
		} else {
			if (strcmp(digest, item->digest) == 0) {
+
				free(item->origin);
+
				free(item->digest);
				HASH_DEL(ldel, item);
+
				free(item);
+
				item = NULL;
			} else {
+
				free(item->origin);
+
				free(item->digest);
+
				HASH_DEL(ldel, item);
+
				free(item);
+
				item = NULL;
				pkg_update_increment_item_new(&ladd, origin, digest, num_offset);
				updated++;
			}