Skip to content
Permalink
Browse files

WIP: Parse variants and store in registry

Facing malloc error but uploading before everything gets ruined
  • Loading branch information
umeshksingla authored and neverpanic committed Jul 10, 2017
1 parent 4c3ae02 commit 8cf2ebee457b21ebbe55d3a407f6eab235d4e389
Showing with 116 additions and 31 deletions.
  1. +84 −28 src/cregistry/entry.c
  2. +4 −2 src/cregistry/entry.h
  3. +28 −1 src/macports1.0/snapshot.tcl
@@ -1382,11 +1382,14 @@ int snapshot_store_ports(reg_registry* reg, reg_entry* snap_entry, reg_error* er
char* port_name;
char* requested;
sqlite3_stmt* stmt = NULL;
reg_entry* port_entry = NULL;
reg_entry* entry = NULL;
if(reg_entry_propget(entries[i], key1, &port_name, &error)
&& reg_entry_propget(entries[i], key2, &requested, &error)){
char* query = "INSERT INTO registry.snapshot_ports (snapshots_id, port_name, requested) "

char* query = "INSERT INTO registry.snapshot_ports "
"(snapshots_id, port_name, requested) "
"VALUES (?, ?, ?)";

if ((sqlite3_prepare_v2(reg->db, query, -1, &stmt, NULL) == SQLITE_OK)
&& (sqlite3_bind_int64(stmt, 1, snap_entry->id) == SQLITE_OK)
&& (sqlite3_bind_text(stmt, 2, port_name, -1, SQLITE_STATIC) == SQLITE_OK)
@@ -1397,16 +1400,17 @@ int snapshot_store_ports(reg_registry* reg, reg_entry* snap_entry, reg_error* er
switch (r) {
case SQLITE_DONE:
// store variants for entries[i]
port_entry = malloc(sizeof(reg_entry));
if (port_entry) {
port_entry->id = sqlite3_last_insert_rowid(reg->db);
port_entry->reg = reg;
port_entry->proc = NULL;
entry = malloc(sizeof(reg_entry));
if (entry) {
entry->id = sqlite3_last_insert_rowid(reg->db);
entry->reg = reg;
entry->proc = NULL;

printf("port id: %lld\n", port_entry->id);
printf("port id: %lld, ", entry->id);

// TODO: move this functions to a different file
int port_variants_saved = snapshot_store_port_variants(reg, port_entry, errPtr);
// TODO: move this function to a different file
int port_variants_saved = snapshot_store_port_variants(
reg, entries[i], entry->id, errPtr);

switch (port_variants_saved) {
case 1:
@@ -1417,7 +1421,7 @@ int snapshot_store_ports(reg_registry* reg, reg_entry* snap_entry, reg_error* er
break;
}
}
printf("done with %s port\n", port_name);
printf("done with *%s* port\n\n", port_name);
break;
case SQLITE_BUSY:
break;
@@ -1441,39 +1445,57 @@ int snapshot_store_ports(reg_registry* reg, reg_entry* snap_entry, reg_error* er
return result;
}

int snapshot_store_port_variants(reg_registry* reg, reg_entry* port_entry, reg_error* errPtr){
reg_entry* entry;
int snapshot_store_port_variants(reg_registry* reg, reg_entry* port_entry,
int snapshot_ports_id, reg_error* errPtr) {

reg_error error;
int i, result = 0;

char* key = "variants";
char* variants;
char* key1 = "variants";
char* key2 = "negated_variants";
char* positive_variants_str;
char* negative_variants_str;

if(reg_entry_propget(port_entry, key1, &positive_variants_str, &error)
&& reg_entry_propget(port_entry, key2, &negative_variants_str, &error)) {

printf("+ve .. %s, ", positive_variants_str);
printf("-ve .. %s ", negative_variants_str);

//return 1;

variant* all_variants;

all_variants = (variant*) malloc(sizeof(variant));

if(reg_entry_propget(port_entry, key, &variants, &error)) {
char* pos_delim = "+";
char* neg_delim = "-";

printf("%s\n", variants);
int variant_count = 0;

variant** installed_variants;
int variant_count = get_parsed_variants(variants, &installed_variants);
get_parsed_variants(positive_variants_str, all_variants, pos_delim, &variant_count);
get_parsed_variants(negative_variants_str, all_variants, neg_delim, &variant_count);

printf("total var count: %d\n", variant_count);

for ( i = 0; i < variant_count; i++){
sqlite3_stmt* stmt = NULL;
char* query = "INSERT INTO registry.snapshot_port_variants "
"(snapshot_ports_id, variant_name, variant_sign) "
"VALUES (?, ?, ?)";
variant* v = NULL;
v = installed_variants[i];
variant v = all_variants[i];
if((sqlite3_prepare_v2(reg->db, query, -1, &stmt, NULL) == SQLITE_OK)
&& (sqlite3_bind_int64(stmt, 1, port_entry->id) == SQLITE_OK)
&& (sqlite3_bind_text(stmt, 2, v->variant_name, -1, SQLITE_STATIC) == SQLITE_OK)
&& (sqlite3_bind_text(stmt, 3, v->variant_sign, -1, SQLITE_STATIC) == SQLITE_OK)) {
&& (sqlite3_bind_int64(stmt, 1, snapshot_ports_id) == SQLITE_OK)
&& (sqlite3_bind_text(stmt, 2, v.variant_name, -1, SQLITE_STATIC) == SQLITE_OK)
&& (sqlite3_bind_text(stmt, 3, v.variant_sign, -1, SQLITE_STATIC) == SQLITE_OK)) {
int r;
do {
r = sqlite3_step(stmt);
switch (r) {
case SQLITE_DONE:
printf("variant stored: %s with sign: %s\n",
v->variant_name, v->variant_sign);
v.variant_name, v.variant_sign);
result = 1;
break;
case SQLITE_BUSY:
break;
@@ -1488,14 +1510,48 @@ int snapshot_store_port_variants(reg_registry* reg, reg_entry* port_entry, reg_e
result = 0;
}
}
free(all_variants);
}
return result;
}

int get_parsed_variants(char* variants, variant*** installed_variants){
int length = 0;
return length;
void get_parsed_variants(char* variants_str, variant* all_variants, char* delim, int* variant_count) {

printf("var count yet%d\n", *variant_count);

/*char *token;
char *rest = variants_str;
while ((token = strtok_r(rest, delim, &rest))) {
printf("%s\n", token);
variant v;
v.variant_name = token;
v.variant_sign = delim;
all_variants[*variant_count] = v;
*variant_count = *variant_count + 1;
}*/

char *token = strtok(variants_str, delim);

while (token != NULL) {
printf("%s\n", token);

variant v;
v.variant_name = token;
v.variant_sign = delim;

all_variants[*variant_count] = v;
*variant_count = *variant_count + 1;

token = strtok(NULL, delim);
}

return;
}

/**
* Fetches a list of all open entries.
*
@@ -104,8 +104,10 @@ reg_entry* reg_snapshot_create(reg_registry* reg, char* note,
int snapshot_store_ports(reg_registry* reg, reg_entry* entry,
reg_error* errPtr);
int snapshot_store_port_variants(reg_registry* reg, reg_entry* port_entry,
reg_error* errPtr);
int get_parsed_variants(char* variants, variant*** installed_variants);
int snapshot_ports_id, reg_error* errPtr);

void get_parsed_variants(char* variants_str, variant* all_variants,
char* delim, int* variant_count);

int reg_all_open_entries(reg_registry* reg, reg_entry*** entries);

@@ -19,15 +19,42 @@ namespace eval snapshot {
# opts - The options passed in. Currently, there is no option available.
# Returns:
# None
#
# TODO: use registry::write wrapper here itself
#

puts "Still being developed"
#registry::entry addsnapshot
foreach port [registry::entry imaged] {
puts [$port name]
}
puts
set ilist [registry::installed]

# set vimlist [registry::installed vim]

# foreach port $vimlist {
# puts $port
# }

set a [registry::entry snapshot "testsnapshot"]
foreach port $ilist {
puts $port
}
puts
set a [registry::entry snapshot "test snapshot"]
puts $a
puts done

}

proc list {opts} {
# List the snapshots
puts "listing"

}

proc latest {opts} {
# Get the latest snapshot
puts "latest"
}
}

0 comments on commit 8cf2ebe

Please sign in to comment.
You can’t perform that action at this time.