<pre style='margin:0'>
Umesh Singla (umeshksingla) pushed a commit to branch gsoc17-migrate
in repository macports-base.
</pre>
<p><a href="https://github.com/macports/macports-base/commit/8925321a9a0cfb46c86f29bdd40de1594d341e2b">https://github.com/macports/macports-base/commit/8925321a9a0cfb46c86f29bdd40de1594d341e2b</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 8925321a9a0cfb46c86f29bdd40de1594d341e2b
</span>Author: Umesh Singla <umeshksingla@gmail.com>
AuthorDate: Mon Mar 12 22:07:49 2018 +0100
<span style='display:block; white-space:pre;color:#404040;'> Restore only the active ports
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> and move the port variants to the snapshot_ports table, removing
</span><span style='display:block; white-space:pre;color:#404040;'> the separate variants table
</span>---
src/cregistry/snapshot.c | 252 ++++++-----------------------------------------
src/cregistry/snapshot.h | 7 +-
src/cregistry/sql.c | 25 +----
src/port/port.tcl | 2 +-
4 files changed, 34 insertions(+), 252 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/cregistry/snapshot.c b/src/cregistry/snapshot.c
</span><span style='display:block; white-space:pre;color:#808080;'>index 36b629a..1715d95 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/cregistry/snapshot.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/cregistry/snapshot.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -248,56 +248,43 @@ int snapshot_store_ports(reg_registry* reg, reg_snapshot* snapshot, reg_error* e
</span> reg_error error;
int i, entry_count;
int result = 1;
<span style='display:block; white-space:pre;background:#ffe0e0;'>- entry_count = reg_entry_imaged(reg, NULL, NULL, NULL, NULL,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- &entries, &error);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ entry_count = reg_entry_installed(reg, NULL, &entries, &error);
</span> char* key1 = "name";
char* key2 = "requested";
char* key3 = "state";
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ char* key4 = "variants";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ char* key5 = "negated_variants";
</span> if (entry_count >= 0) {
for ( i = 0; i < entry_count; i++) {
char* port_name;
char* requested;
char* state;
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ char* positive_variants_str;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ char* negative_variants_str;
</span> sqlite3_stmt* stmt = NULL;
reg_entry* entry = NULL;
if (reg_entry_propget(entries[i], key1, &port_name, &error)
&& reg_entry_propget(entries[i], key2, &requested, &error)
<span style='display:block; white-space:pre;background:#ffe0e0;'>- && reg_entry_propget(entries[i], key3, &state, &error)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ && reg_entry_propget(entries[i], key3, &state, &error)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ && reg_entry_propget(entries[i], key4, &positive_variants_str, &error)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ && reg_entry_propget(entries[i], key5, &negative_variants_str, &error)) {
</span>
char* query = "INSERT INTO registry.snapshot_ports "
<span style='display:block; white-space:pre;background:#ffe0e0;'>- "(snapshots_id, port_name, requested, state) "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "VALUES (?, ?, ?, ?)";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "(snapshots_id, port_name, requested, state, variants, negated_variants) "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "VALUES (?, ?, ?, ?, ?, ?)";
</span>
if ((sqlite3_prepare_v2(reg->db, query, -1, &stmt, NULL) == SQLITE_OK)
&& (sqlite3_bind_int64(stmt, 1, snapshot->id) == SQLITE_OK)
&& (sqlite3_bind_text(stmt, 2, port_name, -1, SQLITE_STATIC) == SQLITE_OK)
&& (sqlite3_bind_int64(stmt, 3, atoi(requested)) == SQLITE_OK)
<span style='display:block; white-space:pre;background:#ffe0e0;'>- && (sqlite3_bind_text(stmt, 4, state, -1, SQLITE_STATIC) == SQLITE_OK)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ && (sqlite3_bind_text(stmt, 4, state, -1, SQLITE_STATIC) == SQLITE_OK)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ && (sqlite3_bind_text(stmt, 5, positive_variants_str, -1, SQLITE_STATIC) == SQLITE_OK)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ && (sqlite3_bind_text(stmt, 6, negative_variants_str, -1, SQLITE_STATIC) == SQLITE_OK)) {
</span> int r;
do {
r = sqlite3_step(stmt);
switch (r) {
case SQLITE_DONE:
<span style='display:block; white-space:pre;background:#ffe0e0;'>- // store variants for entries[i]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- entry = (reg_entry*)malloc(sizeof(reg_entry));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (entry) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- entry->id = sqlite3_last_insert_rowid(reg->db);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- entry->reg = reg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- entry->proc = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- int port_variants_saved = snapshot_store_port_variants(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- reg, entries[i], entry->id, errPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- switch (port_variants_saved) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- case 1:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // TODO: pass the custom SUCCESS messages
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- case 0:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- reg_sqlite_error(reg->db, errPtr, query);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- result = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span> break;
case SQLITE_BUSY:
break;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -322,86 +309,6 @@ int snapshot_store_ports(reg_registry* reg, reg_snapshot* snapshot, reg_error* e
</span> }
/**
<span style='display:block; white-space:pre;background:#ffe0e0;'>- * helper method for storing variants for a port in a snapshot
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * @param [in] reg associated registry
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * @param [in] port_entry registry.ports port to get current variants to store
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- and not snapshot_port
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * @param [in] snapshot_port_id sqlite_int64 id of the port in snapshot_ports table
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * @param [out] errPtr on error, a description of the error that occurred
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * @return true if success; 0 if failure
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int snapshot_store_port_variants(reg_registry* reg, reg_entry* port_entry,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- int snapshot_ports_id, reg_error* errPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- reg_error error;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- int i, result = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- char* key1 = "variants";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- char* key2 = "negated_variants";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- char* positive_variants_str;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- char* negative_variants_str;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if(reg_entry_propget(port_entry, key1, &positive_variants_str, &error)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- && reg_entry_propget(port_entry, key2, &negative_variants_str, &error)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- int variant_space = 100;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- variant* all_variants = (variant*) malloc(variant_space * sizeof(variant));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (all_variants == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- char* pos_delim = "+";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- char* neg_delim = "-";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- int variant_count = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- int p = get_parsed_variants(positive_variants_str, all_variants, pos_delim, &variant_count);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (p < 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- int n = get_parsed_variants(negative_variants_str, all_variants, neg_delim, &variant_count);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (n < 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for ( i = 0; i < variant_count; i++){
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sqlite3_stmt* stmt = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- char* query = "INSERT INTO registry.snapshot_port_variants "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "(snapshot_ports_id, variant_name, variant_sign) "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "VALUES (?, ?, ?)";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- variant v = *(all_variants + i);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if((sqlite3_prepare_v2(reg->db, query, -1, &stmt, NULL) == SQLITE_OK)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- && (sqlite3_bind_int64(stmt, 1, snapshot_ports_id) == SQLITE_OK)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- && (sqlite3_bind_text(stmt, 2, v.variant_name, -1, SQLITE_STATIC) == SQLITE_OK)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- && (sqlite3_bind_text(stmt, 3, v.variant_sign, -1, SQLITE_STATIC) == SQLITE_OK)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- int r;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- do {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- r = sqlite3_step(stmt);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- switch (r) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- case SQLITE_DONE:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- case SQLITE_BUSY:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- default:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- reg_sqlite_error(reg->db, errPtr, query);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- result = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } while (r == SQLITE_BUSY);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- reg_sqlite_error(reg->db, errPtr, query);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- result = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free(all_variants);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return result;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/**
</span> * reg_snapshot_ports_get: Gets the ports of a snapshot.
*
* @param [in] snapshot snapshot to get property from
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -418,10 +325,13 @@ int reg_snapshot_ports_get(reg_snapshot* snapshot, port*** ports, reg_error* err
</span>
const char* port_name;
const char* state;
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ const char* positive_variants;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const char* negated_variants;
</span>
if ((sqlite3_prepare_v2(reg->db, query, -1, &stmt, NULL) == SQLITE_OK)
&& (sqlite3_bind_int64(stmt, 1, snapshot->id) == SQLITE_OK )) {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ // TODO: why 10?
</span> port** result = (port**)malloc(10 * sizeof(port*));
if (!result) {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -432,10 +342,9 @@ int reg_snapshot_ports_get(reg_snapshot* snapshot, port*** ports, reg_error* err
</span> int result_space = 10;
int r;
<span style='display:block; white-space:pre;background:#ffe0e0;'>- variant** variants;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> sqlite_int64 snapshot_port_id;
int requested;
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ char* variantstr = NULL;
</span>
do {
r = sqlite3_step(stmt);
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -446,55 +355,30 @@ int reg_snapshot_ports_get(reg_snapshot* snapshot, port*** ports, reg_error* err
</span> port_name = (const char*) sqlite3_column_text(stmt, 2);
requested = (int) sqlite3_column_int64(stmt, 3);
state = (const char*) sqlite3_column_text(stmt, 4);
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ positive_variants = (const char*) sqlite3_column_text(stmt, 5);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ negated_variants = (const char*) sqlite3_column_text(stmt, 6);
</span>
port* current_port = (port*) malloc(sizeof(port));
if (!current_port) {
return -1;
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- current_port->name = strdup(port_name);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- current_port->requested = requested;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- current_port->state = strdup(state);
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>- variants = (variant**) malloc(sizeof(variant*));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (!variants) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ variantstr = malloc(strlen(positive_variants) + strlen(negated_variants) + 1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!variantstr) {
</span> return -1;
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- int variant_count = reg_snapshot_ports_get_helper(reg, snapshot_port_id, &variants, errPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- current_port->variant_count = variant_count;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- char* variantstr = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (current_port->variant_count > 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // construct the variant string in the form '+var1-var2+var3'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size_t variantstrlen = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for (int j = 0; j < current_port->variant_count; ++j) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- variantstrlen += strlen(variants[j]->variant_sign);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- variantstrlen += strlen(variants[j]->variant_name);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ variantstr[0] = '\0';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ strcat(variantstr, positive_variants);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ strcat(variantstr, negated_variants);
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>- // +1 for \0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- variantstr = malloc(variantstrlen + 1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (!variantstr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return -1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- variantstr[0] = '\0';
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for (int j = 0; j < current_port->variant_count; ++j) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- strcat(variantstr, variants[j]->variant_sign);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- strcat(variantstr, variants[j]->variant_name);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- current_port->variants = variantstr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- current_port->variants = strdup("\0");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ current_port->name = strdup(port_name);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ current_port->requested = requested;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ current_port->state = strdup(state);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ current_port->variants = variantstr;
</span>
if (!reg_listcat((void***)&result, &result_count, &result_space, current_port)) {
r = SQLITE_ERROR;
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- int i;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for (i = 0; i < variant_count; i++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free(variants[i]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free(variants);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- variants = NULL;
</span> break;
case SQLITE_DONE:
break;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -530,86 +414,6 @@ int reg_snapshot_ports_get(reg_snapshot* snapshot, port*** ports, reg_error* err
</span> }
/**
<span style='display:block; white-space:pre;background:#ffe0e0;'>- * reg_snapshot_ports_get_helper: Gets the variants of a port in snapshot.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * @param [in] reg associated registry
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * @param [in] snapshot_port_id sqlite_int64 id of the port in snapshot_ports table
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * @param [out] variants variants in the 'struct variant' form in snapshot.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * @param [out] errPtr on error, a description of the error that occurred
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * @return variant_count if success; -1 if failure
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int reg_snapshot_ports_get_helper(reg_registry* reg, sqlite_int64 snapshot_port_id,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- variant*** variants, reg_error* errPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sqlite3_stmt* stmt = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- char* query = "SELECT * FROM registry.snapshot_port_variants WHERE snapshot_ports_id=?";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if ((sqlite3_prepare_v2(reg->db, query, -1, &stmt, NULL) == SQLITE_OK)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- && (sqlite3_bind_int64(stmt, 1, snapshot_port_id) == SQLITE_OK )) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- int result_count = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- int result_space = 10;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- int r;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- variant** result = (variant**)malloc(result_space * sizeof(variant*));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (!result) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return -1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const char* variant_name;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const char* variant_sign;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- do {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- r = sqlite3_step(stmt);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- switch (r) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- case SQLITE_ROW:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- variant_name = (const char*)sqlite3_column_text(stmt, 2);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- variant_sign = (const char*)sqlite3_column_text(stmt, 3);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- variant* element = (variant*)malloc(sizeof(variant));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (!element) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return -1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- element->variant_name = strdup(variant_name);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- element->variant_sign = strdup(variant_sign);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (!reg_listcat((void***)&result, &result_count, &result_space, element)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- r = SQLITE_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- case SQLITE_DONE:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- case SQLITE_BUSY:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- continue;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- default:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- reg_sqlite_error(reg->db, errPtr, query);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } while (r == SQLITE_ROW || r == SQLITE_BUSY);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (r == SQLITE_DONE) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *variants = result;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return result_count;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- int i;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for (i = 0; i < result_count; i++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free((*(*variants + i))->variant_name);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free((*(*variants + i))->variant_sign);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free(variants);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return -1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sqlite3_finalize(stmt);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- reg_sqlite_error(reg->db, errPtr, query);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (stmt) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sqlite3_finalize(stmt);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return -1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/**
</span> * Gets a named property of a snapshot. The property named must be one
* that exists in the table and must not be one with internal meaning
* such as `id` or `state`.
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/cregistry/snapshot.h b/src/cregistry/snapshot.h
</span><span style='display:block; white-space:pre;color:#808080;'>index e2c6d88..d169265 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/cregistry/snapshot.h
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/cregistry/snapshot.h
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -76,16 +76,11 @@ reg_snapshot* reg_snapshot_create(reg_registry* reg, char* note,
</span> // helper method for storing ports for this snapshot
int snapshot_store_ports(reg_registry* reg, reg_snapshot* snapshot,
reg_error* errPtr);
<span style='display:block; white-space:pre;background:#ffe0e0;'>-// helper method for storing variants for a port in a snapshot
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int snapshot_store_port_variants(reg_registry* reg, reg_entry* port_entry,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- int snapshot_ports_id, reg_error* errPtr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> // snapshot properties retrieval methods
int reg_snapshot_propget(reg_snapshot* snapshot, char* key, char** value,
reg_error* errPtr);
int reg_snapshot_ports_get(reg_snapshot* snapshot, port*** ports,
reg_error* errPtr);
<span style='display:block; white-space:pre;background:#ffe0e0;'>-int reg_snapshot_ports_get_helper(reg_registry* reg,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sqlite_int64 snapshot_port_id, variant*** variants,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- reg_error* errPtr);
</span>
#endif /* _CSNAPSHOT_H */
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/cregistry/sql.c b/src/cregistry/sql.c
</span><span style='display:block; white-space:pre;color:#808080;'>index a96aa48..aba6c81 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/cregistry/sql.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/cregistry/sql.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -211,21 +211,12 @@ int create_tables(sqlite3* db, reg_error* errPtr) {
</span> ", port_name TEXT COLLATE NOCASE"
", requested INTEGER"
", state TEXT COLLATE NOCASE"
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", variants TEXT"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", negated_variants TEXT"
</span> ", FOREIGN KEY(snapshots_id) REFERENCES snapshots(id)"
" ON DELETE CASCADE"
")",
<span style='display:block; white-space:pre;background:#ffe0e0;'>- /* snapshot port variants table */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /* all variants (+, -) of the ports in a snapshot */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "CREATE TABLE registry.snapshot_port_variants ("
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "id INTEGER PRIMARY KEY"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ", snapshot_ports_id INTEGER"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ", variant_name TEXT COLLATE NOCASE"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ", variant_sign TEXT"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ", FOREIGN KEY(snapshot_ports_id) REFERENCES snapshot_ports(id)"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- " ON DELETE CASCADE"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ")",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> "COMMIT",
NULL
};
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -759,20 +750,12 @@ int update_db(sqlite3* db, reg_error* errPtr) {
</span> ", port_name TEXT COLLATE NOCASE"
", requested INTEGER"
", state TEXT COLLATE NOCASE"
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", variants TEXT"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", negated_variants TEXT"
</span> ", FOREIGN KEY(snapshots_id) REFERENCES snapshots(id)"
" ON DELETE CASCADE"
")",
<span style='display:block; white-space:pre;background:#ffe0e0;'>- /* snapshot port variants table */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "CREATE TABLE registry.snapshot_port_variants ("
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "id INTEGER PRIMARY KEY"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ", snapshot_ports_id INTEGER"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ", variant_name TEXT COLLATE NOCASE"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ", variant_sign TEXT"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ", FOREIGN KEY(snapshot_ports_id) REFERENCES snapshot_ports(id)"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- " ON DELETE CASCADE"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ")",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> /* Update version and commit */
"UPDATE registry.metadata SET value = '1.205' WHERE key = 'version'",
"COMMIT",
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port/port.tcl b/src/port/port.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index d56b994..d434065 100755
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port/port.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port/port.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2841,7 +2841,7 @@ proc action_restore { action portlist opts } {
</span> proc action_migrate { action portlist opts } {
return [macports::migrate_main $opts]
set result [macports::migrate_main $opts]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {$result = -999} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$result == -999} {
</span> # MacPorts base was upgraded, re-execute migrate with the --continue flag
execl $::argv0 [list {*}$::argv "--continue"]
ui_debug "Would have executed $::argv0 $::argv --continue"
</pre><pre style='margin:0'>
</pre>